From Tim More, "This patch causes GraphicsWindowX11 to not send key release events when a key
press / release is caused by auto-repeat. This is consistent with Windows and Mac behavior, as well as other toolkits such as SDL."
This commit is contained in:
parent
4c3a13c3a1
commit
175bb58b58
@ -976,7 +976,23 @@ void GraphicsWindowX11::checkEvents()
|
|||||||
if (firstEventTime==0) firstEventTime = ev.xmotion.time;
|
if (firstEventTime==0) firstEventTime = ev.xmotion.time;
|
||||||
Time relativeTime = ev.xmotion.time - firstEventTime;
|
Time relativeTime = ev.xmotion.time - firstEventTime;
|
||||||
eventTime = baseTime + static_cast<double>(relativeTime)*0.001;
|
eventTime = baseTime + static_cast<double>(relativeTime)*0.001;
|
||||||
|
#if 1
|
||||||
|
// Check for following KeyPress events and see if
|
||||||
|
// the pair are the result of auto-repeat. If so, drop
|
||||||
|
// this one on the floor, to be consistent with
|
||||||
|
// Windows and Mac ports. The idea comes from libSDL sources.
|
||||||
|
XEvent nextev;
|
||||||
|
if (XPending(display))
|
||||||
|
{
|
||||||
|
XPeekEvent(display, &nextev);
|
||||||
|
if ((nextev.type == KeyPress)
|
||||||
|
&& (nextev.xkey.keycode == ev.xkey.keycode)
|
||||||
|
&& (nextev.xmotion.time - ev.xmotion.time < 2))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
int keySymbol = 0;
|
int keySymbol = 0;
|
||||||
unsigned int modifierMask = 0;
|
unsigned int modifierMask = 0;
|
||||||
adaptKey(ev.xkey, keySymbol, modifierMask);
|
adaptKey(ev.xkey, keySymbol, modifierMask);
|
||||||
|
Loading…
Reference in New Issue
Block a user