iso-profiles-settings/tromjaro/gnome/desktop-overlay/etc/skel/.local/share/gnome-shell/extensions/unite@hardpixel.eu/panel.js
2019-07-09 04:57:09 +03:00

125 lines
2.9 KiB
JavaScript

const Lang = imports.lang;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
var DesktopLabel = new Lang.Class({
Name: 'UniteDesktopLabel',
Extends: PanelMenu.Button,
_init(params = { text: 'Desktop' }) {
this.params = params;
this.appMenu = Main.panel.statusArea.appMenu;
this.parent(0.0, 'DesktopLabel');
this._label = new St.Label({ y_align: Clutter.ActorAlign.CENTER });
this.actor.add_actor(this._label);
this.actor.reactive = false;
this.actor.label_actor = this._label;
this.setText(params.text);
},
setText(text) {
this._label.set_text(text);
},
setVisible(visible) {
this.container.visible = visible;
this.appMenu.container.visible = !visible;
}
});
var TrayIndicator = new Lang.Class({
Name: 'UniteTrayIndicator',
Extends: PanelMenu.Button,
_init(params = { size: 20 }) {
this._icons = [];
this.params = params;
this.parent(0.0, 'TrayIndicator');
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.actor.add_child(this._indicators);
this._sync();
},
_sync() {
this.actor.visible = this._icons.length;
},
addIcon(icon) {
this._icons.push(icon);
const mask = St.ButtonMask.ONE | St.ButtonMask.TWO | St.ButtonMask.THREE;
const ibtn = new St.Button({ child: icon, button_mask: mask });
this._indicators.add_child(ibtn);
icon.connect('destroy', () => { ibtn.destroy() });
ibtn.connect('button-release-event', (actor, event) => { icon.click(event) });
icon.set_reactive(true);
icon.set_size(this.params.size, this.params.size);
this._sync();
},
removeIcon(icon) {
const actor = icon.get_parent() || icon;
actor.destroy();
const index = this._icons.indexOf(icon);
this._icons.splice(index, 1);
this._sync();
},
forEach(callback) {
this._icons.forEach(icon => { callback.call(null, icon) });
}
});
var WindowControls = new Lang.Class({
Name: 'UniteWindowControls',
Extends: PanelMenu.Button,
_init() {
this.parent(0.0, 'WindowControls');
this._controls = new St.BoxLayout({ style_class: 'window-controls-box' });
this.actor.add_child(this._controls);
this.actor.add_style_class_name('window-controls');
},
_addButton(action, callback) {
const bin = new St.Bin({ style_class: 'icon' });
const btn = new St.Button({ track_hover: true });
btn._windowAction = action;
btn.add_style_class_name(`window-button ${action}`);
btn.add_actor(bin);
btn.connect('clicked', (actor, event) => {
callback.call(null, actor, event);
});
this._controls.add_child(btn);
},
addButtons(buttons, callback) {
buttons.forEach(action => { this._addButton(action, callback) });
},
setVisible(visible) {
this.container.visible = visible;
}
});