Use modifier state from X keypress event, not current state at time of event process

This commit is contained in:
Josh Holtrop 2017-10-12 21:11:27 -04:00
parent 5999d62660
commit 34dc956272

View File

@ -29,6 +29,7 @@ static void StopKeyRepeat(unsigned int x_keycode)
} }
#endif #endif
#if 0
static unsigned int GetXState() static unsigned int GetXState()
{ {
Window win; Window win;
@ -37,15 +38,15 @@ static unsigned int GetXState()
XQueryPointer(g_display, RootWindow(g_display, DefaultScreen(g_display)), &win, &win, &i, &i, &i, &i, &state); XQueryPointer(g_display, RootWindow(g_display, DefaultScreen(g_display)), &win, &win, &i, &i, &i, &i, &state);
return state; return state;
} }
#endif
static uint32_t XKeyToJtkKey(unsigned int x_keycode) static uint32_t XKeyToJtkKey(unsigned int x_keycode, unsigned int x_state)
{ {
XKeyEvent x_key_event; XKeyEvent x_key_event;
x_key_event.type = KeyPress; x_key_event.type = KeyPress;
x_key_event.display = g_display; x_key_event.display = g_display;
/* Turn off the ControlMask bit for looking up keys. We'll handle control /* Turn off the ControlMask bit for looking up keys. We'll handle control
* keys ourselves. */ * keys ourselves. */
unsigned int x_state = GetXState();
x_key_event.state = x_state & ~ControlMask; x_key_event.state = x_state & ~ControlMask;
x_key_event.keycode = x_keycode; x_key_event.keycode = x_keycode;
char buffer; char buffer;
@ -235,7 +236,7 @@ static bool ProcessXKeyPressEvent(XEvent * x_event, Jtk_Event * event)
unsigned int x_keycode = x_event->xkey.keycode; unsigned int x_keycode = x_event->xkey.keycode;
event->type = JTK_EVENT_KEY_PRESS; event->type = JTK_EVENT_KEY_PRESS;
event->key.repeat = false; event->key.repeat = false;
event->key.key = XKeyToJtkKey(x_keycode); event->key.key = XKeyToJtkKey(x_keycode, x_event->xkey.state);
event->key.x_keycode = x_keycode; event->key.x_keycode = x_keycode;
return true; return true;
} }
@ -336,6 +337,7 @@ void Jtk_WaitEvent(Jtk_Event * event)
size_t timer_id = Jtk_GetExpiredTimer(); size_t timer_id = Jtk_GetExpiredTimer();
if (timer_id != (size_t)-1) if (timer_id != (size_t)-1)
{ {
#if 0
auto it = g_key_repeat_timers.find(timer_id); auto it = g_key_repeat_timers.find(timer_id);
if (it != g_key_repeat_timers.end()) if (it != g_key_repeat_timers.end())
{ {
@ -346,11 +348,14 @@ void Jtk_WaitEvent(Jtk_Event * event)
} }
else else
{ {
#endif
event->type = JTK_EVENT_TIMER; event->type = JTK_EVENT_TIMER;
event->timer.timer_id = timer_id; event->timer.timer_id = timer_id;
event->timer.user1 = Jtk_GetTimerUserData(timer_id, 0u); event->timer.user1 = Jtk_GetTimerUserData(timer_id, 0u);
event->timer.user2 = Jtk_GetTimerUserData(timer_id, 1u); event->timer.user2 = Jtk_GetTimerUserData(timer_id, 1u);
#if 0
} }
#endif
Jtk_ServiceTimer(timer_id); Jtk_ServiceTimer(timer_id);
return; return;
} }