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)
|
// This icon is not implemented (this is a bug)
|
||||||
continue;
|
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
|
// PopupMenuManager depends on menus being added in order for
|
||||||
@ -974,6 +972,28 @@ Panel.prototype = {
|
|||||||
this._menus.addMenu(this._userMenu.menu);
|
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() {
|
startupAnimation: function() {
|
||||||
let oldY = this.actor.y;
|
let oldY = this.actor.y;
|
||||||
this.actor.y = oldY - this.actor.height;
|
this.actor.y = oldY - this.actor.height;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Signals = imports.signals;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
@ -80,8 +81,18 @@ Button.prototype = {
|
|||||||
this.actor.add_style_pseudo_class('active');
|
this.actor.add_style_pseudo_class('active');
|
||||||
else
|
else
|
||||||
this.actor.remove_style_pseudo_class('active');
|
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:
|
/* SystemStatusButton:
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user