diff --git a/Libraries/LibGUI/GWindow.cpp b/Libraries/LibGUI/GWindow.cpp index 3ab70d20c9..d341bef256 100644 --- a/Libraries/LibGUI/GWindow.cpp +++ b/Libraries/LibGUI/GWindow.cpp @@ -322,6 +322,10 @@ void GWindow::event(CEvent& event) } if (event.type() == GEvent::WindowCloseRequest) { + if (on_close_request) { + if (on_close_request() == GWindow::CloseRequestDecision::StayOpen) + return; + } close(); return; } diff --git a/Libraries/LibGUI/GWindow.h b/Libraries/LibGUI/GWindow.h index 5937a18f6f..3401ba6a63 100644 --- a/Libraries/LibGUI/GWindow.h +++ b/Libraries/LibGUI/GWindow.h @@ -4,9 +4,9 @@ #include #include #include -#include #include #include +#include class GWidget; class GWMEvent; @@ -57,6 +57,13 @@ public: bool should_destroy_on_close() { return m_destroy_on_close; } void set_should_destroy_on_close(bool b) { m_destroy_on_close = b; } + enum class CloseRequestDecision { + StayOpen, + Close, + }; + + Function on_close_request; + int x() const { return rect().x(); } int y() const { return rect().y(); } int width() const { return rect().width(); }