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; };