remoteMenu: Add support for the submenu show requests
This lets clients defer submenus showing until their submenu model is ready. https://bugzilla.gnome.org/show_bug.cgi?id=700257
This commit is contained in:
@ -60,12 +60,31 @@ const RemoteMenuSeparatorItemMapper = new Lang.Class({
|
||||
},
|
||||
});
|
||||
|
||||
const RequestSubMenu = new Lang.Class({
|
||||
Name: 'RequestSubMenu',
|
||||
Extends: PopupMenu.PopupSubMenuMenuItem,
|
||||
|
||||
_init: function() {
|
||||
this.parent('');
|
||||
this._requestOpen = false;
|
||||
},
|
||||
|
||||
_setOpenState: function(open) {
|
||||
this.emit('request-open', open);
|
||||
this._requestOpen = open;
|
||||
},
|
||||
|
||||
_getOpenState: function() {
|
||||
return this._requestOpen;
|
||||
},
|
||||
});
|
||||
|
||||
const RemoteMenuSubmenuItemMapper = new Lang.Class({
|
||||
Name: 'RemoteMenuSubmenuItemMapper',
|
||||
|
||||
_init: function(trackerItem) {
|
||||
this._trackerItem = trackerItem;
|
||||
this.menuItem = new PopupMenu.PopupSubMenuMenuItem('');
|
||||
this.menuItem = new RequestSubMenu();
|
||||
this._trackerItem.connect('notify::label', Lang.bind(this, this._updateLabel));
|
||||
this._updateLabel();
|
||||
|
||||
@ -73,6 +92,14 @@ const RemoteMenuSubmenuItemMapper = new Lang.Class({
|
||||
_insertItem.bind(null, this.menuItem.menu),
|
||||
_removeItem.bind(null, this.menuItem.menu));
|
||||
|
||||
this.menuItem.connect('request-open', Lang.bind(this, function(menu, open) {
|
||||
this._trackerItem.request_submenu_shown(open);
|
||||
}));
|
||||
|
||||
this._trackerItem.connect('notify::submenu-shown', Lang.bind(this, function() {
|
||||
this.menuItem.setSubmenuShown(this._trackerItem.get_submenu_shown());
|
||||
}));
|
||||
|
||||
this.menuItem.connect('destroy', function() {
|
||||
trackerItem.run_dispose();
|
||||
});
|
||||
|
Reference in New Issue
Block a user