From c94358a8f30a86df71ad0bb374e5196608ff9127 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Sat, 1 Jul 2023 17:18:11 +1200 Subject: [PATCH] gex: itemize the quicks and indicators --- ...e.shell.extensions.asusctl-gex.gschema.xml | 2 - desktop-extensions/gnome/src/extension.ts | 164 +++++------------- .../gnome/src/modules/indicators/mini_led.ts | 39 +++++ .../src/modules/quick_toggles/mini_led.ts | 50 ++++++ .../src/modules/quick_toggles/panel_od.ts | 50 ++++++ 5 files changed, 179 insertions(+), 126 deletions(-) create mode 100644 desktop-extensions/gnome/src/modules/indicators/mini_led.ts create mode 100644 desktop-extensions/gnome/src/modules/quick_toggles/mini_led.ts create mode 100644 desktop-extensions/gnome/src/modules/quick_toggles/panel_od.ts diff --git a/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml b/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml index 20370191..614b8034 100644 --- a/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml +++ b/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml @@ -6,8 +6,6 @@ false - enable / disable debug messages - If enabled, various events of the extension will get logged and are available via journalctl. false diff --git a/desktop-extensions/gnome/src/extension.ts b/desktop-extensions/gnome/src/extension.ts index fd3ed3b2..2ac7d4a4 100644 --- a/desktop-extensions/gnome/src/extension.ts +++ b/desktop-extensions/gnome/src/extension.ts @@ -5,10 +5,7 @@ var extensionInstance: any; // REF: https://gjs.guide/extensions/development/creating.html -const { GObject, Gio } = imports.gi; -const ExtensionUtils = imports.misc.extensionUtils; - -const { QuickToggle, SystemIndicator } = imports.ui.quickSettings; +const { QuickToggle } = imports.ui.quickSettings; const QuickSettingsMenu = imports.ui.main.panel.statusArea.quickSettings; import { AnimeDbus } from './modules/dbus/animatrix'; @@ -16,123 +13,26 @@ import { Power } from './modules/dbus/power'; import { Supported } from './modules/dbus/supported'; import { Platform } from './modules/dbus/platform'; -const QuickMiniLed = GObject.registerClass( - class QuickMiniLed extends QuickToggle { - constructor() { - super({ - title: 'MiniLED', - iconName: 'selection-mode-symbolic', - toggleMode: true, - checked: extensionInstance.dbus_platform.bios.mini_led_mode, - }); - - this.label = 'MiniLED'; - - // Binding the toggle to a GSettings key - this._settings = ExtensionUtils.getSettings(); - - this.connectObject( - 'destroy', () => this._settings.run_dispose(), - 'clicked', () => this._toggleMode(), - this); - - this._settings.bind('mini-led-enabled', - this, 'checked', - Gio.SettingsBindFlags.DEFAULT); - - this._sync(); - } - - _toggleMode() { - extensionInstance.dbus_platform.setMiniLedMode(this.checked); - this._sync(); - } - - _sync() { - const checked = extensionInstance.dbus_platform.getMiniLedMode(); - if (this.checked !== checked) - this.set({ checked }); - // this.set_property('checked', checked); - } - }); - -const IndicateMiniLed = GObject.registerClass( - class IndicateMiniLed extends SystemIndicator { - constructor() { - super(); - - // Create the icon for the indicator - this._indicator = this._addIndicator(); - this._indicator.icon_name = 'selection-mode-symbolic'; - - // Showing the indicator when the feature is enabled - this._settings = ExtensionUtils.getSettings(); - this._settings.bind('mini-led-enabled', - this._indicator, 'visible', - Gio.SettingsBindFlags.DEFAULT); - - // Create the toggle and associate it with the indicator, being sure to - // destroy it along with the indicator - this.quickSettingsItems.push(new QuickMiniLed()); - - this.connect('destroy', () => { - this.quickSettingsItems.forEach((item: { destroy: () => any; }) => item.destroy()); - }); - - // Add the indicator to the panel and the toggle to the menu - QuickSettingsMenu._indicators.add_child(this); - QuickSettingsMenu._addItems(this.quickSettingsItems); - } - }); +import { QuickPanelOd } from './modules/quick_toggles/panel_od'; +import { IndicateMiniLed } from './modules/indicators/mini_led'; +import { QuickMiniLed } from './modules/quick_toggles/mini_led'; -const QuickPanelOd = GObject.registerClass( - class QuickPanelOd extends QuickToggle { - constructor() { - super({ - title: 'Panel Overdrive', - iconName: 'selection-mode-symbolic', - toggleMode: true, - }); - this.label = 'Panel Overdrive'; - this._settings = ExtensionUtils.getSettings(); +function addQuickSettingsItems(items: [typeof QuickToggle]) { + // Add the items with the built-in function + QuickSettingsMenu._addItems(items); - this.connectObject( - 'destroy', () => this._settings.run_dispose(), - 'clicked', () => this._toggleMode(), - this); - this._sync(); - } - - _toggleMode() { - extensionInstance.dbus_platform.setPanelOd(this.checked); - this._sync(); - } - - _sync() { - const checked = extensionInstance.dbus_platform.getPanelOd(); - if (this.checked !== checked) - this.set({ checked }); - } - }); - -const IndicatePanelOd = GObject.registerClass( - class IndicatePanelOd extends SystemIndicator { - constructor() { - super(); - - this.quickSettingsItems.push(new QuickPanelOd()); - // this.connect('destroy', () => { - // this.quickSettingsItems.forEach((item: { destroy: () => any; }) => item.destroy()); - // }); - // QuickSettingsMenu._indicators.add_child(this); - QuickSettingsMenu._addItems(this.quickSettingsItems); - } - }); + // Ensure the tile(s) are above the background apps menu + for (const item of items) { + QuickSettingsMenu.menu._grid.set_child_below_sibling(item, + QuickSettingsMenu._backgroundApps.quickSettingsItems[0]); + } +} class Extension { private _indicateMiniLed: typeof IndicateMiniLed; - private _indicatePanelOd: typeof IndicatePanelOd; + private _quickMiniLed: typeof QuickMiniLed; + private _quickPanelOd: typeof QuickPanelOd; private _dbus_power!: Power; private _dbus_anime!: AnimeDbus; @@ -141,7 +41,8 @@ class Extension { constructor() { this._indicateMiniLed = null; - this._indicatePanelOd = null; + this._quickMiniLed = null; + this._quickPanelOd = null; this.dbus_supported = new Supported(); this.dbus_supported.start(); @@ -157,20 +58,35 @@ class Extension { } enable() { - if (this.dbus_supported.supported.rog_bios_ctrl.mini_led_mode) - this._indicateMiniLed = new IndicateMiniLed(); - if (this.dbus_supported.supported.rog_bios_ctrl.panel_overdrive) - this._indicatePanelOd = new IndicatePanelOd(); + if (this.dbus_supported.supported.rog_bios_ctrl.mini_led_mode) { + if (this._quickMiniLed == null) { + this._quickMiniLed = new QuickMiniLed(this.dbus_platform); + addQuickSettingsItems([this._quickMiniLed]); + } + if (this._indicateMiniLed == null) { + this._indicateMiniLed = new IndicateMiniLed(this.dbus_platform); + } + } + if (this.dbus_supported.supported.rog_bios_ctrl.panel_overdrive) { + if (this._quickPanelOd == null) { + this._quickPanelOd = new QuickPanelOd(this.dbus_platform); + addQuickSettingsItems([this._quickPanelOd]); + } + } } disable() { - if (this.dbus_supported.supported.rog_bios_ctrl.mini_led_mode) { + if (this._indicateMiniLed != null) { this._indicateMiniLed.destroy(); this._indicateMiniLed = null; } - if (this.dbus_supported.supported.rog_bios_ctrl.panel_overdrive) { - this._indicatePanelOd.destroy(); - this._indicatePanelOd = null; + if (this._quickMiniLed != null) { + this._quickMiniLed.destroy(); + this._quickMiniLed = null; + } + if (this._quickPanelOd != null) { + this._quickPanelOd.destroy(); + this._quickPanelOd = null; } this._dbus_power.stop(); diff --git a/desktop-extensions/gnome/src/modules/indicators/mini_led.ts b/desktop-extensions/gnome/src/modules/indicators/mini_led.ts new file mode 100644 index 00000000..5e5247da --- /dev/null +++ b/desktop-extensions/gnome/src/modules/indicators/mini_led.ts @@ -0,0 +1,39 @@ +declare const imports: any; +// REF: https://gjs.guide/extensions/development/creating.html + +const { GObject, Gio } = imports.gi; +const ExtensionUtils = imports.misc.extensionUtils; + +const { SystemIndicator } = imports.ui.quickSettings; +const QuickSettingsMenu = imports.ui.main.panel.statusArea.quickSettings; + +import { Platform } from '../dbus/platform'; +import { QuickMiniLed } from '../quick_toggles/mini_led'; + +export const IndicateMiniLed = GObject.registerClass( + class IndicateMiniLed extends SystemIndicator { + constructor(dbus_platform: Platform) { + super(); + + // Create the icon for the indicator + this._indicator = this._addIndicator(); + this._indicator.icon_name = 'selection-mode-symbolic'; + + // Showing the indicator when the feature is enabled + this._settings = ExtensionUtils.getSettings(); + this._settings.bind('mini-led-enabled', + this._indicator, 'visible', + Gio.SettingsBindFlags.DEFAULT); + + // // Create the toggle and associate it with the indicator, being sure to + // // destroy it along with the indicator + // this.quickSettingsItems.push(new QuickMiniLed(dbus_platform)); + + // this.connect('destroy', () => { + // this.quickSettingsItems.forEach((item: { destroy: () => any; }) => item.destroy()); + // }); + + // Add the indicator to the panel and the toggle to the menu + QuickSettingsMenu._indicators.add_child(this); + } + }); \ No newline at end of file diff --git a/desktop-extensions/gnome/src/modules/quick_toggles/mini_led.ts b/desktop-extensions/gnome/src/modules/quick_toggles/mini_led.ts new file mode 100644 index 00000000..3f6e5a62 --- /dev/null +++ b/desktop-extensions/gnome/src/modules/quick_toggles/mini_led.ts @@ -0,0 +1,50 @@ +declare const imports: any; + +import { Platform } from "../dbus/platform"; + +const { GObject, Gio } = imports.gi; +const ExtensionUtils = imports.misc.extensionUtils; + +const { QuickToggle } = imports.ui.quickSettings; + +export const QuickMiniLed = GObject.registerClass( + class QuickMiniLed extends QuickToggle { + private _dbus_platform: Platform; + + constructor(dbus_platform: Platform) { + super({ + title: 'MiniLED', + iconName: 'selection-mode-symbolic', + toggleMode: true, + }); + this._dbus_platform = dbus_platform; + this.label = 'MiniLED'; + this._settings = ExtensionUtils.getSettings(); + + this.connectObject( + 'destroy', () => this._settings.run_dispose(), + 'clicked', () => this._toggleMode(), + this); + + this.connect('destroy', () => { + this.destroy(); + }); + + this._settings.bind('mini-led-enabled', + this, 'checked', + Gio.SettingsBindFlags.DEFAULT); + + this._sync(); + } + + _toggleMode() { + this._dbus_platform.setMiniLedMode(this.checked); + this._sync(); + } + + _sync() { + const checked = this._dbus_platform.getMiniLedMode(); + if (this.checked !== checked) + this.set({ checked }); + } + }); \ No newline at end of file diff --git a/desktop-extensions/gnome/src/modules/quick_toggles/panel_od.ts b/desktop-extensions/gnome/src/modules/quick_toggles/panel_od.ts new file mode 100644 index 00000000..6132f10d --- /dev/null +++ b/desktop-extensions/gnome/src/modules/quick_toggles/panel_od.ts @@ -0,0 +1,50 @@ +declare const imports: any; + +import { Platform } from "../dbus/platform"; + +const { GObject, Gio } = imports.gi; +const ExtensionUtils = imports.misc.extensionUtils; + +const { QuickToggle } = imports.ui.quickSettings; + +export const QuickPanelOd = GObject.registerClass( + class QuickPanelOd extends QuickToggle { + private _dbus_platform: Platform; + + constructor(dbus_platform: Platform) { + super({ + title: 'Panel Overdrive', + iconName: 'selection-mode-symbolic', + toggleMode: true, + }); + this._dbus_platform = dbus_platform; + this.label = 'Panel Overdrive'; + this._settings = ExtensionUtils.getSettings(); + + this.connectObject( + 'destroy', () => this._settings.run_dispose(), + 'clicked', () => this._toggleMode(), + this); + + this.connect('destroy', () => { + this.destroy(); + }); + + this._settings.bind('panel-od-enabled', + this, 'checked', + Gio.SettingsBindFlags.DEFAULT); + + this._sync(); + } + + _toggleMode() { + this._dbus_platform.setPanelOd(this.checked); + this._sync(); + } + + _sync() { + const checked = this._dbus_platform.getPanelOd(); + if (this.checked !== checked) + this.set({ checked }); + } + }); \ No newline at end of file