Panels: more reliable draggable toggling

This commit is contained in:
ItsLemmy
2025-09-23 14:42:55 -04:00
parent e9efab0d59
commit a2b57c5165
4 changed files with 25 additions and 18 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ NPanel {
panelKeyboardFocus: true
draggable: (PanelService.openedPopup === null)
draggable: !PanelService.hasOpenedPopup
// Tabs enumeration, order is NOT relevant
enum Tab {
+1 -1
View File
@@ -19,7 +19,7 @@ NPanel {
panelAnchorVerticalCenter: true
panelKeyboardFocus: true
draggable: (PanelService.openedPopup === null)
draggable: !PanelService.hasOpenedPopup
panelContent: Rectangle {
id: wallpaperPanel
+19 -12
View File
@@ -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()
}
}
+4 -4
View File
@@ -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()