|
@@ -258,6 +258,27 @@ static int toGLFWKeyCode(uint32_t key)
|
|
|
return GLFW_KEY_UNKNOWN;
|
|
|
}
|
|
|
|
|
|
+static void inputChar(_GLFWwindow* window, uint32_t key)
|
|
|
+{
|
|
|
+ uint32_t code, num_syms;
|
|
|
+ long cp;
|
|
|
+ const xkb_keysym_t *syms;
|
|
|
+
|
|
|
+ code = key + 8;
|
|
|
+ num_syms = xkb_key_get_syms(_glfw.wl.xkb.state, code, &syms);
|
|
|
+
|
|
|
+ if (num_syms == 1)
|
|
|
+ {
|
|
|
+ cp = _glfwKeySym2Unicode(syms[0]);
|
|
|
+ if (cp != -1)
|
|
|
+ {
|
|
|
+ const int mods = _glfw.wl.xkb.modifiers;
|
|
|
+ const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT));
|
|
|
+ _glfwInputChar(window, cp, mods, plain);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void keyboardHandleKey(void* data,
|
|
|
struct wl_keyboard* keyboard,
|
|
|
uint32_t serial,
|
|
@@ -265,11 +286,8 @@ static void keyboardHandleKey(void* data,
|
|
|
uint32_t key,
|
|
|
uint32_t state)
|
|
|
{
|
|
|
- uint32_t code, num_syms;
|
|
|
- long cp;
|
|
|
int keyCode;
|
|
|
int action;
|
|
|
- const xkb_keysym_t *syms;
|
|
|
_GLFWwindow* window = _glfw.wl.keyboardFocus;
|
|
|
|
|
|
if (!window)
|
|
@@ -282,19 +300,8 @@ static void keyboardHandleKey(void* data,
|
|
|
_glfwInputKey(window, keyCode, key, action,
|
|
|
_glfw.wl.xkb.modifiers);
|
|
|
|
|
|
- code = key + 8;
|
|
|
- num_syms = xkb_key_get_syms(_glfw.wl.xkb.state, code, &syms);
|
|
|
-
|
|
|
- if (num_syms == 1)
|
|
|
- {
|
|
|
- cp = _glfwKeySym2Unicode(syms[0]);
|
|
|
- if (cp != -1)
|
|
|
- {
|
|
|
- const int mods = _glfw.wl.xkb.modifiers;
|
|
|
- const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT));
|
|
|
- _glfwInputChar(window, cp, mods, plain);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (action == GLFW_PRESS)
|
|
|
+ inputChar(window, key);
|
|
|
}
|
|
|
|
|
|
static void keyboardHandleModifiers(void* data,
|