From 04d1a35cb56d9794602fe4a16ea29f8ac7e36439 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Thu, 30 Aug 2012 00:11:05 +0200 Subject: [PATCH] PopupMenu: propagate all open-state-changed down to PopupMenuSection PopupMenuBase relies on open-state-changed to update the separator visibility, but PopupMenuSection were only emitting when the parent closed, so the first time the menu was opened, separator visiblity was wrong. https://bugzilla.gnome.org/show_bug.cgi?id=682998 --- js/ui/popupMenu.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 70c4360bd..cb3f05d05 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -1052,14 +1052,17 @@ const PopupMenuBase = new Lang.Class({ if (menuItem instanceof PopupMenuSection) { this._connectSubMenuSignals(menuItem, menuItem); - menuItem._closingId = this.connect('open-state-changed', + menuItem._parentOpenStateChangedId = this.connect('open-state-changed', function(self, open) { - if (!open) - menuItem.close(BoxPointer.PopupAnimation.FADE); + if (open) + menuItem.open(); + else + menuItem.close(); }); menuItem.connect('destroy', Lang.bind(this, function() { menuItem.disconnect(menuItem._subMenuActivateId); menuItem.disconnect(menuItem._subMenuActiveChangeId); + this.disconnect(menuItem._parentOpenStateChangedId); this.length--; })); @@ -1440,7 +1443,7 @@ const PopupMenuSection = new Lang.Class({ // deliberately ignore any attempt to open() or close(), but emit the // corresponding signal so children can still pick it up - open: function(animate) { this.emit('open-state-changed', true); }, + open: function() { this.emit('open-state-changed', true); }, close: function() { this.emit('open-state-changed', false); }, destroy: function() {