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

12
ibus.c
View File

@@ -32,6 +32,7 @@ static char addrfile[256];
static int icctr;
static int busctr;
static Channel *replyc;
static uvlong owner;
static DBusHandlerResult onmsg(DBusConnection*, DBusMessage*, void*);
@@ -212,6 +213,8 @@ sendkey(u32int ks, u32int mod, Keyres *res)
{
Keyreq kr;
kr.owner = owner;
kr.op = Keypress;
kr.ks = ks;
kr.mod = mod;
kr.want = 1;
@@ -223,9 +226,15 @@ sendkey(u32int ks, u32int mod, Keyres *res)
static void
sendreset(void)
{
Keyreq kr;
Keyres res;
sendkey(Kesc, 0, &res);
memset(&kr, 0, sizeof kr);
kr.owner = owner;
kr.op = Keyreset;
kr.reply = replyc;
chansend(keyc, &kr);
chanrecv(replyc, &res);
}
static void
@@ -561,6 +570,7 @@ ibusthread(void *_)
if(ibusinit() < 0)
return;
replyc = chancreate(sizeof(Keyres), 0);
owner = ownernew();
for(;;){
n = 0;
for(i = 0; i < nwatches && n < Maxwatches; i++){