@@ -31,6 +31,7 @@ typedef struct {
3131
3232typedef struct {
3333 int current ;
34+ int handle_hotkeys ;
3435 Windows desktops [NUM_DESKTOPS ];
3536 Trayicon trayicon ;
3637} Virgo ;
@@ -224,13 +225,15 @@ static void virgo_init(Virgo *v)
224225 #define MOD_NOREPEAT 0x4000
225226 int i ;
226227 v -> current = 0 ;
228+ v -> handle_hotkeys = 1 ;
227229 for (i = 0 ; i < NUM_DESKTOPS ; i ++ ) {
228230 v -> desktops [i ].windows = NULL ;
229231 v -> desktops [i ].count = 0 ;
230232 register_hotkey (i * 2 , MOD_ALT |MOD_NOREPEAT , i + 1 + 0x30 );
231233 register_hotkey (i * 2 + 1 , MOD_CONTROL |MOD_NOREPEAT , i + 1 + 0x30 );
232234 }
233235 register_hotkey (i * 2 , MOD_ALT |MOD_CONTROL |MOD_SHIFT |MOD_NOREPEAT , 'Q' );
236+ register_hotkey ((i * 2 )+ 1 , MOD_ALT |MOD_CONTROL |MOD_SHIFT |MOD_NOREPEAT , 'S' );
234237 trayicon_init (& v -> trayicon );
235238}
236239
@@ -286,13 +289,17 @@ int main(int argc, char **argv)
286289 if (msg .message != WM_HOTKEY ) {
287290 continue ;
288291 }
289- if (msg .wParam == NUM_DESKTOPS * 2 ) {
290- break ;
291- }
292- if (msg .wParam %2 == 0 ) {
293- virgo_go_to_desk (& v , msg .wParam /2 );
294- } else {
295- virgo_move_to_desk (& v , (msg .wParam - 1 )/2 );
292+ if (msg .wParam == (NUM_DESKTOPS * 2 )+ 1 ) {
293+ v .handle_hotkeys = !v .handle_hotkeys ;
294+ } else if (v .handle_hotkeys ) {
295+ if (msg .wParam == NUM_DESKTOPS * 2 ) {
296+ break ;
297+ }
298+ if (msg .wParam %2 == 0 ) {
299+ virgo_go_to_desk (& v , msg .wParam /2 );
300+ } else {
301+ virgo_move_to_desk (& v , (msg .wParam - 1 )/2 );
302+ }
296303 }
297304 }
298305 virgo_deinit (& v );
0 commit comments