Skip to content

Commit 1a74c88

Browse files
committed
fix(dock): refine overflow sizing and tray spacing
Refine overflow sizing in the fashion dock task area. Adjust tray spacing so the final layout remains stable.
1 parent d712157 commit 1a74c88

3 files changed

Lines changed: 179 additions & 44 deletions

File tree

panels/dock/package/main.qml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ Window {
7575
readonly property real adaptiveFashionGridDisplayedWidth: adaptiveFashionMode
7676
? dock.ceilToPhysicalPixel(gridLayout.implicitWidth)
7777
: 0
78+
readonly property real adaptiveFashionGridTargetWidth: adaptiveFashionMode
79+
? dock.ceilToPhysicalPixel(Math.max(0,
80+
gridLayout.implicitWidth
81+
- dockCenterPart.implicitWidth
82+
+ dockCenterPart.targetImplicitWidth))
83+
: 0
7884
readonly property real adaptiveFashionGridDisplayedHeight: adaptiveFashionMode
7985
? dock.ceilToPhysicalPixel(gridLayout.implicitHeight)
8086
: 0
@@ -116,7 +122,7 @@ Window {
116122
return 0
117123
}
118124

119-
let width = adaptiveFashionGridDisplayedWidth
125+
let width = adaptiveFashionGridTargetWidth
120126
if (dockRightPart.visible) {
121127
const rightWidth = dockRightPart.targetImplicitWidth
122128
if (rightWidth > 0) {
@@ -1407,10 +1413,13 @@ Window {
14071413
readonly property real taskmanagerImplicitHeight: taskmanagerRootObject ? taskmanagerRootObject.implicitHeight : 0
14081414
readonly property real taskmanagerAppContainerWidth: taskmanagerRootObject ? taskmanagerRootObject.appContainerWidth : 0
14091415
readonly property real taskmanagerAppContainerHeight: taskmanagerRootObject ? taskmanagerRootObject.appContainerHeight : 0
1410-
1411-
readonly property real targetImplicitWidth: implicitWidth
1416+
readonly property real taskmanagerAppContainerTargetWidth: taskmanagerRootObject ? taskmanagerRootObject.appContainerTargetWidth : 0
1417+
readonly property real taskmanagerAppContainerTargetHeight: taskmanagerRootObject ? taskmanagerRootObject.appContainerTargetHeight : 0
1418+
1419+
readonly property real targetImplicitWidth: centerLoader.targetImplicitWidth - taskmanagerImplicitWidth + taskmanagerAppContainerTargetWidth
14121420
readonly property real displayedImplicitWidth: implicitWidth
14131421
implicitWidth: centerLoader.implicitWidth - taskmanagerImplicitWidth + taskmanagerAppContainerWidth
1422+
readonly property real targetImplicitHeight: centerLoader.targetImplicitHeight - taskmanagerImplicitHeight + taskmanagerAppContainerTargetHeight
14141423
implicitHeight: centerLoader.implicitHeight - taskmanagerImplicitHeight + taskmanagerAppContainerHeight
14151424
onXChanged: dockCenterPartPosChanged()
14161425
onYChanged: dockCenterPartPosChanged()
@@ -1488,7 +1497,10 @@ Window {
14881497
Item {
14891498
id: dockRightPart
14901499
visible: dockRightPartModel.count > 0
1491-
readonly property int trailingInset: dock.adaptiveFashionMode ? DDT.TrayItemPositionManager.itemPadding + 16 : 0
1500+
// Align the right edge gap with the fashion mode's vertical inset.
1501+
// Keep it within the requested range of [vertical, vertical + 2]
1502+
// by using a centered +1px bias.
1503+
readonly property int trailingInset: dock.adaptiveFashionMode ? (dock.fashionVerticalPadding + 1) : 0
14921504
readonly property real rightContentTargetWidth: rightLoader.item
14931505
? (rightLoader.item.targetImplicitWidth !== undefined
14941506
? rightLoader.item.targetImplicitWidth

panels/dock/taskmanager/package/AppItem.qml

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Item {
6363
property int appTitleSpacing: 0
6464
property bool popupItem: root.itemKind === "group" || root.itemKind === "folder"
6565
readonly property bool resizeOptimizationActive: Panel.isResizing || (Panel.rootObject && Panel.rootObject.isDragging)
66+
readonly property bool dockPopupContext: Window.window && Panel.popupWindow && Window.window === Panel.popupWindow
6667
property bool deferredWindowIconGeometryUpdate: false
6768
property bool deferredPhysicalPixelFix: false
6869
property var iconGlobalPoint: {
@@ -79,9 +80,53 @@ Item {
7980

8081
implicitWidth: appItem.implicitWidth
8182

83+
function dockWindowGlobalPoint() {
84+
if (!Panel.rootObject) {
85+
return Qt.point(0, 0)
86+
}
87+
88+
return Qt.point(Panel.rootObject.x, Panel.rootObject.y)
89+
}
90+
91+
function mapPointToDockWindow(targetItem, localPoint) {
92+
const item = targetItem || appItem
93+
const point = localPoint || Qt.point(item.width / 2, item.height / 2)
94+
95+
if (!item) {
96+
return Qt.point(0, 0)
97+
}
98+
99+
if (!dockPopupContext) {
100+
return item.mapToItem(null, point.x, point.y)
101+
}
102+
103+
const globalPoint = item.mapToGlobal(point.x, point.y)
104+
const dockGlobalPoint = dockWindowGlobalPoint()
105+
return Qt.point(globalPoint.x - dockGlobalPoint.x, globalPoint.y - dockGlobalPoint.y)
106+
}
107+
108+
function dockRelativeRect(targetItem) {
109+
const item = targetItem || root
110+
const topLeft = mapPointToDockWindow(item, Qt.point(0, 0))
111+
return Qt.rect(topLeft.x, topLeft.y, item.width, item.height)
112+
}
113+
114+
function dockPopupRect() {
115+
if (!dockPopupContext || !Window.window || !Window.window.contentItem) {
116+
return dockRelativeRect(root)
117+
}
118+
119+
const popupTopLeftGlobal = Window.window.contentItem.mapToGlobal(0, 0)
120+
const dockGlobalPoint = dockWindowGlobalPoint()
121+
return Qt.rect(popupTopLeftGlobal.x - dockGlobalPoint.x,
122+
popupTopLeftGlobal.y - dockGlobalPoint.y,
123+
Window.window.contentItem.width,
124+
Window.window.contentItem.height)
125+
}
126+
82127
function mapSpotlightPoint(localPoint) {
83128
const point = localPoint || Qt.point(appItem.width / 2, appItem.height / 2)
84-
return appItem.mapToItem(null, point.x, point.y)
129+
return mapPointToDockWindow(appItem, point)
85130
}
86131

87132
function updateSpotlight(localPoint) {
@@ -108,7 +153,7 @@ Item {
108153
}
109154

110155
deferredWindowIconGeometryUpdate = false
111-
var pos = icon.mapToItem(null, 0, 0)
156+
var pos = mapPointToDockWindow(icon, Qt.point(0, 0))
112157
taskmanager.Applet.requestUpdateWindowIconGeometry(root.modelIndex,
113158
Qt.rect(pos.x, pos.y, icon.width, icon.height),
114159
Panel.rootObject)
@@ -785,7 +830,7 @@ Item {
785830
}
786831

787832
function showToolTipNow() {
788-
var point = root.mapToItem(null, root.width / 2, root.height / 2)
833+
var point = mapPointToDockWindow(root, Qt.point(root.width / 2, root.height / 2))
789834
toolTip.DockPanelPositioner.bounding = Qt.rect(point.x, point.y, toolTip.width, toolTip.height)
790835
toolTip.open()
791836
}
@@ -795,7 +840,9 @@ Item {
795840
Panel.rootObject,
796841
xOffset,
797842
yOffset,
798-
Panel.position)
843+
dockPopupContext
844+
? (Panel.position === Dock.Top ? Dock.Top : Dock.Bottom)
845+
: Panel.position)
799846
}
800847

801848
function onEntered() {
@@ -817,14 +864,24 @@ Item {
817864
return
818865
}
819866

820-
var itemPos = root.mapToItem(null, 0, 0)
867+
const itemRect = dockRelativeRect(root)
821868
let xOffset, yOffset, interval = 10
822-
if (Panel.position % 2 === 0) {
823-
xOffset = itemPos.x + (root.width / 2)
824-
yOffset = (Panel.position == 2 ? -interval : interval + Panel.dockSize)
869+
if (dockPopupContext) {
870+
const popupRect = dockPopupRect()
871+
xOffset = popupRect.x + popupRect.width / 2
872+
yOffset = Panel.position === Dock.Top
873+
? popupRect.y + popupRect.height + interval
874+
: popupRect.y - interval
875+
} else if (Panel.position % 2 === 0) {
876+
xOffset = itemRect.x + itemRect.width / 2
877+
yOffset = Panel.position === Dock.Bottom
878+
? itemRect.y - interval
879+
: itemRect.y + itemRect.height + interval
825880
} else {
826-
xOffset = (Panel.position == 1 ? -interval : interval + Panel.dockSize)
827-
yOffset = itemPos.y + (root.height / 2)
881+
xOffset = Panel.position === Dock.Left
882+
? itemRect.x + itemRect.width + interval
883+
: itemRect.x - interval
884+
yOffset = itemRect.y + itemRect.height / 2
828885
}
829886
if (root.windows.length > 0 && taskmanager.previewSwitchActive) {
830887
taskmanager.endPreviewSwitch()
@@ -985,7 +1042,7 @@ Item {
9851042
if (root.itemId === "dde-trash") {
9861043
dragToolTipCloseTimer.stop()
9871044
if (!dragToolTip.toolTipVisible) {
988-
var point = root.mapToItem(null, root.width / 2, root.height / 2)
1045+
var point = mapPointToDockWindow(root, Qt.point(root.width / 2, root.height / 2))
9891046
dragToolTip.DockPanelPositioner.bounding = Qt.rect(point.x, point.y, dragToolTip.width, dragToolTip.height)
9901047
dragToolTip.open()
9911048
}

0 commit comments

Comments
 (0)