From e27d0d36fa86b668e722a006c301e2e64d5a1922 Mon Sep 17 00:00:00 2001
From: Norman Feske <norman.feske@genode-labs.com>
Date: Thu, 5 Dec 2024 15:56:52 +0100
Subject: [PATCH] wm: revoke curr focus if new focus is undefined

This allows the window layouter to ensure that input entered after
switching to an empty screen won't be routed to the old focused but
no longer visible window.

Issue #5390
---
 repos/gems/src/server/wm/main.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/repos/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc
index 02cde0a789..88f9bc62fc 100644
--- a/repos/gems/src/server/wm/main.cc
+++ b/repos/gems/src/server/wm/main.cc
@@ -79,10 +79,14 @@ struct Wm::Main : Pointer::Tracker, Gui::Session_component::Action
 	{
 		_gui_root.revoke_exclusive_input();
 		_focus_rom.update();
+		bool defined = false;
 		_focus_rom.xml().with_optional_sub_node("window", [&] (Xml_node const &window) {
 			_with_win_id_from_xml(window, [&] (Window_registry::Id id) {
 				_gui_root.with_gui_session(id, [&] (Capability<Gui::Session> cap) {
-					_focus_gui_session.focus(cap); }); }); });
+					_focus_gui_session.focus(cap);
+					defined = true; }); }); });
+		if (!defined)
+			_focus_gui_session.focus({ });
 	}
 
 	Signal_handler<Main> _focus_handler {