[gnome-shell] ScreenShield: use LayoutManager for creating the actor



commit 54dc0fd12398a0f648c7a03801782e267627eaef
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Tue May 22 23:22:38 2012 +0200

    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 |   25 ++++++++++---------------
 2 files changed, 21 insertions(+), 15 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 6b87fd8..5175006 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 2ba86b0..060bd02 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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]