fix: assign one active engine owner

This commit is contained in:
2026-08-12 15:41:46 +09:00
parent 9c244d1dd1
commit 5ba5cf209c
14 changed files with 212 additions and 13 deletions

View File

@@ -26,12 +26,15 @@ static int active;
static int pending;
static u32int imserial;
static Channel *replyc;
static uvlong owner;
static void
sendkey(u32int ks, u32int mod, Keyres *res)
{
Keyreq kr;
kr.owner = owner;
kr.op = Keypress;
kr.ks = ks;
kr.mod = mod;
kr.want = 1;
@@ -41,11 +44,17 @@ sendkey(u32int ks, u32int mod, Keyres *res)
}
static void
sendreset(void)
sendrelease(void)
{
Keyreq kr;
Keyres res;
sendkey(Kesc, 0, &res);
memset(&kr, 0, sizeof kr);
kr.owner = owner;
kr.op = Keyrelease;
kr.reply = replyc;
chansend(keyc, &kr);
chanrecv(replyc, &res);
}
static u32int
@@ -243,13 +252,15 @@ im_done(void *data, struct zwp_input_method_v2 *m)
imserial++;
if(pending && !active){
active = 1;
owner = ownernew();
grab = zwp_input_method_v2_grab_keyboard(im);
if(grab != nil)
zwp_input_method_keyboard_grab_v2_add_listener(grab,
&grab_listener, nil);
}else if(!pending && active){
active = 0;
sendreset();
sendrelease();
owner = 0;
if(grab != nil){
zwp_input_method_keyboard_grab_v2_release(grab);
grab = nil;