engine: update active preedit capability
This commit is contained in:
@@ -728,7 +728,8 @@ engine_popup_preedit_capability(struct ct *t)
|
||||
{
|
||||
Dictres res;
|
||||
Drawcmd dc;
|
||||
char client, popupowner;
|
||||
Keyres kres;
|
||||
char client, inactive;
|
||||
|
||||
init();
|
||||
im.l = getlang(LangJP);
|
||||
@@ -742,30 +743,56 @@ engine_popup_preedit_capability(struct ct *t)
|
||||
res.kouho[0] = mkstr("家");
|
||||
res.nkouho = 1;
|
||||
dictresult(&res);
|
||||
im.sel = 0;
|
||||
show();
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0)){
|
||||
CT_EQ_INT(t, 0, dc.pre.n);
|
||||
CT_EQ_INT(t, 1, dc.nkouho);
|
||||
CT_EQ_INT(t, 0, dc.sel);
|
||||
checkstr(t, "client-preedit candidate", "家", &dc.kouho[0]);
|
||||
}
|
||||
|
||||
ownerrequestcap(&popupowner, 0, Keypress, 'n', 0);
|
||||
kres = ownerrequestcap(&client, 0, Keycap, 0, 0);
|
||||
CT_CHECK(t, kres.eaten);
|
||||
checkstr(t, "capability response preedit", "か", &kres.preedit);
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0)){
|
||||
checkstr(t, "popup preedit", "ん", &dc.pre);
|
||||
CT_EQ_INT(t, 0, dc.nkouho);
|
||||
}
|
||||
memset(&res, 0, sizeof res);
|
||||
res.lang = LangJP;
|
||||
res.key = mkstr("ん");
|
||||
res.seq = dictseq;
|
||||
res.kouho[0] = mkstr("ン");
|
||||
res.nkouho = 1;
|
||||
dictresult(&res);
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0)){
|
||||
checkstr(t, "async popup preedit", "ん", &dc.pre);
|
||||
checkstr(t, "popup preedit", "か", &dc.pre);
|
||||
CT_EQ_INT(t, 1, dc.nkouho);
|
||||
checkstr(t, "popup candidate", "ン", &dc.kouho[0]);
|
||||
CT_EQ_INT(t, 0, dc.sel);
|
||||
checkstr(t, "popup candidate", "家", &dc.kouho[0]);
|
||||
}
|
||||
ownerrequest(&popupowner, Keyrelease, 0, 0);
|
||||
CT_EQ_INT(t, 1, im.nkouho);
|
||||
CT_EQ_INT(t, 0, im.sel);
|
||||
checkstr(t, "retained popup candidate", "家", &im.kouho[0]);
|
||||
|
||||
kres = ownerrequestcap(&client, 0, Keycap, 0, 0);
|
||||
CT_CHECK(t, kres.eaten);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
|
||||
kres = ownerrequestcap(&inactive, Cclientpreedit, Keycap, 0, 0);
|
||||
CT_CHECK(t, !kres.eaten);
|
||||
CT_EQ_INT(t, 0, kres.preedit.n);
|
||||
CT_EQ_PTR(t, &client, activeowner);
|
||||
CT_EQ_INT(t, 0, activecap & Cclientpreedit);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
|
||||
kres = ownerrequestcap(&client, Cclientpreedit, Keycap, 0, 0);
|
||||
CT_CHECK(t, kres.eaten);
|
||||
checkstr(t, "restored client preedit", "か", &kres.preedit);
|
||||
if(CT_CHECK(t, draindraw(&dc) > 0)){
|
||||
CT_EQ_INT(t, 0, dc.pre.n);
|
||||
CT_EQ_INT(t, 1, dc.nkouho);
|
||||
CT_EQ_INT(t, 0, dc.sel);
|
||||
checkstr(t, "restored client candidate", "家", &dc.kouho[0]);
|
||||
}
|
||||
CT_EQ_INT(t, 1, im.nkouho);
|
||||
CT_EQ_INT(t, 0, im.sel);
|
||||
checkstr(t, "retained client candidate", "家", &im.kouho[0]);
|
||||
kres = ownerrequestcap(&client, Cclientpreedit, Keycap, 0, 0);
|
||||
CT_CHECK(t, kres.eaten);
|
||||
CT_EQ_INT(t, 0, draindraw(nil));
|
||||
|
||||
ownerrequest(&client, Keyrelease, 0, 0);
|
||||
draindraw(nil);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user