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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user