From 8f51c42c41a4eb8b565ec90c9acff1b58656c558 Mon Sep 17 00:00:00 2001 From: Mukul Gupta Date: Fri, 10 Sep 2010 01:15:20 +0530 Subject: [PATCH] LP #634415 Enable Alt+Tab key bindings to work The patch makes "metacity-message disable-keybindings" to work again, which allows Alt+Tab and other key bindings to work in Sugar --- src/core/display.c | 2 +- src/core/keybindings.c | 30 +++++++++++++++--------------- src/core/keybindings.h | 3 ++- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/core/display.c b/src/core/display.c index 4c7b4c0..22a9b1e 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -2311,7 +2311,7 @@ event_callback (XEvent *event, { meta_verbose ("Received set keybindings request = %d\n", (int) event->xclient.data.l[0]); - meta_set_keybindings_disabled (!event->xclient.data.l[0]); + meta_set_keybindings_disabled (screen, !event->xclient.data.l[0]); } else if (event->xclient.message_type == display->atom__METACITY_TOGGLE_VERBOSE) diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 63596bb..6843839 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -692,20 +692,11 @@ meta_change_keygrab (MetaDisplay *display, } static void -meta_grab_key (MetaDisplay *display, - Window xwindow, - int keysym, - unsigned int keycode, - int modmask) -{ - meta_change_keygrab (display, xwindow, TRUE, keysym, keycode, modmask); -} - -static void grab_keys (MetaKeyBinding *bindings, int n_bindings, MetaDisplay *display, Window xwindow, + gboolean grab, gboolean binding_per_window) { int i; @@ -721,7 +712,8 @@ grab_keys (MetaKeyBinding *bindings, !!(bindings[i].handler->flags & BINDING_PER_WINDOW) && bindings[i].keycode != 0) { - meta_grab_key (display, xwindow, + meta_change_keygrab (display, xwindow, + grab, bindings[i].keysym, bindings[i].keycode, bindings[i].mask); @@ -771,7 +763,7 @@ meta_screen_grab_keys (MetaScreen *screen) grab_keys (screen->display->key_bindings, screen->display->n_key_bindings, screen->display, screen->xroot, - FALSE); + TRUE, FALSE); screen->keys_grabbed = TRUE; } @@ -781,7 +773,10 @@ meta_screen_ungrab_keys (MetaScreen *screen) { if (screen->keys_grabbed) { - ungrab_all_keys (screen->display, screen->xroot); + grab_keys (screen->display->key_bindings, + screen->display->n_key_bindings, + screen->display, screen->xroot, + FALSE, FALSE); screen->keys_grabbed = FALSE; } } @@ -815,7 +810,7 @@ meta_window_grab_keys (MetaWindow *window) window->display->n_key_bindings, window->display, window->frame ? window->frame->xwindow : window->xwindow, - TRUE); + TRUE, TRUE); window->keys_grabbed = TRUE; window->grab_on_frame = window->frame != NULL; @@ -3307,9 +3302,14 @@ handle_set_spew_mark (MetaDisplay *display, } void -meta_set_keybindings_disabled (gboolean setting) +meta_set_keybindings_disabled (MetaScreen *screen, gboolean setting) { all_bindings_disabled = setting; + if (all_bindings_disabled) + meta_screen_ungrab_keys (screen); + else + meta_screen_grab_keys (screen); + meta_topic (META_DEBUG_KEYBINDINGS, "Keybindings %s\n", all_bindings_disabled ? "disabled" : "enabled"); } diff --git a/src/core/keybindings.h b/src/core/keybindings.h index 618520b..8a76214 100644 --- a/src/core/keybindings.h +++ b/src/core/keybindings.h @@ -49,7 +49,8 @@ void meta_window_ungrab_all_keys (MetaWindow *window, void meta_display_process_key_event (MetaDisplay *display, MetaWindow *window, XEvent *event); -void meta_set_keybindings_disabled (gboolean setting); +void meta_set_keybindings_disabled (MetaScreen *screen, + gboolean setting); void meta_display_process_mapping_event (MetaDisplay *display, XEvent *event); -- 1.7.0.4