mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 00:47:22 +00:00
Keep tile preview effect inert
Nested KWin blacks out when this scene effect becomes visible. Leave the effect disabled and let the tiling script own swap and restore outlines.
This commit is contained in:
parent
f2f6f6f890
commit
40beabede9
1 changed files with 16 additions and 72 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue