fix(engine): redraw only for visible caret changes
This commit is contained in:
15
strans.c
15
strans.c
@@ -925,6 +925,13 @@ setactivecap(int cap)
|
||||
return old != (activecap & Cclientpreedit);
|
||||
}
|
||||
|
||||
static int
|
||||
careteq(Caret *a, Caret *b)
|
||||
{
|
||||
return a->valid == b->valid && a->x == b->x && a->y == b->y &&
|
||||
a->h == b->h;
|
||||
}
|
||||
|
||||
static void
|
||||
imhandlekey(Keyreq *kr)
|
||||
{
|
||||
@@ -952,9 +959,10 @@ imhandlekey(Keyreq *kr)
|
||||
}
|
||||
break;
|
||||
case Keycaret:
|
||||
if(kr->owner == activeowner){
|
||||
if(kr->owner == activeowner && !careteq(&caret, &kr->caret)){
|
||||
caret = kr->caret;
|
||||
redraw();
|
||||
if(visible)
|
||||
redraw();
|
||||
}
|
||||
break;
|
||||
case Keycap:
|
||||
@@ -978,7 +986,8 @@ imhandlekey(Keyreq *kr)
|
||||
activecap = kr->cap & Cclientpreedit;
|
||||
caret = kr->caret;
|
||||
changed = 1;
|
||||
}else if(kr->caret.valid){
|
||||
}else if(kr->caret.valid &&
|
||||
!careteq(&caret, &kr->caret)){
|
||||
caret = kr->caret;
|
||||
changed = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user