Re: [hatari-devel] Keyup bug in SDL GUI |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
- To: hatari-devel@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [hatari-devel] Keyup bug in SDL GUI
- From: Andreas Grabher <andreas_g86@xxxxxxxxxx>
- Date: Tue, 29 Nov 2022 11:21:21 +0100
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1669717285; bh=mAD29/CTJaxpo73jlj5Il+uoVTZR7LTL7XZWwKuM3qA=; h=Content-Type:From:Mime-Version:Subject:Date:Message-Id:To; b=LDOsbArKUZi2EQSwLBwvE3X4eauTIr6G41wCvrpmrU3pocNfN5PtBcUG0om6sLL6v lu2Yoc+HeWH+nnRNbAKhCAPTQWlwHaDMZE/qlcacaoSc3uGEwX+Y3qZMw7LGkO9iDA /UKOkW7wpHgh/HygYjBNjWtjiHsDl+M/iZ7JCLORvZP7+P5/AMv3YX4vXTYj3iEqQJ Am2boEOIe6xW7JOROmjd7iSlN4mH/SQkV4freHHO7CC9/BugLcf3orJ4W/WIDmUGei kA03QzFOO1NE9JdnmW5f9f60aOKa7vS2R+Rs75RO455OKZeBRLsb8n/0Xt77mT24V4 J82bgm8Y/ZSuA==
> Am 02.11.2022 um 18:42 schrieb Thomas Huth <th.huth@xxxxxxxxx>:
>
> 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
>
I just read through the SDL code a bit and I think it should work with SDL_ResetKeyboard(). That function will send KEYUP event for all pressed keys. Releasing a key afterwards won‘t send another KEYUP event until the key is pressed again.
This should fix the issue:
SDL_ResetKeyboard();
SDL_PumpEvents();
SDL_FlushEvent(SDL_KEYUP);
I have some more keyboard issues. Calling host routines can cause stuck keys, especially stuck modifiers. Not sure how this can be fixed.