From 54dc0fd12398a0f648c7a03801782e267627eaef Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 22 May 2012 23:22:38 +0200 Subject: [PATCH] ScreenShield: use LayoutManager for creating the actor This ensures that the screen shield is created at the right stacking level, so the message tray is visible in the lock screen (showing PAM messages, critical notifications and the on screen keyboard) https://bugzilla.gnome.org/show_bug.cgi?id=619955 --- js/ui/layout.js | 11 +++++++++++ js/ui/screenShield.js | 23 +++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/js/ui/layout.js b/js/ui/layout.js index 6b87fd80b..5175006ce 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -40,6 +40,17 @@ const LayoutManager = new Lang.Class({ this.panelBox.connect('allocation-changed', Lang.bind(this, this._updatePanelBarriers)); + this.screenShieldGroup = new St.Widget({ name: 'screenShieldGroup', + visible: false + }); + // FIXME: This is going to slow everything down by a big factor + // Need a better solution (like a layout manager?) + let constraint = new Clutter.BindConstraint({ source: global.stage, + coordinate: Clutter.BindCoordinate.ALL + }); + this.screenShieldGroup.add_constraint(constraint); + this.addChrome(this.screenShieldGroup); + this.trayBox = new St.BoxLayout({ name: 'trayBox' }); this.addChrome(this.trayBox); this.trayBox.connect('allocation-changed', diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index 2ba86b082..060bd0283 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -29,6 +29,8 @@ const ScreenShield = new Lang.Class({ Name: 'ScreenShield', _init: function() { + this.actor = Main.layoutManager.screenShieldGroup; + this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) { if (error) { logError(error, 'Error while reading gnome-session presence'); @@ -45,18 +47,12 @@ const ScreenShield = new Lang.Class({ this._isModal = false; this._isLocked = false; - this._group = new St.Widget({ x: 0, - y: 0 }); - Main.uiGroup.add_actor(this._group); - let constraint = new Clutter.BindConstraint({ source: global.stage, - coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE }); - this._group.add_constraint(constraint); - this._lightbox = new Lightbox.Lightbox(this._group, + this._lightbox = new Lightbox.Lightbox(Main.uiGroup, { inhibitEvents: true, fadeInTime: 10, fadeFactor: 1 }); + this._background = Meta.BackgroundActor.new_for_screen(global.screen); - this._background.hide(); - Main.uiGroup.add_actor(this._background); + this.actor.add_actor(this._background); }, _onStatusChanged: function(status) { @@ -66,9 +62,8 @@ const ScreenShield = new Lang.Class({ this._dialog = null; } - this._group.reactive = true; if (!this._isModal) { - Main.pushModal(this._group); + Main.pushModal(this.actor); this._isModal = true; } @@ -88,10 +83,10 @@ const ScreenShield = new Lang.Class({ }, _popModal: function() { - this._group.reactive = false; - Main.popModal(this._group); + this._lightbox.hide(); - this._background.hide(); + Main.popModal(this.actor); + this.actor.hide(); this._isModal = false; this._isLocked = false;