Distinguish between lmeta and rmeta key, add menu key

This commit is contained in:
rdb 2014-03-08 15:07:42 +00:00
parent 738b2936e4
commit 9367ad586a
5 changed files with 73 additions and 47 deletions

View File

@ -1215,16 +1215,19 @@ handle_keypress(XKeyEvent &event) {
// Now get the raw unshifted button. // Now get the raw unshifted button.
ButtonHandle button = get_button(event, false); ButtonHandle button = get_button(event, false);
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_down(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_down(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_down(KeyboardButton::alt());
}
if (button != ButtonHandle::none()) { if (button != ButtonHandle::none()) {
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_down(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_down(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_down(KeyboardButton::alt());
}
if (button == KeyboardButton::lmeta() || button == KeyboardButton::rmeta()) {
_input_devices[0].button_down(KeyboardButton::meta());
}
_input_devices[0].button_down(button); _input_devices[0].button_down(button);
} }
} }
@ -1241,16 +1244,19 @@ handle_keyrelease(XKeyEvent &event) {
// Now get the raw unshifted button. // Now get the raw unshifted button.
ButtonHandle button = get_button(event, false); ButtonHandle button = get_button(event, false);
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_up(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_up(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_up(KeyboardButton::alt());
}
if (button != ButtonHandle::none()) { if (button != ButtonHandle::none()) {
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_up(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_up(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_up(KeyboardButton::alt());
}
if (button == KeyboardButton::lmeta() || button == KeyboardButton::rmeta()) {
_input_devices[0].button_up(KeyboardButton::meta());
}
_input_devices[0].button_up(button); _input_devices[0].button_up(button);
} }
} }
@ -1636,6 +1642,8 @@ map_button(KeySym key) {
return KeyboardButton::print_screen(); return KeyboardButton::print_screen();
case XK_Pause: case XK_Pause:
return KeyboardButton::pause(); return KeyboardButton::pause();
case XK_Menu:
return KeyboardButton::menu();
case XK_Shift_L: case XK_Shift_L:
return KeyboardButton::lshift(); return KeyboardButton::lshift();
case XK_Shift_R: case XK_Shift_R:
@ -1649,8 +1657,9 @@ map_button(KeySym key) {
case XK_Alt_R: case XK_Alt_R:
return KeyboardButton::ralt(); return KeyboardButton::ralt();
case XK_Meta_L: case XK_Meta_L:
return KeyboardButton::lmeta();
case XK_Meta_R: case XK_Meta_R:
return KeyboardButton::meta(); return KeyboardButton::rmeta();
case XK_Caps_Lock: case XK_Caps_Lock:
return KeyboardButton::caps_lock(); return KeyboardButton::caps_lock();
case XK_Shift_Lock: case XK_Shift_Lock:

View File

@ -49,7 +49,6 @@ ascii_key(const string &ascii_equivalent) {
#define DEFINE_KEYBD_BUTTON_HANDLE(KeyName) \ #define DEFINE_KEYBD_BUTTON_HANDLE(KeyName) \
static ButtonHandle _##KeyName; \ static ButtonHandle _##KeyName; \
ButtonHandle KeyboardButton::KeyName() { return _##KeyName; } ButtonHandle KeyboardButton::KeyName() { return _##KeyName; }
DEFINE_KEYBD_BUTTON_HANDLE(space) DEFINE_KEYBD_BUTTON_HANDLE(space)
DEFINE_KEYBD_BUTTON_HANDLE(backspace) DEFINE_KEYBD_BUTTON_HANDLE(backspace)
@ -90,6 +89,7 @@ DEFINE_KEYBD_BUTTON_HANDLE(scroll_lock)
DEFINE_KEYBD_BUTTON_HANDLE(num_lock) DEFINE_KEYBD_BUTTON_HANDLE(num_lock)
DEFINE_KEYBD_BUTTON_HANDLE(print_screen) DEFINE_KEYBD_BUTTON_HANDLE(print_screen)
DEFINE_KEYBD_BUTTON_HANDLE(pause) DEFINE_KEYBD_BUTTON_HANDLE(pause)
DEFINE_KEYBD_BUTTON_HANDLE(menu)
DEFINE_KEYBD_BUTTON_HANDLE(shift) DEFINE_KEYBD_BUTTON_HANDLE(shift)
DEFINE_KEYBD_BUTTON_HANDLE(control) DEFINE_KEYBD_BUTTON_HANDLE(control)
DEFINE_KEYBD_BUTTON_HANDLE(alt) DEFINE_KEYBD_BUTTON_HANDLE(alt)
@ -99,6 +99,8 @@ DEFINE_KEYBD_BUTTON_HANDLE(lcontrol)
DEFINE_KEYBD_BUTTON_HANDLE(rcontrol) DEFINE_KEYBD_BUTTON_HANDLE(rcontrol)
DEFINE_KEYBD_BUTTON_HANDLE(lalt) DEFINE_KEYBD_BUTTON_HANDLE(lalt)
DEFINE_KEYBD_BUTTON_HANDLE(ralt) DEFINE_KEYBD_BUTTON_HANDLE(ralt)
DEFINE_KEYBD_BUTTON_HANDLE(lmeta)
DEFINE_KEYBD_BUTTON_HANDLE(rmeta)
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -143,7 +145,7 @@ init_keyboard_buttons() {
ButtonRegistry::ptr()->register_button(_left, "arrow_left"); ButtonRegistry::ptr()->register_button(_left, "arrow_left");
ButtonRegistry::ptr()->register_button(_right, "arrow_right"); ButtonRegistry::ptr()->register_button(_right, "arrow_right");
ButtonRegistry::ptr()->register_button(_up, "arrow_up"); // cannot name this 'up' since it conflicts with key-release name 'up' ButtonRegistry::ptr()->register_button(_up, "arrow_up"); // cannot name this 'up' since it conflicts with key-release name 'up'
ButtonRegistry::ptr()->register_button(_down, "arrow_down"); ButtonRegistry::ptr()->register_button(_down, "arrow_down");
ButtonRegistry::ptr()->register_button(_page_up, "page_up"); ButtonRegistry::ptr()->register_button(_page_up, "page_up");
ButtonRegistry::ptr()->register_button(_page_down, "page_down"); ButtonRegistry::ptr()->register_button(_page_down, "page_down");
ButtonRegistry::ptr()->register_button(_home, "home"); ButtonRegistry::ptr()->register_button(_home, "home");
@ -161,6 +163,7 @@ init_keyboard_buttons() {
ButtonRegistry::ptr()->register_button(_scroll_lock, "scroll_lock"); ButtonRegistry::ptr()->register_button(_scroll_lock, "scroll_lock");
ButtonRegistry::ptr()->register_button(_print_screen, "print_screen"); ButtonRegistry::ptr()->register_button(_print_screen, "print_screen");
ButtonRegistry::ptr()->register_button(_pause, "pause"); ButtonRegistry::ptr()->register_button(_pause, "pause");
ButtonRegistry::ptr()->register_button(_menu, "menu");
ButtonRegistry::ptr()->register_button(_lshift, "lshift", _shift); ButtonRegistry::ptr()->register_button(_lshift, "lshift", _shift);
ButtonRegistry::ptr()->register_button(_rshift, "rshift", _shift); ButtonRegistry::ptr()->register_button(_rshift, "rshift", _shift);
@ -168,12 +171,14 @@ init_keyboard_buttons() {
ButtonRegistry::ptr()->register_button(_rcontrol, "rcontrol", _control); ButtonRegistry::ptr()->register_button(_rcontrol, "rcontrol", _control);
ButtonRegistry::ptr()->register_button(_lalt, "lalt", _alt); ButtonRegistry::ptr()->register_button(_lalt, "lalt", _alt);
ButtonRegistry::ptr()->register_button(_ralt, "ralt", _alt); ButtonRegistry::ptr()->register_button(_ralt, "ralt", _alt);
ButtonRegistry::ptr()->register_button(_lmeta, "lmeta", _meta);
ButtonRegistry::ptr()->register_button(_rmeta, "rmeta", _meta);
// Also register all of the visible ASCII characters. // Also register all of the visible ASCII characters.
for (int i = 32; i < 127; i++) { for (int i = 32; i < 127; i++) {
if (isgraph(i)) { if (isgraph(i)) {
ButtonHandle key; ButtonHandle key;
ButtonRegistry::ptr()->register_button(key, string(1, (char)i), ButtonRegistry::ptr()->register_button(key, string(1, (char)i),
ButtonHandle::none(), i); ButtonHandle::none(), i);
} }
} }

View File

@ -66,6 +66,7 @@ PUBLISHED:
static ButtonHandle insert(); static ButtonHandle insert();
static ButtonHandle del(); // delete is a C++ keyword. static ButtonHandle del(); // delete is a C++ keyword.
static ButtonHandle help(); static ButtonHandle help();
static ButtonHandle menu();
static ButtonHandle shift(); static ButtonHandle shift();
static ButtonHandle control(); static ButtonHandle control();
@ -84,6 +85,8 @@ PUBLISHED:
static ButtonHandle rcontrol(); static ButtonHandle rcontrol();
static ButtonHandle lalt(); static ButtonHandle lalt();
static ButtonHandle ralt(); static ButtonHandle ralt();
static ButtonHandle lmeta();
static ButtonHandle rmeta();
public: public:
static void init_keyboard_buttons(); static void init_keyboard_buttons();

View File

@ -2605,9 +2605,9 @@ lookup_raw_key(LPARAM lparam) const {
switch (vsc) { switch (vsc) {
case 87: return KeyboardButton::f11(); case 87: return KeyboardButton::f11();
case 88: return KeyboardButton::f12(); case 88: return KeyboardButton::f12();
//case 91: return KeyboardButton::lmeta(); case 91: return KeyboardButton::lmeta();
//case 92: return KeyboardButton::rmeta(); case 92: return KeyboardButton::rmeta();
//case 93: return KeyboardButton::menu(); case 93: return KeyboardButton::menu();
default: return ButtonHandle::none(); default: return ButtonHandle::none();
} }
} }

View File

@ -1392,16 +1392,19 @@ handle_keypress(XKeyEvent &event) {
// Now get the raw unshifted button. // Now get the raw unshifted button.
ButtonHandle button = get_button(event, false); ButtonHandle button = get_button(event, false);
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_down(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_down(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_down(KeyboardButton::alt());
}
if (button != ButtonHandle::none()) { if (button != ButtonHandle::none()) {
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_down(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_down(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_down(KeyboardButton::alt());
}
if (button == KeyboardButton::lmeta() || button == KeyboardButton::rmeta()) {
_input_devices[0].button_down(KeyboardButton::meta());
}
_input_devices[0].button_down(button); _input_devices[0].button_down(button);
} }
@ -1425,16 +1428,19 @@ handle_keyrelease(XKeyEvent &event) {
// Now get the raw unshifted button. // Now get the raw unshifted button.
ButtonHandle button = get_button(event, false); ButtonHandle button = get_button(event, false);
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_up(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_up(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_up(KeyboardButton::alt());
}
if (button != ButtonHandle::none()) { if (button != ButtonHandle::none()) {
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
_input_devices[0].button_up(KeyboardButton::control());
}
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
_input_devices[0].button_up(KeyboardButton::shift());
}
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
_input_devices[0].button_up(KeyboardButton::alt());
}
if (button == KeyboardButton::lmeta() || button == KeyboardButton::rmeta()) {
_input_devices[0].button_up(KeyboardButton::meta());
}
_input_devices[0].button_up(button); _input_devices[0].button_up(button);
} }
@ -1825,6 +1831,8 @@ map_button(KeySym key) {
return KeyboardButton::print_screen(); return KeyboardButton::print_screen();
case XK_Pause: case XK_Pause:
return KeyboardButton::pause(); return KeyboardButton::pause();
case XK_Menu:
return KeyboardButton::menu();
case XK_Shift_L: case XK_Shift_L:
return KeyboardButton::lshift(); return KeyboardButton::lshift();
case XK_Shift_R: case XK_Shift_R:
@ -1838,8 +1846,9 @@ map_button(KeySym key) {
case XK_Alt_R: case XK_Alt_R:
return KeyboardButton::ralt(); return KeyboardButton::ralt();
case XK_Meta_L: case XK_Meta_L:
return KeyboardButton::lmeta();
case XK_Meta_R: case XK_Meta_R:
return KeyboardButton::meta(); return KeyboardButton::rmeta();
case XK_Caps_Lock: case XK_Caps_Lock:
return KeyboardButton::caps_lock(); return KeyboardButton::caps_lock();
case XK_Shift_Lock: case XK_Shift_Lock:
@ -1963,9 +1972,9 @@ map_raw_button(KeyCode key) {
case 127: return KeyboardButton::pause(); case 127: return KeyboardButton::pause();
//case 133: return KeyboardButton::lmeta(); case 133: return KeyboardButton::lmeta();
//case 134: return KeyboardButton::rmeta(); case 134: return KeyboardButton::rmeta();
//case 135: return KeyboardButton::menu(); case 135: return KeyboardButton::menu();
} }
return ButtonHandle::none(); return ButtonHandle::none();
} }