Skip to content

Commit bf4585a

Browse files
committed
Refine fashion dock 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 47f1d35 commit bf4585a

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)