Hide the group containing the windows while overlay is up

When we are animating the overlay, we don't want to be continually
redrawing the (obscured) window actors.

src/shell-global.c: Add 'window-group' property to expose the group
  holding the window actors.
js/ui/overlay.js: Hide the window group while the overlay is up.

svn path=/trunk/; revision=39
This commit is contained in:
Owen Taylor 2008-11-08 19:33:33 +00:00
parent ffed9df171
commit f546d92033
3 changed files with 29 additions and 1 deletions

View File

@ -103,13 +103,24 @@ Overlay.prototype = {
window_index++; 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(); this._group.show();
} }
}, },
hide : function() { hide : function() {
if (this.visible) { if (this.visible) {
let global = Shell.global_get();
this.visible = false; this.visible = false;
global.window_group.show()
this._group.hide(); this._group.hide();
for (let i = 0; i < this._window_clones.length; i++) { for (let i = 0; i < this._window_clones.length; i++) {

View File

@ -39,6 +39,12 @@ mutter_plugin_get_screen (MutterPlugin *plugin)
return NULL; return NULL;
} }
ClutterActor *
mutter_plugin_get_window_group (MutterPlugin *plugin)
{
return NULL;
}
Display * Display *
meta_display_get_xdisplay (MetaDisplay *display) meta_display_get_xdisplay (MetaDisplay *display)
{ {

View File

@ -14,7 +14,8 @@ enum {
PROP_OVERLAY_GROUP, PROP_OVERLAY_GROUP,
PROP_SCREEN_WIDTH, PROP_SCREEN_WIDTH,
PROP_SCREEN_HEIGHT, PROP_SCREEN_HEIGHT,
PROP_STAGE PROP_STAGE,
PROP_WINDOW_GROUP
}; };
/* Signals */ /* Signals */
@ -75,6 +76,9 @@ shell_global_get_property(GObject *object,
case PROP_STAGE: case PROP_STAGE:
g_value_set_object (value, mutter_plugin_get_stage (global->plugin)); g_value_set_object (value, mutter_plugin_get_stage (global->plugin));
break; break;
case PROP_WINDOW_GROUP:
g_value_set_object (value, mutter_plugin_get_window_group (global->plugin));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -141,6 +145,13 @@ shell_global_class_init (ShellGlobalClass *klass)
"Stage holding the desktop scene graph", "Stage holding the desktop scene graph",
CLUTTER_TYPE_ACTOR, CLUTTER_TYPE_ACTOR,
G_PARAM_READABLE)); 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));
} }
/** /**