[mutter] keybindings: Give dynamic keybindings a keybindings action



commit d78de379cc2b5dd7e4f6ed0368c959aca57ab4ed
Author: Florian MÃllner <fmuellner gnome org>
Date:   Wed Dec 12 14:03:58 2012 +0100

    keybindings: Give dynamic keybindings a keybindings action
    
    https://bugzilla.gnome.org/show_bug.cgi?id=682315

 src/core/keybindings.c |   30 ++++++++++++++++++------------
 src/meta/display.h     |   20 ++++++++++----------
 2 files changed, 28 insertions(+), 22 deletions(-)
---
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 8bd1ebd..e3cec58 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -610,10 +610,10 @@ add_builtin_keybinding (MetaDisplay          *display,
  *
  * Use meta_display_remove_keybinding() to remove the binding.
  *
- * Returns: %TRUE if the keybinding was added successfully,
- *          otherwise %FALSE
+ * Returns: the corresponding keybinding action if the keybinding was
+ *          added successfully, otherwise %META_KEYBINDING_ACTION_NONE
  */
-gboolean
+guint
 meta_display_add_keybinding (MetaDisplay         *display,
                              const char          *name,
                              GSettings           *settings,
@@ -622,9 +622,15 @@ meta_display_add_keybinding (MetaDisplay         *display,
                              gpointer             user_data,
                              GDestroyNotify       free_data)
 {
-  return add_keybinding_internal (display, name, settings, flags,
-                                  META_KEYBINDING_ACTION_NONE,
-                                  handler, 0, user_data, free_data);
+  static guint num_dynamic_bindings = 0;
+  guint new_action = META_KEYBINDING_ACTION_LAST + num_dynamic_bindings;
+
+  if (!add_keybinding_internal (display, name, settings, flags, new_action,
+                                handler, 0, user_data, free_data))
+    return META_KEYBINDING_ACTION_NONE;
+
+  ++num_dynamic_bindings;
+  return new_action;
 }
 
 /**
@@ -656,15 +662,15 @@ meta_display_remove_keybinding (MetaDisplay *display,
  * @keycode: Raw keycode
  * @mask: Event mask
  *
- * Get the #MetaKeyBindingAction bound to %keycode. Only builtin
- * keybindings have an associated #MetaKeyBindingAction, for
- * bindings added dynamically with meta_display_add_keybinding()
- * the function will always return %META_KEYBINDING_ACTION_NONE.
+ * Get the keybinding action bound to @keycode. Builtin keybindings
+ * have a fixed associated #MetaKeyBindingAction, for bindings added
+ * dynamically the function will return the keybinding action
+ * meta_display_add_keybinding() returns on registration.
  *
  * Returns: The action that should be taken for the given key, or
  * %META_KEYBINDING_ACTION_NONE.
  */
-MetaKeyBindingAction
+guint
 meta_display_get_keybinding_action (MetaDisplay  *display,
                                     unsigned int  keycode,
                                     unsigned long mask)
@@ -689,7 +695,7 @@ meta_display_get_keybinding_action (MetaDisplay  *display,
     binding = display_get_keybinding (display, META_KEY_ABOVE_TAB, keycode, mask);
 
   if (binding)
-    return meta_prefs_get_keybinding_action (binding->name);
+    return (guint) meta_prefs_get_keybinding_action (binding->name);
   else
     return META_KEYBINDING_ACTION_NONE;
 }
diff --git a/src/meta/display.h b/src/meta/display.h
index 04d545c..8dc3dac 100644
--- a/src/meta/display.h
+++ b/src/meta/display.h
@@ -127,19 +127,19 @@ void     meta_display_end_grab_op   (MetaDisplay *display,
 
 MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
 
-gboolean meta_display_add_keybinding    (MetaDisplay         *display,
-                                         const char          *name,
-                                         GSettings           *settings,
-                                         MetaKeyBindingFlags  flags,
-                                         MetaKeyHandlerFunc   handler,
-                                         gpointer             user_data,
-                                         GDestroyNotify       free_data);
+guint meta_display_add_keybinding    (MetaDisplay         *display,
+                                      const char          *name,
+                                      GSettings           *settings,
+                                      MetaKeyBindingFlags  flags,
+                                      MetaKeyHandlerFunc   handler,
+                                      gpointer             user_data,
+                                      GDestroyNotify       free_data);
 gboolean meta_display_remove_keybinding (MetaDisplay         *display,
                                          const char          *name);
 
-MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay  *display,
-                                                         unsigned int  keycode,
-                                                         unsigned long mask);
+guint meta_display_get_keybinding_action (MetaDisplay  *display,
+                                          unsigned int  keycode,
+                                          unsigned long mask);
 
 /* meta_display_set_input_focus_window is like XSetInputFocus, except
  * that (a) it can't detect timestamps later than the current time,



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