xim: Compose results of any length, StatusNone styles; ibus: no cursor size check

A Compose sequence whose result is more than one character has no
keysym, so xkb_compose_state_get_one_sym gave nothing and the result was
lost; the UTF-8 the compose state holds is committed instead.  Clients
that ask for a StatusNone style — fcitx5 offers them — failed to create
an input context; the three preedit styles come in both status flavours
now.  IBus SetCursorLocation returned an error for a negative width or
height that nothing reads and no client ever waits for.
This commit is contained in:
2026-08-17 01:49:06 +09:00
parent 0cb395579f
commit 7c9e736996
4 changed files with 13 additions and 8 deletions

View File

@@ -632,6 +632,9 @@ xim_adapter_styles(struct ct *t)
XCB_IM_PreeditPosition | XCB_IM_StatusNothing,
XCB_IM_PreeditCallbacks | XCB_IM_StatusNothing,
XCB_IM_PreeditNothing | XCB_IM_StatusNothing,
XCB_IM_PreeditPosition | XCB_IM_StatusNone,
XCB_IM_PreeditCallbacks | XCB_IM_StatusNone,
XCB_IM_PreeditNothing | XCB_IM_StatusNone,
};
xcb_im_input_context_t *ic;
Ic *state;
@@ -651,7 +654,8 @@ xim_adapter_styles(struct ct *t)
state = icbindings[0].data;
if(!CT_CHECK(t, state != nil && state == ics))
continue;
CT_EQ_INT(t, i == 1 ? Cclientpreedit : 0, state->cap);
CT_EQ_INT(t, want[i] & XCB_IM_PreeditCallbacks ? Cclientpreedit : 0,
state->cap);
CT_EQ_PTR(t, ic, state->xic);
icunlink(state);
free(state);