diff --git a/Userland/Services/SpiceAgent/SpiceAgent.cpp b/Userland/Services/SpiceAgent/SpiceAgent.cpp index af1bf5e498..895c6753d6 100644 --- a/Userland/Services/SpiceAgent/SpiceAgent.cpp +++ b/Userland/Services/SpiceAgent/SpiceAgent.cpp @@ -217,6 +217,12 @@ ErrorOr SpiceAgent::on_message_received() dbgln_if(SPICE_AGENT_DEBUG, "Ignored message: {}", header); break; + case Message::Type::Disconnected: + dbgln_if(SPICE_AGENT_DEBUG, "Spice server disconnected"); + if (on_disconnected_from_spice_server) + on_disconnected_from_spice_server(); + break; + default: dbgln("Unknown message received: {}", header); break; diff --git a/Userland/Services/SpiceAgent/SpiceAgent.h b/Userland/Services/SpiceAgent/SpiceAgent.h index 98994228fb..5b2c3ffa38 100644 --- a/Userland/Services/SpiceAgent/SpiceAgent.h +++ b/Userland/Services/SpiceAgent/SpiceAgent.h @@ -62,6 +62,8 @@ public: return {}; } + Function on_disconnected_from_spice_server; + private: NonnullOwnPtr m_spice_device; Vector m_capabilities; diff --git a/Userland/Services/SpiceAgent/main.cpp b/Userland/Services/SpiceAgent/main.cpp index ca3f62c4f6..bb78cebdb8 100644 --- a/Userland/Services/SpiceAgent/main.cpp +++ b/Userland/Services/SpiceAgent/main.cpp @@ -35,7 +35,11 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil(nullptr, nullptr)); auto agent = TRY(SpiceAgent::SpiceAgent::create(SPICE_DEVICE)); - TRY(agent->start()); + agent->on_disconnected_from_spice_server = [&]() { + app->quit(); + }; + + TRY(agent->start()); return app->exec(); }