From: <au...@us...> - 2010-09-18 17:14:27
|
Revision: 6041 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=6041&view=rev Author: auria Date: 2010-09-18 17:14:21 +0000 (Sat, 18 Sep 2010) Log Message: ----------- Fixed mossing notification in dynamic ribbon that could result in a visual glitch for plaer 0 in the kart selection screen Modified Paths: -------------- main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp main/trunk/src/states_screens/kart_selection.cpp Modified: main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp =================================================================== --- main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp 2010-09-18 10:08:14 UTC (rev 6040) +++ main/trunk/src/guiengine/widgets/dynamic_ribbon_widget.cpp 2010-09-18 17:14:21 UTC (rev 6041) @@ -909,7 +909,23 @@ //std::cout << "Player " << playerID << " has item " << item_id << " (" << name.c_str() << ") in row " << row << std::endl; m_rows[row].setSelection(id, playerID); - if (focusIt) m_rows[row].setFocusForPlayer(playerID); + if (focusIt) + { + m_rows[row].setFocusForPlayer(playerID); + } + else + { + // focusing the item is enough to trigger the selection listeners; however if we're setting selection + // without focusing they won't be noticed, which is why we notice them here + const int listenerAmount = m_hover_listeners.size(); + for (int n=0; n<listenerAmount; n++) + { + m_hover_listeners[n].onSelectionChanged(this, + name, + m_rows[row].getSelectionText(playerID), + playerID); + } + } propagateSelection(); return true; Modified: main/trunk/src/states_screens/kart_selection.cpp =================================================================== --- main/trunk/src/states_screens/kart_selection.cpp 2010-09-18 10:08:14 UTC (rev 6040) +++ main/trunk/src/states_screens/kart_selection.cpp 2010-09-18 17:14:21 UTC (rev 6041) @@ -1142,7 +1142,9 @@ setKartsFromCurrentGroup(); const std::string selected_kart_group = tabs->getSelectionIDString(PLAYER_ID_GAME_MASTER); - + + RandomGenerator random; + // update players selections (FIXME: don't hardcode player 0 below) const int num_players = m_kart_widgets.size(); for (int n=0; n<num_players; n++) @@ -1153,22 +1155,24 @@ // try to preserve the same kart for each player (except for player 0, since it's the one // that can change the groups, so focus for player 0 must remain on the tabs) - const std::string& selected_kart_group = m_kart_widgets[n].getKartInternalName(); - if (!w->setSelection( selected_kart_group, n, n>0 )) + const std::string& selected_kart = m_kart_widgets[n].getKartInternalName(); + if (!w->setSelection( selected_kart, n, n>0 )) { // if we get here, it means one player "lost" his kart in the tab switch std::cout << "Player " << n << " lost their selection when switching tabs!!!\n"; // Select a random kart in this case - RandomGenerator random; + const int count = w->getItems().size(); if (count > 0) { + // FIXME: two players may be given the same kart by the use of random const int randomID = random.get( count ); // select kart for players > 0 (player 0 is the one that can change the groups, // so focus for player 0 must remain on the tabs) - w->setSelection( randomID, n, n>0 ); + const bool success = w->setSelection( randomID, n, n>0 ); + if (!success) std::cerr << " WARNING: setting kart of player " << n << " failed :(\n"; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |