[kwin] Update patches to 6.5

master
Jacopo De Simoi 5 months ago
parent dd52af4ebd
commit 324906c26e
  1. 14
      kde-plasma/kwin/0001-Implement-moveRelative.patch
  2. 14
      kde-plasma/kwin/0002-Make-output-yield-tiling-constants.patch
  3. 10
      kde-plasma/kwin/0003-Adjust-screen-area-for-tiling-gaps.patch
  4. 40
      kde-plasma/kwin/0004-Add-actions-for-third-quick-tiling.patch
  5. 8
      kde-plasma/kwin/0005-Force-maximized-windows-to-cast-a-shadow.patch
  6. 6
      kde-plasma/kwin/0006-Add-Quicktiles-at-thirds.patch
  7. 6
      kde-plasma/kwin/0007-Add-padding-to-qulcktiles.patch
  8. 10
      kde-plasma/kwin/0008-Use-geometry-relative-to-the-cutout.patch
  9. 10
      kde-plasma/kwin/0009-Make-vertical-gap-twice-as-big-between-windows.patch
  10. 106
      kde-plasma/kwin/0010-Implement-core-panning-methods.patch
  11. 12
      kde-plasma/kwin/0011-Remove-the-logic-for-tiles-on-different-screens.patch
  12. 24
      kde-plasma/kwin/0012-Implement-Incremental-wide-placement.patch
  13. 10
      kde-plasma/kwin/0013-Remove-wrap-around-when-switching-focus-horizontally.patch
  14. 10
      kde-plasma/kwin/0014-Allow-windows-outside-left-right-screen-boundary.patch
  15. 12
      kde-plasma/kwin/0015-Adjust-output-detection-for-hyper-wide.patch
  16. 10
      kde-plasma/kwin/0016-Introduce-the-Pan-helper-effect.patch
  17. 8
      kde-plasma/kwin/0017-Remove-boundary-checking-in-the-position-effect.patch
  18. 8
      kde-plasma/kwin/0018-Add-paint_screen-flag-to-prevent-artifacts.patch
  19. 10
      kde-plasma/kwin/0019-Allow-loading-the-keymap-from-a-file.patch
  20. 14
      kde-plasma/kwin/0020-Fix-erratic-margin-behavior-on-maximize.patch
  21. 25
      kde-plasma/kwin/0020-temporary-build-fix.patch
  22. 26
      kde-plasma/kwin/0021-Enable-libinput-plugin-system.patch

