panel: Add an easier way of adding items to the system status area
Extensions often want to add items to the system status area, so it is useful to add a convenience API for it. Also, we now allow for cleaner destruction of panel objects, by just calling destroy() on it. Based on a patch by Jasper St. Pierre. https://bugzilla.gnome.org/show_bug.cgi?id=653205
This commit is contained in:
parent
b76efe17d6
commit
08126e5a38
@ -962,11 +962,9 @@ Panel.prototype = {
|
||||
// This icon is not implemented (this is a bug)
|
||||
continue;
|
||||
}
|
||||
let indicator = new constructor();
|
||||
this._statusBox.add(indicator.actor);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
|
||||
this._statusArea[role] = indicator;
|
||||
let indicator = new constructor();
|
||||
this.addToStatusArea(role, indicator, i-1);
|
||||
}
|
||||
|
||||
// PopupMenuManager depends on menus being added in order for
|
||||
@ -974,6 +972,28 @@ Panel.prototype = {
|
||||
this._menus.addMenu(this._userMenu.menu);
|
||||
},
|
||||
|
||||
addToStatusArea: function(role, indicator, position) {
|
||||
if (this._statusArea[role])
|
||||
throw new Error('Extension point conflict: there is already a status indicator for role ' + role);
|
||||
|
||||
if (!(indicator instanceof PanelMenu.Button))
|
||||
throw new TypeError('Status indicator must be an instance of PanelMenu.Button');
|
||||
|
||||
if (!position)
|
||||
position = 0;
|
||||
|
||||
this._statusBox.insert_actor(indicator.actor, position);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
|
||||
this._statusArea[role] = indicator;
|
||||
let destroyId = indicator.connect('destroy', Lang.bind(this, function(emitter) {
|
||||
this._statusArea[role] = null;
|
||||
emitter.disconnect(destroyId);
|
||||
}));
|
||||
|
||||
return indicator;
|
||||
},
|
||||
|
||||
startupAnimation: function() {
|
||||
let oldY = this.actor.y;
|
||||
this.actor.y = oldY - this.actor.height;
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Lang = imports.lang;
|
||||
@ -80,8 +81,18 @@ Button.prototype = {
|
||||
this.actor.add_style_pseudo_class('active');
|
||||
else
|
||||
this.actor.remove_style_pseudo_class('active');
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.actor._delegate = null;
|
||||
|
||||
this.menu.destroy();
|
||||
this.actor.destroy();
|
||||
|
||||
this.emit('destroy');
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(Button.prototype);
|
||||
|
||||
/* SystemStatusButton:
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user