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

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) });
}
});