From 3546f5bd2127fa4673b440d74b47c190b789e565 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Sun, 2 Jul 2023 21:09:17 +1200 Subject: [PATCH] gex: add toggle for anime powersave anim --- asusd/src/ctrl_anime/trait_impls.rs | 3 +- .../gnome/src/modules/dbus/animatrix.ts | 17 ++++ .../gnome/src/modules/menu_toggles/anime.ts | 82 +++++++++++++++++++ .../src/modules/menu_toggles/anime_power.ts | 43 ---------- .../gnome/src/modules/quickmenu.ts | 21 +++-- 5 files changed, 115 insertions(+), 51 deletions(-) create mode 100644 desktop-extensions/gnome/src/modules/menu_toggles/anime.ts delete mode 100644 desktop-extensions/gnome/src/modules/menu_toggles/anime_power.ts diff --git a/asusd/src/ctrl_anime/trait_impls.rs b/asusd/src/ctrl_anime/trait_impls.rs index b52d6e30..82cecb30 100644 --- a/asusd/src/ctrl_anime/trait_impls.rs +++ b/asusd/src/ctrl_anime/trait_impls.rs @@ -88,7 +88,8 @@ impl CtrlAnimeZbus { .ok(); } - /// Enable the builtin animations or not + /// Enable the builtin animations or not. This is quivalent to "Powersave + /// animations" in Armory crate async fn set_builtins_enabled( &self, #[zbus(signal_context)] ctxt: SignalContext<'_>, diff --git a/desktop-extensions/gnome/src/modules/dbus/animatrix.ts b/desktop-extensions/gnome/src/modules/dbus/animatrix.ts index 74002999..b7bc6e3e 100644 --- a/desktop-extensions/gnome/src/modules/dbus/animatrix.ts +++ b/desktop-extensions/gnome/src/modules/dbus/animatrix.ts @@ -38,6 +38,23 @@ export class AnimeDbus extends DbusBase { } } + public setPowersaveAnim(state: boolean | null) { + if (this.isRunning()) { + try { + // if null, toggle the current state + state = (state == null ? !this.deviceState.builtin_anims_enabled : state); + + if (this.deviceState.builtin_anims_enabled !== state) { + this.deviceState.builtin_anims_enabled = state; + } + return this.dbus_proxy.SetEnableBuiltinsSync(state); + } catch (e) { + //@ts-ignore + log("AniMe DBus set builtins failed!", e); + } + } + } + public setBrightness(brightness: Brightness) { if (this.isRunning()) { try { diff --git a/desktop-extensions/gnome/src/modules/menu_toggles/anime.ts b/desktop-extensions/gnome/src/modules/menu_toggles/anime.ts new file mode 100644 index 00000000..6aa04577 --- /dev/null +++ b/desktop-extensions/gnome/src/modules/menu_toggles/anime.ts @@ -0,0 +1,82 @@ +declare const imports: any; + +import { AnimeDbus } from "../dbus/animatrix"; + +const { GObject } = imports.gi; +const ExtensionUtils = imports.misc.extensionUtils; +const PopupMenu = imports.ui.popupMenu; + +export const MenuToggleAnimePower = GObject.registerClass( + class MenuToggleAnimePower extends PopupMenu.PopupSwitchMenuItem { + private _dbus_anime: AnimeDbus; + + constructor(dbus_anime: AnimeDbus) { + super( + "AniMatrix Display Power", dbus_anime.deviceState.display_enabled + ); + this._dbus_anime = dbus_anime; + this.label = "AniMatrix Display Power"; + this._settings = ExtensionUtils.getSettings(); + + this.connectObject( + "destroy", () => this._settings.run_dispose(), + "toggled", () => this._toggleMode(), + this); + + this.connect("destroy", () => { + this.destroy(); + }); + + this.sync(); + } + + _toggleMode() { + this._dbus_anime.getDeviceState(); + if (this.state !== this._dbus_anime.deviceState.display_enabled) + this._dbus_anime.setEnableDisplay(this.state); + } + + sync() { + this._dbus_anime.getDeviceState(); + const checked = this._dbus_anime.deviceState.display_enabled; + this.setToggleState(checked); + } + }); + + +export const MenuToggleAnimeBuiltins = GObject.registerClass( + class MenuToggleAnimeBuiltins extends PopupMenu.PopupSwitchMenuItem { + private _dbus_anime: AnimeDbus; + + constructor(dbus_anime: AnimeDbus) { + super( + "AniMatrix Powersave Animation", dbus_anime.deviceState.builtin_anims_enabled + ); + this._dbus_anime = dbus_anime; + this.label = "AniMatrix Powersave Animation"; + this._settings = ExtensionUtils.getSettings(); + + this.connectObject( + "destroy", () => this._settings.run_dispose(), + "toggled", () => this._toggleMode(), + this); + + this.connect("destroy", () => { + this.destroy(); + }); + + this.sync(); + } + + _toggleMode() { + this._dbus_anime.getDeviceState(); + if (this.state !== this._dbus_anime.deviceState.builtin_anims_enabled) + this._dbus_anime.setPowersaveAnim(this.state); + } + + sync() { + this._dbus_anime.getDeviceState(); + const checked = this._dbus_anime.deviceState.display_enabled; + this.setToggleState(checked); + } + }); \ No newline at end of file diff --git a/desktop-extensions/gnome/src/modules/menu_toggles/anime_power.ts b/desktop-extensions/gnome/src/modules/menu_toggles/anime_power.ts deleted file mode 100644 index 35de73b6..00000000 --- a/desktop-extensions/gnome/src/modules/menu_toggles/anime_power.ts +++ /dev/null @@ -1,43 +0,0 @@ -declare const imports: any; - -import { AnimeDbus } from "../dbus/animatrix"; - -const { GObject, Gio } = imports.gi; -const ExtensionUtils = imports.misc.extensionUtils; -const PopupMenu = imports.ui.popupMenu; - -export const MenuToggleAnimePower = GObject.registerClass( - class MenuToggleAnimePower extends PopupMenu.PopupSwitchMenuItem { - private _dbus_anime: AnimeDbus; - - constructor(dbus_anime: AnimeDbus) { - super( - "AniMatrix Power", dbus_anime.deviceState.display_enabled - ); - this._dbus_anime = dbus_anime; - this.label = "AniMatrix Power"; - this._settings = ExtensionUtils.getSettings(); - - this.connectObject( - "destroy", () => this._settings.run_dispose(), - "toggled", () => this._toggleMode(), - this); - - this.connect("destroy", () => { - this.destroy(); - }); - - this.sync(); - } - - _toggleMode() { - if (this.state !== this._dbus_anime.getDeviceState()) - this._dbus_anime.setEnableDisplay(this.state); - } - - sync() { - this._dbus_anime.getDeviceState(); - const checked = this._dbus_anime.deviceState.display_enabled; - this.setToggleState(checked); - } - }); \ No newline at end of file diff --git a/desktop-extensions/gnome/src/modules/quickmenu.ts b/desktop-extensions/gnome/src/modules/quickmenu.ts index 5be7b10e..b38c7217 100644 --- a/desktop-extensions/gnome/src/modules/quickmenu.ts +++ b/desktop-extensions/gnome/src/modules/quickmenu.ts @@ -6,7 +6,7 @@ import { Supported } from "./dbus/supported"; import { Platform } from "./dbus/platform"; import { addQuickSettingsItems } from "./helpers"; -import { MenuToggleAnimePower } from "./menu_toggles/anime_power"; +import { MenuToggleAnimeBuiltins, MenuToggleAnimePower } from "./menu_toggles/anime"; import { MenuTogglePanelOd } from "./menu_toggles/panel_od"; import { MenuToggleMiniLed } from "./menu_toggles/mini_led"; @@ -28,7 +28,8 @@ export const FeatureMenuToggle = GObject.registerClass( public miniLed: typeof MenuToggleMiniLed; public panelOd: typeof MenuTogglePanelOd; - public animePower: typeof MenuToggleAnimePower; + public animeDisplayPower: typeof MenuToggleAnimePower; + public animePowersaveAnim: typeof MenuToggleAnimeBuiltins; private primary = "mini-led"; constructor(dbus_supported: Supported, dbus_platform: Platform, dbus_anime: AnimeDbus) { @@ -111,14 +112,14 @@ export const FeatureMenuToggle = GObject.registerClass( } if (this._dbus_supported.supported.anime_ctrl) { - if (this.animePower == null) { - this.animePower = new MenuToggleAnimePower(this._dbus_anime); - this._dbus_anime.notifyAnimeStateSubscribers.push(this.animePower); - this._itemsSection.addMenuItem(this.animePower); + if (this.animeDisplayPower == null) { + this.animeDisplayPower = new MenuToggleAnimePower(this._dbus_anime); + this._dbus_anime.notifyAnimeStateSubscribers.push(this.animeDisplayPower); + this._itemsSection.addMenuItem(this.animeDisplayPower); if (this.primary == "anime-power") { // Set the togglemenu title and action - this.title = this.animePower.label; + this.title = this.animeDisplayPower.label; this.connectObject( "clicked", () => { @@ -132,6 +133,12 @@ export const FeatureMenuToggle = GObject.registerClass( this._dbus_anime.notifyAnimeStateSubscribers.push(this); } } + + if (this.animePowersaveAnim == null) { + this.animePowersaveAnim = new MenuToggleAnimeBuiltins(this._dbus_anime); + this._dbus_anime.notifyAnimeStateSubscribers.push(this.animePowersaveAnim); + this._itemsSection.addMenuItem(this.animePowersaveAnim); + } } this.menu.addMenuItem(this._itemsSection);