[gnome-shell] main, lightbox: Fix lightbox for zoomed windows



commit 0c2037875a9368134ae3c7b7b97e67033b8801d1
Author: Stefano Facchini <stefano facchini gmail com>
Date:   Wed Feb 15 16:16:23 2012 +0100

    main, lightbox: Fix lightbox for zoomed windows
    
    The correct way to make an actor having the same size as another is
    a ClutterBindConstraint. Connecting to 'allocation-changed' fails because
    the allocation might not change even when 'width' and 'height' properties do.
    This is the case of Main.uiGroup, used as parent container for zoomed
    window clones.
    
    In lightbox.js we bind also the position because in principle it could change,
    even if currently only fullscreen lightboxes are used.

 js/ui/lightbox.js |   20 ++++----------------
 js/ui/main.js     |    3 +++
 2 files changed, 7 insertions(+), 16 deletions(-)
---
diff --git a/js/ui/lightbox.js b/js/ui/lightbox.js
index f8c8462..aa15160 100644
--- a/js/ui/lightbox.js
+++ b/js/ui/lightbox.js
@@ -1,5 +1,6 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 
+const Clutter = imports.gi.Clutter;
 const Lang = imports.lang;
 const Meta = imports.gi.Meta;
 const St = imports.gi.St;
@@ -57,11 +58,10 @@ const Lightbox = new Lang.Class({
         if (params.width && params.height) {
             this.actor.width = params.width;
             this.actor.height = params.height;
-            this._allocationChangedSignalId = 0;
         } else {
-            this.actor.width = container.width;
-            this.actor.height = container.height;
-            this._allocationChangedSignalId = container.connect('allocation-changed', Lang.bind(this, this._allocationChanged));
+            let constraint = new Clutter.BindConstraint({ source: container,
+                                                          coordinate: Clutter.BindCoordinate.ALL });
+            this.actor.add_constraint(constraint);
         }
 
         this._actorAddedSignalId = container.connect('actor-added', Lang.bind(this, this._actorAdded));
@@ -70,16 +70,6 @@ const Lightbox = new Lang.Class({
         this._highlighted = null;
     },
 
-    _allocationChanged : function(container, box, flags) {
-        Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
-            this.actor.width = this.width;
-            this.actor.height = this.height;
-            return false;
-        }));
-        this.width = this._container.width;
-        this.height = this._container.height;
-    },
-
     _actorAdded : function(container, newChild) {
         let children = this._container.get_children();
         let myIndex = children.indexOf(this.actor);
@@ -187,8 +177,6 @@ const Lightbox = new Lang.Class({
      * by destroying its container or by explicitly calling this.destroy().
      */
     _onDestroy: function() {
-        if (this._allocationChangedSignalId != 0)
-            this._container.disconnect(this._allocationChangedSignalId);
         this._container.disconnect(this._actorAddedSignalId);
         this._container.disconnect(this._actorRemovedSignalId);
 
diff --git a/js/ui/main.js b/js/ui/main.js
index 6b7218b..6d8f4ac 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -187,6 +187,9 @@ function start() {
                         for (let i = 0; i < children.length; i++)
                             children[i].allocate_preferred_size(flags);
                     });
+    let constraint = new Clutter.BindConstraint({ source: global.stage,
+                                                  coordinate: Clutter.BindCoordinate.SIZE });
+    uiGroup.add_constraint(constraint);
     St.set_ui_root(global.stage, uiGroup);
     global.window_group.reparent(uiGroup);
     global.overlay_group.reparent(uiGroup);



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