fix: retain the active owner's caret
This commit is contained in:
14
strans.c
14
strans.c
@@ -7,6 +7,7 @@ static int visible = 0;
|
||||
static Lock ownerlock;
|
||||
static uvlong ownerctr;
|
||||
static uvlong activeowner;
|
||||
static Caret caret;
|
||||
static void dictqmap(Im*);
|
||||
static void dictqjp(Im*);
|
||||
static void backjp(Im*);
|
||||
@@ -128,6 +129,7 @@ show(void)
|
||||
if(n > Maxdisp) n = Maxdisp;
|
||||
dc.nkouho = n;
|
||||
dc.sel = im.sel >= 0 ? im.sel - first : -1;
|
||||
dc.caret = caret;
|
||||
for(i = 0; i < n; i++)
|
||||
dc.kouho[i] = im.kouho[first + i];
|
||||
if(dc.pre.n == 0 && n == 0 && !visible)
|
||||
@@ -147,6 +149,7 @@ reset(void)
|
||||
search.on = 0;
|
||||
sclear(&search.raw);
|
||||
sclear(&search.text);
|
||||
memset(&caret, 0, sizeof caret);
|
||||
clearkouho();
|
||||
show();
|
||||
}
|
||||
@@ -734,6 +737,7 @@ init(void)
|
||||
memset(&im, 0, sizeof(im));
|
||||
im.l = getlang(LangEN);
|
||||
memset(&search, 0, sizeof search);
|
||||
memset(&caret, 0, sizeof caret);
|
||||
activeowner = 0;
|
||||
visible = 0;
|
||||
}
|
||||
@@ -763,13 +767,21 @@ imhandlekey(Keyreq *kr)
|
||||
if(kr->owner == activeowner)
|
||||
reset();
|
||||
break;
|
||||
case Keycaret:
|
||||
if(kr->owner == activeowner){
|
||||
caret = kr->caret;
|
||||
show();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
res.eaten = 0;
|
||||
if(meaningful(kr)){
|
||||
if(kr->owner != activeowner){
|
||||
reset();
|
||||
activeowner = kr->owner;
|
||||
}
|
||||
caret = kr->caret;
|
||||
}else if(kr->caret.valid)
|
||||
caret = kr->caret;
|
||||
res.eaten = keystroke(kr->ks, kr->mod, &res.commit);
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user