engine: update active preedit capability

This commit is contained in:
2026-08-14 18:44:52 +09:00
parent 9a3a92170e
commit b536573622
3 changed files with 68 additions and 18 deletions

View File

@@ -783,6 +783,17 @@ meaningful(Keyreq *kr)
return kr->ks != 0 && !ismodkey(kr->ks);
}
static int
setactivecap(int cap)
{
int old;
old = activecap & Cclientpreedit;
activecap &= ~Cclientpreedit;
activecap |= cap & Cclientpreedit;
return old != (activecap & Cclientpreedit);
}
static void
imhandlekey(Keyreq *kr)
{
@@ -809,13 +820,24 @@ imhandlekey(Keyreq *kr)
show();
}
break;
case Keycap:
res.eaten = 0;
if(activeowner != nil && kr->owner == activeowner){
res.eaten = 1;
if(setactivecap(kr->cap))
show();
}
break;
case Keypress:
res.eaten = 0;
if(activeowner != nil && kr->owner == activeowner &&
setactivecap(kr->cap))
show();
if(meaningful(kr)){
if(kr->owner != activeowner){
reset();
activeowner = kr->owner;
activecap = kr->cap;
activecap = kr->cap & Cclientpreedit;
caret = kr->caret;
}else if(kr->caret.valid)
caret = kr->caret;