From 65066eef534bc6e86e846fd6c76cabe4ebd2ae96 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Mon, 17 Aug 2026 23:26:08 +0900 Subject: [PATCH] wl: an unavailable seat still owes the engine a release Another input method taking the seat made wlthread hide its popup and return, leaving activeowner pointing at our context with its text still pending, and whatever keys we had passed on still down at the client. leave() is that cleanup and all of it: it gives the keys back, drops a half-typed sequence, sends the Keyrelease and takes the popup down. Nothing visible changes either way -- the compositor drops anything an unavailable input method commits, and the next key from any other frontend takes the engine regardless. This is the engine left tidy, in the one word that already means it. Co-Authored-By: Claude Opus 5 (1M context) --- wl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wl.c b/wl.c index aef2f47..1134923 100644 --- a/wl.c +++ b/wl.c @@ -681,7 +681,7 @@ wlthread(void*) if(gone){ wllog("another input method already has the seat"); releasegrab(); - hidepopup(); + leave(); wl_display_flush(display); bufclear(&bufs[0]); bufclear(&bufs[1]);