fix(engine): redraw only for visible caret changes

This commit is contained in:
2026-08-15 15:07:13 +09:00
parent f489c56fb1
commit 67ed2ef478
2 changed files with 40 additions and 7 deletions

View File

@@ -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;
}