From a2b57c516513cd6e9c34d3247308805de4063062 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Tue, 23 Sep 2025 14:42:55 -0400 Subject: [PATCH] Panels: more reliable draggable toggling --- Modules/Settings/SettingsPanel.qml | 2 +- Modules/Wallpaper/WallpaperPanel.qml | 2 +- Services/PanelService.qml | 31 +++++++++++++++++----------- Widgets/NFilePicker.qml | 8 +++---- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Modules/Settings/SettingsPanel.qml b/Modules/Settings/SettingsPanel.qml index c60762d83..418f4223d 100644 --- a/Modules/Settings/SettingsPanel.qml +++ b/Modules/Settings/SettingsPanel.qml @@ -21,7 +21,7 @@ NPanel { panelKeyboardFocus: true - draggable: (PanelService.openedPopup === null) + draggable: !PanelService.hasOpenedPopup // Tabs enumeration, order is NOT relevant enum Tab { diff --git a/Modules/Wallpaper/WallpaperPanel.qml b/Modules/Wallpaper/WallpaperPanel.qml index 4828df146..7c0bad581 100644 --- a/Modules/Wallpaper/WallpaperPanel.qml +++ b/Modules/Wallpaper/WallpaperPanel.qml @@ -19,7 +19,7 @@ NPanel { panelAnchorVerticalCenter: true panelKeyboardFocus: true - draggable: (PanelService.openedPopup === null) + draggable: !PanelService.hasOpenedPopup panelContent: Rectangle { id: wallpaperPanel diff --git a/Services/PanelService.qml b/Services/PanelService.qml index caefab3b8..5d33aeb79 100644 --- a/Services/PanelService.qml +++ b/Services/PanelService.qml @@ -10,18 +10,19 @@ Singleton { // This is not a panel... property var lockScreen: null - // Currently opened panel - property var openedPanel: null - readonly property bool hasOpenedPanel: (openedPanel !== null) - - // Currently opened popup - property var openedPopup: null - + // Panels property var registeredPanels: ({}) - + property var openedPanel: null + property bool hasOpenedPanel: false signal willOpen signal willClose + // Currently opened popups, can have more than one. + // ex: when opening an NIconPicker from a widget setting. + property var openedPopups: [] + property bool hasOpenedPopup: false + signal popupChanged + // Register this panel function registerPanel(panel) { registeredPanels[panel.objectName] = panel @@ -44,12 +45,15 @@ Singleton { openedPanel.close() } openedPanel = panel + hasOpenedPanel = true // emit signal willOpen() } function willClosePanel(panel) { + hasOpenedPanel = false + // emit signal willClose() } @@ -62,11 +66,14 @@ Singleton { // Popups function willOpenPopup(popup) { - openedPopup = popup + openedPopups.push(popup) + hasOpenedPopup = (openedPopups.length !== 0) + popupChanged() } + function willClosePopup(popup) { - if (openedPopup && openedPopup === popup) { - openedPopup = null - } + openedPopups = openedPopups.filter(p => p !== popup) + hasOpenedPopup = (openedPopups.length !== 0) + popupChanged() } } diff --git a/Widgets/NFilePicker.qml b/Widgets/NFilePicker.qml index 2f701b21d..f5fb23368 100644 --- a/Widgets/NFilePicker.qml +++ b/Widgets/NFilePicker.qml @@ -37,8 +37,8 @@ Item { PanelService.openedPanel.isMasked = true } - if (PanelService.openedPopup !== null) { - PanelService.openedPopup.isMasked = true + for (var i = 0; i < PanelService.openedPopups.length; i++) { + PanelService.openedPopups[i].isMasked = true } isOpen = true @@ -70,8 +70,8 @@ Item { PanelService.openedPanel.isMasked = false } - if (PanelService.openedPopup !== null) { - PanelService.openedPopup.isMasked = false + for (var i = 0; i < PanelService.openedPopups.length; i++) { + PanelService.openedPopups[i].isMasked = false } afterClose()