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

115 lines
3.0 KiB
JavaScript

const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Main = imports.ui.main;
const Unite = imports.misc.extensionUtils.getCurrentExtension();
const Base = Unite.imports.module.BaseModule;
var ThemeMods = new GObject.Class({
Name: 'UniteThemeMods',
Extends: Base,
_onInitialize() {
this.gtkSettings = Gtk.Settings.get_default();
this._mainStyles = Main.uiGroup.get_style();
this._appMenu = Main.panel.statusArea.appMenu;
this._leftBox = Main.panel._leftBox;
this._centerBox = Main.panel._centerBox;
this._rightBox = Main.panel._rightBox;
},
_onActivate() {
this._signals.connect(this.gtkSettings, 'notify::gtk-font-name', 'updateShellFont');
this._signals.connect(this._leftBox, 'actor_added', 'removePanelArrows');
this._signals.connect(this._centerBox, 'actor_added', 'removePanelArrows');
this._signals.connect(this._rightBox, 'actor_added', 'removePanelArrows');
this._settings.connect('use-system-fonts', 'updateShellFont');
this._setShellFont();
this._hideAppMenuIcon();
this._removePanelArrows();
},
_onDeactivate() {
this._resetShellFont();
this._showAppMenuIcon();
this._resetPanelArrows();
},
_setShellFont() {
const enabled = this._settings.get('use-system-fonts');
if (!enabled) return;
const gtkFont = this.gtkSettings.gtk_font_name;
const cssFont = gtkFont.replace(/\s\d+$/, '');
Main.uiGroup.set_style(`font-family: ${cssFont};`);
Main.panel._addStyleClassName('system-fonts');
},
_resetShellFont() {
Main.uiGroup.set_style(this._mainStyles);
Main.panel._removeStyleClassName('system-fonts');
},
_updateShellFont() {
this._resetShellFont();
this._setShellFont();
},
_hideAppMenuIcon() {
this._appMenu._iconBox.hide();
},
_showAppMenuIcon() {
this._appMenu._iconBox.show();
},
_getWidgetArrow(widget) {
let arrow = widget._arrow;
if (!arrow) {
const item = widget.get_children ? widget : widget.actor;
const last = item.get_n_children() - 1;
const actor = item.get_children()[last];
if (!actor) return;
if (actor.has_style_class_name && actor.has_style_class_name('popup-menu-arrow'))
arrow = actor;
else
arrow = this._getWidgetArrow(actor);
}
if (arrow && !widget.hasOwnProperty('_arrow'))
widget._arrow = arrow;
return arrow;
},
_toggleWidgetArrow(widget, hide) {
const arrow = this._getWidgetArrow(widget);
if (!arrow) return;
arrow.visible = !hide;
},
_removePanelArrows() {
for (const [name, widget] of Object.entries(Main.panel.statusArea)) {
if (name != 'aggregateMenu' && !widget._arrowHandled) {
widget._arrowHandled = true;
this._toggleWidgetArrow(widget, true);
}
}
},
_resetPanelArrows() {
for (const [name, widget] of Object.entries(Main.panel.statusArea)) {
if (name != 'aggregateMenu' && widget._arrowHandled) {
this._toggleWidgetArrow(widget, false);
delete widget._arrowHandled;
}
}
}
});