const Gtk = imports.gi.Gtk const Main = imports.ui.main const Unite = imports.misc.extensionUtils.getCurrentExtension() const Base = Unite.imports.module.BaseModule const minorVersion = Unite.imports.helpers.minorVersion var ThemeMods = class ThemeMods extends Base { _onInitialize() { this.gtkSettings = Gtk.Settings.get_default() this._extraSpace = minorVersion < 34 this._mainStyle = Main.uiGroup.get_style() this._panelStyle = Main.panel.get_style() this._appMenu = Main.panel.statusArea.appMenu this._aggMenu = Main.panel.statusArea.aggregateMenu 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', 'setPanelStyle') 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', 'setPanelStyle') this._settings.connect('reduce-panel-spacing', 'setPanelStyle') this._settings.connect('hide-app-menu-icon', 'toggleAppMenuIcon') this._settings.connect('hide-dropdown-arrows', 'togglePanelArrows') this._settings.connect('hide-aggregate-menu-arrow', 'toggleAggMenuArrow') this._settings.connect('hide-app-menu-arrow', 'toggleAppMenuArrow') this._setExtraSpace() this._toggleAppMenuIcon() this._togglePanelArrows() this._toggleAggMenuArrow() this._toggleAppMenuArrow() this._setPanelStyle() } _onDeactivate() { this._unsetExtraSpace() this._resetAppMenuIcon() this._resetPanelArrows() this._resetAggMenuArrow() this._resetAppMenuArrow() this._unsetPanelStyle() } _setExtraSpace() { if (this._extraSpace) { this._addClass('extra-spacing') } } _unsetExtraSpace() { if (this._extraSpace) { this._removeClass('extra-spacing') } } _setPanelStyle() { this._unsetPanelStyle() const fonts = this._settings.get('use-system-fonts') const space = this._settings.get('reduce-panel-spacing') if (!fonts && !space) return if (fonts) { const gtkFont = this.gtkSettings.gtk_font_name const cssFont = gtkFont.replace(/\s\d+$/, '') Main.uiGroup.set_style(`font-family: ${cssFont};`) this._addClass('system-fonts') } if (space) { this._addClass('small-spacing') } Main.panel.set_style('font-size: 11.25pt;') } _unsetPanelStyle() { this._removeClass('small-spacing') this._removeClass('system-fonts') Main.uiGroup.set_style(this._mainStyle) Main.panel.set_style(this._panelStyle) } _toggleAppMenuIcon() { const enabled = this._settings.get('hide-app-menu-icon') if (enabled) { this._appMenu._iconBox.hide() } else { this._resetAppMenuIcon() } } _resetAppMenuIcon() { this._appMenu._iconBox.show() } _getWidgetArrow(widget) { let arrow = widget._arrow if (!arrow) { const last = widget.get_n_children() - 1 const actor = widget.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) { if (!widget) return const arrow = this._getWidgetArrow(widget) if (!arrow) return if (hide && !widget._arrowHandled) { arrow.visible = false widget._arrowHandled = true } if (!hide && widget._arrowHandled) { arrow.visible = true delete widget._arrowHandled } } _removePanelArrows() { for (const [name, widget] of Object.entries(Main.panel.statusArea)) { if (name != 'aggregateMenu' && name != 'appMenu') { this._toggleWidgetArrow(widget, true) } } } _resetPanelArrows() { for (const [name, widget] of Object.entries(Main.panel.statusArea)) { if (name != 'aggregateMenu' && name != 'appMenu') { this._toggleWidgetArrow(widget, false) } } } _togglePanelArrows() { const enabled = this._settings.get('hide-dropdown-arrows') if (enabled) { this._removePanelArrows() } else { this._resetPanelArrows() } } _toggleAggMenuArrow() { const enabled = this._settings.get('hide-aggregate-menu-arrow') if (enabled) { this._toggleWidgetArrow(this._aggMenu, true) } else { this._resetAggMenuArrow() } } _resetAggMenuArrow() { this._toggleWidgetArrow(this._aggMenu, false) } _toggleAppMenuArrow() { const enabled = this._settings.get('hide-app-menu-arrow') if (enabled) { this._toggleWidgetArrow(this._appMenu, true) } else { this._resetAppMenuArrow() } } _resetAppMenuArrow() { this._toggleWidgetArrow(this._appMenu, false) } _addClass(name) { Main.panel._addStyleClassName(name) } _removeClass(name) { Main.panel._removeStyleClassName(name) } }