engine: update active preedit capability
This commit is contained in:
24
strans.c
24
strans.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user