From b28a1c6822f15e582ca649b1dd238fdb0c85beca Mon Sep 17 00:00:00 2001 From: Robert Lv Date: Tue, 25 Jun 2024 19:30:16 +0800 Subject: [PATCH] feat: Implement the logic for displaying launchpad positions on multiple screens. Implement the logic for displaying launchpad positions on multiple screens. Log: --- qml/Main.qml | 80 +++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/qml/Main.qml b/qml/Main.qml index b3414a4d..b59dddc1 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -120,42 +120,13 @@ QtObject { function updateWindowVisibilityAndPosition() { if (!LauncherController.visible) return; - if (LauncherController.currentFrame === "WindowedFrame") { - // root.visibility = Window.Windowed - - let width = windowedFrameSize.width - let height = windowedFrameSize.height - let x = 0 - let y = 0 - - let dockGeometry = descaledRect(DesktopIntegration.dockGeometry) - let descaledWindowdPos = windowedPos - if (dockGeometry.width > 0 || dockGeometry.height > 0) { - let dockSpacing = DesktopIntegration.dockSpacing - switch (DesktopIntegration.dockPosition) { - case Qt.DownArrow: - var sidebarX = windowedFrameImpl.item.getHorizontalCoordinatesOfSideBar() - x = descaledWindowdPos.x > 0 ? descaledWindowdPos.x - sidebarX : dockGeometry.left + dockSpacing - y = (dockGeometry.top >= 0 ? dockGeometry.top : (Screen.height - dockGeometry.height)) - height - dockSpacing - break - case Qt.LeftArrow: - x = dockGeometry.right + dockSpacing - y = (dockGeometry.top >= 0 ? dockGeometry.top : 0) + dockSpacing - break - case Qt.UpArrow: - x = dockGeometry.left + dockSpacing - y = dockGeometry.bottom + dockSpacing - break - case Qt.RightArrow: - x = (dockGeometry.left >= 0 ? dockGeometry.left : (Screen.width - dockGeometry.width)) - width - dockSpacing - y = dockGeometry.top + dockSpacing - break - } - } else { - console.warn("Invalid dock geometry", dockGeometry) - } + var dock = DS.applet("org.deepin.ds.dock") + if (dock) { + windowedFrameWindow.screen = dock.rootObject.screen + fullscreenFrame.screen = dock.rootObject.screen + } - windowedFrame.setGeometry(x, y, width, height) + if (LauncherController.currentFrame === "WindowedFrame") { windowedFrame.requestActivate() } else { fullscreenFrame.requestActivate() @@ -190,6 +161,45 @@ QtObject { minimumHeight: height maximumHeight: height ColorSelector.family: Palette.CrystalColor + DLayerShellWindow.topMargin: { + if (Qt.UpArrow === DesktopIntegration.dockPosition) + return descaledRect(DesktopIntegration.dockGeometry).height + DesktopIntegration.dockSpacing + else if (Qt.RightArrow === DesktopIntegration.dockPosition || Qt.LeftArrow === DesktopIntegration.dockPosition) + return windowedPos.y + else + return 0 + } + DLayerShellWindow.rightMargin: { + if (Qt.RightArrow === DesktopIntegration.dockPosition) + return descaledRect(DesktopIntegration.dockGeometry).width + DesktopIntegration.dockSpacing + else + return 0 + } + DLayerShellWindow.bottomMargin: { + if (Qt.DownArrow === DesktopIntegration.dockPosition) + return descaledRect(DesktopIntegration.dockGeometry).height + DesktopIntegration.dockSpacing + else + return 0 + } + DLayerShellWindow.leftMargin: { + if (Qt.LeftArrow === DesktopIntegration.dockPosition) + return descaledRect(DesktopIntegration.dockGeometry).width + DesktopIntegration.dockSpacing + else if (Qt.UpArrow === DesktopIntegration.dockPosition || Qt.DownArrow === DesktopIntegration.dockPosition) + return windowedPos.x - windowedFrameImpl.item.getHorizontalCoordinatesOfSideBar() + else + return 0 + } + DLayerShellWindow.anchors: { + switch (DesktopIntegration.dockPosition) { + case Qt.UpArrow: + case Qt.LeftArrow: + return DLayerShellWindow.AnchorTop | DLayerShellWindow.AnchorLeft + case Qt.RightArrow: + return DLayerShellWindow.AnchorRight | DLayerShellWindow.AnchorTop + case Qt.DownArrow: + return DLayerShellWindow.AnchorBottom | DLayerShellWindow.AnchorLeft + } + } flags: { if (DebugHelper.useRegularWindow) return Qt.Window return ( Qt.FramelessWindowHint | Qt.Tool)