[metacity] keybindings: don't grab if devirtualization failed



commit b3f13502bfe9fd61bc9fb47425295414a0bf57d9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Jun 3 19:45:37 2015 +0300

    keybindings: don't grab if devirtualization failed

 src/core/keybindings.c |   15 +++++++++++----
 src/core/keybindings.h |    1 +
 2 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 89ec6ea..ac3fa28 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -300,6 +300,8 @@ reload_keycodes (MetaDisplay *display)
 static void
 reload_modifiers (MetaDisplay *display)
 {
+  gboolean devirtualized;
+
   meta_topic (META_DEBUG_KEYBINDINGS,
               "Reloading keycodes for binding tables\n");
 
@@ -310,9 +312,11 @@ reload_modifiers (MetaDisplay *display)
       i = 0;
       while (i < display->n_key_bindings)
         {
-          meta_display_devirtualize_modifiers (display,
-                                               display->key_bindings[i].modifiers,
-                                               &display->key_bindings[i].mask);
+          devirtualized = meta_display_devirtualize_modifiers (display,
+                                                               display->key_bindings[i].modifiers,
+                                                               &display->key_bindings[i].mask);
+
+          display->key_bindings[i].devirtualized = devirtualized;
 
           meta_topic (META_DEBUG_KEYBINDINGS,
                       " Devirtualized mods 0x%x -> 0x%x (%s)\n",
@@ -394,6 +398,7 @@ rebuild_binding_table (MetaDisplay     *display,
               (*bindings_p)[i].keycode = combo->keycode;
               (*bindings_p)[i].modifiers = combo->modifiers;
               (*bindings_p)[i].mask = 0;
+              (*bindings_p)[i].devirtualized = FALSE;
 
               ++i;
 
@@ -409,6 +414,7 @@ rebuild_binding_table (MetaDisplay     *display,
                   (*bindings_p)[i].keycode = combo->keycode;
                   (*bindings_p)[i].modifiers = combo->modifiers | META_VIRTUAL_SHIFT_MASK;
                   (*bindings_p)[i].mask = 0;
+                  (*bindings_p)[i].devirtualized = FALSE;
 
                   ++i;
                 }
@@ -721,7 +727,8 @@ grab_keys (MetaKeyBinding *bindings,
     {
       if (!!binding_per_window ==
           !!(bindings[i].handler->flags & META_KEY_BINDING_PER_WINDOW) &&
-          bindings[i].keycode != 0)
+          bindings[i].keycode != 0 &&
+          bindings[i].devirtualized != FALSE)
         {
           meta_grab_key (display, xwindow,
                          bindings[i].keysym,
diff --git a/src/core/keybindings.h b/src/core/keybindings.h
index 5e38af5..b8258bf 100644
--- a/src/core/keybindings.h
+++ b/src/core/keybindings.h
@@ -49,6 +49,7 @@ struct _MetaKeyBinding
   KeyCode              keycode;
   unsigned int         mask;
   MetaVirtualModifier  modifiers;
+  gboolean             devirtualized;
   MetaKeyHandler      *handler;
 };
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]