Skip to content

Commit

Permalink
Set a default size on first launch
Browse files Browse the repository at this point in the history
When `~/.config/nvim-qt/window-geometry.conf` does not exist then
restoreGeometry() will initialize a window that is tiny and must be
resized in order to be usable in some environments.

Resize the window to half the screen when launched for the first time.
Do not restore window state when it is invalid or missing.
  • Loading branch information
davvid authored Mar 21, 2024
1 parent 5609399 commit 442abfb
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions src/gui/mainwindow.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#include "mainwindow.h"

#include <QApplication>
#include <QCloseEvent>
#include <QEventLoop>
#include <QLayout>
#include <QScreen>
#include <QSettings>
#include <QStyleFactory>
#include <QToolBar>
Expand All @@ -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 }
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 442abfb

Please sign in to comment.