summaryrefslogtreecommitdiffstats
path: root/allow-keybindings-ungrab.patch
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2011-05-22 11:53:43 +0100
committerDaniel Drake <dsd@laptop.org>2011-05-22 11:53:43 +0100
commita8a42e3b169e772493c41cb2cd9b83919c6c212f (patch)
treeb1db56281f118c5b6604f60bf9bae76fdc523a93 /allow-keybindings-ungrab.patch
parent333019edd2edfc1637e7c6a414ecc724ea84c607 (diff)
downloadmetacity-a8a42e3b169e772493c41cb2cd9b83919c6c212f.tar.gz
metacity-a8a42e3b169e772493c41cb2cd9b83919c6c212f.tar.xz
metacity-a8a42e3b169e772493c41cb2cd9b83919c6c212f.zip
Add upstream patch to allow keybindings ungrab
Needed for Sugar: http://dev.laptop.org/ticket/10693 OK'd for F16 inclusion by Colin Walters
Diffstat (limited to 'allow-keybindings-ungrab.patch')
-rw-r--r--allow-keybindings-ungrab.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/allow-keybindings-ungrab.patch b/allow-keybindings-ungrab.patch
new file mode 100644
index 0000000..25d82aa
--- /dev/null
+++ b/allow-keybindings-ungrab.patch
@@ -0,0 +1,80 @@
+From 429b200aa0e21b33a720790d18e059491eb60089 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Wed, 02 Mar 2011 15:52:53 +0000
+Subject: 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.
+---
+diff --git a/src/core/display.c b/src/core/display.c
+index 518b4f3..3143e0c 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 8ea6b41..da274e0 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 618520b..f845b48 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);
+
+--
+cgit v0.9