summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2017-12-25 15:12:20 -0200
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2017-12-29 14:12:25 -0200
commit66910ab422061fb94273cf44292566f90993b2db (patch)
tree2da0fc8ec10fce52221f83b53ed59a7f6090abc3
parent17b56e96046f66e08b0eb97876cfc1ba5bcdd5e2 (diff)
downloadmutter-wip/gbsneto/tile-picker.tar.gz
compositor: Introduce tile picker APIwip/gbsneto/tile-picker
Plugins might want to know when they should show a tile picker UI and, since we control the tiling state from the window manager side, we just need to tell the compositor when they should do that. This commit adds the necessary plumbing to let the compositor and plugins know when a tile picker should be shown.
-rw-r--r--src/compositor/compositor.c8
-rw-r--r--src/compositor/meta-plugin-manager.c21
-rw-r--r--src/compositor/meta-plugin-manager.h5
-rw-r--r--src/core/window.c6
-rw-r--r--src/meta/compositor.h4
-rw-r--r--src/meta/meta-plugin.h8
6 files changed, 52 insertions, 0 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index aa49347c9..a7e7ca148 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -1457,6 +1457,14 @@ meta_compositor_hide_tile_preview (MetaCompositor *compositor)
}
void
+meta_compositor_show_tile_picker (MetaCompositor *compositor,
+ MetaWindow *window,
+ int tile_monitor_number)
+{
+ meta_plugin_manager_show_tile_picker (compositor->plugin_mgr, window, tile_monitor_number);
+}
+
+void
meta_compositor_show_window_menu (MetaCompositor *compositor,
MetaWindow *window,
MetaWindowMenuType menu,
diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c
index 834f678dd..d1f3f4998 100644
--- a/src/compositor/meta-plugin-manager.c
+++ b/src/compositor/meta-plugin-manager.c
@@ -404,3 +404,24 @@ meta_plugin_manager_create_inhibit_shortcuts_dialog (MetaPluginManager *plugin_m
return meta_inhibit_shortcuts_dialog_default_new (window);
}
+
+gboolean
+meta_plugin_manager_show_tile_picker (MetaPluginManager *plugin_mgr,
+ MetaWindow *window,
+ int tile_monitor_number)
+{
+ MetaPlugin *plugin = plugin_mgr->plugin;
+ MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
+ MetaDisplay *display = plugin_mgr->compositor->display;
+
+ if (display->display_opening)
+ return FALSE;
+
+ if (klass->show_tile_picker)
+ {
+ klass->show_tile_picker (plugin, window, tile_monitor_number);
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/compositor/meta-plugin-manager.h b/src/compositor/meta-plugin-manager.h
index 19159032c..988c2ed35 100644
--- a/src/compositor/meta-plugin-manager.h
+++ b/src/compositor/meta-plugin-manager.h
@@ -98,4 +98,9 @@ MetaInhibitShortcutsDialog *
meta_plugin_manager_create_inhibit_shortcuts_dialog (MetaPluginManager *plugin_mgr,
MetaWindow *window);
+gboolean meta_plugin_manager_show_tile_picker (MetaPluginManager *plugin_mgr,
+ MetaWindow *window,
+ int tile_monitor_number);
+
+
#endif
diff --git a/src/core/window.c b/src/core/window.c
index 806f6f4fc..a8e369d6f 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -3153,6 +3153,12 @@ meta_window_tile (MetaWindow *window,
if (window->frame)
meta_frame_queue_draw (window->frame);
+ /* If the window doesn't have a tile match after being tiled, ask the
+ * compositor to show the tile picker.
+ */
+ if (META_WINDOW_TILED_SIDE_BY_SIDE (window) && !window->tile_match)
+ meta_compositor_show_tile_picker (window->display->compositor, window, window->monitor->number);
+
out:
if (should_notify)
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_TILE_MODE]);
diff --git a/src/meta/compositor.h b/src/meta/compositor.h
index f4de9b180..18b1a623e 100644
--- a/src/meta/compositor.h
+++ b/src/meta/compositor.h
@@ -122,6 +122,10 @@ void meta_compositor_show_tile_preview (MetaCompositor *compositor,
MetaRectangle *tile_rect,
int tile_monitor_number);
void meta_compositor_hide_tile_preview (MetaCompositor *compositor);
+void meta_compositor_show_tile_picker (MetaCompositor *compositor,
+ MetaWindow *window,
+ int tile_monitor_number);
+
void meta_compositor_show_window_menu (MetaCompositor *compositor,
MetaWindow *window,
MetaWindowMenuType menu,
diff --git a/src/meta/meta-plugin.h b/src/meta/meta-plugin.h
index 73d94e5f0..deb20ed8a 100644
--- a/src/meta/meta-plugin.h
+++ b/src/meta/meta-plugin.h
@@ -251,6 +251,14 @@ struct _MetaPluginClass
*/
MetaInhibitShortcutsDialog * (* create_inhibit_shortcuts_dialog) (MetaPlugin *plugin,
MetaWindow *window);
+
+ /**
+ * MetaPluginClass::show_tile_picker:
+ *
+ */
+ void * (* show_tile_picker) (MetaPlugin *plugin,
+ MetaWindow *window,
+ int tile_monitor_number);
};
/**