@ -1,7 +1,7 @@
From 605ebb66085a7f004f7ed6f5851a416d56a790e8 Mon Sep 17 00:00:00 2001
From a933582c1dbf49e67dd14fee0a729dcb25edcd70 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Wed, 18 Dec 2024 11:59:09 -0500
Subject: [PATCH 01/20] Implement moveRelative
Subject: [PATCH 01/21] Implement moveRelative
---
src/window.cpp | 5 +++++
@ -9,10 +9,10 @@ Subject: [PATCH 01/20] Implement moveRelative
2 files changed, 10 insertions(+)
diff --git a/src/window.cpp b/src/window.cpp
index d70e9bccfe..64ad8d977c 100644
index c4dd92c06f..0b4623a200 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -3499,6 +3499,11 @@ void Window::setMoveResizeGeometry(const QRectF &geo)
@@ -3387,6 +3387,11 @@ void Window::setMoveResizeGeometry(const QRectF &geo)
setMoveResizeOutput(workspace()->outputAt(geo.center()));
}
@ -25,10 +25,10 @@ index d70e9bccfe..64ad8d977c 100644
{
return m_moveResizeOutput;
diff --git a/src/window.h b/src/window.h
index 8e15cf8079..2f935e4c19 100644
index 2b11fa365c..9fbda89236 100644
--- a/src/window.h
+++ b/src/window.h
@@ -718,6 +718,11 @@ public:
@@ -716,6 +716,11 @@ public:
*/
void move(const QPointF &topLeft);
@ -41,5 +41,5 @@ index 8e15cf8079..2f935e4c19 100644
* Resizes the window to have a new @p size but stay with the top-left corner in the same position.
*/
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 56f9b3e2d262e2b4deae68fd62992aada45d2a2e Mon Sep 17 00:00:00 2001
From c7dae5c52668351a9f58b6ec8a9bdb4adc7f0313 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Mon, 23 Jun 2025 09:40:54 +0200
Subject: [PATCH 02/20] Make output yield tiling constants
Subject: [PATCH 02/21] Make output yield tiling constants
in order to have pixel-perfect placement, the tile gap size and border
size must depend on the output size and scaling.
@ -11,10 +11,10 @@ size must depend on the output size and scaling.
2 files changed, 18 insertions(+)
diff --git a/src/core/output.cpp b/src/core/output.cpp
index d884b68fe1..9763561e2c 100644
index 9d12ef0c7d..310f244b8d 100644
--- a/src/core/output.cpp
+++ b/src/core/output.cpp
@@ -451,6 +451,16 @@ qreal Output::scale() const
@@ -456,6 +456,16 @@ qreal Output::scale() const
return m_state.scale;
}
@ -32,10 +32,10 @@ index d884b68fe1..9763561e2c 100644
{
return QRect(m_state.position, pixelSize() / scale());
diff --git a/src/core/output.h b/src/core/output.h
index 0122bc34ed..15f03f5630 100644
index 61b54e9df3..db42886731 100644
--- a/src/core/output.h
+++ b/src/core/output.h
@@ -251,6 +251,14 @@ public:
@@ -258,6 +258,14 @@ public:
*/
bool isEnabled() const;
@ -51,5 +51,5 @@ index 0122bc34ed..15f03f5630 100644
* Returns geometry of this output in device independent pixels.
*/
--
2.49.1
2.51.2

@ -1,17 +1,17 @@
From 23374adae557911d1e403c560c1f61aeb0004e44 Mon Sep 17 00:00:00 2001
From 897b2611859cab050fbabdf5e34fbe2284e47f4d Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Wed, 18 Dec 2024 15:11:22 -0500
Subject: [PATCH 03/20] Adjust screen area for tiling + gaps
Subject: [PATCH 03/21] Adjust screen area for tiling + gaps
---
src/workspace.cpp | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/workspace.cpp b/src/workspace.cpp
index 0283608c89..bd64f4f248 100644
index 17ce1e9f80..37f3ece9c0 100644
--- a/src/workspace.cpp
+++ b/src/workspace.cpp
@@ -2271,22 +2271,30 @@ void Workspace::rearrange()
@@ -2297,22 +2297,30 @@ void Workspace::rearrange()
*/
QRectF Workspace::clientArea(clientAreaOption opt, const Output *output, const VirtualDesktop *desktop) const
{
@ -47,5 +47,5 @@ index 0283608c89..bd64f4f248 100644
return m_geometry;
default:
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 3b9c72ad9b8b745a823d8a8fd7f11d57ef94b0fb Mon Sep 17 00:00:00 2001
From ded38319514ed324feb1f30344791dfd5ea22a1f Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Sat, 4 Jan 2025 22:57:57 -0500
Subject: [PATCH 04/20] Add user actions for quick third-tiling
Date: Sun, 18 Jan 2026 22:37:59 -0500
Subject: [PATCH 04/21] Add actions for third quick-tiling
---
src/effect/globals.h | 7 +++++++
@ -11,10 +11,10 @@ Subject: [PATCH 04/20] Add user actions for quick third-tiling
4 files changed, 27 insertions(+)
diff --git a/src/effect/globals.h b/src/effect/globals.h
index b602c07256..819a097580 100644
index 5114160b09..39f2da55f6 100644
--- a/src/effect/globals.h
+++ b/src/effect/globals.h
@@ -198,6 +198,13 @@ enum class QuickTileFlag {
@@ -183,6 +183,13 @@ enum class QuickTileFlag {
Custom = 1 << 4,
Horizontal = Left | Right,
Vertical = Top | Bottom,
@ -29,10 +29,10 @@ index b602c07256..819a097580 100644
Q_ENUM_NS(QuickTileFlag)
Q_DECLARE_FLAGS(QuickTileMode, QuickTileFlag)
diff --git a/src/scripting/workspace_wrapper.cpp b/src/scripting/workspace_wrapper.cpp
index d1e504b3ac..c9b34876ba 100644
index 1d26fd2a45..1a21d21289 100644
--- a/src/scripting/workspace_wrapper.cpp
+++ b/src/scripting/workspace_wrapper.cpp
@@ -191,6 +191,11 @@ SLOTWRAPPER(slotSwitchToBelowScreen)
@@ -190,6 +190,11 @@ SLOTWRAPPER(slotSwitchToBelowScreen)
}
SLOTWRAPPER(slotWindowQuickTileLeft, QuickTileFlag::Left)
@ -45,10 +45,10 @@ index d1e504b3ac..c9b34876ba 100644
SLOTWRAPPER(slotWindowQuickTileTop, QuickTileFlag::Top)
SLOTWRAPPER(slotWindowQuickTileBottom, QuickTileFlag::Bottom)
diff --git a/src/scripting/workspace_wrapper.h b/src/scripting/workspace_wrapper.h
index c1a7db63e7..352208f9e4 100644
index ec12bc6b41..612b8f3e86 100644
--- a/src/scripting/workspace_wrapper.h
+++ b/src/scripting/workspace_wrapper.h
@@ -357,6 +357,11 @@ public Q_SLOTS:
@@ -379,6 +379,11 @@ public Q_SLOTS:
void slotWindowShrinkVertical();
void slotWindowQuickTileLeft();
void slotWindowQuickTileRight();
@ -61,26 +61,26 @@ index c1a7db63e7..352208f9e4 100644
void slotWindowQuickTileBottom();
void slotWindowQuickTileTopLeft();
diff --git a/src/useractions.cpp b/src/useractions.cpp
index 7691e5eb03..6e841d96cd 100644
index 0bdbbf83d5..e49135c097 100644
--- a/src/useractions.cpp
+++ b/src/useractions.cpp
@@ -942,6 +942,16 @@ void Workspace::initShortcuts()
Qt::META | Qt::Key_Left, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Left));
@@ -871,6 +871,16 @@ void Workspace::initShortcuts()
Qt::META | Qt::Key_Left, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Left), true);
initShortcut("Window Quick Tile Right", i18n("Quick Tile Window to the Right"),
Qt::META | Qt::Key_Right, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Right));
Qt::META | Qt::Key_Right, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Right), true);
+ initShortcut("Window Quick Tile Left Third", i18n("Quick Tile Window to the Left Third"),
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third1));
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third1), true);
+ initShortcut("Window Quick Tile Left Two-Thirds", i18n("Quick Tile Window to the Left Two-Thirds"),
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third12));
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third12), true);
+ initShortcut("Window Quick Tile Right Two-Thirds", i18n("Quick Tile Window to the Right Two-Thirds"),
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third23));
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third23), true);
+ initShortcut("Window Quick Tile Center Third", i18n("Quick Tile Window to the Center Third"),
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third2));
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third2), true);
+ initShortcut("Window Quick Tile Right Third", i18n("Quick Tile Window to the Right Third"),
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third3));
+ 0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third3), true);
initShortcut("Window Quick Tile Top", i18n("Quick Tile Window to the Top"),
Qt::META | Qt::Key_Up, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top));
Qt::META | Qt::Key_Up, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top), true);
initShortcut("Window Quick Tile Bottom", i18n("Quick Tile Window to the Bottom"),
--
2.49.1
2.51.2

@ -1,14 +1,14 @@
From 482eda79d03b7eeb127390bb6d1f91438cc5d053 Mon Sep 17 00:00:00 2001
From 7a2d46abe3c388bf8fa93a42c98fa9ebb387ea91 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Sun, 5 Jan 2025 01:05:09 -0500
Subject: [PATCH 05/20] Force maximized windows to cast a shadow
Subject: [PATCH 05/21] Force maximized windows to cast a shadow
---
src/window.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/window.cpp b/src/window.cpp
index 64ad8d977c..4eca4627dd 100644
index 0b4623a200..5acc277bf9 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -289,7 +289,7 @@ SurfaceItem *Window::surfaceItem() const
@ -21,5 +21,5 @@ index 64ad8d977c..4eca4627dd 100644
bool Window::isClient() const
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 4fc4c8b801315a7eb90b8fe8bf7c30b957ec4fcc Mon Sep 17 00:00:00 2001
From 6ff6ad69e759246c405649a109381c1de049b0fd Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Wed, 1 Oct 2025 20:24:58 -0400
Subject: [PATCH 06/20] Add Quicktiles at thirds
Subject: [PATCH 06/21] Add Quicktiles at thirds
---
src/tiles/quicktile.cpp | 53 +++++++++++++++++++++++++++++++++++++++++
@ -130,5 +130,5 @@ index 6abb622740..4a75874f6d 100644
} // namespace KWin
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 124e9a52b8b2051cbc37a1d603cfc8a0622feee3 Mon Sep 17 00:00:00 2001
From d79e0cbcb46dbe048f42f061ba92ea05be3eb03c Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Wed, 1 Mar 2023 12:36:23 -0500
Subject: [PATCH 07/20] Add padding to qulcktiles
Subject: [PATCH 07/21] Add padding to qulcktiles
---
src/tiles/quicktile.cpp | 3 ++-
@ -29,5 +29,5 @@ index 507df27ed1..c5c255e648 100644
connect(tile, &Tile::relativeGeometryChanged, this, [this, tile]() {
--
2.49.1
2.51.2

@ -1,17 +1,17 @@
From 401840537e09859db6811661995cabf0f7fc3fe9 Mon Sep 17 00:00:00 2001
From 00309fc3d23fa111d3edf91b9732dffa6cab67c1 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Tue, 24 Jun 2025 13:19:24 +0200
Subject: [PATCH 08/20] Use geometry relative to the cutout
Subject: [PATCH 08/21] Use geometry relative to the cutout
---
src/tiles/tile.cpp | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/tiles/tile.cpp b/src/tiles/tile.cpp
index d7377d9d18..3c3ba61632 100644
index ff6441f7f2..2e474479bd 100644
--- a/src/tiles/tile.cpp
+++ b/src/tiles/tile.cpp
@@ -153,20 +153,19 @@ QRectF Tile::relativeGeometry() const
@@ -152,20 +152,19 @@ QRectF Tile::relativeGeometry() const
QRectF Tile::absoluteGeometry() const
{
@ -42,5 +42,5 @@ index d7377d9d18..3c3ba61632 100644
QRectF Tile::windowGeometry() const
--
2.49.1
2.51.2

@ -1,17 +1,17 @@
From 2b19ce4d9b8a24edd60271e61a6972b08cf28364 Mon Sep 17 00:00:00 2001
From 5f63c176bad8c1ea99b07a360e76415eed477f7e Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Tue, 20 Jun 2023 18:11:43 -0400
Subject: [PATCH 09/20] Make vertical gap twice as big between windows
Subject: [PATCH 09/21] Make vertical gap twice as big between windows
---
src/tiles/tile.cpp | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/tiles/tile.cpp b/src/tiles/tile.cpp
index 3c3ba61632..2a3f22a4b4 100644
index 2e474479bd..3aa32f6555 100644
--- a/src/tiles/tile.cpp
+++ b/src/tiles/tile.cpp
@@ -178,7 +178,17 @@ QRectF Tile::windowGeometry() const
@@ -177,7 +177,17 @@ QRectF Tile::windowGeometry() const
effectiveMargins.setBottom(m_relativeGeometry.bottom() < 1.0 ? m_padding / 2.0 : m_padding);
const auto geom = absoluteGeometry();
@ -31,5 +31,5 @@ index 3c3ba61632..2a3f22a4b4 100644
QRectF Tile::maximizedWindowGeometry() const
--
2.49.1
2.51.2

@ -1,37 +1,8 @@
From a782b7db8d28bf67650458356507a09698c0098f Mon Sep 17 00:00:00 2001
From 1b0db2a7d0600ac1f1b33437fd43934133477b0e Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Mon, 21 Nov 2022 15:31:57 -0500
Subject: [PATCH 10/20] Implement core panning methods
Date: Mon, 19 Jan 2026 10:22:58 -0500
Subject: [PATCH 10/21] Implement core panning methods
Introduce methods used to pan windows horizontally by a certain pixel
amount. Panning applies to all windows which belong to a specified
screen:
- the main method is ~panWindows~, which iterates on all windows and
pans those that belong to the specified screen of the required amount.
- there are 4 slots used to pan all windows on the current screen by
1/2 and 1/3 of its size left or right. These slots are accessible via
user actions
- Finally, there is a method to ensure a given window is visible (this
slot is called upon client activation)
Fix compilation
screen() has been removed and replaced by some method that returns a pointer to a KWin::output; this may lead to some trouble
Prevent focused panel to move everything
[hyper-wide] Ensure selected window is visible
this is weird; it should not be necessary
stash with definition of panWindows
[hyper-wide] Fix pan windows with fractional scaling
Fix ensureVisible
---
src/effect/effecthandler.cpp | 1 +
src/placement.cpp | 75 ++++++++++++++++++++++++++++++++++++
@ -41,10 +12,10 @@ Fix ensureVisible
5 files changed, 92 insertions(+)
diff --git a/src/effect/effecthandler.cpp b/src/effect/effecthandler.cpp
index 84c45f62cf..2492f7ba22 100644
index f592a27cde..41f27d9793 100644
--- a/src/effect/effecthandler.cpp
+++ b/src/effect/effecthandler.cpp
@@ -779,6 +779,7 @@ void EffectsHandler::activateWindow(EffectWindow *effectWindow)
@@ -785,6 +785,7 @@ void EffectsHandler::activateWindow(EffectWindow *effectWindow)
auto window = effectWindow->window();
if (window->isClient()) {
Workspace::self()->activateWindow(window, true);
@ -53,20 +24,19 @@ index 84c45f62cf..2492f7ba22 100644
}
diff --git a/src/placement.cpp b/src/placement.cpp
index 6c984282e5..7e68c8e108 100644
index eeae4fc93b..820a9c9a59 100644
--- a/src/placement.cpp
+++ b/src/placement.cpp
@@ -13,7 +13,9 @@
@@ -11,6 +11,8 @@
*/
#include "placement.h"
+#include "core/output.h"
+#include "core/outputbackend.h"
#include "cursor.h"
#include "options.h"
+#include "core/outputbackend.h"
#include "rules.h"
+#include "core/output.h"
#include "virtualdesktops.h"
#include "window.h"
#include "workspace.h"
@@ -741,6 +743,79 @@ void Window::shrinkVertical()
@@ -772,6 +774,79 @@ void Window::shrinkVertical()
}
}
@ -81,20 +51,20 @@ index 6c984282e5..7e68c8e108 100644
+ if ((!client->isOnCurrentDesktop()) || (client->isMinimized()) || (client->isOnAllDesktops()) || (!client->isMovable()) || (client->output() != output))
+ continue;
+ // refactor usind client->isOnOutput
+ client->moveRelative(QPointF(pixels, 0 ));
+ client->moveRelative(QPointF(pixels, 0));
+ }
+}
+
+ // TODO:
+ // find current screen with screens()->current()
+ // move only clients on current screen
+ // refactor this in a generic method and make the slots call it;
+ // genericmethod should look like
+ //
+ // slotPanWindows( int screen, int pixels, bool shiftActive)
+// TODO:
+// find current screen with screens()->current()
+// move only clients on current screen
+// refactor this in a generic method and make the slots call it;
+// genericmethod should look like
+//
+// slotPanWindows( int screen, int pixels, bool shiftActive)
+
+ // The shift amount is given by the size of the window + 2*gapSize
+ // The size of the window + 2*gapsize should be the (width of the screen - 2*screenBorder - 2*gapSize)/2
+// The shift amount is given by the size of the window + 2*gapSize
+// The size of the window + 2*gapsize should be the (width of the screen - 2*screenBorder - 2*gapSize)/2
+
+void Workspace::slotPanWindowsHalfScreenRight()
+{
@ -128,7 +98,7 @@ index 6c984282e5..7e68c8e108 100644
+ panWindows(currentOutput, -thirdWidth, false);
+}
+
+void Workspace::slotEnsureClientVisible( KWin::Window* activatedClient )
+void Workspace::slotEnsureClientVisible(KWin::Window *activatedClient)
+{
+ // This also should be made screen-aware
+ if ((!activatedClient) || activatedClient->isDesktop() || activatedClient->isDock())
@ -147,29 +117,29 @@ index 6c984282e5..7e68c8e108 100644
{
if (!m_activeWindow) {
diff --git a/src/useractions.cpp b/src/useractions.cpp
index 6e841d96cd..f60ec14a0d 100644
index e49135c097..1de2f6a64e 100644
--- a/src/useractions.cpp
+++ b/src/useractions.cpp
@@ -952,6 +952,14 @@ void Workspace::initShortcuts()
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third2));
@@ -881,6 +881,14 @@ void Workspace::initShortcuts()
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third2), true);
initShortcut("Window Quick Tile Right Third", i18n("Quick Tile Window to the Right Third"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third3));
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Third3), true);
+ initShortcut("Pan Windows Right Half", i18n("Pan Windows to the right by half the screen"),
+ 0, &Workspace::slotPanWindowsHalfScreenRight);
+ 0, &Workspace::slotPanWindowsHalfScreenRight, true);
+ initShortcut("Pan Windows Left Half", i18n("Pan Windows to the left by half the screen"),
+ 0, &Workspace::slotPanWindowsHalfScreenLeft);
+ 0, &Workspace::slotPanWindowsHalfScreenLeft, true);
+ initShortcut("Pan Windows Right Third", i18n("Pan Windows to the right by third the screen"),
+ 0, &Workspace::slotPanWindowsThirdScreenRight);
+ 0, &Workspace::slotPanWindowsThirdScreenRight, true);
+ initShortcut("Pan Windows Left Third", i18n("Pan Windows to the left by third the screen"),
+ 0, &Workspace::slotPanWindowsThirdScreenLeft);
+ 0, &Workspace::slotPanWindowsThirdScreenLeft, true);
initShortcut("Window Quick Tile Top", i18n("Quick Tile Window to the Top"),
Qt::META | Qt::Key_Up, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top));
Qt::META | Qt::Key_Up, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top), true);
initShortcut("Window Quick Tile Bottom", i18n("Quick Tile Window to the Bottom"),
diff --git a/src/workspace.cpp b/src/workspace.cpp
index bd64f4f248..6f0d1ff3e8 100644
index 37f3ece9c0..28a6a33265 100644
--- a/src/workspace.cpp
+++ b/src/workspace.cpp
@@ -177,6 +177,7 @@ void Workspace::init()
@@ -179,6 +179,7 @@ void Workspace::init()
connect(options, &Options::configChanged, m_screenEdges.get(), &ScreenEdges::reconfigure);
connect(VirtualDesktopManager::self(), &VirtualDesktopManager::layoutChanged, m_screenEdges.get(), &ScreenEdges::updateLayout);
connect(this, &Workspace::windowActivated, m_screenEdges.get(), &ScreenEdges::checkBlocking);
@ -178,10 +148,10 @@ index bd64f4f248..6f0d1ff3e8 100644
connect(this, &Workspace::windowRemoved, m_focusChain.get(), &FocusChain::remove);
connect(this, &Workspace::windowActivated, m_focusChain.get(), &FocusChain::setActiveWindow);
diff --git a/src/workspace.h b/src/workspace.h
index 04fe2e0864..2f41dc8302 100644
index 3cb421b1a6..fdbfd21c10 100644
--- a/src/workspace.h
+++ b/src/workspace.h
@@ -522,6 +522,13 @@ public Q_SLOTS:
@@ -485,6 +485,13 @@ public Q_SLOTS:
void slotWindowShrinkHorizontal();
void slotWindowShrinkVertical();
@ -190,11 +160,11 @@ index 04fe2e0864..2f41dc8302 100644
+ void slotPanWindowsHalfScreenLeft();
+ void slotPanWindowsThirdScreenRight();
+ void slotPanWindowsThirdScreenLeft();
+ void slotEnsureClientVisible( KWin::Window* );
+ void slotEnsureClientVisible(KWin::Window *);
+
void slotIncreaseWindowOpacity();
void slotLowerWindowOpacity();
--
2.49.1
2.51.2

@ -1,17 +1,17 @@
From 243bf425dab979a150e2b18458b2643b4de58178 Mon Sep 17 00:00:00 2001
From 7e2db80dfdff2e193cb90ddc893870e1fe62bd43 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Thu, 5 Jun 2025 22:23:24 -0400
Subject: [PATCH 11/20] Remove the logic for tiles on different screens
Subject: [PATCH 11/21] Remove the logic for tiles on different screens
---
src/window.cpp | 38 +-------------------------------------
1 file changed, 1 insertion(+), 37 deletions(-)
diff --git a/src/window.cpp b/src/window.cpp
index 4eca4627dd..5ceea0c812 100644
index 5acc277bf9..32376e6992 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -3727,7 +3727,7 @@ void Window::handleQuickTileShortcut(QuickTileMode mode)
@@ -3615,7 +3615,7 @@ void Window::handleQuickTileShortcut(QuickTileMode mode)
} else {
// If the window is asked to be tiled in a screen corner, don't combine the new mode with the old one.
QuickTileMode combined;
@ -20,7 +20,7 @@ index 4eca4627dd..5ceea0c812 100644
case QuickTileMode(QuickTileFlag::Left):
case QuickTileMode(QuickTileFlag::Top):
case QuickTileMode(QuickTileFlag::Right):
@@ -3737,42 +3737,6 @@ void Window::handleQuickTileShortcut(QuickTileMode mode)
@@ -3625,42 +3625,6 @@ void Window::handleQuickTileShortcut(QuickTileMode mode)
default:
combined = mode;
}
@ -64,5 +64,5 @@ index 4eca4627dd..5ceea0c812 100644
}
}
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 0511ab9f21bc31b64a917030fef6c46f5060b971 Mon Sep 17 00:00:00 2001
From b6c21222ff8eec9c3463b6f3c3619551d144c51a Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <jacopods@gmail.com>
Date: Sun, 28 Oct 2018 02:26:37 -0400
Subject: [PATCH 12/20] Implement Incremental wide-placement
Subject: [PATCH 12/21] Implement Incremental wide-placement
[hyper-wide] Fix placement with fractional scaling
@ -11,10 +11,10 @@ Subject: [PATCH 12/20] Implement Incremental wide-placement
1 file changed, 112 insertions(+), 37 deletions(-)
diff --git a/src/placement.cpp b/src/placement.cpp
index 7e68c8e108..cd480901b5 100644
index 820a9c9a59..f66ac8eb28 100644
--- a/src/placement.cpp
+++ b/src/placement.cpp
@@ -162,13 +162,24 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -163,13 +163,24 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
* with ideas from xfce.
*/
@ -39,7 +39,7 @@ index 7e68c8e108..cd480901b5 100644
int x_optimal, y_optimal;
int possible;
VirtualDesktop *const desktop = window->isOnCurrentDesktop() ? VirtualDesktopManager::self()->currentDesktop() : window->desktops().front();
@@ -178,46 +189,70 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -179,46 +190,70 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
int basket; // temp holder
// get the maximum allowed windows space
@ -124,7 +124,7 @@ index 7e68c8e108..cd480901b5 100644
// if windows overlap, calc the overall overlapping
if ((cxl < xr) && (cxr > xl) && (cyt < yb) && (cyb > yt)) {
xl = std::max(cxl, xl);
@@ -234,9 +269,13 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -235,9 +270,13 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
}
}
}
@ -140,7 +140,7 @@ index 7e68c8e108..cd480901b5 100644
x_optimal = x;
y_optimal = y;
break;
@@ -245,22 +284,40 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -246,22 +285,40 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
if (first_pass) {
first_pass = false;
min_overlap = overlap;
@ -183,7 +183,7 @@ index 7e68c8e108..cd480901b5 100644
// compare to the position of each client on the same desk
for (auto l = workspace()->stackingOrder().constBegin(); l != workspace()->stackingOrder().constEnd(); ++l) {
auto client = *l;
@@ -268,32 +325,44 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -269,32 +326,44 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
continue;
}
@ -238,7 +238,7 @@ index 7e68c8e108..cd480901b5 100644
if (possible - ch > y) {
possible -= ch;
@@ -306,10 +375,10 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -307,10 +376,10 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
continue;
}
@ -253,7 +253,7 @@ index 7e68c8e108..cd480901b5 100644
// if not enough room to the left or right of the current tested client
// determine the first non-overlapped y position
@@ -317,20 +386,26 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
@@ -318,20 +387,26 @@ std::optional<PlacementCommand> Placement::placeSmart(const Window *window, cons
possible = yb;
}
@ -284,7 +284,7 @@ index 7e68c8e108..cd480901b5 100644
+ return QPointF(x_optimal / scale, y_optimal / scale);
}
QPoint Workspace::cascadeOffset(const QRectF &area) const
QPointF Workspace::cascadeOffset(const QRectF &area) const
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 326da58552445f2b267b2a748806dd97e9c6a6aa Mon Sep 17 00:00:00 2001
From 3090f4850c54787af4eeb4698097a05f8dcbbac9 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <jacopods@gmail.com>
Date: Fri, 5 Apr 2019 22:23:10 -0400
Subject: [PATCH 13/20] Remove wrap-around when switching focus horizontally
Subject: [PATCH 13/21] Remove wrap-around when switching focus horizontally
Now, this is not a necessity, but more often than not I do not want to
wrap around, especially if the desktop is stretched very wide
@ -10,10 +10,10 @@ wrap around, especially if the desktop is stretched very wide
1 file changed, 1 insertion(+), 18 deletions(-)
diff --git a/src/useractions.cpp b/src/useractions.cpp
index f60ec14a0d..e92eb95292 100644
index 1de2f6a64e..008a40fa4a 100644
--- a/src/useractions.cpp
+++ b/src/useractions.cpp
@@ -1610,24 +1610,7 @@ void Workspace::switchWindow(Direction direction)
@@ -1523,24 +1523,7 @@ void Workspace::switchWindow(Direction direction)
// Center of the active window
QPoint curPos(window->x() + window->width() / 2, window->y() + window->height() / 2);
@ -40,5 +40,5 @@ index f60ec14a0d..e92eb95292 100644
bool Workspace::switchWindow(Window *window, Direction direction, QPoint curPos, VirtualDesktop *desktop)
--
2.49.1
2.51.2

