diff --git a/.config/quickshell/ii/GlobalStates.qml b/.config/quickshell/ii/GlobalStates.qml index 6e57c9239..b3a124eb6 100644 --- a/.config/quickshell/ii/GlobalStates.qml +++ b/.config/quickshell/ii/GlobalStates.qml @@ -12,7 +12,12 @@ Singleton { property bool barOpen: true property bool sidebarLeftOpen: false property bool sidebarRightOpen: false + property bool mediaControlsOpen: false + property bool osdBrightnessOpen: false + property bool osdVolumeOpen: false + property bool oskOpen: false property bool overviewOpen: false + property bool sessionOpen: false property bool workspaceShowNumbers: false property bool superReleaseMightTrigger: true property bool screenLocked: false diff --git a/.config/quickshell/ii/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml index 173c61051..7fe8668e1 100644 --- a/.config/quickshell/ii/modules/bar/Bar.qml +++ b/.config/quickshell/ii/modules/bar/Bar.qml @@ -132,7 +132,7 @@ Scope { } onPressed: event => { if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarLeftOpen'); + GlobalStates.sidebarLeftOpen = !GlobalStates.sidebarLeftOpen; } } // Scroll to change brightness @@ -154,7 +154,7 @@ Scope { const dx = mouse.x - barLeftSideMouseArea.lastScrollX; const dy = mouse.y - barLeftSideMouseArea.lastScrollY; if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdBrightnessHide'); + GlobalStates.osdBrightnessOpen = false; barLeftSideMouseArea.trackingScroll = false; } } @@ -199,7 +199,7 @@ Scope { property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 onPressed: { - Hyprland.dispatch('global quickshell:sidebarLeftToggle'); + GlobalStates.sidebarLeftOpen = !GlobalStates.sidebarLeftOpen; } CustomIcon { @@ -265,7 +265,7 @@ Scope { onPressed: event => { if (event.button === Qt.RightButton) { - Hyprland.dispatch('global quickshell:overviewToggle'); + GlobalStates.overviewOpen = !GlobalStates.overviewOpen; } } } @@ -284,7 +284,7 @@ Scope { Layout.fillHeight: true onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle'); + GlobalStates.sidebarRightOpen = !GlobalStates.sidebarRightOpen; } BarGroup { @@ -339,7 +339,7 @@ Scope { } onPressed: event => { if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarRightOpen'); + GlobalStates.sidebarRightOpen = !GlobalStates.sidebarRightOpen; } else if (event.button === Qt.RightButton) { MprisController.activePlayer.next(); } @@ -365,7 +365,7 @@ Scope { const dx = mouse.x - barRightSideMouseArea.lastScrollX; const dy = mouse.y - barRightSideMouseArea.lastScrollY; if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdVolumeHide'); + GlobalStates.osdVolumeOpen = false; barRightSideMouseArea.trackingScroll = false; } } @@ -416,7 +416,7 @@ Scope { } onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle'); + GlobalStates.sidebarRightOpen = !GlobalStates.sidebarRightOpen; } RowLayout { diff --git a/.config/quickshell/ii/modules/bar/Media.qml b/.config/quickshell/ii/modules/bar/Media.qml index 08e9b92d1..f3e70a803 100644 --- a/.config/quickshell/ii/modules/bar/Media.qml +++ b/.config/quickshell/ii/modules/bar/Media.qml @@ -37,7 +37,7 @@ Item { } else if (event.button === Qt.ForwardButton || event.button === Qt.RightButton) { activePlayer.next(); } else if (event.button === Qt.LeftButton) { - Hyprland.dispatch("global quickshell:mediaControlsToggle") + GlobalStates.mediaControlsOpen = !GlobalStates.mediaControlsOpen } } } diff --git a/.config/quickshell/ii/modules/bar/UtilButtons.qml b/.config/quickshell/ii/modules/bar/UtilButtons.qml index 55cad80e6..a9ecbb5a4 100644 --- a/.config/quickshell/ii/modules/bar/UtilButtons.qml +++ b/.config/quickshell/ii/modules/bar/UtilButtons.qml @@ -1,3 +1,4 @@ +import qs import qs.modules.common import qs.modules.common.widgets import QtQuick @@ -56,7 +57,7 @@ Item { visible: Config.options.bar.utilButtons.showKeyboardToggle sourceComponent: CircleUtilButton { Layout.alignment: Qt.AlignVCenter - onClicked: Hyprland.dispatch("global quickshell:oskToggle") + onClicked: GlobalStates.oskOpen = !GlobalStates.oskOpen MaterialSymbol { horizontalAlignment: Qt.AlignHCenter fill: 0 diff --git a/.config/quickshell/ii/modules/common/widgets/NotificationItem.qml b/.config/quickshell/ii/modules/common/widgets/NotificationItem.qml index f7d30833d..d5e9c4fa6 100644 --- a/.config/quickshell/ii/modules/common/widgets/NotificationItem.qml +++ b/.config/quickshell/ii/modules/common/widgets/NotificationItem.qml @@ -214,7 +214,7 @@ Item { // Notification item area onLinkActivated: (link) => { Qt.openUrlExternally(link) - Hyprland.dispatch("global quickshell:sidebarRightClose") + GlobalStates.sidebarRightOpen = false } PointingHandLinkHover {} diff --git a/.config/quickshell/ii/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml index 82d1ffba1..b4237e524 100644 --- a/.config/quickshell/ii/modules/dock/Dock.qml +++ b/.config/quickshell/ii/modules/dock/Dock.qml @@ -129,7 +129,7 @@ Scope { // Scope DockSeparator {} DockButton { Layout.fillHeight: true - onClicked: Hyprland.dispatch("global quickshell:overviewToggle") + onClicked: GlobalStates.overviewOpen = !GlobalStates.overviewOpen contentItem: MaterialSymbol { anchors.fill: parent horizontalAlignment: Text.AlignHCenter diff --git a/.config/quickshell/ii/modules/mediaControls/MediaControls.qml b/.config/quickshell/ii/modules/mediaControls/MediaControls.qml index 67c1fe0ad..0d0180d52 100644 --- a/.config/quickshell/ii/modules/mediaControls/MediaControls.qml +++ b/.config/quickshell/ii/modules/mediaControls/MediaControls.qml @@ -88,7 +88,12 @@ Scope { Loader { id: mediaControlsLoader - active: false + active: GlobalStates.mediaControlsOpen + onActiveChanged: { + if (!mediaControlsLoader.active && Mpris.players.values.filter(player => isRealPlayer(player)).length === 0) { + GlobalStates.mediaControlsOpen = false; + } + } sourceComponent: PanelWindow { id: mediaControlsRoot @@ -160,11 +165,7 @@ Scope { description: "Toggles media controls on press" onPressed: { - if (!mediaControlsLoader.active && Mpris.players.values.filter(player => isRealPlayer(player)).length === 0) { - return; - } - mediaControlsLoader.active = !mediaControlsLoader.active; - if(mediaControlsLoader.active) Notifications.timeoutAll(); + GlobalStates.mediaControlsOpen = !GlobalStates.mediaControlsOpen; } } GlobalShortcut { @@ -172,8 +173,7 @@ Scope { description: "Opens media controls on press" onPressed: { - mediaControlsLoader.active = true; - Notifications.timeoutAll(); + GlobalStates.mediaControlsOpen = true; } } GlobalShortcut { @@ -181,7 +181,7 @@ Scope { description: "Closes media controls on press" onPressed: { - mediaControlsLoader.active = false; + GlobalStates.mediaControlsOpen = false; } } diff --git a/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml index c4edfded1..572963c79 100644 --- a/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml +++ b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml @@ -12,12 +12,11 @@ import Quickshell.Wayland Scope { id: root - property bool showOsdValues: false property var focusedScreen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) property var brightnessMonitor: Brightness.getMonitorForScreen(focusedScreen) function triggerOsd() { - showOsdValues = true + GlobalStates.osdBrightnessOpen = true osdTimeout.restart() } @@ -27,7 +26,7 @@ Scope { repeat: false running: false onTriggered: { - showOsdValues = false + GlobalStates.osdBrightnessOpen = false } } @@ -35,7 +34,7 @@ Scope { target: Audio.sink?.audio ?? null function onVolumeChanged() { if (!Audio.ready) return - root.showOsdValues = false + GlobalStates.osdBrightnessOpen = false } } @@ -49,7 +48,7 @@ Scope { Loader { id: osdLoader - active: showOsdValues + active: GlobalStates.osdBrightnessOpen sourceComponent: PanelWindow { id: osdRoot @@ -91,7 +90,7 @@ Scope { MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: root.showOsdValues = false + onEntered: GlobalStates.osdBrightnessOpen = false } Behavior on implicitHeight { @@ -125,11 +124,11 @@ Scope { } function hide() { - showOsdValues = false + GlobalStates.osdBrightnessOpen = false } function toggle() { - showOsdValues = !showOsdValues + GlobalStates.osdBrightnessOpen = !GlobalStates.osdBrightnessOpen } } @@ -146,7 +145,7 @@ Scope { description: "Hides brightness OSD on press" onPressed: { - root.showOsdValues = false + GlobalStates.osdBrightnessOpen = false } } diff --git a/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml index 48970d2e9..6128cdfd2 100644 --- a/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml +++ b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml @@ -12,12 +12,11 @@ import Quickshell.Hyprland Scope { id: root - property bool showOsdValues: false property string protectionMessage: "" property var focusedScreen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) function triggerOsd() { - showOsdValues = true + GlobalStates.osdVolumeOpen = true osdTimeout.restart() } @@ -27,7 +26,7 @@ Scope { repeat: false running: false onTriggered: { - root.showOsdValues = false + GlobalStates.osdVolumeOpen = false root.protectionMessage = "" } } @@ -35,7 +34,7 @@ Scope { Connections { target: Brightness function onBrightnessChanged() { - showOsdValues = false + GlobalStates.osdVolumeOpen = false } } @@ -61,7 +60,7 @@ Scope { Loader { id: osdLoader - active: showOsdValues + active: GlobalStates.osdVolumeOpen sourceComponent: PanelWindow { id: osdRoot @@ -103,7 +102,7 @@ Scope { MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: root.showOsdValues = false + onEntered: GlobalStates.osdVolumeOpen = false } ColumnLayout { @@ -177,11 +176,11 @@ Scope { } function hide() { - showOsdValues = false + GlobalStates.osdVolumeOpen = false } function toggle() { - showOsdValues = !showOsdValues + GlobalStates.osdVolumeOpen = !GlobalStates.osdVolumeOpen } } GlobalShortcut { @@ -197,7 +196,7 @@ Scope { description: "Hides volume OSD on press" onPressed: { - root.showOsdValues = false + GlobalStates.osdVolumeOpen = false } } diff --git a/.config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml b/.config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml index 0913d0086..eae543cbf 100644 --- a/.config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml +++ b/.config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml @@ -24,7 +24,7 @@ Scope { // Scope Loader { id: oskLoader - active: false + active: GlobalStates.oskOpen onActiveChanged: { if (!oskLoader.active) { Ydotool.releaseAllKeys(); @@ -124,15 +124,15 @@ Scope { // Scope target: "osk" function toggle(): void { - oskLoader.active = !oskLoader.active + GlobalStates.oskOpen = !GlobalStates.oskOpen; } function close(): void { - oskLoader.active = false + GlobalStates.oskOpen = false } function open(): void { - oskLoader.active = true + GlobalStates.oskOpen = true } } @@ -141,7 +141,7 @@ Scope { // Scope description: "Toggles on screen keyboard on press" onPressed: { - oskLoader.active = !oskLoader.active; + GlobalStates.oskOpen = !GlobalStates.oskOpen; } } @@ -150,7 +150,7 @@ Scope { // Scope description: "Opens on screen keyboard on press" onPressed: { - oskLoader.active = true; + GlobalStates.oskOpen = true } } @@ -159,7 +159,7 @@ Scope { // Scope description: "Closes on screen keyboard on press" onPressed: { - oskLoader.active = false; + GlobalStates.oskOpen = false } } diff --git a/.config/quickshell/ii/modules/overview/SearchItem.qml b/.config/quickshell/ii/modules/overview/SearchItem.qml index 1fb23b277..921fc8b6d 100644 --- a/.config/quickshell/ii/modules/overview/SearchItem.qml +++ b/.config/quickshell/ii/modules/overview/SearchItem.qml @@ -90,7 +90,7 @@ RippleButton { onClicked: { root.itemExecute() - Hyprland.dispatch("global quickshell:overviewClose") + GlobalStates.overviewOpen = false } Keys.onPressed: (event) => { if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { diff --git a/.config/quickshell/ii/modules/session/Session.qml b/.config/quickshell/ii/modules/session/Session.qml index c573ebd0a..4a06fdfcb 100644 --- a/.config/quickshell/ii/modules/session/Session.qml +++ b/.config/quickshell/ii/modules/session/Session.qml @@ -73,7 +73,7 @@ Scope { Loader { id: sessionLoader - active: false + active: GlobalStates.sessionOpen onActiveChanged: { if (sessionLoader.active) root.detectRunningStuff(); } @@ -275,15 +275,15 @@ Scope { target: "session" function toggle(): void { - sessionLoader.active = !sessionLoader.active; + GlobalStates.sessionOpen = !GlobalStates.sessionOpen; } function close(): void { - sessionLoader.active = false; + GlobalStates.sessionOpen = false } function open(): void { - sessionLoader.active = true; + GlobalStates.sessionOpen = true } } @@ -292,7 +292,7 @@ Scope { description: "Toggles session screen on press" onPressed: { - sessionLoader.active = !sessionLoader.active; + GlobalStates.sessionOpen = !GlobalStates.sessionOpen; } } @@ -301,7 +301,16 @@ Scope { description: "Opens session screen on press" onPressed: { - sessionLoader.active = true; + GlobalStates.sessionOpen = true + } + } + + GlobalShortcut { + name: "sessionClose" + description: "Closes session screen on press" + + onPressed: { + GlobalStates.sessionOpen = false } } diff --git a/.config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml index 83288fdab..75687e43c 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml @@ -24,7 +24,7 @@ RippleButton { onClicked: { if (url) { Qt.openUrlExternally(url) - Hyprland.dispatch("global quickshell:sidebarLeftClose") + GlobalStates.sidebarLeftOpen = false } } diff --git a/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml index 4c3345001..d0d9d640d 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml @@ -128,7 +128,7 @@ ColumnLayout { onLinkActivated: (link) => { Qt.openUrlExternally(link) - Hyprland.dispatch("global quickshell:sidebarLeftClose") + GlobalStates.sidebarLeftOpen = false } MouseArea { // Pointing hand for links diff --git a/.config/quickshell/ii/modules/sidebarLeft/aiChat/SearchQueryButton.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/SearchQueryButton.qml index 554a3cf69..4ad60ac9c 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/aiChat/SearchQueryButton.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/aiChat/SearchQueryButton.qml @@ -1,3 +1,4 @@ +import qs import qs.modules.common import qs.modules.common.widgets import qs.services @@ -25,7 +26,7 @@ RippleButton { url += ` -site:${site}`; } Qt.openUrlExternally(url); - Hyprland.dispatch("global quickshell:sidebarLeftClose") + GlobalStates.sidebarLeftOpen = false; } contentItem: Item { diff --git a/.config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml b/.config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml index 904d0ab06..9e021e584 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml @@ -158,7 +158,7 @@ Rectangle { textFormat: Text.MarkdownText onLinkActivated: (link) => { Qt.openUrlExternally(link) - Hyprland.dispatch("global quickshell:sidebarLeftClose") + GlobalStates.sidebarLeftOpen = false } PointingHandLinkHover {} } diff --git a/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml b/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml index a96ba5769..48cb8ffb1 100644 --- a/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml +++ b/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml @@ -145,7 +145,7 @@ Scope { toggled: false buttonIcon: "settings" onClicked: { - Hyprland.dispatch("global quickshell:sidebarRightClose") + GlobalStates.sidebarRightOpen = false Quickshell.execDetached(["qs", "-p", root.settingsQmlPath]) } StyledToolTip { @@ -156,7 +156,7 @@ Scope { toggled: false buttonIcon: "power_settings_new" onClicked: { - Hyprland.dispatch("global quickshell:sessionOpen") + GlobalStates.sessionOpen = true } StyledToolTip { content: Translation.tr("Session") diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml index 883574374..5122bf0c2 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml @@ -16,7 +16,7 @@ QuickToggleButton { } altAction: () => { Quickshell.execDetached(["bash", "-c", `${Config.options.apps.bluetooth}`]) - Hyprland.dispatch("global quickshell:sidebarRightClose") + GlobalStates.sidebarRightOpen = false } Process { id: toggleBluetooth diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml index ebf847c76..5fbef04b5 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/EasyEffectsToggle.qml @@ -22,7 +22,7 @@ QuickToggleButton { altAction: () => { Quickshell.execDetached(["easyeffects"]) - Hyprland.dispatch("global quickshell:sidebarRightClose") + GlobalStates.sidebarRightOpen = false } Process { diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml index 3d4edf15b..7492eae48 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml @@ -17,7 +17,7 @@ QuickToggleButton { } altAction: () => { Quickshell.execDetached(["bash", "-c", `${Network.ethernet ? Config.options.apps.networkEthernet : Config.options.apps.network}`]) - Hyprland.dispatch("global quickshell:sidebarRightClose") + GlobalStates.sidebarRightOpen = false } Process { id: toggleNetwork diff --git a/.config/quickshell/ii/welcome.qml b/.config/quickshell/ii/welcome.qml index 07b16a83c..df9b0d447 100644 --- a/.config/quickshell/ii/welcome.qml +++ b/.config/quickshell/ii/welcome.qml @@ -265,7 +265,7 @@ ApplicationWindow { RippleButtonWithIcon { materialIcon: "keyboard_alt" onClicked: { - Hyprland.dispatch("global quickshell:cheatsheetOpen") + Quickshell.execDetached(["qs", "-p", Quickshell.shellPath(""), "ipc", "call", "cheatsheet", "toggle"]) } mainContentComponent: Component { RowLayout {