diff --git a/autotests/wayland/maximize_test.cpp b/autotests/wayland/maximize_test.cpp --- a/autotests/wayland/maximize_test.cpp +++ b/autotests/wayland/maximize_test.cpp @@ -176,6 +176,9 @@ surface->damage(QRect(0, 0, 100, 50)); surface->commit(Surface::CommitFlag::None); + QSignalSpy sizeChangedSpy(shellSurface.data(), &ShellSurface::sizeChanged); + QVERIFY(sizeChangedSpy.isValid()); + QVERIFY(clientAddedSpy.isEmpty()); QVERIFY(clientAddedSpy.wait()); auto client = clientAddedSpy.first().first().value(); @@ -186,12 +189,25 @@ QCOMPARE(client->maximizeMode(), MaximizeMode::MaximizeRestore); // now maximize + QVERIFY(sizeChangedSpy.isEmpty()); + QSignalSpy bordersChangedSpy(decoration, &KDecoration2::Decoration::bordersChanged); + QVERIFY(bordersChangedSpy.isValid()); QSignalSpy maximizedChangedSpy(decoration->client().data(), &KDecoration2::DecoratedClient::maximizedChanged); QVERIFY(maximizedChangedSpy.isValid()); workspace()->slotWindowMaximize(); QCOMPARE(client->maximizeMode(), MaximizeMode::MaximizeFull); QCOMPARE(maximizedChangedSpy.count(), 1); QCOMPARE(maximizedChangedSpy.last().first().toBool(), true); + QCOMPARE(bordersChangedSpy.count(), 1); + QCOMPARE(decoration->borderLeft(), 0); + QCOMPARE(decoration->borderBottom(), 0); + QCOMPARE(decoration->borderRight(), 0); + QVERIFY(decoration->borderTop() != 0); + + QVERIFY(sizeChangedSpy.isEmpty()); + QVERIFY(sizeChangedSpy.wait()); + QCOMPARE(sizeChangedSpy.count(), 1); + QCOMPARE(sizeChangedSpy.first().first().toSize(), QSize(1280, 1024 - decoration->borderTop())); // now unmaximize again workspace()->slotWindowMaximize(); diff --git a/shell_client.cpp b/shell_client.cpp --- a/shell_client.cpp +++ b/shell_client.cpp @@ -572,19 +572,6 @@ if (horizontal) m_maximizeMode = MaximizeMode(m_maximizeMode ^ MaximizeHorizontal); } - - // TODO: check rules - if (m_maximizeMode == MaximizeFull) { - m_geomMaximizeRestore = geometry(); - requestGeometry(workspace()->clientArea(MaximizeArea, this)); - workspace()->raiseClient(this); - } else { - if (m_geomMaximizeRestore.isValid()) { - requestGeometry(m_geomMaximizeRestore); - } else { - requestGeometry(workspace()->clientArea(PlacementArea, this)); - } - } // TODO: add more checks as in Client // call into decoration update borders @@ -602,6 +589,19 @@ } changeMaximizeRecursion = false; } + + // TODO: check rules + if (m_maximizeMode == MaximizeFull) { + m_geomMaximizeRestore = geometry(); + requestGeometry(workspace()->clientArea(MaximizeArea, this)); + workspace()->raiseClient(this); + } else { + if (m_geomMaximizeRestore.isValid()) { + requestGeometry(m_geomMaximizeRestore); + } else { + requestGeometry(workspace()->clientArea(PlacementArea, this)); + } + } } MaximizeMode ShellClient::maximizeMode() const