From 967afd8d675056eaadf0906e56ee61a230a79695 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Wed, 11 Feb 2015 16:13:04 -0800 Subject: [PATCH] Restore to windowed, maximized, or full screen appropriately at start-up --- interface/src/Application.cpp | 1 - interface/src/MainWindow.cpp | 18 +++++++++++++++--- interface/src/MainWindow.h | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index aa24711509..c720ed7606 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -516,7 +516,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : void Application::aboutToQuit() { _aboutToQuit = true; - setFullscreen(false); // if you exit while in full screen, you'll get bad behavior when you restart. } Application::~Application() { diff --git a/interface/src/MainWindow.cpp b/interface/src/MainWindow.cpp index f40f0ce751..21259e8c62 100644 --- a/interface/src/MainWindow.cpp +++ b/interface/src/MainWindow.cpp @@ -24,7 +24,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), - _windowGeometry("WindowGeometry") + _windowGeometry("WindowGeometry"), + _windowState("WindowState", 0) { } @@ -34,13 +35,24 @@ void MainWindow::restoreGeometry() { QRect geometry = _windowGeometry.get(qApp->desktop()->availableGeometry()); move(geometry.topLeft()); resize(geometry.size()); + + // Restore to maximized or full screen after restoring to windowed so that going windowed goes to good position and sizes. + Qt::WindowStates state = _windowState.get(Qt::WindowNoState); + if (state != Qt::WindowNoState) { + setWindowState(state); + } } void MainWindow::saveGeometry() { // Did not use geometry() on purpose, // see http://doc.qt.io/qt-5/qsettings.html#restoring-the-state-of-a-gui-application - QRect geometry(pos(), size()); - _windowGeometry.set(geometry); + _windowState.set(windowState()); + + // Save position and size only if windowed so that have good values for windowed after starting maximized or full screen. + if (windowState() == Qt::WindowNoState) { + QRect geometry(pos(), size()); + _windowGeometry.set(geometry); + } } void MainWindow::moveEvent(QMoveEvent* event) { diff --git a/interface/src/MainWindow.h b/interface/src/MainWindow.h index e2927fb4e2..4437fa6a1f 100644 --- a/interface/src/MainWindow.h +++ b/interface/src/MainWindow.h @@ -38,6 +38,7 @@ protected: private: Setting::Handle _windowGeometry; + Setting::Handle _windowState; }; #endif /* defined(__hifi__MainWindow__) */