PopupMenu: disconnect from 'destroy' signals of destroyed items
After an item is destroyed, all its signals were disconnected, except for 'destroy' itself. This could lead to exceptions, if destroy was called more than once on the item. https://bugzilla.gnome.org/show_bug.cgi?id=665680
This commit is contained in:
parent
2b9561fcbb
commit
a7bd9f811b
@ -939,7 +939,12 @@ const PopupMenuBase = new Lang.Class({
|
|||||||
this.emit('activate', menuItem);
|
this.emit('activate', menuItem);
|
||||||
this.close(true);
|
this.close(true);
|
||||||
}));
|
}));
|
||||||
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
|
// the weird name is to avoid a conflict with some random property
|
||||||
|
// the menuItem may have, called destroyId
|
||||||
|
// (FIXME: in the future it may make sense to have container objects
|
||||||
|
// like PopupMenuManager does)
|
||||||
|
menuItem._popupMenuDestroyId = menuItem.connect('destroy', Lang.bind(this, function(menuItem) {
|
||||||
|
menuItem.disconnect(menuItem._popupMenuDestroyId);
|
||||||
menuItem.disconnect(menuItem._activateId);
|
menuItem.disconnect(menuItem._activateId);
|
||||||
menuItem.disconnect(menuItem._activeChangeId);
|
menuItem.disconnect(menuItem._activeChangeId);
|
||||||
menuItem.disconnect(menuItem._sensitiveChangeId);
|
menuItem.disconnect(menuItem._sensitiveChangeId);
|
||||||
|
Loading…
Reference in New Issue
Block a user