89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
const System = imports.system;
|
|
const GObject = imports.gi.GObject;
|
|
const Clutter = imports.gi.Clutter;
|
|
const Shell = imports.gi.Shell;
|
|
const Main = imports.ui.main;
|
|
const Unite = imports.misc.extensionUtils.getCurrentExtension();
|
|
const Base = Unite.imports.module.BaseModule;
|
|
const TrayIndicator = Unite.imports.panel.TrayIndicator;
|
|
const scaleSize = Unite.imports.helpers.scaleSize;
|
|
|
|
var TopIcons = new GObject.Class({
|
|
Name: 'UniteTopIcons',
|
|
Extends: Base,
|
|
|
|
_enableKey: 'show-legacy-tray',
|
|
_enableValue: true,
|
|
|
|
_onActivate() {
|
|
this._settings.connect('greyscale-tray-icons', 'desaturateIcons');
|
|
|
|
this._createContainer();
|
|
this._createTray();
|
|
},
|
|
|
|
_onDeactivate() {
|
|
this._destroyContainer();
|
|
this._destroyTray();
|
|
},
|
|
|
|
_createTray() {
|
|
this._tray = new Shell.TrayManager();
|
|
|
|
this._tray.connect('tray-icon-added', (trayManager, icon) => {
|
|
this._indicators.addIcon(icon);
|
|
this._desaturateIcon(icon);
|
|
});
|
|
|
|
this._tray.connect('tray-icon-removed', (trayManager, icon) => {
|
|
this._indicators.removeIcon(icon);
|
|
});
|
|
|
|
if (global.screen)
|
|
this._tray.manage_screen(global.screen, Main.panel.actor);
|
|
else
|
|
this._tray.manage_screen(Main.panel.actor);
|
|
},
|
|
|
|
_destroyTray() {
|
|
this._tray = null;
|
|
System.gc();
|
|
},
|
|
|
|
_createContainer() {
|
|
if (this._indicators) return;
|
|
|
|
this._indicators = new TrayIndicator({ size: scaleSize(20) });
|
|
Main.panel.addToStatusArea('uniteTrayIndicator', this._indicators);
|
|
},
|
|
|
|
_destroyContainer() {
|
|
if (!this._indicators) return;
|
|
|
|
this._indicators.destroy();
|
|
this._indicators = null;
|
|
},
|
|
|
|
_desaturateIcon(icon) {
|
|
let greyscale = this._settings.get('greyscale-tray-icons');
|
|
icon.clear_effects();
|
|
|
|
if (!greyscale) return;
|
|
|
|
let desEffect = new Clutter.DesaturateEffect({ factor : 1.0 });
|
|
let briEffect = new Clutter.BrightnessContrastEffect({});
|
|
|
|
briEffect.set_brightness(0.2);
|
|
briEffect.set_contrast(0.3);
|
|
|
|
icon.add_effect_with_name('desaturate', desEffect);
|
|
icon.add_effect_with_name('brightness-contrast', briEffect);
|
|
},
|
|
|
|
_desaturateIcons() {
|
|
if (!this._indicators) return;
|
|
|
|
this._indicators.forEach(icon => { this._desaturateIcon(icon) });
|
|
}
|
|
});
|