keybindings: Add MetaKeyBinding for overlay-key
As the overlay key works differently from normal keybindings, it requires special treatment. However, by adding a rudimentary MetaKeyBinding for it, we will be able to confine the special handling to mutter and treat it like any other keybinding in the shell. https://bugzilla.gnome.org/show_bug.cgi?id=688202
This commit is contained in:
parent
424fc5245a
commit
aa43e715c0
@ -1499,6 +1499,18 @@ process_overlay_key (MetaDisplay *display,
|
|||||||
/* We want to unfreeze events, but keep the grab so that if the user
|
/* We want to unfreeze events, but keep the grab so that if the user
|
||||||
* starts typing into the overlay we get all the keys */
|
* starts typing into the overlay we get all the keys */
|
||||||
XAllowEvents (display->xdisplay, AsyncKeyboard, event->xkey.time);
|
XAllowEvents (display->xdisplay, AsyncKeyboard, event->xkey.time);
|
||||||
|
|
||||||
|
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
|
||||||
|
{
|
||||||
|
MetaKeyBinding *binding =
|
||||||
|
display_get_keybinding (display,
|
||||||
|
display->overlay_key_combo.keysym,
|
||||||
|
display->overlay_key_combo.keycode,
|
||||||
|
display->grab_mask);
|
||||||
|
if (binding &&
|
||||||
|
meta_compositor_filter_keybinding (display->compositor, screen, binding))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
meta_display_overlay_key_activate (display);
|
meta_display_overlay_key_activate (display);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4221,6 +4233,8 @@ init_builtin_key_bindings (MetaDisplay *display)
|
|||||||
void
|
void
|
||||||
meta_display_init_keys (MetaDisplay *display)
|
meta_display_init_keys (MetaDisplay *display)
|
||||||
{
|
{
|
||||||
|
MetaKeyHandler *handler;
|
||||||
|
|
||||||
/* Keybindings */
|
/* Keybindings */
|
||||||
display->keymap = NULL;
|
display->keymap = NULL;
|
||||||
display->keysyms_per_keycode = 0;
|
display->keysyms_per_keycode = 0;
|
||||||
@ -4250,6 +4264,13 @@ meta_display_init_keys (MetaDisplay *display)
|
|||||||
|
|
||||||
key_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
|
key_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
|
||||||
(GDestroyNotify) key_handler_free);
|
(GDestroyNotify) key_handler_free);
|
||||||
|
|
||||||
|
handler = g_new0 (MetaKeyHandler, 1);
|
||||||
|
handler->name = g_strdup ("overlay-key");
|
||||||
|
handler->flags = META_KEY_BINDING_BUILTIN;
|
||||||
|
|
||||||
|
g_hash_table_insert (key_handlers, g_strdup ("overlay-key"), handler);
|
||||||
|
|
||||||
init_builtin_key_bindings (display);
|
init_builtin_key_bindings (display);
|
||||||
|
|
||||||
rebuild_key_binding_table (display);
|
rebuild_key_binding_table (display);
|
||||||
|
@ -1702,8 +1702,18 @@ meta_key_pref_free (MetaKeyPref *pref)
|
|||||||
static void
|
static void
|
||||||
init_bindings (void)
|
init_bindings (void)
|
||||||
{
|
{
|
||||||
|
MetaKeyPref *pref;
|
||||||
|
|
||||||
key_bindings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
|
key_bindings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
|
||||||
(GDestroyNotify)meta_key_pref_free);
|
(GDestroyNotify)meta_key_pref_free);
|
||||||
|
|
||||||
|
pref = g_new0 (MetaKeyPref, 1);
|
||||||
|
pref->name = g_strdup ("overlay-key");
|
||||||
|
pref->action = META_KEYBINDING_ACTION_OVERLAY_KEY;
|
||||||
|
pref->bindings = g_slist_prepend (pref->bindings, &overlay_key_combo);
|
||||||
|
pref->builtin = 1;
|
||||||
|
|
||||||
|
g_hash_table_insert (key_bindings, g_strdup ("overlay-key"), pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user