restore window maximized state on toggle

Otherwise the window will have a maximized size but not maximized state after toggling it from system tray
This commit is contained in:
leia uwu
2026-02-23 16:21:44 -03:00
committed by Tobias Fella
parent 774eb6a505
commit 594018b188
3 changed files with 26 additions and 1 deletions

View File

@@ -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)

View File

@@ -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,8 +56,12 @@ void WindowController::showAndRaiseWindow(const QString &startupId)
return;
}
if (!m_window->isVisible()) {
if (m_wasMaximized) {
m_window->showMaximized();
} else {
m_window->show();
}
}
#ifdef HAVE_WINDOWSYSTEM
if (!startupId.isEmpty()) {

View File

@@ -67,5 +67,6 @@ Q_SIGNALS:
private:
WindowController() = default;
bool m_wasMaximized;
QWindow *m_window = nullptr;
};