diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml index 5fbef04b5..10b866007 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml @@ -1,23 +1,23 @@ import qs.modules.common.widgets import qs +import qs.services +import QtQuick import Quickshell.Io import Quickshell import Quickshell.Hyprland QuickToggleButton { id: root - toggled: false - visible: false + toggled: EasyEffects.active + visible: EasyEffects.available buttonIcon: "instant_mix" + Component.onCompleted: { + EasyEffects.fetchActiveState() + } + onClicked: { - if (toggled) { - root.toggled = false - Quickshell.execDetached(["pkill", "easyeffects"]) - } else { - root.toggled = true - Quickshell.execDetached(["easyeffects", "--gapplication-service"]) - } + EasyEffects.toggle() } altAction: () => { @@ -25,24 +25,6 @@ QuickToggleButton { GlobalStates.sidebarRightOpen = false } - Process { - id: fetchAvailability - running: true - command: ["bash", "-c", "command -v easyeffects"] - onExited: (exitCode, exitStatus) => { - root.visible = exitCode === 0 - } - } - - Process { - id: fetchActiveState - running: true - command: ["pidof", "easyeffects"] - onExited: (exitCode, exitStatus) => { - root.toggled = exitCode === 0 - } - } - StyledToolTip { content: Translation.tr("EasyEffects | Right-click to configure") } diff --git a/.config/quickshell/ii/services/EasyEffects.qml b/.config/quickshell/ii/services/EasyEffects.qml new file mode 100644 index 000000000..8767a9d4e --- /dev/null +++ b/.config/quickshell/ii/services/EasyEffects.qml @@ -0,0 +1,61 @@ +import qs.modules.common +import QtQuick +import Quickshell +import Quickshell.Io +import Quickshell.Services.Pipewire +pragma Singleton +pragma ComponentBehavior: Bound + +/** + * Handles EasyEffects active state and presets. + */ +Singleton { + id: root + + property bool available: false + property bool active: false + + function fetchAvailability() { + fetchAvailabilityProc.running = true + } + + function fetchActiveState() { + fetchActiveStateProc.running = true + } + + function disable() { + root.active = false + Quickshell.execDetached(["pkill", "easyeffects"]) + } + + function enable() { + root.active = true + Quickshell.execDetached(["easyeffects", "--gapplication-service"]) + } + + function toggle() { + if (root.active) { + root.disable() + } else { + root.enable() + } + } + + Process { + id: fetchAvailabilityProc + running: true + command: ["bash", "-c", "command -v easyeffects"] + onExited: (exitCode, exitStatus) => { + root.available = exitCode === 0 + } + } + + Process { + id: fetchActiveStateProc + running: true + command: ["pidof", "easyeffects"] + onExited: (exitCode, exitStatus) => { + root.active = exitCode === 0 + } + } +}