diff --git a/panda/src/egldisplay/eglGraphicsWindow.cxx b/panda/src/egldisplay/eglGraphicsWindow.cxx index 9e82bac2e7..7ef3efb80e 100644 --- a/panda/src/egldisplay/eglGraphicsWindow.cxx +++ b/panda/src/egldisplay/eglGraphicsWindow.cxx @@ -1215,16 +1215,19 @@ handle_keypress(XKeyEvent &event) { // Now get the raw unshifted button. 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 == 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); } } @@ -1241,16 +1244,19 @@ handle_keyrelease(XKeyEvent &event) { // Now get the raw unshifted button. 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 == 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); } } @@ -1636,6 +1642,8 @@ map_button(KeySym key) { return KeyboardButton::print_screen(); case XK_Pause: return KeyboardButton::pause(); + case XK_Menu: + return KeyboardButton::menu(); case XK_Shift_L: return KeyboardButton::lshift(); case XK_Shift_R: @@ -1649,8 +1657,9 @@ map_button(KeySym key) { case XK_Alt_R: return KeyboardButton::ralt(); case XK_Meta_L: + return KeyboardButton::lmeta(); case XK_Meta_R: - return KeyboardButton::meta(); + return KeyboardButton::rmeta(); case XK_Caps_Lock: return KeyboardButton::caps_lock(); case XK_Shift_Lock: diff --git a/panda/src/putil/keyboardButton.cxx b/panda/src/putil/keyboardButton.cxx index 6f4971c1fb..6b728096da 100644 --- a/panda/src/putil/keyboardButton.cxx +++ b/panda/src/putil/keyboardButton.cxx @@ -49,7 +49,6 @@ ascii_key(const string &ascii_equivalent) { #define DEFINE_KEYBD_BUTTON_HANDLE(KeyName) \ static ButtonHandle _##KeyName; \ ButtonHandle KeyboardButton::KeyName() { return _##KeyName; } - DEFINE_KEYBD_BUTTON_HANDLE(space) 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(print_screen) DEFINE_KEYBD_BUTTON_HANDLE(pause) +DEFINE_KEYBD_BUTTON_HANDLE(menu) DEFINE_KEYBD_BUTTON_HANDLE(shift) DEFINE_KEYBD_BUTTON_HANDLE(control) DEFINE_KEYBD_BUTTON_HANDLE(alt) @@ -99,6 +99,8 @@ DEFINE_KEYBD_BUTTON_HANDLE(lcontrol) DEFINE_KEYBD_BUTTON_HANDLE(rcontrol) DEFINE_KEYBD_BUTTON_HANDLE(lalt) 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(_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(_down, "arrow_down"); + ButtonRegistry::ptr()->register_button(_down, "arrow_down"); ButtonRegistry::ptr()->register_button(_page_up, "page_up"); ButtonRegistry::ptr()->register_button(_page_down, "page_down"); 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(_print_screen, "print_screen"); ButtonRegistry::ptr()->register_button(_pause, "pause"); + ButtonRegistry::ptr()->register_button(_menu, "menu"); ButtonRegistry::ptr()->register_button(_lshift, "lshift", _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(_lalt, "lalt", _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. for (int i = 32; i < 127; i++) { if (isgraph(i)) { ButtonHandle key; - ButtonRegistry::ptr()->register_button(key, string(1, (char)i), + ButtonRegistry::ptr()->register_button(key, string(1, (char)i), ButtonHandle::none(), i); } } diff --git a/panda/src/putil/keyboardButton.h b/panda/src/putil/keyboardButton.h index 94be8d3eed..cd74d7d023 100644 --- a/panda/src/putil/keyboardButton.h +++ b/panda/src/putil/keyboardButton.h @@ -66,6 +66,7 @@ PUBLISHED: static ButtonHandle insert(); static ButtonHandle del(); // delete is a C++ keyword. static ButtonHandle help(); + static ButtonHandle menu(); static ButtonHandle shift(); static ButtonHandle control(); @@ -84,6 +85,8 @@ PUBLISHED: static ButtonHandle rcontrol(); static ButtonHandle lalt(); static ButtonHandle ralt(); + static ButtonHandle lmeta(); + static ButtonHandle rmeta(); public: static void init_keyboard_buttons(); diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index 1389b1a637..25090a7069 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -2605,9 +2605,9 @@ lookup_raw_key(LPARAM lparam) const { switch (vsc) { case 87: return KeyboardButton::f11(); case 88: return KeyboardButton::f12(); - //case 91: return KeyboardButton::lmeta(); - //case 92: return KeyboardButton::rmeta(); - //case 93: return KeyboardButton::menu(); + case 91: return KeyboardButton::lmeta(); + case 92: return KeyboardButton::rmeta(); + case 93: return KeyboardButton::menu(); default: return ButtonHandle::none(); } } diff --git a/panda/src/x11display/x11GraphicsWindow.cxx b/panda/src/x11display/x11GraphicsWindow.cxx index 41d6a145be..ec7c79a48b 100644 --- a/panda/src/x11display/x11GraphicsWindow.cxx +++ b/panda/src/x11display/x11GraphicsWindow.cxx @@ -1392,16 +1392,19 @@ handle_keypress(XKeyEvent &event) { // Now get the raw unshifted button. 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 == 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); } @@ -1425,16 +1428,19 @@ handle_keyrelease(XKeyEvent &event) { // Now get the raw unshifted button. 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 == 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); } @@ -1825,6 +1831,8 @@ map_button(KeySym key) { return KeyboardButton::print_screen(); case XK_Pause: return KeyboardButton::pause(); + case XK_Menu: + return KeyboardButton::menu(); case XK_Shift_L: return KeyboardButton::lshift(); case XK_Shift_R: @@ -1838,8 +1846,9 @@ map_button(KeySym key) { case XK_Alt_R: return KeyboardButton::ralt(); case XK_Meta_L: + return KeyboardButton::lmeta(); case XK_Meta_R: - return KeyboardButton::meta(); + return KeyboardButton::rmeta(); case XK_Caps_Lock: return KeyboardButton::caps_lock(); case XK_Shift_Lock: @@ -1963,9 +1972,9 @@ map_raw_button(KeyCode key) { case 127: return KeyboardButton::pause(); - //case 133: return KeyboardButton::lmeta(); - //case 134: return KeyboardButton::rmeta(); - //case 135: return KeyboardButton::menu(); + case 133: return KeyboardButton::lmeta(); + case 134: return KeyboardButton::rmeta(); + case 135: return KeyboardButton::menu(); } return ButtonHandle::none(); }