[gnome-shell] userMenu: Don't update the presence icon immediately
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] userMenu: Don't update the presence icon immediately
- Date: Tue, 4 Sep 2012 21:43:23 +0000 (UTC)
commit f1ca96bbf0c56a5eaa135c777045bddb4290cebe
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sat Sep 1 19:15:42 2012 -0300
userMenu: Don't update the presence icon immediately
If we don't freeze the presence icon, we can end up in a place where
we'll be updating the icon before we fade out the panel indicators when
coming back from the lock screen.
https://bugzilla.gnome.org/show_bug.cgi?id=683156
js/ui/panel.js | 13 +++++++++++--
js/ui/panelMenu.js | 15 +++++++++++++++
js/ui/userMenu.js | 9 +++++++++
3 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 5c4a0b2..2e14c22 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -1131,7 +1131,7 @@ const Panel = new Lang.Class({
},
_tweenAndUpdatePanel: function() {
- this._closeIndicatorMenus();
+ this._freezeAndCloseIndicators();
Tweener.addTween(this, {
boxOpacity: 0,
@@ -1140,6 +1140,7 @@ const Panel = new Lang.Class({
onCompleteScope: this,
onComplete: function() {
this._updatePanel();
+ this._thawIndicators();
Tweener.addTween(this, {
boxOpacity: 255,
time: Overview.ANIMATION_TIME / 2,
@@ -1153,13 +1154,21 @@ const Panel = new Lang.Class({
this._tweenAndUpdatePanel();
},
- _closeIndicatorMenus: function() {
+ _freezeAndCloseIndicators: function() {
for (let role in this.statusArea) {
let indicator = this.statusArea[role];
+ indicator.freeze();
indicator.menu.close();
}
},
+ _thawIndicators: function() {
+ for (let role in this.statusArea) {
+ let indicator = this.statusArea[role];
+ indicator.thaw();
+ }
+ },
+
_hideIndicators: function() {
for (let role in PANEL_ITEM_IMPLEMENTATIONS) {
let indicator = this.statusArea[role];
diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js
index 0476375..1cad7c8 100644
--- a/js/ui/panelMenu.js
+++ b/js/ui/panelMenu.js
@@ -113,6 +113,21 @@ const Button = new Lang.Class({
this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0));
this.setName(nameText);
+ this._frozenCount = 0;
+ },
+
+ freeze: function() {
+ this._frozenCount++;
+ },
+
+ thaw: function() {
+ this._frozenCount--;
+ if (this._frozenCount == 0)
+ this.emit('thawed');
+ },
+
+ get frozen() {
+ return this._frozenCount > 0;
},
setSensitive: function(sensitive) {
diff --git a/js/ui/userMenu.js b/js/ui/userMenu.js
index bb3e1a5..ab35089 100644
--- a/js/ui/userMenu.js
+++ b/js/ui/userMenu.js
@@ -574,6 +574,8 @@ const UserMenuButton = new Lang.Class({
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
+
+ this.connect('thawed', Lang.bind(this, this._onThawed));
},
_sessionUpdated: function() {
@@ -666,6 +668,9 @@ const UserMenuButton = new Lang.Class({
},
_updatePresenceIcon: function(accountMgr, presence, status, message) {
+ if (this.frozen)
+ return;
+
if (Main.sessionMode.isLocked)
this._iconBox.child = this._lockedIcon;
else if (presence == Tp.ConnectionPresenceType.AVAILABLE)
@@ -798,6 +803,10 @@ const UserMenuButton = new Lang.Class({
this._presence.status = status;
},
+ _onThawed: function() {
+ this._updatePresenceIcon();
+ },
+
_onMyAccountActivate: function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().lookup_setting('gnome-user-accounts-panel.desktop');
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]