From 0900264e6f538ff915186b1bd9e528e568b28c1d Mon Sep 17 00:00:00 2001 From: Xaver Hugl 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()); - 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(); QVERIFY(!(states & Test::XdgToplevel::State::Fullscreen)); - QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value(), QSize(100, 50)); + QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value(), QSize(500, 250)); shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value()); Test::render(surface.get(), toplevelConfigureRequestedSpy.last().at(0).value(), 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