summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2012-12-12 14:03:58 +0100
committerRui Matos <tiagomatos@gmail.com>2012-12-17 12:00:55 +0000
commitd78de379cc2b5dd7e4f6ed0368c959aca57ab4ed (patch)
treed464361728f2208f155a079393dca37db9ed1c64
parent576384a73ba6228dc62fcf9ac626af96da5c6afe (diff)
downloadmutter-d78de379cc2b5dd7e4f6ed0368c959aca57ab4ed.tar.gz
keybindings: Give dynamic keybindings a keybindings action
https://bugzilla.gnome.org/show_bug.cgi?id=682315
-rw-r--r--src/core/keybindings.c30
-rw-r--r--src/meta/display.h20
2 files changed, 28 insertions, 22 deletions
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 8bd1ebd5c..e3cec587a 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 04d545c36..8dc3dac28 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,