1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:37:35 +00:00

Ladybird: Trigger browser to quit when the main window is closed

This patch adds an event handler to the main window which allows it to
respond to a user closing the window. This event is then passed on to
the LibCore event loop, which allows the application quit itself.
Previously the application would hang, only running in the background,
until killed by an external force.
This commit is contained in:
Matthew Costa 2022-07-05 18:42:45 +01:00 committed by Andrew Kaster
parent 95e3e06a1e
commit 7bf3010185
3 changed files with 19 additions and 3 deletions

View file

@ -1,8 +1,10 @@
#include "BrowserWindow.h" #include "BrowserWindow.h"
#include "WebView.h" #include "WebView.h"
#include <LibCore/EventLoop.h>
#include <QStatusBar> #include <QStatusBar>
BrowserWindow::BrowserWindow() BrowserWindow::BrowserWindow(Core::EventLoop& event_loop)
: m_event_loop(event_loop)
{ {
m_toolbar = new QToolBar; m_toolbar = new QToolBar;
m_location_edit = new QLineEdit; m_location_edit = new QLineEdit;
@ -39,3 +41,13 @@ void BrowserWindow::page_favicon_changed(QIcon icon)
{ {
setWindowIcon(icon); setWindowIcon(icon);
} }
void BrowserWindow::closeEvent(QCloseEvent* event)
{
QWidget::closeEvent(event);
// FIXME: Ladybird only supports one window at the moment. When we support
// multiple windows, we'll only want to fire off the quit event when
// all of the browser windows have closed.
m_event_loop.quit(0);
}

View file

@ -1,3 +1,4 @@
#include <LibCore/Forward.h>
#include <QIcon> #include <QIcon>
#include <QLineEdit> #include <QLineEdit>
#include <QMainWindow> #include <QMainWindow>
@ -10,10 +11,12 @@ class WebView;
class BrowserWindow : public QMainWindow { class BrowserWindow : public QMainWindow {
Q_OBJECT Q_OBJECT
public: public:
BrowserWindow(); explicit BrowserWindow(Core::EventLoop&);
WebView& view() { return *m_view; } WebView& view() { return *m_view; }
virtual void closeEvent(QCloseEvent*) override;
public slots: public slots:
void location_edit_return_pressed(); void location_edit_return_pressed();
void page_title_changed(QString); void page_title_changed(QString);
@ -23,4 +26,5 @@ private:
QToolBar* m_toolbar { nullptr }; QToolBar* m_toolbar { nullptr };
QLineEdit* m_location_edit { nullptr }; QLineEdit* m_location_edit { nullptr };
WebView* m_view { nullptr }; WebView* m_view { nullptr };
Core::EventLoop& m_event_loop;
}; };

View file

@ -28,7 +28,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
Core::EventLoop event_loop; Core::EventLoop event_loop;
QApplication app(arguments.argc, arguments.argv); QApplication app(arguments.argc, arguments.argv);
BrowserWindow window; BrowserWindow window(event_loop);
window.setWindowTitle("Ladybird"); window.setWindowTitle("Ladybird");
window.resize(800, 600); window.resize(800, 600);
window.show(); window.show();