[gnome-shell] popupMenu: don't animate menus when switching from one to another
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] popupMenu: don't animate menus when switching from one to another
- Date: Tue, 21 Dec 2010 22:12:33 +0000 (UTC)
commit 1694148bdb3d38462ce2efafc74f49673a521b2d
Author: Dan Winship <danw gnome org>
Date: Thu Nov 18 16:18:54 2010 -0500
popupMenu: don't animate menus when switching from one to another
Don't do the "slide" effect when moving from one menu to another; only
do it when opening the first menu, or closing a menu without opening
another one.
https://bugzilla.gnome.org/show_bug.cgi?id=634755
js/ui/boxpointer.js | 60 ++++++++++++++++--------------
js/ui/messageTray.js | 4 +-
js/ui/popupMenu.js | 96 ++++++++++++++++++++++++-------------------------
3 files changed, 81 insertions(+), 79 deletions(-)
---
diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js
index 450bed3..b7c73d7 100644
--- a/js/ui/boxpointer.js
+++ b/js/ui/boxpointer.js
@@ -42,7 +42,7 @@ BoxPointer.prototype = {
this.bin.raise(this._border);
},
- animateAppear: function(onComplete) {
+ show: function(animate, onComplete) {
let x = this.actor.x;
let y = this.actor.y;
let themeNode = this.actor.get_theme_node();
@@ -51,19 +51,21 @@ BoxPointer.prototype = {
this.actor.opacity = 0;
this.actor.show();
- switch (this._arrowSide) {
- case St.Side.TOP:
- this.actor.y -= rise;
- break;
- case St.Side.BOTTOM:
- this.actor.y += rise;
- break;
- case St.Side.LEFT:
- this.actor.x -= rise;
- break;
- case St.Side.RIGHT:
- this.actor.x += rise;
- break;
+ if (animate) {
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ this.actor.y -= rise;
+ break;
+ case St.Side.BOTTOM:
+ this.actor.y += rise;
+ break;
+ case St.Side.LEFT:
+ this.actor.x -= rise;
+ break;
+ case St.Side.RIGHT:
+ this.actor.x += rise;
+ break;
+ }
}
Tweener.addTween(this.actor, { opacity: 255,
@@ -74,7 +76,7 @@ BoxPointer.prototype = {
time: POPUP_ANIMATION_TIME });
},
- animateDisappear: function(onComplete) {
+ hide: function(animate, onComplete) {
let x = this.actor.x;
let y = this.actor.y;
let originalX = this.actor.x;
@@ -82,19 +84,21 @@ BoxPointer.prototype = {
let themeNode = this.actor.get_theme_node();
let rise = themeNode.get_length('-arrow-rise');
- switch (this._arrowSide) {
- case St.Side.TOP:
- y += rise;
- break;
- case St.Side.BOTTOM:
- y -= rise;
- break;
- case St.Side.LEFT:
- x += rise;
- break;
- case St.Side.RIGHT:
- x -= rise;
- break;
+ if (animate) {
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ y += rise;
+ break;
+ case St.Side.BOTTOM:
+ y -= rise;
+ break;
+ case St.Side.LEFT:
+ x += rise;
+ break;
+ case St.Side.RIGHT:
+ x -= rise;
+ break;
+ }
}
Tweener.addTween(this.actor, { opacity: 0,
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index a63744f..97ce07d 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1676,7 +1676,7 @@ MessageTray.prototype = {
this._adjustNotificationBoxPointerPosition();
this._summaryNotificationState = State.SHOWING;
- this._summaryNotificationBoxPointer.animateAppear(Lang.bind(this, function() {
+ this._summaryNotificationBoxPointer.show(true, Lang.bind(this, function() {
this._summaryNotificationState = State.SHOWN;
}));
},
@@ -1715,7 +1715,7 @@ MessageTray.prototype = {
this._summaryNotification.ungrabFocus();
this._summaryNotificationState = State.HIDING;
- this._summaryNotificationBoxPointer.animateDisappear(Lang.bind(this, this._hideSummaryNotificationCompleted));
+ this._summaryNotificationBoxPointer.hide(true, Lang.bind(this, this._hideSummaryNotificationCompleted));
},
_hideSummaryNotificationCompleted: function() {
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index 6d04e3d..c36e956 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -642,7 +642,7 @@ PopupMenuBase.prototype = {
this.box.insert_actor(menuItem.menu.actor, position + 1);
menuItem._subMenuActivateId = menuItem.menu.connect('activate', Lang.bind(this, function() {
this.emit('activate');
- this.close();
+ this.close(true);
}));
menuItem._subMenuActiveChangeId = menuItem.menu.connect('active-changed', Lang.bind(this, function(submenu, submenuItem) {
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
@@ -652,7 +652,7 @@ PopupMenuBase.prototype = {
}));
menuItem._closingId = this.connect('open-state-changed', function(self, open) {
if (!open)
- menuItem.menu.immediateClose();
+ menuItem.menu.close(false);
});
}
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
@@ -668,7 +668,7 @@ PopupMenuBase.prototype = {
}));
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
this.emit('activate', menuItem);
- this.close();
+ this.close(true);
}));
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
menuItem.disconnect(menuItem._activateId);
@@ -735,9 +735,9 @@ PopupMenuBase.prototype = {
toggle: function() {
if (this.isOpen)
- this.close();
+ this.close(true);
else
- this.open();
+ this.open(true);
},
destroy: function() {
@@ -802,26 +802,26 @@ PopupMenu.prototype = {
this._boxPointer.setArrowOrigin(origin);
},
- open: function() {
+ open: function(animate) {
if (this.isOpen)
return;
this.isOpen = true;
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
- this._boxPointer.animateAppear();
+ this._boxPointer.show(animate);
this.emit('open-state-changed', true);
},
- close: function() {
+ close: function(animate) {
if (!this.isOpen)
return;
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
- this._boxPointer.animateDisappear();
+ this._boxPointer.hide(animate);
this.isOpen = false;
this.emit('open-state-changed', false);
@@ -848,12 +848,15 @@ PopupSubMenu.prototype = {
this.actor.hide();
},
- open: function() {
+ open: function(animate) {
if (this.isOpen)
return;
this.isOpen = true;
+ // we don't implement the !animate case because that doesn't
+ // currently get used...
+
let [naturalHeight, minHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor.show();
@@ -874,7 +877,7 @@ PopupSubMenu.prototype = {
});
},
- close: function() {
+ close: function(animate) {
if (!this.isOpen)
return;
@@ -883,44 +886,38 @@ PopupSubMenu.prototype = {
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
- this.actor._arrow_rotation = this._arrow.rotation_angle_z;
- Tweener.addTween(this.actor,
- { _arrow_rotation: 0,
- height: 0,
- time: 0.25,
- onCompleteScope: this,
- onComplete: function() {
- this.actor.hide();
- this.actor.set_height(-1);
-
- this.emit('open-state-changed', false);
- },
- onUpdateScope: this,
- onUpdate: function() {
- this._arrow.rotation_angle_z = this.actor._arrow_rotation;
- }
- });
- },
-
- immediateClose: function() {
- if (!this.isOpen)
- return;
-
- if (this._activeMenuItem)
- this._activeMenuItem.setActive(false);
-
- this._arrow.rotation_angle_z = 0;
- this.actor.hide();
+ if (animate) {
+ this.actor._arrow_rotation = this._arrow.rotation_angle_z;
+ Tweener.addTween(this.actor,
+ { _arrow_rotation: 0,
+ height: 0,
+ time: 0.25,
+ onCompleteScope: this,
+ onComplete: function() {
+ this.actor.hide();
+ this.actor.set_height(-1);
+
+ this.emit('open-state-changed', false);
+ },
+ onUpdateScope: this,
+ onUpdate: function() {
+ this._arrow.rotation_angle_z = this.actor._arrow_rotation;
+ }
+ });
+ } else {
+ this._arrow.rotation_angle_z = 0;
+ this.actor.hide();
- this.isOpen = false;
- this.emit('open-state-changed', false);
+ this.isOpen = false;
+ this.emit('open-state-changed', false);
+ }
},
_onKeyPressEvent: function(actor, event) {
// Move focus back to parent menu if the user types Left.
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
- this.close();
+ this.close(true);
this.sourceActor._delegate.setActive(true);
return true;
}
@@ -964,7 +961,7 @@ PopupSubMenuMenuItem.prototype = {
_onKeyPressEvent: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Right) {
- this.menu.open();
+ this.menu.open(true);
this.menu.activateFirst();
return true;
}
@@ -972,7 +969,7 @@ PopupSubMenuMenuItem.prototype = {
},
activate: function(event) {
- this.menu.open();
+ this.menu.open(true);
},
_onButtonReleaseEvent: function(actor) {
@@ -1118,9 +1115,10 @@ PopupMenuManager.prototype = {
// before closing it to keep that from happening
let oldMenu = this._activeMenu;
this._activeMenu = null;
- oldMenu.close();
- }
- newMenu.open();
+ oldMenu.close(false);
+ newMenu.open(false);
+ } else
+ newMenu.open(true);
},
_onMenuSourceEnter: function(menu) {
@@ -1152,7 +1150,7 @@ PopupMenuManager.prototype = {
return;
if (focus._delegate && this._findMenu(focus._delegate.menu) != -1)
return;
- menu.close();
+ menu.close(true);
}));
},
@@ -1240,6 +1238,6 @@ PopupMenuManager.prototype = {
_closeMenu: function() {
if (this._activeMenu != null)
- this._activeMenu.close();
+ this._activeMenu.close(true);
}
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]