diff options
author | Daniel Drake <dsd@laptop.org> | 2011-03-02 15:52:53 +0000 |
---|---|---|
committer | Daniel Drake <dan@reactivated.net> | 2011-05-21 17:51:11 +0100 |
commit | 429b200aa0e21b33a720790d18e059491eb60089 (patch) | |
tree | a1ff880683429e92dc8d59b0f463ff7032972eb9 /src | |
parent | 48cc8cbdad70a6bf2b4e6d44d1744ab956ac830a (diff) | |
download | metacity-429b200aa0e21b33a720790d18e059491eb60089.tar.gz |
Disable keybindings message should ungrab keys
The disable-keybindings action is currently only 'soft' in that it
just causes Metacity to ignore keypresses; the keys themselves are left
bound.
Sugar would like to use this message to actually disable the bindings
*and* release the grabs so that it can implement its own Alt-Tab handler.
This patch implements this. Based on earlier work by Bernie Innocenti.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/display.c | 2 | ||||
-rw-r--r-- | src/core/keybindings.c | 10 | ||||
-rw-r--r-- | src/core/keybindings.h | 3 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/core/display.c b/src/core/display.c index 518b4f34..3143e0c0 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -2268,7 +2268,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 (display, !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 8ea6b415..da274e01 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -817,6 +817,9 @@ meta_screen_grab_keys (MetaScreen *screen) if (screen->keys_grabbed) return; + if (all_bindings_disabled) + return; + grab_keys (screen->display->key_bindings, screen->display->n_key_bindings, screen->display, screen->xroot, @@ -841,6 +844,9 @@ meta_window_grab_keys (MetaWindow *window) if (window->all_keys_grabbed) return; + if (all_bindings_disabled) + return; + if (window->type == META_WINDOW_DOCK) { if (window->keys_grabbed) @@ -3356,9 +3362,11 @@ handle_set_spew_mark (MetaDisplay *display, } void -meta_set_keybindings_disabled (gboolean setting) +meta_set_keybindings_disabled (MetaDisplay *display, + gboolean setting) { all_bindings_disabled = setting; + regrab_key_bindings (display); 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 618520b4..f845b48a 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 (MetaDisplay *display, + gboolean setting); void meta_display_process_mapping_event (MetaDisplay *display, XEvent *event); |