Restore to windowed, maximized, or full screen appropriately at start-up

This commit is contained in:
David Rowe 2015-02-11 16:13:04 -08:00
parent 9a7ed8055f
commit 967afd8d67
3 changed files with 16 additions and 4 deletions

View file

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

View file

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

View file

@ -38,6 +38,7 @@ protected:
private:
Setting::Handle<QRect> _windowGeometry;
Setting::Handle<int> _windowState;
};
#endif /* defined(__hifi__MainWindow__) */