diff --git a/js/ui/overlay.js b/js/ui/overlay.js index f2acec056..2f99e2f8d 100644 --- a/js/ui/overlay.js +++ b/js/ui/overlay.js @@ -103,13 +103,24 @@ Overlay.prototype = { window_index++; } + // All the the actors in the window group are completely obscured, + // hiding the group holding them while the overlay is displayed greatly + // increases performance of the overlay especially when there are many + // windows visible. + // + // If we switched to displaying the actors in the overlay rather than + // clones of them, this would obviously no longer be necessary. + global.window_group.hide() this._group.show(); } }, hide : function() { if (this.visible) { + let global = Shell.global_get(); + this.visible = false; + global.window_group.show() this._group.hide(); for (let i = 0; i < this._window_clones.length; i++) { diff --git a/src/metacity-symbols.c b/src/metacity-symbols.c index c4c069fde..d8497a33d 100644 --- a/src/metacity-symbols.c +++ b/src/metacity-symbols.c @@ -39,6 +39,12 @@ mutter_plugin_get_screen (MutterPlugin *plugin) return NULL; } +ClutterActor * +mutter_plugin_get_window_group (MutterPlugin *plugin) +{ + return NULL; +} + Display * meta_display_get_xdisplay (MetaDisplay *display) { diff --git a/src/shell-global.c b/src/shell-global.c index 6a95b34b2..6f1410575 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -14,7 +14,8 @@ enum { PROP_OVERLAY_GROUP, PROP_SCREEN_WIDTH, PROP_SCREEN_HEIGHT, - PROP_STAGE + PROP_STAGE, + PROP_WINDOW_GROUP }; /* Signals */ @@ -75,6 +76,9 @@ shell_global_get_property(GObject *object, case PROP_STAGE: g_value_set_object (value, mutter_plugin_get_stage (global->plugin)); break; + case PROP_WINDOW_GROUP: + g_value_set_object (value, mutter_plugin_get_window_group (global->plugin)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -141,6 +145,13 @@ shell_global_class_init (ShellGlobalClass *klass) "Stage holding the desktop scene graph", CLUTTER_TYPE_ACTOR, G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_WINDOW_GROUP, + g_param_spec_object ("window-group", + "Window Group", + "Actor holding window actors", + CLUTTER_TYPE_ACTOR, + G_PARAM_READABLE)); } /**