From: <au...@us...> - 2009-11-01 00:03:07
|
Revision: 4187 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4187&view=rev Author: auria Date: 2009-11-01 00:02:59 +0000 (Sun, 01 Nov 2009) Log Message: ----------- Completely fixed list navigation (including problems that were there before focus code migration, yay\!) Modified Paths: -------------- main/branches/irrlicht/src/guiengine/event_handler.cpp main/branches/irrlicht/src/guiengine/widgets/list_widget.cpp main/branches/irrlicht/src/guiengine/widgets/list_widget.hpp Modified: main/branches/irrlicht/src/guiengine/event_handler.cpp =================================================================== --- main/branches/irrlicht/src/guiengine/event_handler.cpp 2009-10-31 23:35:54 UTC (rev 4186) +++ main/branches/irrlicht/src/guiengine/event_handler.cpp 2009-11-01 00:02:59 UTC (rev 4187) @@ -120,19 +120,28 @@ break; } */ - /* - case EGET_ELEMENT_FOCUSED: // is this still used with the new focus implementation? + + case EGET_ELEMENT_FOCUSED: { Widget* w = GUIEngine::getWidget(id); if (w == NULL) break; std::cout << "==== irrlicht widget focused : " << w->m_properties[PROP_ID] << std::endl; - // FIXME: don't hardcode player 0 - return w->focused(0); + // forbid list for gaining "irrLicht focus", then they will process key events and + // we don't want that since we do our own custom processing for keys + if (w->m_type == WTYPE_LIST) + { + // cheap way to remove the focus from the element (nope, IGUIEnv::removeFocus doesn't work) + // Obviously will not work if the list if the first item of the screen. + GUIEngine::getGUIEnv()->setFocus( getCurrentScreen()->getFirstWidget()->getIrrlichtElement() ); + return EVENT_BLOCK; // confirms to irrLicht that we processed it + } + //return w->focused(0); // is this still used with the new focus implementation? + break; - }*/ + } case EGET_EDITBOX_ENTER: { // currently, enter pressed in text ctrl events can only happen in dialogs. Modified: main/branches/irrlicht/src/guiengine/widgets/list_widget.cpp =================================================================== --- main/branches/irrlicht/src/guiengine/widgets/list_widget.cpp 2009-10-31 23:35:54 UTC (rev 4186) +++ main/branches/irrlicht/src/guiengine/widgets/list_widget.cpp 2009-11-01 00:02:59 UTC (rev 4187) @@ -78,4 +78,12 @@ assert(list != NULL); return stringc( list->getListItem( list->getSelected() ) ).c_str(); } +// ----------------------------------------------------------------------------- +void ListWidget::unfocused(const int playerID) +{ + IGUIListBox* list = getIrrlichtElement<IGUIListBox>(); + // remove selection when leaving list + list->setSelected(-1); +} + Modified: main/branches/irrlicht/src/guiengine/widgets/list_widget.hpp =================================================================== --- main/branches/irrlicht/src/guiengine/widgets/list_widget.hpp 2009-10-31 23:35:54 UTC (rev 4186) +++ main/branches/irrlicht/src/guiengine/widgets/list_widget.hpp 2009-11-01 00:02:59 UTC (rev 4187) @@ -38,6 +38,8 @@ void add(); void addItem(const char* item); + virtual void unfocused(const int playerID); + int getSelection() const; std::string getSelectionName() const; void clear(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |