Bugfix: Changing focus with tab-keys now also work when elements are inside a modal screen.

Event got eaten before. It passes it now on partly (enough to arrive at CGUIEnvironment) when the focus will stay inside the modal screen.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6215 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2021-05-26 13:57:12 +00:00
parent 9147d4ade8
commit f103ea3dac
3 changed files with 15 additions and 1 deletions

@ -1,5 +1,6 @@
-------------------------- --------------------------
Changes in 1.9 (not yet released) Changes in 1.9 (not yet released)
- Bugfix: Changing focus with tab-keys now also work when elements are inside a modal screen.
- COBJMeshFileLoader using a bit more exact color conversion for 0-1 to 0-255 range (same now as SColorf::toSColor uses). - COBJMeshFileLoader using a bit more exact color conversion for 0-1 to 0-255 range (same now as SColorf::toSColor uses).
- Speedup for COBJMeshWriter - Speedup for COBJMeshWriter
- Add blinkMode parameter to IGUIEnvironment::addModalScreen, so blinking can be suppressed - Add blinkMode parameter to IGUIEnvironment::addModalScreen, so blinking can be suppressed

@ -642,8 +642,8 @@ bool CGUIEnvironment::postEventFromUser(const SEvent& event)
// For keys we handle the event before changing focus to give elements the chance for catching the TAB // For keys we handle the event before changing focus to give elements the chance for catching the TAB
// Send focus changing event // Send focus changing event
// CAREFUL when changing - there's an identical check in CGUIModalScreen::OnEvent
if (FocusFlags & EFF_SET_ON_TAB && if (FocusFlags & EFF_SET_ON_TAB &&
event.EventType == EET_KEY_INPUT_EVENT &&
event.KeyInput.PressedDown && event.KeyInput.PressedDown &&
event.KeyInput.Key == KEY_TAB) event.KeyInput.Key == KEY_TAB)
{ {

@ -136,6 +136,19 @@ bool CGUIModalScreen::OnEvent(const SEvent& event)
{ {
MouseDownTime = os::Timer::getTime(); MouseDownTime = os::Timer::getTime();
} }
case EET_KEY_INPUT_EVENT:
// CAREFUL when changing - there's an identical check in CGUIEnvironment::postEventFromUser
if (Environment->getFocusBehavior() & EFF_SET_ON_TAB &&
event.KeyInput.PressedDown &&
event.KeyInput.Key == KEY_TAB)
{
IGUIElement* next = Environment->getNextElement(event.KeyInput.Shift, event.KeyInput.Control);
if ( next && isMyChild(next) )
{
// Pass on the TAB-key, otherwise focus-tabbing inside modal screens breaks
return false;
}
}
default: default:
break; break;
} }