engine: the one capability is a flag
Cclientpreedit was a one-bit mask that every producer set as "want ? Cclientpreedit : 0" and every consumer masked out again; nothing else was ever going to join it. Keyreq carries clientpre, an int that says whether the client draws the preedit, and the engine and the XIM context keep it under that name.
This commit is contained in:
14
strans.c
14
strans.c
@@ -3,7 +3,7 @@
|
||||
|
||||
static Im im;
|
||||
static void *activeowner;
|
||||
static int activecap;
|
||||
static int clientpre; /* the owner draws its own preedit */
|
||||
static Caret caret;
|
||||
static Drawcmd lastdraw;
|
||||
static Emit transjp(Im*, Rune);
|
||||
@@ -191,7 +191,7 @@ snapshot(Drawcmd *dc)
|
||||
pre = search.text;
|
||||
else
|
||||
impre(&im, &pre);
|
||||
if(!(activecap & Cclientpreedit))
|
||||
if(!clientpre)
|
||||
dc->pre = pre;
|
||||
if(search.lang && pre.n == 0) /* a search just begun shows itself */
|
||||
sputr(&dc->pre, search.lang == LangEMOJI ? L'☺' : L'漢');
|
||||
@@ -881,7 +881,7 @@ init(void)
|
||||
memset(&search, 0, sizeof search);
|
||||
memset(&caret, 0, sizeof caret);
|
||||
activeowner = nil;
|
||||
activecap = 0;
|
||||
clientpre = 0;
|
||||
memset(&lastdraw, 0, sizeof lastdraw);
|
||||
}
|
||||
|
||||
@@ -905,7 +905,7 @@ imhandlekey(Keyreq *kr)
|
||||
if(kr->owner == activeowner){
|
||||
flush(&res.commit);
|
||||
activeowner = nil;
|
||||
activecap = 0;
|
||||
clientpre = 0;
|
||||
}
|
||||
break;
|
||||
case Keyreset:
|
||||
@@ -919,17 +919,17 @@ imhandlekey(Keyreq *kr)
|
||||
case Keycap:
|
||||
res.eaten = kr->owner == activeowner;
|
||||
if(res.eaten)
|
||||
activecap = kr->cap & Cclientpreedit;
|
||||
clientpre = kr->clientpre;
|
||||
break;
|
||||
case Keypress:
|
||||
res.eaten = 0;
|
||||
if(kr->owner == activeowner)
|
||||
activecap = kr->cap & Cclientpreedit;
|
||||
clientpre = kr->clientpre;
|
||||
if(keymeaningful(kr->ks)){
|
||||
if(kr->owner != activeowner){
|
||||
reset();
|
||||
activeowner = kr->owner;
|
||||
activecap = kr->cap & Cclientpreedit;
|
||||
clientpre = kr->clientpre;
|
||||
}
|
||||
caret = kr->caret;
|
||||
res.eaten = transition(kr->ks, kr->mod, &res.commit);
|
||||
|
||||
Reference in New Issue
Block a user