xim: refresh placement before each key

This commit is contained in:
2026-08-14 17:43:56 +09:00
parent 68dc1e6a18
commit 76af1a022f
2 changed files with 32 additions and 22 deletions

View File

@@ -421,7 +421,7 @@ release(Ic *state)
}
static void
kpress(Ic *state, xcb_im_input_context_t *ic, xcb_key_press_event_t *ev)
kpress(Ic *state, xcb_key_press_event_t *ev)
{
Keyres res;
char buf[Maxutf];
@@ -438,10 +438,7 @@ kpress(Ic *state, xcb_im_input_context_t *ic, xcb_key_press_event_t *ev)
key = rune;
if(meaningful(key)){
wasvalid = state->caret.valid;
if(!state->engaged)
refreshplace(state);
else if(readattrs(state))
place(state);
refreshplace(state);
if(state->engaged && wasvalid && !state->caret.valid)
sendrequest(state, Keycaret, 0, 0, &res);
}
@@ -450,7 +447,7 @@ kpress(Ic *state, xcb_im_input_context_t *ic, xcb_key_press_event_t *ev)
commit(state, buf, n);
updatepreedit(state, &res.preedit);
if(!res.eaten)
xcb_im_forward_event(xim, ic, ev);
xcb_im_forward_event(xim, state->xic, ev);
xcb_flush(conn);
}
@@ -485,8 +482,6 @@ setstyle(Ic *state, u32int style)
if(!stylecap(style, &cap))
style = XCB_IM_PreeditNothing | XCB_IM_StatusNothing;
if(state->prestarted && !(style & XCB_IM_PreeditCallbacks))
clearpreedit(state);
state->style = style;
state->cap = cap;
}
@@ -549,7 +544,7 @@ callback(xcb_im_t *im, xcb_im_client_t *client, xcb_im_input_context_t *ic,
case XCB_XIM_FORWARD_EVENT:
ev = arg;
if(ev != nil && (ev->response_type & ~0x80) == XCB_KEY_PRESS)
kpress(state, ic, ev);
kpress(state, ev);
break;
case XCB_XIM_SET_IC_VALUES:
case XCB_XIM_SET_IC_FOCUS: