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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -67,5 +67,6 @@ Q_SIGNALS:
|
||||
private:
|
||||
WindowController() = default;
|
||||
|
||||
bool m_wasMaximized;
|
||||
QWindow *m_window = nullptr;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user