Use modifier state from X keypress event, not current state at time of event process
This commit is contained in:
parent
5999d62660
commit
34dc956272
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user