diff --git a/src/modules/ZoomIt/ZoomIt/Zoomit.cpp b/src/modules/ZoomIt/ZoomIt/Zoomit.cpp index 475e434d03bb..75964b2eac4f 100644 --- a/src/modules/ZoomIt/ZoomIt/Zoomit.cpp +++ b/src/modules/ZoomIt/ZoomIt/Zoomit.cpp @@ -3310,8 +3310,14 @@ void RegisterAllHotkeys(HWND hWnd) } if (g_RecordToggleKey) { registerHotkey( RECORD_HOTKEY, g_RecordToggleMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF ); - registerHotkey( RECORD_CROP_HOTKEY, ( g_RecordToggleMod ^ MOD_SHIFT ) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF ); - registerHotkey( RECORD_WINDOW_HOTKEY, ( g_RecordToggleMod ^ MOD_ALT ) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF ); + UINT cropMod = g_RecordToggleMod ^ MOD_SHIFT; + UINT windowMod = g_RecordToggleMod ^ MOD_ALT; + if ( cropMod != 0 ) { + registerHotkey( RECORD_CROP_HOTKEY, cropMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF ); + } + if ( windowMod != 0 ) { + registerHotkey( RECORD_WINDOW_HOTKEY, windowMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF ); + } } // Note: COPY_IMAGE_HOTKEY, COPY_CROP_HOTKEY (Ctrl+C, Ctrl+Shift+C) and @@ -5307,16 +5313,18 @@ INT_PTR CALLBACK OptionsProc( HWND hDlg, UINT message, break; } - else if( newRecordToggleKey && - (!RegisterHotKey(GetParent(hDlg), RECORD_HOTKEY, newRecordToggleMod | MOD_NOREPEAT, newRecordToggleKey & 0xFF) || - !RegisterHotKey(GetParent(hDlg), RECORD_CROP_HOTKEY, (newRecordToggleMod ^ MOD_SHIFT) | MOD_NOREPEAT, newRecordToggleKey & 0xFF) || - !RegisterHotKey(GetParent(hDlg), RECORD_WINDOW_HOTKEY, (newRecordToggleMod ^ MOD_ALT) | MOD_NOREPEAT, newRecordToggleKey & 0xFF))) { - - MessageBox(hDlg, L"The specified record hotkey is already in use.\nSelect a different record hotkey.", - APPNAME, MB_ICONERROR); - UnregisterAllHotkeys(GetParent(hDlg)); - break; + else if( newRecordToggleKey ) { + UINT cropMod = newRecordToggleMod ^ MOD_SHIFT; + UINT windowMod = newRecordToggleMod ^ MOD_ALT; + if (!RegisterHotKey(GetParent(hDlg), RECORD_HOTKEY, newRecordToggleMod | MOD_NOREPEAT, newRecordToggleKey & 0xFF) || + (cropMod != 0 && !RegisterHotKey(GetParent(hDlg), RECORD_CROP_HOTKEY, cropMod | MOD_NOREPEAT, newRecordToggleKey & 0xFF)) || + (windowMod != 0 && !RegisterHotKey(GetParent(hDlg), RECORD_WINDOW_HOTKEY, windowMod | MOD_NOREPEAT, newRecordToggleKey & 0xFF))) { + MessageBox(hDlg, L"The specified record hotkey is already in use.\nSelect a different record hotkey.", + APPNAME, MB_ICONERROR); + UnregisterAllHotkeys(GetParent(hDlg)); + break; + } } else { g_BreakTimeout = newTimeout; @@ -7297,14 +7305,17 @@ LRESULT APIENTRY MainWndProc( showOptions = TRUE; } - else if (g_RecordToggleKey && - (!RegisterHotKey(hWnd, RECORD_HOTKEY, g_RecordToggleMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF) || - !RegisterHotKey(hWnd, RECORD_CROP_HOTKEY, (g_RecordToggleMod ^ MOD_SHIFT) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF) || - !RegisterHotKey(hWnd, RECORD_WINDOW_HOTKEY, (g_RecordToggleMod ^ MOD_ALT) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF))) { + else if (g_RecordToggleKey) { + UINT cropMod = g_RecordToggleMod ^ MOD_SHIFT; + UINT windowMod = g_RecordToggleMod ^ MOD_ALT; + if (!RegisterHotKey(hWnd, RECORD_HOTKEY, g_RecordToggleMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF) || + (cropMod != 0 && !RegisterHotKey(hWnd, RECORD_CROP_HOTKEY, cropMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF)) || + (windowMod != 0 && !RegisterHotKey(hWnd, RECORD_WINDOW_HOTKEY, windowMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF))) { - MessageBox(hWnd, L"The specified record hotkey is already in use.\nSelect a different record hotkey.", - APPNAME, MB_ICONERROR); - showOptions = TRUE; + MessageBox(hWnd, L"The specified record hotkey is already in use.\nSelect a different record hotkey.", + APPNAME, MB_ICONERROR); + showOptions = TRUE; + } } if( showOptions ) { @@ -9875,9 +9886,11 @@ LRESULT APIENTRY MainWndProc( } if (g_RecordToggleKey) { + UINT cropMod = g_RecordToggleMod ^ MOD_SHIFT; + UINT windowMod = g_RecordToggleMod ^ MOD_ALT; if (!RegisterHotKey(hWnd, RECORD_HOTKEY, g_RecordToggleMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF) || - !RegisterHotKey(hWnd, RECORD_CROP_HOTKEY, (g_RecordToggleMod ^ MOD_SHIFT) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF) || - !RegisterHotKey(hWnd, RECORD_WINDOW_HOTKEY, (g_RecordToggleMod ^ MOD_ALT) | MOD_NOREPEAT, g_RecordToggleKey & 0xFF)) + (cropMod != 0 && !RegisterHotKey(hWnd, RECORD_CROP_HOTKEY, cropMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF)) || + (windowMod != 0 && !RegisterHotKey(hWnd, RECORD_WINDOW_HOTKEY, windowMod | MOD_NOREPEAT, g_RecordToggleKey & 0xFF))) { if(!g_StartedByPowerToys) { diff --git a/src/settings-ui/Settings.UI/ViewModels/ZoomItViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/ZoomItViewModel.cs index 946daf6fb77b..dabd312dfb9c 100644 --- a/src/settings-ui/Settings.UI/ViewModels/ZoomItViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/ZoomItViewModel.cs @@ -303,7 +303,13 @@ public HotkeySettings RecordToggleKeyCrop return null; } - // XOR with Shift: if Shift is present, remove it; if absent, add it + // XOR with Shift: if Shift is present, remove it; if absent, add it. + // If the result would have no modifier keys, return null to avoid displaying a bare-key shortcut label. + if (baseKey.Shift && !baseKey.Win && !baseKey.Ctrl && !baseKey.Alt) + { + return null; + } + return new HotkeySettings( baseKey.Win, baseKey.Ctrl, @@ -323,7 +329,13 @@ public HotkeySettings RecordToggleKeyWindow return null; } - // XOR with Alt: if Alt is present, remove it; if absent, add it + // XOR with Alt: if Alt is present, remove it; if absent, add it. + // If the result would have no modifier keys, return null to avoid displaying a bare-key shortcut label. + if (baseKey.Alt && !baseKey.Win && !baseKey.Ctrl && !baseKey.Shift) + { + return null; + } + return new HotkeySettings( baseKey.Win, baseKey.Ctrl,