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
This commit is contained in:
Giovanni Campagna 2012-08-30 00:11:05 +02:00
parent f075b36d4f
commit 04d1a35cb5

View File

@ -1052,14 +1052,17 @@ const PopupMenuBase = new Lang.Class({
if (menuItem instanceof PopupMenuSection) { if (menuItem instanceof PopupMenuSection) {
this._connectSubMenuSignals(menuItem, menuItem); this._connectSubMenuSignals(menuItem, menuItem);
menuItem._closingId = this.connect('open-state-changed', menuItem._parentOpenStateChangedId = this.connect('open-state-changed',
function(self, open) { function(self, open) {
if (!open) if (open)
menuItem.close(BoxPointer.PopupAnimation.FADE); menuItem.open();
else
menuItem.close();
}); });
menuItem.connect('destroy', Lang.bind(this, function() { menuItem.connect('destroy', Lang.bind(this, function() {
menuItem.disconnect(menuItem._subMenuActivateId); menuItem.disconnect(menuItem._subMenuActivateId);
menuItem.disconnect(menuItem._subMenuActiveChangeId); menuItem.disconnect(menuItem._subMenuActiveChangeId);
this.disconnect(menuItem._parentOpenStateChangedId);
this.length--; this.length--;
})); }));
@ -1440,7 +1443,7 @@ const PopupMenuSection = new Lang.Class({
// deliberately ignore any attempt to open() or close(), but emit the // deliberately ignore any attempt to open() or close(), but emit the
// corresponding signal so children can still pick it up // 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); }, close: function() { this.emit('open-state-changed', false); },
destroy: function() { destroy: function() {