diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5e62e6171..aa1f38d51 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1,8 +1,10 @@ #include "mainwindow.h" +#include #include #include #include +#include #include #include #include @@ -14,6 +16,23 @@ static QString DefaultWindowTitle() noexcept return "Neovim"; } +static void SetDefaultWindowSize(QWidget& widget) noexcept +{ + const QPoint local_position{ widget.width() / 2, 0 }; + const QPoint global_position{ widget.mapToGlobal(local_position) }; + const QScreen* screen{ qApp->screenAt(global_position) }; + if (!screen) { + return; + } + const QRect geometry{ screen->availableGeometry() }; + if (screen->orientation() == Qt::LandscapeOrientation) { + widget.resize(geometry.width() / 2, geometry.height()); + } + else { + widget.resize(geometry.width(), geometry.height() / 2); + } +} + MainWindow::MainWindow(NeovimConnector* c, QWidget* parent) noexcept : QMainWindow{ parent } , m_tabline{ *c, this } @@ -333,8 +352,17 @@ void MainWindow::restoreWindowGeometry() if (!settings.value("restore_window_geometry", true).toBool()) { return; } - restoreGeometry(settings.value("window_geometry").toByteArray()); - restoreState(settings.value("window_state").toByteArray()); + const QVariant geometry{ settings.value("window_geometry") }; + if (geometry.isValid()) { + restoreGeometry(geometry.toByteArray()); + } + else { + SetDefaultWindowSize(*this); + } + const QVariant state{ settings.value("window_state") }; + if (state.isValid()) { + restoreState(state.toByteArray()); + } } void MainWindow::setGuiAdaptiveColorEnabled(bool isEnabled)