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
|