@ -1,17 +1,17 @@
From adccb3d9f6613d12b723ff5bd39cb0fdbbba65b5 Mon Sep 17 00:00:00 2001
From 1787eed3893db456ca31f20d545c162cc278d57a Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <jacopods@gmail.com>
Date: Fri, 24 May 2019 09:33:47 +0200
Subject: [PATCH 14/20] Allow windows outside left|right screen boundary
Subject: [PATCH 14/21] Allow windows outside left|right screen boundary
---
src/window.cpp | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/window.cpp b/src/window.cpp
index 5ceea0c812..afde7610e6 100644
index 32376e6992..1efe2b96f8 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -4232,11 +4232,6 @@ void Window::checkWorkspacePosition(QRectF oldGeometry, const VirtualDesktop *ol
@@ -4118,11 +4118,6 @@ void Window::checkWorkspacePosition(QRectF oldGeometry, const VirtualDesktop *ol
void Window::checkOffscreenPosition(QRectF *geom, const QRectF &screenArea)
{
@ -24,5 +24,5 @@ index 5ceea0c812..afde7610e6 100644
geom->moveTop(screenArea.bottom() - screenArea.height() / 4);
} else if (geom->bottom() < screenArea.top()) {
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From d1afa2a57ba8d647559bf44b5cba8b3806b1c5cc Mon Sep 17 00:00:00 2001
From 6c337033dabd85f920569295e0cb3d1dc707778b Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Sun, 30 Apr 2023 23:09:34 -0400
Subject: [PATCH 15/20] Adjust output detection for hyper-wide
Subject: [PATCH 15/21] Adjust output detection for hyper-wide
---
src/window.cpp | 3 ++-
@ -9,7 +9,7 @@ Subject: [PATCH 15/20] Adjust output detection for hyper-wide
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/window.cpp b/src/window.cpp
index afde7610e6..6442eb44b1 100644
index 1efe2b96f8..74d55ee7aa 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -246,7 +246,8 @@ bool Window::isOnActiveOutput() const
@ -23,10 +23,10 @@ index afde7610e6..6442eb44b1 100644
Shadow *Window::shadow() const
diff --git a/src/workspace.cpp b/src/workspace.cpp
index 6f0d1ff3e8..b58d5b151f 100644
index 28a6a33265..bf799837d4 100644
--- a/src/workspace.cpp
+++ b/src/workspace.cpp
@@ -1045,7 +1045,9 @@ Output *Workspace::outputAt(const QPointF &pos) const
@@ -1064,7 +1064,9 @@ Output *Workspace::outputAt(const QPointF &pos) const
for (Output *output : std::as_const(m_outputs)) {
const QRectF geo = output->geometry();
@ -38,5 +38,5 @@ index 6f0d1ff3e8..b58d5b151f 100644
std::clamp(pos.y(), geo.y(), geo.y() + geo.height() - 1));
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From ca4cd3cc88680e912752d05ad9863ecbeaf1bf85 Mon Sep 17 00:00:00 2001
From 03b7611d682f50df3eda816943574b5b304a0d19 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <jacopods@protonmail.com>
Date: Thu, 17 Jun 2021 23:00:47 -0400
Subject: [PATCH 16/20] Introduce the Pan helper effect
Subject: [PATCH 16/21] Introduce the Pan helper effect
Fix installation of panhelper effect
@ -17,10 +17,10 @@ Fix panhelper effect
create mode 100644 src/plugins/panhelper/package/metadata.json
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt
index 794522aee2..173705f3f7 100644
index fdaa939458..9c93580c28 100644
--- a/src/plugins/CMakeLists.txt
+++ b/src/plugins/CMakeLists.txt
@@ -84,6 +84,7 @@ add_subdirectory(mousemark)
@@ -83,6 +83,7 @@ add_subdirectory(mousemark)
add_subdirectory(nightlight)
add_subdirectory(outputlocator)
add_subdirectory(overview)
@ -192,5 +192,5 @@ index 0000000000..14f7d37882
+ "X-Plasma-API": "javascript"
+}
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 73d06f88f2dd16738574c578aad7a72054fadd8f Mon Sep 17 00:00:00 2001
From e69a930fb4b1076db5db12c6baa0c6bc4979b7aa Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Sat, 22 Oct 2022 22:03:42 -0400
Subject: [PATCH 17/20] Remove boundary checking in the position effect
Subject: [PATCH 17/21] Remove boundary checking in the position effect
In order for the pan-helper effect to work, we need to drop the
boundary checking in the position effect.
@ -13,7 +13,7 @@ might not like the fact that windows have negative coordinates.
1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/src/effect/animationeffect.cpp b/src/effect/animationeffect.cpp
index 621da89a9b..409d09db51 100644
index eac1c038d9..100778add5 100644
--- a/src/effect/animationeffect.cpp
+++ b/src/effect/animationeffect.cpp
@@ -570,18 +570,14 @@ void AnimationEffect::paintWindow(const RenderTarget &renderTarget, const Render
@ -62,5 +62,5 @@ index 621da89a9b..409d09db51 100644
r = window->expandedGeometry().toRect();
rects.push_back(r.translated(x[0], y[0]));
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 24fc0c2cf458e5a9e4b27310862b21758f9a71e6 Mon Sep 17 00:00:00 2001
From 3f3b8185db5d0fd5a16b99b543157b0a30d5432d Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <jacopods@protonmail.com>
Date: Mon, 28 Jun 2021 23:40:39 -0400
Subject: [PATCH 18/20] Add paint_screen flag to prevent artifacts
Subject: [PATCH 18/21] Add paint_screen flag to prevent artifacts
As far as I understand I am abusing the Position effect; there are
some assumption in the original implementation that do not work with
@ -12,7 +12,7 @@ duration of the effect.
1 file changed, 6 insertions(+)
diff --git a/src/effect/animationeffect.cpp b/src/effect/animationeffect.cpp
index 409d09db51..445fc4cd1f 100644
index 100778add5..bbb821ebfc 100644
--- a/src/effect/animationeffect.cpp
+++ b/src/effect/animationeffect.cpp
@@ -475,6 +475,10 @@ void AnimationEffect::prePaintWindow(EffectWindow *w, WindowPrePaintData &data,
@ -36,5 +36,5 @@ index 409d09db51..445fc4cd1f 100644
}
case Rotation: {
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 686789f83acd0bc99e91c1e1dfaf768284556c09 Mon Sep 17 00:00:00 2001
From fb07a269bbb7a0ffcfee88e0052be512c13e4f9f Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Tue, 12 Nov 2024 22:41:42 -0500
Subject: [PATCH 19/20] Allow loading the keymap from a file
Subject: [PATCH 19/21] Allow loading the keymap from a file
Make this right
---
@ -9,10 +9,10 @@ Make this right
1 file changed, 9 insertions(+)
diff --git a/src/xkb.cpp b/src/xkb.cpp
index 0cf6ac5816..3e8a6a0d72 100644
index 0e26b4e307..89e32bf7a6 100644
--- a/src/xkb.cpp
+++ b/src/xkb.cpp
@@ -580,6 +580,15 @@ xkb_keymap *Xkb::loadKeymapFromConfig()
@@ -583,6 +583,15 @@ xkb_keymap *Xkb::loadKeymapFromConfig()
if (!m_configGroup.isValid()) {
return nullptr;
}
@ -29,5 +29,5 @@ index 0cf6ac5816..3e8a6a0d72 100644
const QByteArray layout = m_configGroup.readEntry("LayoutList").toLatin1();
const QByteArray variant = m_configGroup.readEntry("VariantList").toLatin1();
--
2.49.1
2.51.2

@ -1,7 +1,7 @@
From 0d1703fde268e625d7ed91f32bfc3da8c9f9f505 Mon Sep 17 00:00:00 2001
From d16d05653cd9d7e1381bab47ec63da8831194585 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Wed, 12 Nov 2025 15:05:32 -0500
Subject: [PATCH 21/21] Fix erratic margin behavior on maximize
Subject: [PATCH 20/21] Fix erratic margin behavior on maximize
Possibly this should be squashed back
---
@ -10,10 +10,10 @@ Possibly this should be squashed back
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/tiles/tile.cpp b/src/tiles/tile.cpp
index 2a3f22a4b4..97ccc4e063 100644
index 3aa32f6555..6dc2f1a756 100644
--- a/src/tiles/tile.cpp
+++ b/src/tiles/tile.cpp
@@ -187,8 +187,7 @@ QRectF Tile::windowGeometry() const
@@ -186,8 +186,7 @@ QRectF Tile::windowGeometry() const
} else if (quickTileMode() & QuickTileFlag::Bottom) {
margins += QMarginsF(0,m_padding,0,0);
}
@ -24,10 +24,10 @@ index 2a3f22a4b4..97ccc4e063 100644
QRectF Tile::maximizedWindowGeometry() const
diff --git a/src/workspace.cpp b/src/workspace.cpp
index e531a74585..a96a941614 100644
index bf799837d4..5011f51771 100644
--- a/src/workspace.cpp
+++ b/src/workspace.cpp
@@ -2282,6 +2282,7 @@ QRectF Workspace::clientArea(clientAreaOption opt, const Output *output, const V
@@ -2304,6 +2304,7 @@ QRectF Workspace::clientArea(clientAreaOption opt, const Output *output, const V
switch (opt) {
case MaximizeArea:
@ -36,5 +36,5 @@ index e531a74585..a96a941614 100644
if (auto desktopIt = m_screenAreas.constFind(desktop); desktopIt != m_screenAreas.constEnd()) {
if (auto outputIt = desktopIt->constFind(output); outputIt != desktopIt->constEnd()) {
--
2.51.0
2.51.2

@ -1,25 +0,0 @@
From 4c7870369fc78bd803febe19ee8ee8b95d988d72 Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Sat, 31 May 2025 11:30:10 -0400
Subject: [PATCH 20/20] temporary build fix
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f31cc8e413..bec737bd27 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -202,7 +202,7 @@ else()
set(HAVE_WL_DISPLAY_SET_DEFAULT_MAX_BUFFER_SIZE 0)
endif()
if (Wayland_VERSION VERSION_GREATER_EQUAL 1.23.90)
- set(HAVE_WL_FIXES 1)
+ set(HAVE_WL_FIXES 0)
else()
set(HAVE_WL_FIXES 0)
endif()
--
2.49.1

@ -0,0 +1,26 @@
From e21302850a19f39c83aad460a731b192ace4eefe Mon Sep 17 00:00:00 2001
From: Jacopo De Simoi <wilderjds@protonmail.com>
Date: Tue, 20 Jan 2026 15:43:04 -0500
Subject: [PATCH 21/21] Enable libinput plugin system
I need this to fix some quirky behaviour of one of my mice
---
src/backends/libinput/context.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/backends/libinput/context.cpp b/src/backends/libinput/context.cpp
index ae0cf02e55..264eaaff7b 100644
--- a/src/backends/libinput/context.cpp
+++ b/src/backends/libinput/context.cpp
@@ -49,6 +49,8 @@ Context::Context(Session *session, std::unique_ptr<Udev> &&udev)
, m_suspended(false)
, m_udev(std::move(udev))
{
+ libinput_plugin_system_append_default_paths(m_libinput);
+ libinput_plugin_system_load_plugins(m_libinput, LIBINPUT_PLUGIN_SYSTEM_FLAG_NONE);
libinput_log_set_priority(m_libinput, LIBINPUT_LOG_PRIORITY_DEBUG);
libinput_log_set_handler(m_libinput, &libinputLogHandler);
}
--
2.51.2
Loading…
Cancel
Save