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:
parent
f075b36d4f
commit
04d1a35cb5
@ -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() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user