summaryrefslogtreecommitdiff
path: root/kde-plasma/kwin/files/kwin-5.27.9-xdgshellwindow-enforce-min-size.patch
blob: 471a37a3e0bd3d0668d105c71186dfef1a799c11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From 0900264e6f538ff915186b1bd9e528e568b28c1d Mon Sep 17 00:00:00 2001
From: Xaver Hugl <xaver.hugl@gmail.com>
Date: Wed, 23 Aug 2023 21:51:18 +0200
Subject: [PATCH] xdgshellwindow: enforce a minimum size for clients

It doesn't make sense for a window to become 1x1 pixels small. When we have
server side decorations we also know that the decoration takes a lot of
space, so this commit enforces a bigger minimum size for decorated windows

BUG: 469237


(cherry picked from commit 28c27609a4b45cf08b53dcc7dfe90f23c3338797)
---
 autotests/integration/xdgshellwindow_test.cpp | 8 ++++----
 src/xdgshellwindow.cpp                        | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/autotests/integration/xdgshellwindow_test.cpp b/autotests/integration/xdgshellwindow_test.cpp
index 70716e49434..53489a27f6b 100644
--- a/autotests/integration/xdgshellwindow_test.cpp
+++ b/autotests/integration/xdgshellwindow_test.cpp
@@ -375,12 +375,12 @@ void TestXdgShellWindow::testFullscreen()
     QVERIFY(surfaceConfigureRequestedSpy.wait());
 
     shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
-    auto window = Test::renderAndWaitForShown(surface.get(), QSize(100, 50), Qt::blue);
+    auto window = Test::renderAndWaitForShown(surface.get(), QSize(500, 250), Qt::blue);
     QVERIFY(window);
     QVERIFY(window->isActive());
     QCOMPARE(window->layer(), NormalLayer);
     QVERIFY(!window->isFullScreen());
-    QCOMPARE(window->clientSize(), QSize(100, 50));
+    QCOMPARE(window->clientSize(), QSize(500, 250));
     QCOMPARE(window->isDecorated(), decoMode == Test::XdgToplevelDecorationV1::mode_server_side);
     QCOMPARE(window->clientSizeToFrameSize(window->clientSize()), window->size());
 
@@ -417,14 +417,14 @@ void TestXdgShellWindow::testFullscreen()
     QCOMPARE(surfaceConfigureRequestedSpy.count(), 4);
     states = toplevelConfigureRequestedSpy.last().at(1).value<Test::XdgToplevel::States>();
     QVERIFY(!(states & Test::XdgToplevel::State::Fullscreen));
-    QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), QSize(100, 50));
+    QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), QSize(500, 250));
 
     shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
     Test::render(surface.get(), toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), Qt::blue);
 
     QVERIFY(fullScreenChangedSpy.wait());
     QCOMPARE(fullScreenChangedSpy.count(), 2);
-    QCOMPARE(window->clientSize(), QSize(100, 50));
+    QCOMPARE(window->clientSize(), QSize(500, 250));
     QVERIFY(!window->isFullScreen());
     QCOMPARE(window->isDecorated(), decoMode == Test::XdgToplevelDecorationV1::mode_server_side);
     QCOMPARE(window->layer(), NormalLayer);
diff --git a/src/xdgshellwindow.cpp b/src/xdgshellwindow.cpp
index 34201bdd05b..29d8623cac3 100644
--- a/src/xdgshellwindow.cpp
+++ b/src/xdgshellwindow.cpp
@@ -600,7 +600,8 @@ MaximizeMode XdgToplevelWindow::requestedMaximizeMode() const
 
 QSizeF XdgToplevelWindow::minSize() const
 {
-    return rules()->checkMinSize(m_shellSurface->minimumSize());
+    const int enforcedMinimum = m_nextDecoration ? 150 : 20;
+    return rules()->checkMinSize(QSize(std::max(enforcedMinimum, m_shellSurface->minimumSize().width()), std::max(enforcedMinimum, m_shellSurface->minimumSize().height())));
 }
 
 QSizeF XdgToplevelWindow::maxSize() const
-- 
GitLab