diff --git a/Modules/SettingsPanel/Bar/BarSectionEditor.qml b/Modules/SettingsPanel/Bar/BarSectionEditor.qml index 6eb745d..bdadc28 100644 --- a/Modules/SettingsPanel/Bar/BarSectionEditor.qml +++ b/Modules/SettingsPanel/Bar/BarSectionEditor.qml @@ -18,9 +18,11 @@ NBox { signal removeWidget(string section, int index) signal reorderWidget(string section, int fromIndex, int toIndex) signal updateWidgetSettings(string section, int index, var settings) - signal dragStarted - signal dragEnded + signal dragPotentialStarted + // Emitted when a widget is pressed (potential drag start) + signal dragPotentialEnded + // Emitted when interaction ends (drag or click) color: Color.mSurface Layout.fillWidth: true Layout.minimumHeight: { @@ -308,6 +310,7 @@ NBox { property point startPos: Qt.point(0, 0) property bool dragStarted: false + property bool potentialDrag: false // Track if we're in a potential drag interaction property int draggedIndex: -1 property real dragThreshold: 15 * scaling property Item draggedWidget: null @@ -406,6 +409,7 @@ NBox { onPressed: mouse => { startPos = Qt.point(mouse.x, mouse.y) dragStarted = false + potentialDrag = false draggedIndex = -1 draggedWidget = null dropTargetIndex = -1 @@ -422,12 +426,18 @@ NBox { const buttonsStartX = widget.width - (widget.buttonsCount * widget.buttonsWidth) if (localX < buttonsStartX) { + // This is a draggable area - prevent panel close immediately draggedIndex = widget.widgetIndex draggedWidget = widget draggedModelData = widget.modelData + potentialDrag = true preventStealing = true + + // Signal that interaction started (prevents panel close) + root.dragPotentialStarted() break } else { + // This is a button area - let the click through mouse.accepted = false return } @@ -437,7 +447,7 @@ NBox { } onPositionChanged: mouse => { - if (draggedIndex !== -1) { + if (draggedIndex !== -1 && potentialDrag) { const deltaX = mouse.x - startPos.x const deltaY = mouse.y - startPos.y const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY) @@ -445,9 +455,6 @@ NBox { if (!dragStarted && distance > dragThreshold) { dragStarted = true - // Emit signal when drag starts - root.dragStarted() - // Setup ghost widget if (draggedWidget) { dragGhost.width = draggedWidget.width @@ -473,13 +480,14 @@ NBox { reorderWidget(sectionId, draggedIndex, dropTargetIndex) } - // Emit signal when drag ends (only if it was actually started) - if (dragStarted) { - root.dragEnded() + // Always signal end of interaction if we started one + if (potentialDrag) { + root.dragPotentialEnded() } // Reset everything dragStarted = false + potentialDrag = false draggedIndex = -1 draggedWidget = null dropTargetIndex = -1 @@ -500,12 +508,13 @@ NBox { onCanceled: { // Handle cancel (e.g., ESC key pressed during drag) - if (dragStarted) { - root.dragEnded() + if (potentialDrag) { + root.dragPotentialEnded() } // Reset everything dragStarted = false + potentialDrag = false draggedIndex = -1 draggedWidget = null dropTargetIndex = -1 diff --git a/Modules/SettingsPanel/Tabs/BarTab.qml b/Modules/SettingsPanel/Tabs/BarTab.qml index 4b5ffdc..864bc0a 100644 --- a/Modules/SettingsPanel/Tabs/BarTab.qml +++ b/Modules/SettingsPanel/Tabs/BarTab.qml @@ -132,8 +132,8 @@ ColumnLayout { onRemoveWidget: (section, index) => _removeWidgetFromSection(section, index) onReorderWidget: (section, fromIndex, toIndex) => _reorderWidgetInSection(section, fromIndex, toIndex) onUpdateWidgetSettings: (section, index, settings) => _updateWidgetSettingsInSection(section, index, settings) - onDragStarted: root.handleDragStart() - onDragEnded: root.handleDragEnd() + onDragPotentialStarted: root.handleDragStart() + onDragPotentialEnded: root.handleDragEnd() } // Center Section @@ -146,8 +146,8 @@ ColumnLayout { onRemoveWidget: (section, index) => _removeWidgetFromSection(section, index) onReorderWidget: (section, fromIndex, toIndex) => _reorderWidgetInSection(section, fromIndex, toIndex) onUpdateWidgetSettings: (section, index, settings) => _updateWidgetSettingsInSection(section, index, settings) - onDragStarted: root.handleDragStart() - onDragEnded: root.handleDragEnd() + onDragPotentialStarted: root.handleDragStart() + onDragPotentialEnded: root.handleDragEnd() } // Right Section @@ -160,8 +160,8 @@ ColumnLayout { onRemoveWidget: (section, index) => _removeWidgetFromSection(section, index) onReorderWidget: (section, fromIndex, toIndex) => _reorderWidgetInSection(section, fromIndex, toIndex) onUpdateWidgetSettings: (section, index, settings) => _updateWidgetSettingsInSection(section, index, settings) - onDragStarted: root.handleDragStart() - onDragEnded: root.handleDragEnd() + onDragPotentialStarted: root.handleDragStart() + onDragPotentialEnded: root.handleDragEnd() } } }