diff --git a/kwin/decorations/org.shift.decoration/contents/ui/main.qml b/kwin/decorations/org.shift.decoration/contents/ui/main.qml index 176c00cc..20d5e86d 100644 --- a/kwin/decorations/org.shift.decoration/contents/ui/main.qml +++ b/kwin/decorations/org.shift.decoration/contents/ui/main.qml @@ -4,6 +4,7 @@ import QtQuick import org.kde.kwin.decoration import org.kde.plasma.private.mobileshell as MobileShell +import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings Decoration { id: root @@ -21,6 +22,9 @@ Decoration { readonly property int btnSideMargin: 12 readonly property int cornerRadius: decoration.client.maximized ? 0 : 8 readonly property int shortAnimationDuration: MobileShell.Motion.duration(MobileShell.Motion.EffectsFast) + readonly property bool windowMenuAllowed: !ShellSettings.Settings.convergenceModeEnabled + || ShellSettings.Settings.gamingModeEnabled + || !ShellSettings.Settings.dynamicTilingEnabled Component.onCompleted: { borders.top = barHeight; @@ -115,6 +119,14 @@ Decoration { } } + MouseArea { + anchors.fill: parent + z: 1 + enabled: !root.windowMenuAllowed + acceptedButtons: Qt.RightButton + onPressed: (mouse) => { mouse.accepted = true } + } + Component.onCompleted: decoration.installTitleItem(titleRow) } } @@ -129,9 +141,10 @@ Decoration { case DecorationOptions.DecorationButtonClose: case DecorationOptions.DecorationButtonMinimize: case DecorationOptions.DecorationButtonMaximizeRestore: + return true; case DecorationOptions.DecorationButtonMenu: case DecorationOptions.DecorationButtonApplicationMenu: - return true; + return root.windowMenuAllowed; default: return false; } diff --git a/tests/check-dynamic-tiles-motion.sh b/tests/check-dynamic-tiles-motion.sh index 821c269c..039a6ff6 100644 --- a/tests/check-dynamic-tiles-motion.sh +++ b/tests/check-dynamic-tiles-motion.sh @@ -10,6 +10,7 @@ effect_qml="$repo_root/kwin/effects/shift-tile-preview/contents/ui/main.qml" effect_metadata="$repo_root/kwin/effects/shift-tile-preview/metadata.json" effects_cmake="$repo_root/kwin/effects/CMakeLists.txt" tiling_script="$repo_root/kwin/scripts/shift-tiling/contents/ui/main.qml" +decoration_qml="$repo_root/kwin/decorations/org.shift.decoration/contents/ui/main.qml" env_config="$repo_root/envmanager/config.h" require_line() { @@ -60,6 +61,7 @@ require_line "$tiling_script" "readonly property real stablePrimaryRatio: 0.58" require_line "$tiling_script" "readonly property var layoutModes: [\"master\", \"columns\", \"rows\"]" require_line "$tiling_script" "function desktopKey(desktop)" require_line "$tiling_script" "function desktopForWindow(win)" +require_line "$tiling_script" "function normalizeWindowDesktopScope(win)" require_line "$tiling_script" "function layoutKeyFor(outputName, desktop)" require_line "$tiling_script" "function desktopForLayoutKey(outputName)" require_line "$tiling_script" "function layoutKeyForWindow(win)" @@ -80,6 +82,17 @@ require_line "$tiling_script" "function onActiveWindowChanged()" require_line "$tiling_script" "root.rememberFocusedWindow(KWinComponents.Workspace.activeWindow)" require_line "$tiling_script" "win.desktops = [desktop]" require_line "$tiling_script" "win.desktopsChanged.connect" +require_line "$tiling_script" "function dynamicTilingOwnsWindow(win)" +require_line "$tiling_script" "function normalizeNativeWindowOperationState(win)" +require_line "$tiling_script" "function handleNativeWindowOperationStateChange(win)" +require_line "$tiling_script" "function adoptWindow(win)" +require_line "$tiling_script" "win.maximizeModeChanged.connect" +require_line "$tiling_script" "win.fullScreenChanged.connect" +require_line "$tiling_script" "win.noBorderChanged.connect" +require_line "$tiling_script" "win.keepAboveChanged.connect" +require_line "$tiling_script" "win.keepBelowChanged.connect" +require_line "$tiling_script" "property bool dragNativeResize: false" +require_line "$tiling_script" "if (dragNativeResize && dragSourceScreen && dragSourceIndex >= 0)" require_line "$tiling_script" "function orderedWindowsForScreen(outputName)" require_line "$tiling_script" "function buildStableStack(windows, startIndex)" require_line "$tiling_script" "function buildLinearLayout(windows, startIndex, orientation)" @@ -93,7 +106,7 @@ require_line "$tiling_script" "swapDraggedWindow(dragSwapTarget)" require_line "$tiling_script" "setStableLayout(outputName, windows)" require_line "$tiling_script" "setStableLayout(outputName, remaining)" require_line "$tiling_script" "retileScreen(name)" -require_line "$tiling_script" "retileScreen(targetName)" +require_line "$tiling_script" "markLayoutChanged(transaction, targetName)" require_line "$tiling_script" "function promoteWindow(win)" require_line "$tiling_script" "setStableLayout(outputName, reordered)" require_line "$tiling_script" "name: \"SHIFT Tiling Promote Primary\"" @@ -101,6 +114,11 @@ require_line "$tiling_script" "sequence: \"Meta+Shift+Return\"" require_line "$tiling_script" "name: \"SHIFT Tiling Cycle Layout\"" require_line "$tiling_script" "sequence: \"Meta+Shift+T\"" +require_line "$decoration_qml" "readonly property bool windowMenuAllowed: !ShellSettings.Settings.convergenceModeEnabled" +require_line "$decoration_qml" "return root.windowMenuAllowed;" +require_line "$decoration_qml" "enabled: !root.windowMenuAllowed" +require_line "$decoration_qml" "acceptedButtons: Qt.RightButton" + reject_line "$tiling_script" "targetKey = lastLeafKey(rootNode)" reject_line "$tiling_script" "function lastLeafKey(node)" reject_line "$tiling_script" "win.output.name !== outputName"