mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 16:20:11 -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
|
// We thought about not generating the keypress event, but we need
|
||||||
// that repeat for backspace. Rethink later.
|
// that repeat for backspace. Rethink later.
|
||||||
handle_keypress(event.xkey);
|
handle_keyrepeat(event.xkey);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
} else {
|
} 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.
|
* Generates a keyrelease corresponding to the indicated X KeyRelease event.
|
||||||
*/
|
*/
|
||||||
|
@ -59,6 +59,7 @@ protected:
|
|||||||
virtual void setup_colormap(XVisualInfo *visual);
|
virtual void setup_colormap(XVisualInfo *visual);
|
||||||
void handle_keystroke(XKeyEvent &event);
|
void handle_keystroke(XKeyEvent &event);
|
||||||
void handle_keypress(XKeyEvent &event);
|
void handle_keypress(XKeyEvent &event);
|
||||||
|
void handle_keyrepeat(XKeyEvent &event);
|
||||||
void handle_keyrelease(XKeyEvent &event);
|
void handle_keyrelease(XKeyEvent &event);
|
||||||
|
|
||||||
ButtonHandle get_button(XKeyEvent &key_event, bool allow_shift);
|
ButtonHandle get_button(XKeyEvent &key_event, bool allow_shift);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user