@@ -63,7 +63,7 @@ enum class HotkeyID
6363};
6464
6565LRESULT wndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
66- int start ();
66+ ErrorContext start ();
6767void stop ();
6868bool windowShouldAutoTray (HWND hwnd);
6969void onAddWindow (HWND hwnd);
@@ -134,7 +134,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE prevHinstance,
134134 DEBUG_PRINTF (" read settings from %s\n " , settingsFile.c_str ());
135135 } else {
136136 if (Settings::fileExists (settingsFile)) {
137- errorMessage (IDS_ERROR_LOAD_SETTINGS);
137+ errorMessage (ErrorContext ( IDS_ERROR_LOAD_SETTINGS, settingsFile) );
138138 return IDS_ERROR_LOAD_SETTINGS;
139139 }
140140
@@ -161,10 +161,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE prevHinstance,
161161 wc.hIconSm = hicon;
162162 ATOM atom = RegisterClassExA (&wc);
163163 if (!atom) {
164- ERROR_PRINTF (
165- " could not create window class, RegisterClassExA() failed: %s" ,
166- StringUtility::lastErrorString ().c_str ());
167- errorMessage (IDS_ERROR_REGISTER_WINDOW_CLASS);
164+ std::string lastErrorString = StringUtility::lastErrorString ();
165+ ERROR_PRINTF (" could not create window class, RegisterClassExA() failed: %s" , lastErrorString.c_str ());
166+ errorMessage (ErrorContext (IDS_ERROR_REGISTER_WINDOW_CLASS, lastErrorString));
168167 return IDS_ERROR_REGISTER_WINDOW_CLASS;
169168 }
170169
@@ -183,8 +182,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE prevHinstance,
183182 nullptr // application data
184183 );
185184 if (!appWindow_) {
186- ERROR_PRINTF (" could not create window, CreateWindowA() failed: %s" , StringUtility::lastErrorString ().c_str ());
187- errorMessage (IDS_ERROR_CREATE_WINDOW);
185+ std::string lastErrorString = StringUtility::lastErrorString ();
186+ ERROR_PRINTF (" could not create window, CreateWindowA() failed: %s" , lastErrorString.c_str ());
187+ errorMessage (ErrorContext (IDS_ERROR_CREATE_WINDOW, lastErrorString));
188188 return IDS_ERROR_CREATE_WINDOW;
189189 }
190190
@@ -208,15 +208,16 @@ int WINAPI wWinMain(_In_ HINSTANCE hinstance, _In_opt_ HINSTANCE prevHinstance,
208208 0 ,
209209 WINEVENT_OUTOFCONTEXT));
210210 if (!minimizeEventHook) {
211+ std::string lastErrorString = StringUtility::lastErrorString ();
211212 ERROR_PRINTF (
212213 " failed to hook minimize win event %#x, SetWinEventHook() failed: %s\n " ,
213214 (HWND)appWindow_,
214- StringUtility:: lastErrorString() .c_str ());
215- errorMessage (IDS_ERROR_REGISTER_EVENTHOOK);
215+ lastErrorString.c_str ());
216+ errorMessage (ErrorContext ( IDS_ERROR_REGISTER_EVENTHOOK, lastErrorString) );
216217 return IDS_ERROR_REGISTER_EVENTHOOK;
217218 }
218219
219- int err = start ();
220+ ErrorContext err = start ();
220221 if (err) {
221222 errorMessage (err);
222223 settingsDialogWindow_ = SettingsDialog::create (appWindow_, settings_, onSettingsDialogComplete);
@@ -449,83 +450,83 @@ LRESULT wndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
449450 return DefWindowProc (hwnd, uMsg, wParam, lParam);
450451}
451452
452- int start ()
453+ ErrorContext start ()
453454{
454455 Log::start (settings_.logToFile_ , APP_NAME " .log" );
455456
456457 // register a hotkey that will be used to minimize windows
457458 UINT vkMinimize = VK_DOWN;
458459 UINT modifiersMinimize = MOD_ALT | MOD_CONTROL | MOD_SHIFT;
459460 if (!Hotkey::parse (settings_.hotkeyMinimize_ , vkMinimize, modifiersMinimize)) {
460- return IDS_ERROR_REGISTER_HOTKEY ;
461+ return ErrorContext (IDS_ERROR_PARSE_HOTKEY, " minimize " ) ;
461462 }
462463 if (!vkMinimize || !modifiersMinimize) {
463464 INFO_PRINTF (" no hotkey to minimize windows\n " );
464465 } else {
465466 if (!hotkeyMinimize_.create ((INT)HotkeyID::Minimize, appWindow_, vkMinimize, modifiersMinimize | MOD_NOREPEAT)) {
466- return IDS_ERROR_REGISTER_HOTKEY;
467+ return ErrorContext ( IDS_ERROR_REGISTER_HOTKEY, " minimize " ) ;
467468 }
468469 }
469470
470471 // register a hotkey that will be used to restore windows
471472 UINT vkRestore = VK_UP;
472473 UINT modifiersRestore = MOD_ALT | MOD_CONTROL | MOD_SHIFT;
473474 if (!Hotkey::parse (settings_.hotkeyRestore_ , vkRestore, modifiersRestore)) {
474- return IDS_ERROR_REGISTER_HOTKEY ;
475+ return ErrorContext (IDS_ERROR_PARSE_HOTKEY, " restore " ) ;
475476 }
476477 if (!vkRestore || !modifiersRestore) {
477478 INFO_PRINTF (" no hotkey to restore windows\n " );
478479 } else {
479480 if (!hotkeyRestore_.create ((INT)HotkeyID::Restore, appWindow_, vkRestore, modifiersRestore | MOD_NOREPEAT)) {
480- return IDS_ERROR_REGISTER_HOTKEY;
481+ return ErrorContext ( IDS_ERROR_REGISTER_HOTKEY, " restore " ) ;
481482 }
482483 }
483484
484485 // register a hotkey that will be used to restore all windows
485486 UINT vkRestoreAll = VK_LEFT;
486487 UINT modifiersRestoreAll = MOD_ALT | MOD_CONTROL | MOD_SHIFT;
487488 if (!Hotkey::parse (settings_.hotkeyRestoreAll_ , vkRestoreAll, modifiersRestoreAll)) {
488- return IDS_ERROR_REGISTER_HOTKEY ;
489+ return ErrorContext (IDS_ERROR_PARSE_HOTKEY, " restore all " ) ;
489490 }
490491 if (!vkRestoreAll || !modifiersRestoreAll) {
491492 INFO_PRINTF (" no hotkey to restore all windows\n " );
492493 } else {
493494 if (!hotkeyRestoreAll_
494495 .create ((INT)HotkeyID::RestoreAll, appWindow_, vkRestoreAll, modifiersRestoreAll | MOD_NOREPEAT)) {
495- return IDS_ERROR_REGISTER_HOTKEY;
496+ return ErrorContext ( IDS_ERROR_REGISTER_HOTKEY, " restore all " ) ;
496497 }
497498 }
498499
499500 // register a hotkey that will be used to show the context menu
500501 UINT vkMenu = VK_HOME;
501502 UINT modifiersMenu = MOD_ALT | MOD_CONTROL | MOD_SHIFT;
502503 if (!Hotkey::parse (settings_.hotkeyMenu_ , vkMenu, modifiersMenu)) {
503- return IDS_ERROR_REGISTER_HOTKEY ;
504+ return ErrorContext (IDS_ERROR_PARSE_HOTKEY, " menu " ) ;
504505 }
505506 if (!vkMenu || !modifiersMenu) {
506507 INFO_PRINTF (" no hotkey to Menu windows\n " );
507508 } else {
508509 if (!hotkeyMenu_.create ((INT)HotkeyID::Menu, appWindow_, vkMenu, modifiersMenu | MOD_NOREPEAT)) {
509- return IDS_ERROR_REGISTER_HOTKEY;
510+ return ErrorContext ( IDS_ERROR_REGISTER_HOTKEY, " menu " ) ;
510511 }
511512 }
512513
513514 // get modifiers that will be used to override auto-tray
514515 UINT vkOverride = 0 ;
515516 modifiersOverride_ = MOD_ALT | MOD_CONTROL | MOD_SHIFT;
516517 if (!Hotkey::parse (settings_.modifiersOverride_ , vkOverride, modifiersOverride_)) {
517- return IDS_ERROR_REGISTER_MODIFIER ;
518+ return ErrorContext (IDS_ERROR_PARSE_MODIFIER, " override " ) ;
518519 }
519520 if (!modifiersOverride_) {
520521 INFO_PRINTF (" no override modifiers\n " );
521522 } else if (vkOverride || (modifiersOverride_ & ~(MOD_ALT | MOD_CONTROL | MOD_SHIFT))) {
522523 WARNING_PRINTF (" invalid override modifiers\n " );
523- return IDS_ERROR_REGISTER_MODIFIER;
524+ return ErrorContext ( IDS_ERROR_REGISTER_MODIFIER, " override " ) ;
524525 }
525526
526527 WindowList::start (appWindow_, settings_.pollInterval_ , onAddWindow, onRemoveWindow, onChangeWindowTitle, onChangeVisibility);
527528
528- return 0 ;
529+ return ErrorContext ( 0 ) ;
529530}
530531
531532void stop ()
@@ -713,7 +714,7 @@ void onSettingsDialogComplete(bool success, const Settings & settings)
713714
714715 // restart to apply new settings
715716 stop ();
716- int err = start ();
717+ ErrorContext err = start ();
717718 if (err) {
718719 errorMessage (err);
719720 settingsDialogWindow_ = SettingsDialog::create (appWindow_, settings_, onSettingsDialogComplete);
@@ -722,7 +723,7 @@ void onSettingsDialogComplete(bool success, const Settings & settings)
722723 }
723724
724725 if (!settings_.writeToFile (settingsFile)) {
725- errorMessage (IDS_ERROR_SAVE_SETTINGS);
726+ errorMessage (ErrorContext ( IDS_ERROR_SAVE_SETTINGS, settingsFile) );
726727 } else {
727728 DEBUG_PRINTF (" wrote settings to %s\n " , settingsFile.c_str ());
728729 }
0 commit comments