diff --git a/src/compositor/plugins/default.c b/src/compositor/plugins/default.c index 228fb19e0..067b12893 100644 --- a/src/compositor/plugins/default.c +++ b/src/compositor/plugins/default.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #define _(x) dgettext (GETTEXT_PACKAGE, x) @@ -113,6 +115,8 @@ struct _MetaDefaultPluginPrivate ClutterActor *desktop1; ClutterActor *desktop2; + ClutterActor *background_group; + MetaPluginInfo info; }; @@ -299,9 +303,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,