summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-05 19:05:36 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-01-05 19:05:36 +0100
commit944b5e7072ff85333cb0f026a9864865e30660a3 (patch)
tree179b0a6e2af8d64d2aa9f7d804ba34c84fe6b45e /src
parent3b1ea22d1de7fe9e55414bfa6e3d8461e49cf0c3 (diff)
Wayland: numeric keypad keys don't work as intended (#881)
Diffstat (limited to 'src')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
index 6507b0b41..60162f92a 100644
--- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
@@ -719,7 +719,20 @@ const char *action = (state == WL_KEYBOARD_KEY_STATE_PRESSED ? "press" : "releas
fprintf(stderr, "key %s: sym: %-12s(%d) code:%u fl_win=%p, ", action, buf, sym, keycode, Fl_Wayland_Window_Driver::surface_to_window(seat->keyboard_surface));*/
xkb_state_key_get_utf8(seat->xkb_state, keycode, buf, sizeof(buf));
//fprintf(stderr, "utf8: '%s' e_length=%d [%d]\n", buf, (int)strlen(buf), *buf);
- Fl::e_keysym = for_key_vector;
+ Fl::e_keysym = Fl::e_original_keysym = for_key_vector;
+ if (!(Fl::e_state & FL_NUM_LOCK) && sym >= 0xFF95 && sym <= 0xFF9E) {
+ // process keypad number keys when NumLock is off
+ if (sym == XKB_KEY_KP_Insert) Fl::e_keysym = FL_Insert; // 0
+ else if (sym == XKB_KEY_KP_End) Fl::e_keysym = FL_End; // 1
+ else if (sym == XKB_KEY_KP_Down) Fl::e_keysym = FL_Down; // 2
+ else if (sym == XKB_KEY_KP_Page_Down) Fl::e_keysym = FL_Page_Down; // 3
+ else if (sym == XKB_KEY_KP_Left) Fl::e_keysym = FL_Left; // 4
+ else if (sym == XKB_KEY_KP_Begin) Fl::e_keysym = 0xff0b; // 5
+ else if (sym == XKB_KEY_KP_Right) Fl::e_keysym = FL_Right; // 6
+ else if (sym == XKB_KEY_KP_Home) Fl::e_keysym = FL_Home; // 7
+ else if (sym == XKB_KEY_KP_Up) Fl::e_keysym = FL_Up; // 8
+ else if (sym == XKB_KEY_KP_Page_Up) Fl::e_keysym = FL_Page_Up; // 9
+ }
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
if (search_int_vector(key_vector, for_key_vector) < 0) {
key_vector.push_back(for_key_vector);