[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 2cb3dea72b7: Correctly register Num Lock keys under Haiku
From: |
Po Lu |
Subject: |
master 2cb3dea72b7: Correctly register Num Lock keys under Haiku |
Date: |
Mon, 23 Oct 2023 01:38:22 -0400 (EDT) |
branch: master
commit 2cb3dea72b7b48162a6702270dd3896a0f19cb4b
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Correctly register Num Lock keys under Haiku
* src/haiku_support.cc (DispatchMessage): If B_NUM_LOCK is set,
invert B_SHIFT_KEY; should it be subsequently set, omit mapping
from raw_char.
---
src/haiku_support.cc | 38 +++++++++++++++++++++++++++++++++++---
1 file changed, 35 insertions(+), 3 deletions(-)
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 3fc90385af3..33ad5889043 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -1059,6 +1059,8 @@ public:
msg->FindInt64 ("when", &rq.time);
rq.modifiers = 0;
+ rq.keysym = 0;
+
uint32_t mods = modifiers ();
if (mods & B_SHIFT_KEY)
@@ -1073,10 +1075,39 @@ public:
if (mods & B_OPTION_KEY)
rq.modifiers |= HAIKU_MODIFIER_SUPER;
- ret = keysym_from_raw_char (raw, key, &rq.keysym);
+ /* mods & B_SHIFT_KEY should be inverted if keycode is
+ situated in the numeric keypad and Num Lock is set, for
+ this transformation is not effected on key events
+ themselves. */
+
+ if (mods & B_NUM_LOCK)
+ {
+ switch (key)
+ {
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x58:
+ case 0x59:
+ case 0x5a:
+ case 0x64:
+ case 0x65:
+ mods ^= B_SHIFT_KEY;
+
+ /* If shift is set at this juncture, map these keys to
+ the digits they represent. Because raw is not
+ affected by Num Lock, keysym_from_raw_char will map
+ this to the keysym yielded by this key in the
+ absence of any modifiers. */
+ if (mods & B_SHIFT_KEY)
+ goto map_keysym;
+ }
+ }
- if (!ret)
- rq.keysym = 0;
+ ret = keysym_from_raw_char (raw, key, &rq.keysym);
if (ret < 0)
return;
@@ -1087,6 +1118,7 @@ public:
{
if (mods & B_SHIFT_KEY)
{
+ map_keysym:
if (mods & B_CAPS_LOCK)
map_caps_shift (key, &rq.multibyte_char);
else
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 2cb3dea72b7: Correctly register Num Lock keys under Haiku,
Po Lu <=