[plasma/kwin] src/utils: Make top/bottom/left/right gravity center window along orthogonal axis

Vlad Zahorodnii <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 43e1f4ee28b9e1fc15b98f3c5b76d864ad0dca91 by Vlad Zahorodnii.
Committed on 03/08/2026 at 13:24.
Pushed by vladz into branch 'master'.

Make top/bottom/left/right gravity center window along orthogonal axis

This makes kwin center windows with aspect ratio along orthogonal axis.
For example, if you resize a window by dragging the left edge, the
window will be centered vertically.

I would like kwin to center toplevels if their size changes
spontaneously, this takes kwin one step closer to that goal. Centering
the window produces less awkward results in those cases.

M  +15   -3    src/utils/gravity.cpp

https://invent.kde.org/plasma/kwin/-/commit/43e1f4ee28b9e1fc15b98f3c5b76d864ad0dca91

diff --git a/src/utils/gravity.cpp b/src/utils/gravity.cpp
index f538915273c..6334ddbeb0e 100644
--- a/src/utils/gravity.cpp
+++ b/src/utils/gravity.cpp
@@ -34,22 +34,34 @@ RectF Gravity::apply(const RectF &rect, const RectF &bounds) const
         geometry.moveBottom(bounds.bottom());
         break;
     case Gravity::Top:
+        geometry.moveBottom(bounds.bottom());
+        geometry.moveHorizontalCenter(bounds.horizontalCenter());
+        break;
     case Gravity::TopRight:
         geometry.moveLeft(bounds.left());
         geometry.moveBottom(bounds.bottom());
         break;
     case Gravity::Right:
-    case Gravity::BottomRight:
-    case Gravity::Bottom:
+        geometry.moveLeft(bounds.left());
+        geometry.moveVerticalCenter(bounds.verticalCenter());
+        break;
     case Gravity::None:
+    case Gravity::BottomRight:
         geometry.moveLeft(bounds.left());
         geometry.moveTop(bounds.top());
         break;
+    case Gravity::Bottom:
+        geometry.moveHorizontalCenter(bounds.horizontalCenter());
+        geometry.moveTop(bounds.top());
+        break;
     case Gravity::BottomLeft:
-    case Gravity::Left:
         geometry.moveRight(bounds.right());
         geometry.moveTop(bounds.top());
         break;
+    case Gravity::Left:
+        geometry.moveRight(bounds.right());
+        geometry.moveVerticalCenter(bounds.verticalCenter());
+        break;
     }
 
     return geometry;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.