diff --git a/kwin/effects/shift-tile-preview/contents/ui/main.qml b/kwin/effects/shift-tile-preview/contents/ui/main.qml index 5942924d..504bc5e8 100644 --- a/kwin/effects/shift-tile-preview/contents/ui/main.qml +++ b/kwin/effects/shift-tile-preview/contents/ui/main.qml @@ -8,15 +8,12 @@ import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings KWinComponents.SceneEffect { id: effect - visible: ShellSettings.Settings.convergenceModeEnabled - && !ShellSettings.Settings.gamingModeEnabled - && ShellSettings.Settings.dynamicTilingEnabled + visible: false readonly property int outerGap: 8 readonly property int floatEscapeMargin: 32 readonly property int previewAnimationDuration: 180 readonly property int previewFadeDuration: 110 - readonly property real insertIntentDeadZone: 0.18 property var dragConnectedWindows: ({}) property var draggingWindow: null @@ -85,50 +82,6 @@ KWinComponents.SceneEffect { return !rectContainsPoint(expandedArea, cursor); } - function splitRect(geometry, orientation) { - if (orientation === "vertical") { - const firstWidth = Math.round(geometry.width * 0.5); - return [ - Qt.rect(geometry.x, geometry.y, firstWidth, geometry.height), - Qt.rect(geometry.x + firstWidth, geometry.y, geometry.width - firstWidth, geometry.height) - ]; - } - - const firstHeight = Math.round(geometry.height * 0.5); - return [ - Qt.rect(geometry.x, geometry.y, geometry.width, firstHeight), - Qt.rect(geometry.x, geometry.y + firstHeight, geometry.width, geometry.height - firstHeight) - ]; - } - - function insertDirection(cursor, geometry) { - const relativeX = (cursor.x - geometry.x) / geometry.width; - const relativeY = (cursor.y - geometry.y) / geometry.height; - const fromCenterX = relativeX - 0.5; - const fromCenterY = relativeY - 0.5; - if (Math.abs(fromCenterX) < insertIntentDeadZone && Math.abs(fromCenterY) < insertIntentDeadZone) { - return ""; - } - - if (Math.abs(fromCenterX) >= Math.abs(fromCenterY)) { - return fromCenterX < 0 ? "left" : "right"; - } - return fromCenterY < 0 ? "up" : "down"; - } - - function previewRectFor(cursor, targetGeometry) { - const direction = insertDirection(cursor, targetGeometry); - if (direction === "") { - return null; - } - const orientation = direction === "left" || direction === "right" ? "vertical" : "horizontal"; - const splitGeometries = splitRect(targetGeometry, orientation); - if (direction === "left" || direction === "up") { - return splitGeometries[0]; - } - return splitGeometries[1]; - } - function findTileAtCursor(cursor, ignoredWindow) { const ignoredKey = windowKey(ignoredWindow); const windows = KWinComponents.Workspace.windows; @@ -172,31 +125,14 @@ KWinComponents.SceneEffect { } function showPreview(mode, geometry, screenName) { - if (!validRect(geometry) || screenName === "") { - hidePreview(); - return; - } - - if (!previewVisible || previewScreenName !== screenName) { - animatePreview = false; - previewGeometry = insetPreviewGeometry(geometry); - previewMode = mode; - previewScreenName = screenName; - previewVisible = true; - enableAnimationTimer.restart(); - return; - } - - previewMode = mode; - previewScreenName = screenName; - previewGeometry = insetPreviewGeometry(geometry); - previewVisible = true; + hidePreview(); } function hidePreview() { previewVisible = false; draggingWindow = null; dragSourceGeometry = Qt.rect(0, 0, 0, 0); + disableEffectTimer.restart(); } function updatePreview(window, dragGeometry) { @@ -208,11 +144,8 @@ KWinComponents.SceneEffect { const cursor = KWinComponents.Workspace.cursorPos; const targetGeometry = findTileAtCursor(cursor, window); if (targetGeometry) { - const insertGeometry = previewRectFor(cursor, targetGeometry); - if (validRect(insertGeometry)) { - showPreview("insert", insertGeometry, window.output.name); - return; - } + showPreview("swap", targetGeometry, window.output.name); + return; } if (outsideWorkArea(window, cursor)) { @@ -282,6 +215,17 @@ KWinComponents.SceneEffect { onTriggered: effect.animatePreview = true } + Timer { + id: disableEffectTimer + interval: effect.previewFadeDuration + repeat: false + onTriggered: { + if (!effect.previewVisible) { + effect.visible = false; + } + } + } + Connections { target: KWinComponents.Workspace