Re: [hatari-devel] Keyup bug in SDL GUI

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]


Am Wed, 2 Nov 2022 10:06:50 +0100
schrieb Andreas Grabher <andreas_g86@xxxxxxxxxx>:

> > Am 31.10.2022 um 19:48 schrieb Eero Tamminen <oak@xxxxxxxxxxxxxx>:
> > 
> > Hi,
> >   
> >> On 31.10.2022 20.35, Andreas Grabher wrote:
> >> I might have found a bug in the SDL GUI. This scenario:
> >> In the guest operating system I confirm some action by pressing enter  
> >> —> SDL_KEYDOWN with SDLK_RETURN  
> >> Due to some bug in the OS I get a double fault, which then activates Dialog_HaltDlg() before I am able to release the key
> >> I then release the key  
> >> —> SDL_KEYUP with SDLK_RETURN  
> >> At this time we are already in the SDL_WaitEvent()-Loop in SDLGui_DoDialogExt() and the event is recognized as key up in the GUI. This leads to automatically pressing the default button which exits the dialog without me having a chance to select anything.
> >> Can you confirm this? This will be difficult to fix.  
> > 
> > You can wait until all keys are up, before starting accepting input in SDL GUI.
> > 
> > No notify user about this wait, you can show a note about keys being down in statusbar.
> > 
> > If SDL does not provide information about pressed keys, keymap.c keeps count of them.
> > 
> > 
> >    - Eero
> >   
> Maybe calling SDL_ResetKeyboard() before entering the SDL_WaitEvent()-loop would be the solution?

I don't think this would be the right fix - in case you still hold the key
when the SDL_ResetKeyboard() is done, you still get the KEYUP event
afterwards once the key is released. I think you have to something like
this (untested):

 const Uint8 *keys = SDL_GetKeyboardState();
 while (keys[SDLK_RETURN])
     SDL_PumpEvents();

 HTH,
  Thomas



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/