diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index 291686af38..80297c80f0 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -695,4 +695,13 @@ bool BrowserWindow::eventFilter(QObject* obj, QEvent* event) return QMainWindow::eventFilter(obj, event); } +void BrowserWindow::closeEvent(QCloseEvent* event) +{ + s_settings->set_last_position(pos()); + s_settings->set_last_size(size()); + s_settings->set_is_maximized(isMaximized()); + + QMainWindow::closeEvent(event); +} + } diff --git a/Ladybird/Qt/BrowserWindow.h b/Ladybird/Qt/BrowserWindow.h index 9f27424761..5e52675055 100644 --- a/Ladybird/Qt/BrowserWindow.h +++ b/Ladybird/Qt/BrowserWindow.h @@ -96,6 +96,7 @@ private: virtual void resizeEvent(QResizeEvent*) override; virtual void moveEvent(QMoveEvent*) override; virtual void wheelEvent(QWheelEvent*) override; + virtual void closeEvent(QCloseEvent*) override; void debug_request(DeprecatedString const& request, DeprecatedString const& argument = ""); diff --git a/Ladybird/Qt/Settings.cpp b/Ladybird/Qt/Settings.cpp index 33aa802cb3..016060f996 100644 --- a/Ladybird/Qt/Settings.cpp +++ b/Ladybird/Qt/Settings.cpp @@ -33,6 +33,38 @@ Settings::Settings() m_qsettings = new QSettings("Serenity", "Ladybird", this); } +Optional Settings::last_position() +{ + if (m_qsettings->contains("last_position")) + return m_qsettings->value("last_position", QPoint()).toPoint(); + return {}; +} + +void Settings::set_last_position(QPoint const& last_position) +{ + m_qsettings->setValue("last_position", last_position); +} + +QSize Settings::last_size() +{ + return m_qsettings->value("last_size", QSize(800, 600)).toSize(); +} + +void Settings::set_last_size(QSize const& last_size) +{ + m_qsettings->setValue("last_size", last_size); +} + +bool Settings::is_maximized() +{ + return m_qsettings->value("is_maximized", QVariant(false)).toBool(); +} + +void Settings::set_is_maximized(bool is_maximized) +{ + m_qsettings->setValue("is_maximized", is_maximized); +} + QString Settings::new_tab_page() { static auto const default_new_tab_url = rebase_default_url_on_serenity_resource_root(Browser::default_new_tab_url); diff --git a/Ladybird/Qt/Settings.h b/Ladybird/Qt/Settings.h index 6662bde11f..45d126bce4 100644 --- a/Ladybird/Qt/Settings.h +++ b/Ladybird/Qt/Settings.h @@ -7,7 +7,9 @@ #pragma once #include +#include #include +#include namespace Ladybird { @@ -15,6 +17,15 @@ class Settings : public QObject { public: Settings(); + Optional last_position(); + void set_last_position(QPoint const& last_position); + + QSize last_size(); + void set_last_size(QSize const& last_size); + + bool is_maximized(); + void set_is_maximized(bool is_maximized); + QString new_tab_page(); void set_new_tab_page(QString const& page); diff --git a/Ladybird/Qt/main.cpp b/Ladybird/Qt/main.cpp index c72720bffa..6f51539c3c 100644 --- a/Ladybird/Qt/main.cpp +++ b/Ladybird/Qt/main.cpp @@ -114,7 +114,16 @@ ErrorOr serenity_main(Main::Arguments arguments) Ladybird::s_settings = adopt_own_if_nonnull(new Ladybird::Settings()); Ladybird::BrowserWindow window(initial_url, cookie_jar, webdriver_content_ipc_path, enable_callgrind_profiling ? WebView::EnableCallgrindProfiling::Yes : WebView::EnableCallgrindProfiling::No, use_lagom_networking ? Ladybird::UseLagomNetworking::Yes : Ladybird::UseLagomNetworking::No); window.setWindowTitle("Ladybird"); - window.resize(800, 600); + + if (Ladybird::s_settings->is_maximized()) { + window.showMaximized(); + } else { + auto last_position = Ladybird::s_settings->last_position(); + if (last_position.has_value()) + window.move(last_position.value()); + window.resize(Ladybird::s_settings->last_size()); + } + window.show(); return event_loop.exec();