popupMenu: Connect after to item 'activate' signal

A menu item activation might lead to a call to `itemActivated` which eventually
will close the menu which leads to a `PopupMenu.removeAll` that destroys all the
items, stopping the emission of the 'activate' signal for them.

Before commit 4258ae3e this was not happening because destroy'ing a javascript
object wasn't really disposing it and thus stopping the signal emissions.

So, ensure that `itemActivated` is called after that all the other callbacks
have been consumed, and so that the menu is closed as last thing.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1326

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/557
This commit is contained in:
Marco Trevisan (Treviño) 2019-05-27 14:45:12 -05:00
parent de0e21612c
commit 759120b95f

View File

@ -572,7 +572,7 @@ var PopupMenuBase = class {
menuItem.actor.grab_key_focus(); menuItem.actor.grab_key_focus();
} }
}); });
menuItem._activateId = menuItem.connect('activate', (menuItem, event) => { menuItem._activateId = menuItem.connect_after('activate', (menuItem, event) => {
this.emit('activate', menuItem); this.emit('activate', menuItem);
this.itemActivated(BoxPointer.PopupAnimation.FULL); this.itemActivated(BoxPointer.PopupAnimation.FULL);
}); });