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) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 23:26:08 +09:00
parent 0f128a46b3
commit 65066eef53

2
wl.c
View File

@@ -681,7 +681,7 @@ wlthread(void*)
if(gone){ if(gone){
wllog("another input method already has the seat"); wllog("another input method already has the seat");
releasegrab(); releasegrab();
hidepopup(); leave();
wl_display_flush(display); wl_display_flush(display);
bufclear(&bufs[0]); bufclear(&bufs[0]);
bufclear(&bufs[1]); bufclear(&bufs[1]);