From 594018b1887641374206c50510b0b6c323e3b13b Mon Sep 17 00:00:00 2001 From: leia uwu Date: Mon, 23 Feb 2026 16:21:44 -0300 Subject: [PATCH] restore window maximized state on toggle Otherwise the window will have a maximized size but not maximized state after toggling it from system tray --- autotests/windowcontrollertest.cpp | 10 ++++++++++ src/app/windowcontroller.cpp | 16 +++++++++++++++- src/app/windowcontroller.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/autotests/windowcontrollertest.cpp b/autotests/windowcontrollertest.cpp index 74372d6c1..efc471793 100644 --- a/autotests/windowcontrollertest.cpp +++ b/autotests/windowcontrollertest.cpp @@ -73,6 +73,16 @@ void WindowControllerTest::toggle() instance.toggleWindow(); QCOMPARE(window.windowState(), Qt::WindowNoState); QCOMPARE(window.isVisible(), false); + + // make sure we restore maximized state when toggling + instance.toggleWindow(); + window.setVisibility(QWindow::Maximized); + QCOMPARE(window.windowState(), Qt::WindowMaximized); + instance.toggleWindow(); + QCOMPARE(window.isVisible(), false); + instance.toggleWindow(); + QCOMPARE(window.windowState(), Qt::WindowMaximized); + QCOMPARE(window.isVisible(), true); } QTEST_MAIN(WindowControllerTest) diff --git a/src/app/windowcontroller.cpp b/src/app/windowcontroller.cpp index db4360b3a..28ae9248f 100644 --- a/src/app/windowcontroller.cpp +++ b/src/app/windowcontroller.cpp @@ -32,6 +32,16 @@ void WindowController::setWindow(QWindow *window) { m_window = window; + if (window != nullptr) { + // to restore maximized state after reopening from the system tray + connect(m_window, &QWindow::windowStateChanged, this, [this]() { + if (m_window->isVisible()) { + m_wasMaximized = m_window->windowStates() & Qt::WindowMaximized; + } + }); + m_wasMaximized = m_window->windowStates() & Qt::WindowMaximized; + } + Q_EMIT windowChanged(); } @@ -46,7 +56,11 @@ void WindowController::showAndRaiseWindow(const QString &startupId) return; } if (!m_window->isVisible()) { - m_window->show(); + if (m_wasMaximized) { + m_window->showMaximized(); + } else { + m_window->show(); + } } #ifdef HAVE_WINDOWSYSTEM diff --git a/src/app/windowcontroller.h b/src/app/windowcontroller.h index 056bc0f55..0fdf2209c 100644 --- a/src/app/windowcontroller.h +++ b/src/app/windowcontroller.h @@ -67,5 +67,6 @@ Q_SIGNALS: private: WindowController() = default; + bool m_wasMaximized; QWindow *m_window = nullptr; };