keybindings: Give dynamic keybindings a keybindings action

https://bugzilla.gnome.org/show_bug.cgi?id=682315
This commit is contained in:
Florian Müllner 2012-12-12 14:03:58 +01:00 committed by Rui Matos
parent 576384a73b
commit d78de379cc
2 changed files with 28 additions and 22 deletions

View File

@ -610,10 +610,10 @@ add_builtin_keybinding (MetaDisplay *display,
* *
* Use meta_display_remove_keybinding() to remove the binding. * Use meta_display_remove_keybinding() to remove the binding.
* *
* Returns: %TRUE if the keybinding was added successfully, * Returns: the corresponding keybinding action if the keybinding was
* otherwise %FALSE * added successfully, otherwise %META_KEYBINDING_ACTION_NONE
*/ */
gboolean guint
meta_display_add_keybinding (MetaDisplay *display, meta_display_add_keybinding (MetaDisplay *display,
const char *name, const char *name,
GSettings *settings, GSettings *settings,
@ -622,9 +622,15 @@ meta_display_add_keybinding (MetaDisplay *display,
gpointer user_data, gpointer user_data,
GDestroyNotify free_data) GDestroyNotify free_data)
{ {
return add_keybinding_internal (display, name, settings, flags, static guint num_dynamic_bindings = 0;
META_KEYBINDING_ACTION_NONE, guint new_action = META_KEYBINDING_ACTION_LAST + num_dynamic_bindings;
handler, 0, user_data, free_data);
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 * @keycode: Raw keycode
* @mask: Event mask * @mask: Event mask
* *
* Get the #MetaKeyBindingAction bound to %keycode. Only builtin * Get the keybinding action bound to @keycode. Builtin keybindings
* keybindings have an associated #MetaKeyBindingAction, for * have a fixed associated #MetaKeyBindingAction, for bindings added
* bindings added dynamically with meta_display_add_keybinding() * dynamically the function will return the keybinding action
* the function will always return %META_KEYBINDING_ACTION_NONE. * meta_display_add_keybinding() returns on registration.
* *
* Returns: The action that should be taken for the given key, or * Returns: The action that should be taken for the given key, or
* %META_KEYBINDING_ACTION_NONE. * %META_KEYBINDING_ACTION_NONE.
*/ */
MetaKeyBindingAction guint
meta_display_get_keybinding_action (MetaDisplay *display, meta_display_get_keybinding_action (MetaDisplay *display,
unsigned int keycode, unsigned int keycode,
unsigned long mask) 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); binding = display_get_keybinding (display, META_KEY_ABOVE_TAB, keycode, mask);
if (binding) if (binding)
return meta_prefs_get_keybinding_action (binding->name); return (guint) meta_prefs_get_keybinding_action (binding->name);
else else
return META_KEYBINDING_ACTION_NONE; return META_KEYBINDING_ACTION_NONE;
} }

View File

@ -127,19 +127,19 @@ void meta_display_end_grab_op (MetaDisplay *display,
MetaGrabOp meta_display_get_grab_op (MetaDisplay *display); MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
gboolean meta_display_add_keybinding (MetaDisplay *display, guint meta_display_add_keybinding (MetaDisplay *display,
const char *name, const char *name,
GSettings *settings, GSettings *settings,
MetaKeyBindingFlags flags, MetaKeyBindingFlags flags,
MetaKeyHandlerFunc handler, MetaKeyHandlerFunc handler,
gpointer user_data, gpointer user_data,
GDestroyNotify free_data); GDestroyNotify free_data);
gboolean meta_display_remove_keybinding (MetaDisplay *display, gboolean meta_display_remove_keybinding (MetaDisplay *display,
const char *name); const char *name);
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display, guint meta_display_get_keybinding_action (MetaDisplay *display,
unsigned int keycode, unsigned int keycode,
unsigned long mask); unsigned long mask);
/* meta_display_set_input_focus_window is like XSetInputFocus, except /* meta_display_set_input_focus_window is like XSetInputFocus, except
* that (a) it can't detect timestamps later than the current time, * that (a) it can't detect timestamps later than the current time,