mirror of https://github.com/neutrinolabs/xrdp
Replace magic numbers in keyboard code with defs
- All scancode definitions are moved to scancode.h - Magic numbers are replaced where applicable with definitions
This commit is contained in:
parent
ef14039c62
commit
5779edd23f
|
@ -60,6 +60,53 @@
|
|||
|
||||
enum
|
||||
{
|
||||
/**
|
||||
* Scancodes for keys used in the code
|
||||
*/
|
||||
SCANCODE_LSHIFT_KEY = 0x2a,
|
||||
SCANCODE_RSHIFT_KEY = 0x36,
|
||||
SCANCODE_CAPS_KEY = 0x3a,
|
||||
SCANCODE_NUMLOCK_KEY = 0x45,
|
||||
SCANCODE_SCROLL_KEY = 0x46, // Scroll lock
|
||||
SCANCODE_LALT_KEY = 0x38,
|
||||
SCANCODE_RALT_KEY = 0x138,
|
||||
|
||||
SCANCODE_ESC_KEY = 0x01,
|
||||
SCANCODE_BACKSPACE_KEY = 0x0e,
|
||||
SCANCODE_ENTER_KEY = 0x1c,
|
||||
SCANCODE_TAB_KEY = 0x0f,
|
||||
|
||||
SCANCODE_KP_ENTER_KEY = 0x11c,
|
||||
SCANCODE_KP_DEL_KEY = 0x53,
|
||||
SCANCODE_KP_1_KEY = 0x4f,
|
||||
SCANCODE_KP_2_KEY = 0x50,
|
||||
SCANCODE_KP_4_KEY = 0x4b,
|
||||
SCANCODE_KP_6_KEY = 0x4d,
|
||||
SCANCODE_KP_7_KEY = 0x47,
|
||||
SCANCODE_KP_8_KEY = 0x48,
|
||||
|
||||
SCANCODE_LEFT_ARROW_KEY = 0x14b,
|
||||
SCANCODE_RIGHT_ARROW_KEY = 0x14d,
|
||||
SCANCODE_UP_ARROW_KEY = 0x148,
|
||||
SCANCODE_DOWN_ARROW_KEY = 0x150,
|
||||
|
||||
SCANCODE_HOME_KEY = 0x147,
|
||||
SCANCODE_DEL_KEY = 0x153,
|
||||
SCANCODE_END_KEY = 0x14f,
|
||||
/**
|
||||
* Scancode indexes for some of the above
|
||||
*/
|
||||
SCANCODE_INDEX_LSHIFT_KEY = SCANCODE_LSHIFT_KEY,
|
||||
SCANCODE_INDEX_RSHIFT_KEY = SCANCODE_RSHIFT_KEY,
|
||||
SCANCODE_INDEX_RALT_KEY = (SCANCODE_RALT_KEY & 0x7f) | 0x80,
|
||||
|
||||
/**
|
||||
* Keys affected by numlock
|
||||
* (this is not the whole keypad)
|
||||
*/
|
||||
SCANCODE_MIN_NUMLOCK = SCANCODE_KP_7_KEY,
|
||||
SCANCODE_MAX_NUMLOCK = SCANCODE_KP_DEL_KEY,
|
||||
|
||||
/**
|
||||
* Maximum value returned by scancode_to_index()
|
||||
*/
|
||||
|
|
|
@ -285,12 +285,6 @@
|
|||
|
||||
#define FASTPATH_MAX_PACKET_SIZE 0x3fff
|
||||
|
||||
#define XR_RDP_SCAN_LSHIFT 42
|
||||
#define XR_RDP_SCAN_ALT 56
|
||||
// scancodes affected by numlock
|
||||
#define XR_RDP_SCAN_MIN_NUMLOCK 71 // KP7
|
||||
#define XR_RDP_SCAN_MAX_NUMLOCK 83 // KPDL
|
||||
|
||||
// Since we're not guaranteed to have pixman, copy these directives.
|
||||
#define XRDP_PIXMAN_TYPE_ARGB 2
|
||||
#define XRDP_PIXMAN_TYPE_ABGR 3
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
|
||||
// Scancodes affected by numlock
|
||||
#define IS_KEYPAD_SCANCODE(s) \
|
||||
((s) >= XR_RDP_SCAN_MIN_NUMLOCK && (s) <= XR_RDP_SCAN_MAX_NUMLOCK)
|
||||
((s) >= SCANCODE_MIN_NUMLOCK && (s) <= SCANCODE_MAX_NUMLOCK)
|
||||
|
||||
#define MAX_COMMENTS 10
|
||||
|
||||
|
|
20
xrdp/lang.c
20
xrdp/lang.c
|
@ -45,13 +45,11 @@ get_key_info_from_kbd_event(int keyboard_flags, int key_code, int *keys,
|
|||
{
|
||||
struct xrdp_key_info *rv;
|
||||
int shift;
|
||||
int altgr_scancode;
|
||||
int altgr;
|
||||
int index;
|
||||
|
||||
shift = keys[42] || keys[54];
|
||||
altgr_scancode = SCANCODE_FROM_KBD_EVENT(56, KBDFLAGS_EXTENDED);
|
||||
altgr = keys[scancode_to_index(altgr_scancode)]; /* right alt */
|
||||
shift = keys[SCANCODE_INDEX_LSHIFT_KEY] || keys[SCANCODE_INDEX_RSHIFT_KEY];
|
||||
altgr = keys[SCANCODE_INDEX_RALT_KEY]; /* right alt */
|
||||
rv = 0;
|
||||
|
||||
index = scancode_to_index(SCANCODE_FROM_KBD_EVENT(key_code, keyboard_flags));
|
||||
|
@ -60,10 +58,10 @@ get_key_info_from_kbd_event(int keyboard_flags, int key_code, int *keys,
|
|||
// scancode_to_index() guarantees to map numlock scancodes
|
||||
// to the same index values.
|
||||
if (num_lock &&
|
||||
index >= XR_RDP_SCAN_MIN_NUMLOCK &&
|
||||
index <= XR_RDP_SCAN_MAX_NUMLOCK)
|
||||
index >= SCANCODE_MIN_NUMLOCK &&
|
||||
index <= SCANCODE_MAX_NUMLOCK)
|
||||
{
|
||||
rv = &(keymap->keys_numlock[index - XR_RDP_SCAN_MIN_NUMLOCK]);
|
||||
rv = &(keymap->keys_numlock[index - SCANCODE_MIN_NUMLOCK]);
|
||||
}
|
||||
else if (shift && caps_lock && altgr)
|
||||
{
|
||||
|
@ -391,19 +389,19 @@ km_load_file(const char *filename, struct xrdp_keymap *keymap)
|
|||
keymap->keys_shiftcapslockaltgr);
|
||||
|
||||
/* The numlock map is much smaller and offset by
|
||||
* XR_RDP_SCAN_MAX_NUMLOCK. Read the section into a temporary
|
||||
* SCANCODE_MIX_NUMLOCK. Read the section into a temporary
|
||||
* area and copy it over */
|
||||
struct xrdp_key_info keys_numlock[SCANCODE_MAX_INDEX + 1];
|
||||
int i;
|
||||
for (i = XR_RDP_SCAN_MIN_NUMLOCK; i <= XR_RDP_SCAN_MAX_NUMLOCK; ++i)
|
||||
for (i = SCANCODE_MIN_NUMLOCK; i <= SCANCODE_MAX_NUMLOCK; ++i)
|
||||
{
|
||||
keys_numlock[i].sym = 0;
|
||||
keys_numlock[i].chr = 0;
|
||||
}
|
||||
km_read_section(tfile, "numlock", keys_numlock);
|
||||
for (i = XR_RDP_SCAN_MIN_NUMLOCK; i <= XR_RDP_SCAN_MAX_NUMLOCK; ++i)
|
||||
for (i = SCANCODE_MIN_NUMLOCK; i <= SCANCODE_MAX_NUMLOCK; ++i)
|
||||
{
|
||||
keymap->keys_numlock[i - XR_RDP_SCAN_MIN_NUMLOCK] = keys_numlock[i];
|
||||
keymap->keys_numlock[i - SCANCODE_MIN_NUMLOCK] = keys_numlock[i];
|
||||
}
|
||||
|
||||
toml_free(tfile);
|
||||
|
|
|
@ -1024,9 +1024,6 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
int n;
|
||||
int i;
|
||||
int shift;
|
||||
int ext;
|
||||
int scan_code;
|
||||
struct xrdp_bitmap *b;
|
||||
struct xrdp_bitmap *focus_out_control;
|
||||
|
||||
|
@ -1044,12 +1041,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
if (msg == WM_KEYDOWN)
|
||||
{
|
||||
scan_code = param1 % 128;
|
||||
int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
|
||||
int shift = self->wm->keys[SCANCODE_INDEX_LSHIFT_KEY] ||
|
||||
self->wm->keys[SCANCODE_INDEX_RSHIFT_KEY];
|
||||
|
||||
if (scan_code == 15) /* tab */
|
||||
if (scan_code == SCANCODE_TAB_KEY) /* tab */
|
||||
{
|
||||
/* move to next tab stop */
|
||||
shift = self->wm->keys[42] || self->wm->keys[54];
|
||||
i = -1;
|
||||
|
||||
if (self->child_list != 0)
|
||||
|
@ -1114,7 +1112,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (scan_code == 28) /* enter */
|
||||
else if (scan_code == SCANCODE_ENTER_KEY ||
|
||||
scan_code == SCANCODE_KP_ENTER_KEY)
|
||||
{
|
||||
if (self->default_button != 0)
|
||||
{
|
||||
|
@ -1126,7 +1125,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (scan_code == 1) /* esc */
|
||||
else if (scan_code == SCANCODE_ESC_KEY)
|
||||
{
|
||||
if (self->esc_button != 0)
|
||||
{
|
||||
|
@ -1149,12 +1148,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
if (msg == WM_KEYDOWN)
|
||||
{
|
||||
scan_code = param1 % 128;
|
||||
ext = param2 & 0x0100;
|
||||
|
||||
int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
|
||||
int num_lock = self->wm->num_lock;
|
||||
/* left or up arrow */
|
||||
if ((scan_code == 75 || scan_code == 72) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
|
||||
(scan_code == SCANCODE_UP_ARROW_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_4_KEY)) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_8_KEY)))
|
||||
{
|
||||
if (self->edit_pos > 0)
|
||||
{
|
||||
|
@ -1163,8 +1163,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* right or down arrow */
|
||||
else if ((scan_code == 77 || scan_code == 80) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
|
||||
(scan_code == SCANCODE_DOWN_ARROW_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_6_KEY)) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_2_KEY)))
|
||||
{
|
||||
if (self->edit_pos < (int)utf8_char_count(self->caption1))
|
||||
{
|
||||
|
@ -1173,7 +1175,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* backspace */
|
||||
else if (scan_code == 14)
|
||||
else if (scan_code == SCANCODE_BACKSPACE_KEY)
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1188,8 +1190,9 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* delete */
|
||||
else if (scan_code == 83 &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_DEL_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_DEL_KEY)))
|
||||
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1203,8 +1206,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* end */
|
||||
else if (scan_code == 79 &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_END_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_1_KEY)))
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1215,8 +1218,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* home */
|
||||
else if ((scan_code == 71) &&
|
||||
(ext || (self->wm->num_lock == 0)))
|
||||
else if ((scan_code == SCANCODE_HOME_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_7_KEY)))
|
||||
{
|
||||
if (self->edit_pos > 0)
|
||||
{
|
||||
|
@ -1227,7 +1230,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
else
|
||||
{
|
||||
char32_t c = get_char_from_kbd_event
|
||||
(param2, scan_code, self->wm->keys, self->wm->caps_lock,
|
||||
(param2, param1, self->wm->keys, self->wm->caps_lock,
|
||||
self->wm->num_lock, self->wm->scroll_lock,
|
||||
&(self->wm->keymap));
|
||||
// Add a printing character to the string. If successful,
|
||||
|
@ -1245,12 +1248,14 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
if (msg == WM_KEYDOWN)
|
||||
{
|
||||
scan_code = param1 % 128;
|
||||
ext = param2 & 0x0100;
|
||||
int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
|
||||
int num_lock = self->wm->num_lock;
|
||||
|
||||
/* left or up arrow */
|
||||
if (((scan_code == 75) || (scan_code == 72)) &&
|
||||
(ext || (self->wm->num_lock == 0)))
|
||||
if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
|
||||
(scan_code == SCANCODE_UP_ARROW_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_4_KEY)) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_8_KEY)))
|
||||
{
|
||||
if (self->item_index > 0)
|
||||
{
|
||||
|
@ -1264,8 +1269,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* right or down arrow */
|
||||
else if ((scan_code == 77 || scan_code == 80) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
|
||||
(scan_code == SCANCODE_DOWN_ARROW_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_6_KEY)) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_2_KEY)))
|
||||
{
|
||||
if ((self->item_index + 1) < self->string_list->count)
|
||||
{
|
||||
|
|
|
@ -465,8 +465,8 @@ struct xrdp_keymap
|
|||
struct xrdp_key_info keys_shiftcapslock[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_shiftcapslockaltgr[SCANCODE_MAX_INDEX + 1];
|
||||
// NumLock is restricted to a much smaller set of keys
|
||||
struct xrdp_key_info keys_numlock[XR_RDP_SCAN_MAX_NUMLOCK -
|
||||
XR_RDP_SCAN_MIN_NUMLOCK + 1];
|
||||
struct xrdp_key_info keys_numlock[SCANCODE_MAX_NUMLOCK -
|
||||
SCANCODE_MIN_NUMLOCK + 1];
|
||||
};
|
||||
|
||||
/* the window manager */
|
||||
|
|
|
@ -1606,15 +1606,15 @@ xrdp_wm_key(struct xrdp_wm *self, int keyboard_flags, int key_code)
|
|||
self->keys[sindex] = 1;
|
||||
msg = WM_KEYDOWN;
|
||||
|
||||
switch (key_code)
|
||||
switch (scancode)
|
||||
{
|
||||
case 58:
|
||||
case SCANCODE_CAPS_KEY:
|
||||
self->caps_lock = !self->caps_lock;
|
||||
break; /* caps lock */
|
||||
case 69:
|
||||
case SCANCODE_NUMLOCK_KEY:
|
||||
self->num_lock = !self->num_lock;
|
||||
break; /* num lock */
|
||||
case 70:
|
||||
case SCANCODE_SCROLL_KEY:
|
||||
self->scroll_lock = !self->scroll_lock;
|
||||
break; /* scroll lock */
|
||||
}
|
||||
|
@ -1733,7 +1733,7 @@ get_unicode_character(struct xrdp_wm *self, int device_flags, char16_t c16)
|
|||
* Takes a scancode index and fakes a keyboard event to represent it
|
||||
* @param self module pointer
|
||||
* @param device_flags default flags to pass in for the keyboard event.
|
||||
* @param scancode index
|
||||
* @param index scancode index
|
||||
*
|
||||
* Some of the device_flags are overridden by the scancode derived from the
|
||||
* scancode index
|
||||
|
@ -1742,7 +1742,7 @@ static void
|
|||
fake_kbd_event_from_scancode_index(struct xrdp_wm *self, int device_flags,
|
||||
int index)
|
||||
{
|
||||
int scancode = scancode_from_index(index);
|
||||
unsigned short scancode = scancode_from_index(index);
|
||||
int key_code = SCANCODE_TO_KBD_EVENT_KEY_CODE(scancode);
|
||||
|
||||
device_flags &= ~(KBDFLAGS_EXTENDED | KBDFLAGS_EXTENDED1);
|
||||
|
@ -1781,11 +1781,13 @@ xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
|
|||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_LSHIFT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_LSHIFT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
return 0;
|
||||
|
@ -1799,11 +1801,13 @@ xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
|
|||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_ALT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_ALT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
return 0;
|
||||
|
@ -1817,14 +1821,17 @@ xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
|
|||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
xrdp_wm_key(self, device_flags | KBDFLAGS_EXTENDED, XR_RDP_SCAN_ALT);
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_LSHIFT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, XR_RDP_SCAN_LSHIFT);
|
||||
xrdp_wm_key(self, device_flags | KBDFLAGS_EXTENDED,
|
||||
XR_RDP_SCAN_ALT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue