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