diff --git a/Userland/Libraries/LibGUI/Notification.cpp b/Userland/Libraries/LibGUI/Notification.cpp index 13a4820d6b..b4ea45882f 100644 --- a/Userland/Libraries/LibGUI/Notification.cpp +++ b/Userland/Libraries/LibGUI/Notification.cpp @@ -40,12 +40,17 @@ public: send_sync(); } + virtual void die() override { m_connected = false; } + + bool is_connected() const { return m_connected; } + private: NotificationServerConnection() : IPC::ServerConnection(*this, "/tmp/portal/notify") { } virtual void handle(const Messages::NotificationClient::Dummy&) override { } + bool m_connected { true }; }; Notification::Notification() @@ -60,15 +65,26 @@ Notification::~Notification() void Notification::show() { VERIFY(!m_showing); + VERIFY(!m_disposed); + if (!m_connection->is_connected()) { + // This would imply that the NotificationServer crashed before we could send it any data. + VERIFY_NOT_REACHED(); + } auto icon = m_icon ? m_icon->to_shareable_bitmap() : Gfx::ShareableBitmap(); m_connection->send_sync(m_text, m_title, icon); m_showing = true; } + void Notification::close() { VERIFY(m_showing); - m_connection->send_sync(); + if (m_connection->is_connected()) { + m_connection->send_sync(); + } + m_showing = false; + m_disposed = true; +} } } diff --git a/Userland/Libraries/LibGUI/Notification.h b/Userland/Libraries/LibGUI/Notification.h index 44f1479b74..445b856411 100644 --- a/Userland/Libraries/LibGUI/Notification.h +++ b/Userland/Libraries/LibGUI/Notification.h @@ -60,6 +60,7 @@ private: NonnullRefPtr m_connection; bool m_showing { false }; + bool m_disposed { false }; }; }