From 0d1647cbc4237d49d9f6f0829f00f8f2cabab15b Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 23 Jul 2013 11:53:04 +0200 Subject: [PATCH] default plugin: add a random color background on each monitor Instead of a full white background, make one with a random color. This way the different "monitors" are visible and it's easier to debug the DBus API. --- src/compositor/plugins/default.c | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/compositor/plugins/default.c b/src/compositor/plugins/default.c index 228fb19e0..b125e3ae8 100644 --- a/src/compositor/plugins/default.c +++ b/src/compositor/plugins/default.c @@ -24,7 +24,10 @@ #include #include #include +#include +#include +#include #include #define _(x) dgettext (GETTEXT_PACKAGE, x) #define N_(x) x @@ -113,6 +116,8 @@ struct _MetaDefaultPluginPrivate ClutterActor *desktop1; ClutterActor *desktop2; + ClutterActor *background_group; + MetaPluginInfo info; }; @@ -299,9 +304,58 @@ show_stage (MetaPlugin *plugin) return FALSE; } +static void +on_monitors_changed (MetaScreen *screen, + MetaPlugin *plugin) +{ + MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); + int i, n; + + clutter_actor_destroy_all_children (self->priv->background_group); + + n = meta_screen_get_n_monitors (screen); + for (i = 0; i < n; i++) + { + MetaRectangle rect; + ClutterActor *background; + ClutterColor color; + + meta_screen_get_monitor_geometry (screen, i, &rect); + + background = meta_background_actor_new (); + + clutter_actor_set_position (background, rect.x, rect.y); + clutter_actor_set_size (background, rect.width, rect.height); + + /* Don't use rand() here, mesa calls srand() internally when + parsing the driconf XML, but it's nice if the colors are + reproducible. + */ + clutter_color_init (&color, + g_random_int () % 255, + g_random_int () % 255, + g_random_int () % 255, + 255); + clutter_actor_set_background_color (background, &color); + + clutter_actor_add_child (self->priv->background_group, background); + } +} + static void start (MetaPlugin *plugin) { + MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); + MetaScreen *screen = meta_plugin_get_screen (plugin); + + self->priv->background_group = meta_background_group_new (); + clutter_actor_insert_child_below (meta_get_window_group_for_screen (screen), + self->priv->background_group, NULL); + + g_signal_connect (screen, "monitors-changed", + G_CALLBACK (on_monitors_changed), plugin); + on_monitors_changed (screen, plugin); + meta_later_add (META_LATER_BEFORE_REDRAW, (GSourceFunc) show_stage, plugin,