quickshell: column merge is geometric — detaching panels release the frame border

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-06-12 08:58:49 +01:00
parent 0632777245
commit 8413ac293e

View file

@ -518,7 +518,7 @@ in
// dropdown's bottom curve and follows the morph. // dropdown's bottom curve and follows the morph.
Rectangle { Rectangle {
x: bar.width - Theme.frameWidth - Theme.borderWidth / 2 x: bar.width - Theme.frameWidth - Theme.borderWidth / 2
y: chrome.visible && chrome.flushRight ? 30 + chrome.height + 8 : 38 y: chrome.mergedRight ? 30 + chrome.height + 8 : 38
width: Theme.borderWidth width: Theme.borderWidth
height: Math.max(0, bar.height - Theme.frameWidth - 8 - y) height: Math.max(0, bar.height - Theme.frameWidth - 8 - y)
color: Theme.base03 color: Theme.base03
@ -527,7 +527,7 @@ in
// Frame top-right inner corner hidden while a flush-right // Frame top-right inner corner hidden while a flush-right
// dropdown is merged into the column there. // dropdown is merged into the column there.
Shape { Shape {
visible: !(chrome.visible && chrome.flushRight) visible: !chrome.mergedRight
preferredRendererType: Shape.CurveRenderer preferredRendererType: Shape.CurveRenderer
ShapePath { ShapePath {
fillColor: "transparent" fillColor: "transparent"
@ -1291,6 +1291,12 @@ in
property real openH: bar.activeDropdown ? tH : 0 property real openH: bar.activeDropdown ? tH : 0
property bool snap: false property bool snap: false
readonly property real stubW: 32 readonly property real stubW: 32
// True only while the panel's right edge actually touches
// the frame column the flush shape and the column-border
// gap key off this, so a detaching (shrinking) panel
// releases the column instead of dragging its border.
readonly property bool mergedRight: visible && flushRight
&& x + width >= bar.width - Theme.frameWidth - 0.5
// Grow-from / shrink-to the widget that owns the dropdown: // Grow-from / shrink-to the widget that owns the dropdown:
// the panel opens as a small stub on the button and // the panel opens as a small stub on the button and
@ -1354,12 +1360,12 @@ in
} }
PanelShape { PanelShape {
visible: !chrome.flushRight visible: !chrome.mergedRight
width: chrome.width width: chrome.width
height: chrome.height height: chrome.height
} }
PanelShapeFlush { PanelShapeFlush {
visible: chrome.flushRight visible: chrome.mergedRight
width: chrome.width width: chrome.width
height: chrome.height height: chrome.height
} }