[gnome-shell] loginDialog: Use GObject bindings over onUpdate handler



commit 3ee525833e90904e13c813b669f503aea42b51f3
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Jul 26 01:13:59 2019 +0000

    loginDialog: Use GObject bindings over onUpdate handler
    
    Instead of iterating over all actors each frame and sync'ing their
    opacities, we can set up bindings once before the animation.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/654

 js/gdm/loginDialog.js | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)
---
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 2c21c6322..531b227c1 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -906,25 +906,29 @@ var LoginDialog = GObject.registerClass({
         this._showPrompt();
     }
 
+    _bindOpacity() {
+        this._bindings = Main.layoutManager.uiGroup.get_children()
+            .filter(c => c != Main.layoutManager.screenShieldGroup)
+            .map(c => this.bind_property('opacity', c, 'opacity', 0));
+    }
+
+    _unbindOpacity() {
+        this._bindings.forEach(b => b.unbind());
+    }
+
     _loginScreenSessionActivated() {
         if (this.opacity == 255 && this._authPrompt.verificationStatus == 
AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
             return;
 
+        this._bindOpacity();
         Tweener.addTween(this,
                          { opacity: 255,
                            time: _FADE_ANIMATION_TIME / 1000,
                            transition: 'easeOutQuad',
-                           onUpdate: () => {
-                               let children = Main.layoutManager.uiGroup.get_children();
-
-                               for (let i = 0; i < children.length; i++) {
-                                   if (children[i] != Main.layoutManager.screenShieldGroup)
-                                       children[i].opacity = this.opacity;
-                               }
-                           },
                            onComplete: () => {
                                if (this._authPrompt.verificationStatus != 
AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
                                    this._authPrompt.reset();
+                               this._unbindOpacity();
                            } });
     }
 
@@ -938,20 +942,14 @@ var LoginDialog = GObject.registerClass({
     }
 
     _startSession(serviceName) {
+        this._bindOpacity();
         Tweener.addTween(this,
                          { opacity: 0,
                            time: _FADE_ANIMATION_TIME / 1000,
                            transition: 'easeOutQuad',
-                           onUpdate: () => {
-                               let children = Main.layoutManager.uiGroup.get_children();
-
-                               for (let i = 0; i < children.length; i++) {
-                                   if (children[i] != Main.layoutManager.screenShieldGroup)
-                                       children[i].opacity = this.opacity;
-                               }
-                           },
                            onComplete: () => {
                                this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
+                               this._unbindOpacity();
                            } });
     }
 


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