doom: make sure not to drop keyup/keydown events
This commit is contained in:
parent
98b9c4eb1e
commit
ab08c97e60
1 changed files with 16 additions and 2 deletions
|
@ -130,6 +130,7 @@ void D_DoAdvanceDemo (void);
|
||||||
event_t events[MAXEVENTS];
|
event_t events[MAXEVENTS];
|
||||||
int eventhead;
|
int eventhead;
|
||||||
int eventtail;
|
int eventtail;
|
||||||
|
QLock eventlock;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -138,8 +139,21 @@ int eventtail;
|
||||||
//
|
//
|
||||||
void D_PostEvent (event_t* ev)
|
void D_PostEvent (event_t* ev)
|
||||||
{
|
{
|
||||||
|
int next;
|
||||||
|
|
||||||
|
retry:
|
||||||
|
qlock(&eventlock);
|
||||||
|
next = (eventhead+1)&(MAXEVENTS-1);
|
||||||
|
if(next == eventtail){
|
||||||
|
qunlock(&eventlock);
|
||||||
|
if(ev->type != ev_keydown && ev->type != ev_keyup)
|
||||||
|
return;
|
||||||
|
sleep(1);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
events[eventhead] = *ev;
|
events[eventhead] = *ev;
|
||||||
eventhead = (++eventhead)&(MAXEVENTS-1);
|
eventhead = next;
|
||||||
|
qunlock(&eventlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,7 +170,7 @@ void D_ProcessEvents (void)
|
||||||
&& (W_CheckNumForName("map01")<0) )
|
&& (W_CheckNumForName("map01")<0) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for ( ; eventtail != eventhead ; eventtail = (++eventtail)&(MAXEVENTS-1) )
|
for ( ; eventtail != eventhead ; eventtail = (eventtail+1)&(MAXEVENTS-1))
|
||||||
{
|
{
|
||||||
ev = &events[eventtail];
|
ev = &events[eventtail];
|
||||||
if (M_Responder (ev))
|
if (M_Responder (ev))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue