popupMenu: Introduce PopupDummyMenu

This is designed for things like the activities button that sort of
need a menu to make navigation work, but not really have it do anything.

https://bugzilla.gnome.org/show_bug.cgi?id=689109
This commit is contained in:
Jasper St. Pierre 2012-12-04 14:52:34 -05:00
parent 9dfc3af9d7
commit fc9a96ac85
3 changed files with 24 additions and 2 deletions

View File

@ -599,11 +599,12 @@ const AppMenuButton = new Lang.Class({
menu = new PopupMenu.RemoteMenu(this.actor, this._targetApp.menu, this._targetApp.action_group); menu = new PopupMenu.RemoteMenu(this.actor, this._targetApp.menu, this._targetApp.action_group);
} else { } else {
if (this.menu && !(this.menu instanceof PopupMenu.RemoteMenu)) if (this.menu && this.menu.isDummyQuitMenu)
return; return;
// fallback to older menu // fallback to older menu
menu = new PopupMenu.PopupMenu(this.actor, 0.0, St.Side.TOP, 0); menu = new PopupMenu.PopupMenu(this.actor, 0.0, St.Side.TOP, 0);
menu.isDummyQuitMenu = true;
menu.addAction(_("Quit"), Lang.bind(this, function() { menu.addAction(_("Quit"), Lang.bind(this, function() {
this._targetApp.request_quit(); this._targetApp.request_quit();
})); }));

View File

@ -112,7 +112,7 @@ const Button = new Lang.Class({
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress)); this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
if (dontCreateMenu) if (dontCreateMenu)
this.menu = null; this.menu = new PopupMenu.PopupDummyMenu(this.actor);
else else
this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0)); this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0));

View File

@ -1274,6 +1274,27 @@ const PopupMenu = new Lang.Class({
} }
}); });
const PopupDummyMenu = new Lang.Class({
Name: 'PopupDummyMenu',
_init: function(sourceActor) {
this.sourceActor = sourceActor;
this.actor = sourceActor;
this.actor._delegate = this;
},
isChildMenu: function() {
return false;
},
open: function() { this.emit('open-state-changed', true); },
close: function() { this.emit('open-state-changed', false); },
destroy: function() {
this.emit('destroy');
},
});
Signals.addSignalMethods(PopupDummyMenu.prototype);
const PopupSubMenu = new Lang.Class({ const PopupSubMenu = new Lang.Class({
Name: 'PopupSubMenu', Name: 'PopupSubMenu',
Extends: PopupMenuBase, Extends: PopupMenuBase,