summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2011-03-02 15:52:53 +0000
committerDaniel Drake <dan@reactivated.net>2011-05-21 17:51:11 +0100
commit429b200aa0e21b33a720790d18e059491eb60089 (patch)
treea1ff880683429e92dc8d59b0f463ff7032972eb9
parent48cc8cbdad70a6bf2b4e6d44d1744ab956ac830a (diff)
downloadmetacity-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.
-rw-r--r--src/core/display.c2
-rw-r--r--src/core/keybindings.c10
-rw-r--r--src/core/keybindings.h3
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);