diff --git a/glfw/glfw3.h b/glfw/glfw3.h index 05c73164c..1f7508c8b 100644 --- a/glfw/glfw3.h +++ b/glfw/glfw3.h @@ -512,6 +512,7 @@ typedef enum { * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_NUM_LOCK 0x0080 +#define GLFW_LOCK_MASK (GLFW_MOD_NUM_LOCK | GLFW_MOD_CAPS_LOCK) /*! @} */ diff --git a/kitty/glfw-wrapper.h b/kitty/glfw-wrapper.h index ed0cd4b3a..0795adf1f 100644 --- a/kitty/glfw-wrapper.h +++ b/kitty/glfw-wrapper.h @@ -248,9 +248,9 @@ typedef enum { * * If this bit is set the Num Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. - * @note Ravi: Num lock is not supported in this branch */ #define GLFW_MOD_NUM_LOCK 0x0080 +#define GLFW_LOCK_MASK (GLFW_MOD_NUM_LOCK | GLFW_MOD_CAPS_LOCK) /*! @} */ diff --git a/kitty/key_encoding.c b/kitty/key_encoding.c index 9e0fdfcd0..2cf1d68cb 100644 --- a/kitty/key_encoding.c +++ b/kitty/key_encoding.c @@ -8,7 +8,6 @@ #include "keys.h" #include "charsets.h" -static const unsigned LOCK_MASK = GLFW_MOD_NUM_LOCK | GLFW_MOD_CAPS_LOCK; typedef enum { SHIFT=1, ALT=2, CTRL=4, SUPER=8, HYPER=16, META=32, CAPS_LOCK=64, NUM_LOCK=128} ModifierMasks; typedef enum { PRESS = 0, REPEAT = 1, RELEASE = 2} KeyAction; typedef struct { @@ -49,7 +48,7 @@ is_modifier_key(const uint32_t key) { static inline void convert_glfw_mods(int mods, KeyEvent *ev, const unsigned key_encoding_flags) { - if (!key_encoding_flags) mods &= ~LOCK_MASK; + if (!key_encoding_flags) mods &= ~GLFW_LOCK_MASK; ev->mods.alt = (mods & GLFW_MOD_ALT) > 0, ev->mods.ctrl = (mods & GLFW_MOD_CONTROL) > 0, ev->mods.shift = (mods & GLFW_MOD_SHIFT) > 0, ev->mods.super = (mods & GLFW_MOD_SUPER) > 0, ev->mods.hyper = (mods & GLFW_MOD_HYPER) > 0, ev->mods.meta = (mods & GLFW_MOD_META) > 0; ev->mods.numlock = (mods & GLFW_MOD_NUM_LOCK) > 0, ev->mods.capslock = (mods & GLFW_MOD_CAPS_LOCK) > 0; ev->mods.value = ev->mods.shift ? SHIFT : 0; diff --git a/kitty/mouse.c b/kitty/mouse.c index 628ce1713..e4b340916 100644 --- a/kitty/mouse.c +++ b/kitty/mouse.c @@ -358,6 +358,7 @@ handle_mouse_movement_in_kitty(Window *w, int button, bool mouse_cell_changed) { } HANDLER(handle_move_event) { + modifiers &= ~GLFW_LOCK_MASK; unsigned int x = 0, y = 0; if (OPT(focus_follows_mouse)) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; @@ -421,6 +422,7 @@ clear_click_queue(Window *w) { } HANDLER(add_click) { + modifiers &= ~GLFW_LOCK_MASK; ClickQueue *q = &w->click_queue; if (q->length == CLICK_QUEUE_SZ) { memmove(q->clicks, q->clicks + 1, sizeof(Click) * (CLICK_QUEUE_SZ - 1)); q->length--; } monotonic_t now = monotonic(); @@ -477,6 +479,7 @@ handle_button_event_in_kitty(Window *w, int button, int modifiers, bool is_relea } HANDLER(handle_button_event) { + modifiers &= ~GLFW_LOCK_MASK; Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; bool is_release = !global_state.callback_os_window->mouse_button_pressed[button]; if (window_idx != t->active_window && !is_release) { @@ -506,6 +509,7 @@ currently_pressed_button(void) { } HANDLER(handle_event) { + modifiers &= ~GLFW_LOCK_MASK; if (button == -1) { button = currently_pressed_button(); handle_move_event(w, button, modifiers, window_idx);