windowManager: Implement keybinding_filter hook
We are currently using a hack to allow a select set of keybindings in the overview. Implement the new MetaPlugin keybinding_filter hook, which provides a cleaner way to achieve the same. https://bugzilla.gnome.org/show_bug.cgi?id=688202
This commit is contained in:
@@ -72,6 +72,9 @@ static void gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin);
|
||||
|
||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *event);
|
||||
|
||||
static gboolean gnome_shell_plugin_keybinding_filter (MetaPlugin *plugin,
|
||||
MetaKeyBinding *binding);
|
||||
static const MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin);
|
||||
|
||||
|
||||
@@ -126,8 +129,9 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
||||
plugin_class->kill_window_effects = gnome_shell_plugin_kill_window_effects;
|
||||
plugin_class->kill_switch_workspace = gnome_shell_plugin_kill_switch_workspace;
|
||||
|
||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||
plugin_class->plugin_info = gnome_shell_plugin_plugin_info;
|
||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
||||
plugin_class->plugin_info = gnome_shell_plugin_plugin_info;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -337,6 +341,13 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnome_shell_plugin_keybinding_filter (MetaPlugin *plugin,
|
||||
MetaKeyBinding *binding)
|
||||
{
|
||||
return _shell_wm_filter_keybinding (get_shell_wm (), binding);
|
||||
}
|
||||
|
||||
static const
|
||||
MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin)
|
||||
{
|
||||
|
@@ -35,6 +35,9 @@ void _shell_wm_kill_window_effects (ShellWM *wm,
|
||||
MetaWindowActor *actor);
|
||||
void _shell_wm_kill_switch_workspace (ShellWM *wm);
|
||||
|
||||
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
||||
MetaKeyBinding *binding);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_WM_PRIVATE_H__ */
|
||||
|
@@ -26,6 +26,7 @@ enum
|
||||
SWITCH_WORKSPACE,
|
||||
KILL_SWITCH_WORKSPACE,
|
||||
KILL_WINDOW_EFFECTS,
|
||||
FILTER_KEYBINDING,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@@ -115,6 +116,14 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
shell_wm_signals[FILTER_KEYBINDING] =
|
||||
g_signal_new ("filter-keybinding",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
g_signal_accumulator_true_handled, NULL, NULL,
|
||||
G_TYPE_BOOLEAN, 1,
|
||||
META_TYPE_KEY_BINDING);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -267,6 +276,17 @@ _shell_wm_destroy (ShellWM *wm,
|
||||
g_signal_emit (wm, shell_wm_signals[DESTROY], 0, actor);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_shell_wm_filter_keybinding (ShellWM *wm,
|
||||
MetaKeyBinding *binding)
|
||||
{
|
||||
gboolean rv;
|
||||
|
||||
g_signal_emit (wm, shell_wm_signals[FILTER_KEYBINDING], 0, binding, &rv);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_wm_new:
|
||||
* @plugin: the #MetaPlugin
|
||||
|
Reference in New Issue
Block a user