From 1985d545367d0c673c1f6a9d472d604ef655685e Mon Sep 17 00:00:00 2001 From: auria Date: Sun, 27 Mar 2011 00:53:28 +0000 Subject: [PATCH] Attempt to fix tab traversal in irrlicht 1.8 git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8079 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/guiengine/event_handler.cpp | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/src/guiengine/event_handler.cpp b/src/guiengine/event_handler.cpp index 0a9a6a151..f50e8a7f3 100644 --- a/src/guiengine/event_handler.cpp +++ b/src/guiengine/event_handler.cpp @@ -236,7 +236,7 @@ const bool NAVIGATION_DEBUG = false; void EventHandler::navigateUp(const int playerID, Input::InputType type, const bool pressedDown) { //std::cout << "Naviagte up!\n"; - IGUIElement *el = NULL, *first=NULL, *closest=NULL; + IGUIElement *el = NULL/*, *first=NULL*/, *closest=NULL; if (type == Input::IT_STICKBUTTON && !pressedDown) return; @@ -294,13 +294,11 @@ void EventHandler::navigateUp(const int playerID, Input::InputType type, const b if (el != NULL && el->getTabGroup() != NULL) { // if the current widget is e.g. 15, search for widget 14, 13, 12, ... (up to 10 IDs may be missing) - for (int n=0; n<10 && !found; n++) + for (int n=1; n<10 && !found; n++) { - const bool success = el->getTabGroup()->getNextElement(el->getTabOrder() - n, - true /* reverse */, false /* group */, - first, closest, true); + closest = GUIEngine::getGUIEnv()->getRootGUIElement()->getElementFromId(el->getTabOrder() - n, true); - if (success) + if (closest != NULL && Widget::isFocusableId(closest->getID())) { if (NAVIGATION_DEBUG) std::cout << "Navigating up to " << closest->getID() << std::endl; Widget* closestWidget = GUIEngine::getWidget( closest->getID() ); @@ -330,19 +328,6 @@ void EventHandler::navigateUp(const int playerID, Input::InputType type, const b if (NAVIGATION_DEBUG) { std::cout << "EventHandler::navigateUp : warp around, selecting the last widget\n"; - if (el == NULL) - { - std::cout << " because el is null\n"; - } - else if (el->getTabGroup() == NULL) - { - std::cout << " because el's tab group is null\n"; - } - else if (!el->getTabGroup()->getNextElement(el->getTabOrder(), true, false, first, closest)) - { - std::cout << " because el (" << core::stringc(el->getText()).c_str() << ", tab order " - << el->getTabOrder() << ") has no known previous\n"; - } } // select the last widget @@ -369,7 +354,7 @@ void EventHandler::navigateDown(const int playerID, Input::InputType type, const { //std::cout << "Naviagte down!\n"; - IGUIElement *el = NULL, *first = NULL, *closest = NULL; + IGUIElement *el = NULL, *closest = NULL; if (type == Input::IT_STICKBUTTON && !pressedDown) return; @@ -425,11 +410,11 @@ void EventHandler::navigateDown(const int playerID, Input::InputType type, const if (el != NULL && el->getTabGroup() != NULL) { // if the current widget is e.g. 5, search for widget 6, 7, 8, 9, ..., 15 (up to 10 IDs may be missing) - for (int n=0; n<10 && !found; n++) + for (int n=1; n<10 && !found; n++) { - const bool success = el->getTabGroup()->getNextElement(el->getTabOrder() + n, - false, false, first, closest, true); - if (success && closest->getID() != -1) + closest = GUIEngine::getGUIEnv()->getRootGUIElement()->getElementFromId(el->getTabOrder() + n, true); + + if (closest != NULL && Widget::isFocusableId(closest->getID())) { Widget* closestWidget = GUIEngine::getWidget( closest->getID() ); if (playerID != PLAYER_ID_GAME_MASTER && !closestWidget->m_supports_multiplayer) return;