windowManager: Implement tile previews

Mutter now delegates tile previews to compositor plugins, so
add a simple implementation based on the UI previously provided
by mutter.

https://bugzilla.gnome.org/show_bug.cgi?id=665758
This commit is contained in:
Florian Müllner
2013-09-02 00:26:12 +02:00
parent 2663e1be5d
commit 6d93c8b3fd
5 changed files with 150 additions and 0 deletions

View File

@ -68,6 +68,12 @@ static void gnome_shell_plugin_kill_window_effects (MetaPlugin *plugin,
MetaWindowActor *actor);
static void gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin);
static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor);
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *event);
@ -132,6 +138,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->show_tile_preview = gnome_shell_plugin_show_tile_preview;
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
@ -319,6 +328,21 @@ gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin)
_shell_wm_kill_switch_workspace (get_shell_wm());
}
static void
gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor)
{
_shell_wm_show_tile_preview (get_shell_wm (), window, tile_rect, tile_monitor);
}
static void
gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
{
_shell_wm_hide_tile_preview (get_shell_wm ());
}
static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)

View File

@ -35,6 +35,12 @@ void _shell_wm_kill_window_effects (ShellWM *wm,
MetaWindowActor *actor);
void _shell_wm_kill_switch_workspace (ShellWM *wm);
void _shell_wm_show_tile_preview (ShellWM *wm,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor);
void _shell_wm_hide_tile_preview (ShellWM *wm);
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
MetaKeyBinding *binding);

View File

@ -26,6 +26,8 @@ enum
SWITCH_WORKSPACE,
KILL_SWITCH_WORKSPACE,
KILL_WINDOW_EFFECTS,
SHOW_TILE_PREVIEW,
HIDE_TILE_PREVIEW,
FILTER_KEYBINDING,
CONFIRM_DISPLAY_CHANGE,
@ -117,6 +119,22 @@ shell_wm_class_init (ShellWMClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 1,
META_TYPE_WINDOW_ACTOR);
shell_wm_signals[SHOW_TILE_PREVIEW] =
g_signal_new ("show-tile-preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 3,
META_TYPE_WINDOW,
META_TYPE_RECTANGLE,
G_TYPE_INT);
shell_wm_signals[HIDE_TILE_PREVIEW] =
g_signal_new ("hide-tile-preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
shell_wm_signals[FILTER_KEYBINDING] =
g_signal_new ("filter-keybinding",
G_TYPE_FROM_CLASS (klass),
@ -254,6 +272,22 @@ _shell_wm_kill_window_effects (ShellWM *wm,
g_signal_emit (wm, shell_wm_signals[KILL_WINDOW_EFFECTS], 0, actor);
}
void
_shell_wm_show_tile_preview (ShellWM *wm,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor)
{
g_signal_emit (wm, shell_wm_signals[SHOW_TILE_PREVIEW], 0,
window, tile_rect, tile_monitor);
}
void
_shell_wm_hide_tile_preview (ShellWM *wm)
{
g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0);
}
void
_shell_wm_minimize (ShellWM *wm,