82 lines
3.2 KiB
Diff
82 lines
3.2 KiB
Diff
From 7e4e3c19d010b8204f89703706c605a97153a60a Mon Sep 17 00:00:00 2001
|
|
From: rpm-build <rpm-build>
|
|
Date: Tue, 30 Mar 2021 14:56:46 +0800
|
|
Subject: [PATCH] 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 faecff8..29954f7 100644
|
|
--- a/js/gdm/loginDialog.js
|
|
+++ b/js/gdm/loginDialog.js
|
|
@@ -918,25 +918,29 @@ var LoginDialog = new Lang.Class({
|
|
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.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
|
return;
|
|
|
|
+ this._bindOpacity();
|
|
Tweener.addTween(this.actor,
|
|
{ opacity: 255,
|
|
time: _FADE_ANIMATION_TIME,
|
|
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.actor.opacity;
|
|
- }
|
|
- },
|
|
onComplete: () => {
|
|
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
|
this._authPrompt.reset();
|
|
+ this._unbindOpacity();
|
|
} });
|
|
},
|
|
|
|
@@ -950,20 +954,14 @@ var LoginDialog = new Lang.Class({
|
|
},
|
|
|
|
_startSession(serviceName) {
|
|
+ this._bindOpacity();
|
|
Tweener.addTween(this.actor,
|
|
{ opacity: 0,
|
|
time: _FADE_ANIMATION_TIME,
|
|
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.actor.opacity;
|
|
- }
|
|
- },
|
|
onComplete: () => {
|
|
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
|
|
+ this._unbindOpacity();
|
|
} });
|
|
},
|
|
|
|
--
|
|
2.23.0
|
|
|