From 29cebd5d9b5b419a6933cf26db2515f0f80bf839 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:06:24 -0800 Subject: [PATCH] Try to port over focused monitor updates --- kwin/src/qml/BreezyDesktop.qml | 1 + kwin/src/qml/Displays.qml | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/kwin/src/qml/BreezyDesktop.qml b/kwin/src/qml/BreezyDesktop.qml index a4de051..324da11 100644 --- a/kwin/src/qml/BreezyDesktop.qml +++ b/kwin/src/qml/BreezyDesktop.qml @@ -32,6 +32,7 @@ Node { let focusedIndex = -1; const lookingAtIndex = displays.findFocusedMonitor( displays.eusToNwuQuat(orientations[0]), + displays.eusToNwuVector(effect.posePosition), breezyDesktop.monitorPlacements.map(monitorVectors => monitorVectors.centerLook), breezyDesktop.focusedMonitorIndex, smoothFollowEnabled, diff --git a/kwin/src/qml/Displays.qml b/kwin/src/qml/Displays.qml index 45d1b91..8040b47 100644 --- a/kwin/src/qml/Displays.qml +++ b/kwin/src/qml/Displays.qml @@ -18,6 +18,11 @@ QtObject { return Qt.vector3d(-vector.y, vector.z, -vector.x); } + function eusToNwuVector(vector) { + // Converts EUS vector to NWU vector + return Qt.vector3d(-vector.z, -vector.x, vector.y); + } + function eusToNwuQuat(quaternion) { // Converts EUS quaternion to NWU quaternion return Qt.quaternion(quaternion.scalar, -quaternion.z, -quaternion.x, quaternion.y); @@ -384,13 +389,14 @@ QtObject { return Math.max(upPercentage, westPercentage); } - function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, smoothFollowEnabled, fovDetails, monitorsDetails) { + function findFocusedMonitor(quaternion, position, monitorVectors, currentFocusedIndex, smoothFollowEnabled, fovDetails, monitorsDetails) { if (currentFocusedIndex !== -1 && smoothFollowEnabled) return currentFocusedIndex; var lookVector = Qt.vector3d(1.0, 0.0, 0.0); // NWU vector pointing to the center of the screen var rotatedLookVector = quaternion.times(lookVector); - // Use curved or flat conversion functions depending on wrapping scheme + // TODO - right now we're using the curved functions to figure out distances even for flat monitors + // because it will account for the monitors facing towards us, but this will lose some accuracy var upConversionFns = fovDetails.monitorWrappingScheme === "vertical" ? fovConversionFns.curved : fovConversionFns.flat; var lookUpPixels = upConversionFns.angleToLength( fovDetails.defaultDistanceVerticalRadians, @@ -408,13 +414,17 @@ QtObject { rotatedLookVector.x ); + function vectorRelativeToPosition(vector) { + return vector.minus(position); + } + // Check current focused monitor first if (currentFocusedIndex !== -1) { var focusedDistance = getMonitorDistance( fovDetails, lookUpPixels, lookWestPixels, - monitorVectors[currentFocusedIndex], + vectorRelativeToPosition(monitorVectors[currentFocusedIndex]), monitorsDetails[currentFocusedIndex], upConversionFns.angleToLength, westConversionFns.angleToLength @@ -434,7 +444,7 @@ QtObject { fovDetails, lookUpPixels, lookWestPixels, - monitorVectors[i], + vectorRelativeToPosition(monitorVectors[i]), monitorsDetails[i], upConversionFns.angleToLength, westConversionFns.angleToLength