2
glfw/ibus_glfw.c
vendored
2
glfw/ibus_glfw.c
vendored
@@ -414,7 +414,7 @@ ibus_process_key(const KeyEvent *ev_, _GLFWIBUSData *ibus) {
|
|||||||
if (!glfw_dbus_call_method_with_reply(
|
if (!glfw_dbus_call_method_with_reply(
|
||||||
ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, "ProcessKeyEvent",
|
ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, "ProcessKeyEvent",
|
||||||
key_event_processed, ev,
|
key_event_processed, ev,
|
||||||
DBUS_TYPE_UINT32, &ev->keysym, DBUS_TYPE_UINT32, &ev->keycode, DBUS_TYPE_UINT32,
|
DBUS_TYPE_UINT32, &ev->ibus_sym, DBUS_TYPE_UINT32, &ev->ibus_keycode, DBUS_TYPE_UINT32,
|
||||||
&state, DBUS_TYPE_INVALID)) {
|
&state, DBUS_TYPE_INVALID)) {
|
||||||
free(ev);
|
free(ev);
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|||||||
4
glfw/ibus_glfw.h
vendored
4
glfw/ibus_glfw.h
vendored
@@ -38,8 +38,8 @@ typedef struct {
|
|||||||
} _GLFWIBUSData;
|
} _GLFWIBUSData;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
xkb_keycode_t keycode;
|
xkb_keycode_t keycode, ibus_keycode;
|
||||||
xkb_keysym_t keysym;
|
xkb_keysym_t keysym, ibus_sym;
|
||||||
unsigned int glfw_modifiers;
|
unsigned int glfw_modifiers;
|
||||||
int action;
|
int action;
|
||||||
GLFWid window_id;
|
GLFWid window_id;
|
||||||
|
|||||||
6
glfw/xkb_glfw.c
vendored
6
glfw/xkb_glfw.c
vendored
@@ -436,8 +436,11 @@ glfw_xkb_handle_key_event(_GLFWwindow *window, _GLFWXKBData *xkb, xkb_keycode_t
|
|||||||
const xkb_keysym_t *syms, *clean_syms, *default_syms;
|
const xkb_keysym_t *syms, *clean_syms, *default_syms;
|
||||||
xkb_keysym_t glfw_sym;
|
xkb_keysym_t glfw_sym;
|
||||||
xkb_keycode_t code_for_sym = scancode;
|
xkb_keycode_t code_for_sym = scancode;
|
||||||
|
key_event.ibus_keycode = scancode;
|
||||||
#ifdef _GLFW_WAYLAND
|
#ifdef _GLFW_WAYLAND
|
||||||
code_for_sym += 8;
|
code_for_sym += 8;
|
||||||
|
#else
|
||||||
|
key_event.ibus_keycode -= 8;
|
||||||
#endif
|
#endif
|
||||||
debug("scancode: 0x%x release: %d ", scancode, action == GLFW_RELEASE);
|
debug("scancode: 0x%x release: %d ", scancode, action == GLFW_RELEASE);
|
||||||
XKBStateGroup *sg = &xkb->states;
|
XKBStateGroup *sg = &xkb->states;
|
||||||
@@ -495,8 +498,9 @@ glfw_xkb_handle_key_event(_GLFWwindow *window, _GLFWXKBData *xkb, xkb_keycode_t
|
|||||||
key_event.action = action; key_event.glfw_modifiers = sg->modifiers;
|
key_event.action = action; key_event.glfw_modifiers = sg->modifiers;
|
||||||
key_event.keycode = scancode; key_event.keysym = glfw_sym;
|
key_event.keycode = scancode; key_event.keysym = glfw_sym;
|
||||||
key_event.window_id = window->id; key_event.glfw_keycode = glfw_keycode;
|
key_event.window_id = window->id; key_event.glfw_keycode = glfw_keycode;
|
||||||
|
key_event.ibus_sym = syms[0];
|
||||||
if (ibus_process_key(&key_event, &xkb->ibus)) {
|
if (ibus_process_key(&key_event, &xkb->ibus)) {
|
||||||
debug("↳ to IBUS\n");
|
debug("↳ to IBUS: keycode: 0x%x keysym: 0x%x (%s) %s\n", key_event.ibus_keycode, key_event.ibus_sym, glfw_xkb_keysym_name(key_event.ibus_sym), format_mods(key_event.glfw_modifiers));
|
||||||
} else {
|
} else {
|
||||||
_glfwInputKeyboard(window, glfw_keycode, glfw_sym, action, sg->modifiers, key_event.text, 0);
|
_glfwInputKeyboard(window, glfw_keycode, glfw_sym, action, sg->modifiers, key_event.text, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user