[gnome-shell/wip/aggregate-menu: 19/51] popupMenu: Only allow one submenu to be open at a time
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/aggregate-menu: 19/51] popupMenu: Only allow one submenu to be open at a time
- Date: Sun, 16 Jun 2013 05:00:52 +0000 (UTC)
commit 12e1631843433ecf38cce49336fa0cc96ebe297a
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Tue Jun 11 19:12:46 2013 -0400
popupMenu: Only allow one submenu to be open at a time
When the user opens another submenu, close the first one.
js/ui/popupMenu.js | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index 8a868c7..f373cf2 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -846,10 +846,14 @@ const PopupMenuBase = new Lang.Class({
let parentClosingId = this.connect('menu-closed', function() {
menuItem.emit('menu-closed');
});
+ let subMenuOpenStateChangedId = menuItem.connect('submenu-open-state-changed', Lang.bind(this,
function(menuItem, submenu, open) {
+ this.emit('submenu-open-state-changed', submenu, open);
+ }));
menuItem.connect('destroy', Lang.bind(this, function() {
menuItem.disconnect(activateId);
menuItem.disconnect(activeChangeId);
+ menuItem.disconnect(subMenuOpenStateChangedId);
this.disconnect(parentOpenStateChangedId);
this.disconnect(parentClosingId);
this.length--;
@@ -866,10 +870,13 @@ const PopupMenuBase = new Lang.Class({
let closingId = this.connect('menu-closed', function() {
menuItem.menu.close(BoxPointer.PopupAnimation.NONE);
});
-
+ let subMenuOpenStateChangedId = menuItem.connect('submenu-open-state-changed', Lang.bind(this,
function(menuItem, submenu, open) {
+ this.emit('submenu-open-state-changed', submenu, open);
+ }));
menuItem.connect('destroy', Lang.bind(this, function() {
menuItem.menu.disconnect(subMenuActivateId);
menuItem.menu.disconnect(subMenuActiveChangeId);
+ menuItem.disconnect(subMenuOpenStateChangedId);
this.disconnect(closingId);
}));
} else if (menuItem instanceof PopupSeparatorMenuItem) {
@@ -1012,6 +1019,19 @@ const PopupMenu = new Lang.Class({
global.focus_manager.add_group(this.actor);
this.actor.reactive = true;
+
+ this._openedSubMenu = null;
+ this.connect('submenu-open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged));
+ },
+
+ _subMenuOpenStateChanged: function(menu, submenu, open) {
+ if (open) {
+ if (this._openedSubMenu)
+ this._openedSubMenu.close(true);
+ this._openedSubMenu = submenu;
+ } else {
+ this._openedSubMenu = null;
+ }
},
_boxGetPreferredWidth: function (actor, forHeight, alloc) {
@@ -1297,6 +1317,8 @@ const PopupSubMenuMenuItem = new Lang.Class({
this.actor.add_style_pseudo_class('open');
else
this.actor.remove_style_pseudo_class('open');
+
+ this.emit('submenu-open-state-changed', menu, open);
},
destroy: function() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]