mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 00:06:44 -04:00
x11: fix raw key down being sent repeatedly when holding key
Fixes #874
This commit is contained in:
parent
eccfce4606
commit
3963c5de04
@ -329,7 +329,7 @@ process_events() {
|
||||
|
||||
// We thought about not generating the keypress event, but we need
|
||||
// that repeat for backspace. Rethink later.
|
||||
handle_keypress(event.xkey);
|
||||
handle_keyrepeat(event.xkey);
|
||||
continue;
|
||||
|
||||
} else {
|
||||
@ -1499,6 +1499,34 @@ handle_keypress(XKeyEvent &event) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a keyrepeat corresponding to the indicated X KeyPress event.
|
||||
*/
|
||||
void x11GraphicsWindow::
|
||||
handle_keyrepeat(XKeyEvent &event) {
|
||||
if (_properties.get_mouse_mode() != WindowProperties::M_relative) {
|
||||
_input->set_pointer_in_window(event.x, event.y);
|
||||
}
|
||||
|
||||
// Now get the raw unshifted button.
|
||||
ButtonHandle button = get_button(event, false);
|
||||
if (button != ButtonHandle::none()) {
|
||||
if (button == KeyboardButton::lcontrol() || button == KeyboardButton::rcontrol()) {
|
||||
_input->button_down(KeyboardButton::control());
|
||||
}
|
||||
if (button == KeyboardButton::lshift() || button == KeyboardButton::rshift()) {
|
||||
_input->button_down(KeyboardButton::shift());
|
||||
}
|
||||
if (button == KeyboardButton::lalt() || button == KeyboardButton::ralt()) {
|
||||
_input->button_down(KeyboardButton::alt());
|
||||
}
|
||||
if (button == KeyboardButton::lmeta() || button == KeyboardButton::rmeta()) {
|
||||
_input->button_down(KeyboardButton::meta());
|
||||
}
|
||||
_input->button_down(button);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a keyrelease corresponding to the indicated X KeyRelease event.
|
||||
*/
|
||||
|
@ -59,6 +59,7 @@ protected:
|
||||
virtual void setup_colormap(XVisualInfo *visual);
|
||||
void handle_keystroke(XKeyEvent &event);
|
||||
void handle_keypress(XKeyEvent &event);
|
||||
void handle_keyrepeat(XKeyEvent &event);
|
||||
void handle_keyrelease(XKeyEvent &event);
|
||||
|
||||
ButtonHandle get_button(XKeyEvent &key_event, bool allow_shift);
|
||||
|
Loading…
x
Reference in New Issue
Block a user