Index: ps/trunk/binaries/data/mods/public/gui/lobby/lobby.js
===================================================================
--- ps/trunk/binaries/data/mods/public/gui/lobby/lobby.js
+++ ps/trunk/binaries/data/mods/public/gui/lobby/lobby.js
@@ -202,12 +202,8 @@
"isSpecial": true
});
- // Update status information if that player is selected
if (g_SelectedPlayer == msg.text)
- {
- let playersBox = Engine.GetGUIObjectByName("playersBox");
- playersBox.selected = playersBox.list.indexOf(g_SelectedPlayer);
- }
+ updateUserRoleText(g_SelectedPlayer);
},
"nick": msg => {
addChatMessage({
@@ -563,9 +559,6 @@
let sortBy = playersBox.selected_column || "name";
let sortOrder = playersBox.selected_column_order || 1;
- if (playersBox.selected > -1)
- g_SelectedPlayer = playersBox.list[playersBox.selected];
-
let buddyStatusList = [];
let playerList = [];
let presenceList = [];
@@ -635,9 +628,7 @@
playersBox.list_rating = ratingList;
playersBox.list = nickList;
- // To reduce rating-server load, only send the GUI event if the selection actually changed
- if (playersBox.selected != playersBox.list.indexOf(g_SelectedPlayer))
- playersBox.selected = playersBox.list.indexOf(g_SelectedPlayer);
+ playersBox.selected = playersBox.list.indexOf(g_SelectedPlayer);
}
/**
@@ -669,21 +660,14 @@
}
/**
- * Select the game listing the selected player when toggling the open games filter.
- */
-function selectGameFromSelectedPlayername()
-{
- let playerList = Engine.GetGUIObjectByName("playersBox");
- if (playerList.selected >= 0)
- selectGameFromPlayername(playerList.list[playerList.selected]);
-}
-
-/**
- * Select the game where the given player is currently playing, observing or offline.
+ * Select the game where the selected player is currently playing, observing or offline.
* Selects in that order to account for players that occur in multiple games.
*/
-function selectGameFromPlayername(playerName)
+function selectGameFromPlayername()
{
+ if (!g_SelectedPlayer)
+ return;
+
let gameList = Engine.GetGUIObjectByName("gamesBox");
let foundAsObserver = false;
@@ -691,7 +675,7 @@
for (let player of stringifiedTeamListToPlayerData(g_GameList[i].players))
{
let nick = splitRatingFromNick(player.Name)[0];
- if (playerName != nick)
+ if (g_SelectedPlayer != nick)
continue;
if (player.Team == "observer")
@@ -711,13 +695,14 @@
function onPlayerListSelection()
{
- lookupSelectedUserProfile("playersBox");
+ let playerList = Engine.GetGUIObjectByName("playersBox");
+ if (playerList.selected == playerList.list.indexOf(g_SelectedPlayer))
+ return;
+ g_SelectedPlayer = playerList.list[playerList.selected];
+ lookupSelectedUserProfile("playersBox");
updateToggleBuddy();
-
- let playerList = Engine.GetGUIObjectByName("playersBox");
- if (playerList.selected != -1)
- selectGameFromPlayername(playerList.list[playerList.selected]);
+ selectGameFromPlayername();
}
function setLeaderboardVisibility(visible)
@@ -761,13 +746,19 @@
Engine.SendGetProfile(playerName);
Engine.GetGUIObjectByName("usernameText").caption = playerName;
- Engine.GetGUIObjectByName("roleText").caption = g_RoleNames[Engine.LobbyGetPlayerRole(playerName) || "participant"];
Engine.GetGUIObjectByName("rankText").caption = translate("N/A");
Engine.GetGUIObjectByName("highestRatingText").caption = translate("N/A");
Engine.GetGUIObjectByName("totalGamesText").caption = translate("N/A");
Engine.GetGUIObjectByName("winsText").caption = translate("N/A");
Engine.GetGUIObjectByName("lossesText").caption = translate("N/A");
Engine.GetGUIObjectByName("ratioText").caption = translate("N/A");
+
+ updateUserRoleText(playerName);
+}
+
+function updateUserRoleText(playerName)
+{
+ Engine.GetGUIObjectByName("roleText").caption = g_RoleNames[Engine.LobbyGetPlayerRole(playerName) || "participant"];
}
/**
Index: ps/trunk/binaries/data/mods/public/gui/lobby/lobby.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/gui/lobby/lobby.xml
+++ ps/trunk/binaries/data/mods/public/gui/lobby/lobby.xml
@@ -52,6 +52,10 @@
updatePlayerList();
+
+ // In case of clicking on the same player again
+ selectGameFromPlayername();
+
toggleBuddy();
@@ -268,7 +272,6 @@
font="sans-bold-13">
applyFilters();
- selectGameFromSelectedPlayername();
Index: ps/trunk/source/gui/CList.cpp
===================================================================
--- ps/trunk/source/gui/CList.cpp
+++ ps/trunk/source/gui/CList.cpp
@@ -207,6 +207,9 @@
if (timer_Time() - m_LastItemClickTime < SELECT_DBLCLICK_RATE && hovered == m_PrevSelectedItem)
this->SendEvent(GUIM_MOUSE_DBLCLICK_LEFT_ITEM, "mouseleftdoubleclickitem");
+ else
+ this->SendEvent(GUIM_MOUSE_PRESS_LEFT_ITEM, "mouseleftclickitem");
+
m_LastItemClickTime = timer_Time();
m_PrevSelectedItem = hovered;
break;
Index: ps/trunk/source/gui/GUIbase.h
===================================================================
--- ps/trunk/source/gui/GUIbase.h
+++ ps/trunk/source/gui/GUIbase.h
@@ -60,6 +60,7 @@
GUIM_MOUSE_ENTER,
GUIM_MOUSE_LEAVE,
GUIM_MOUSE_PRESS_LEFT,
+ GUIM_MOUSE_PRESS_LEFT_ITEM,
GUIM_MOUSE_PRESS_RIGHT,
GUIM_MOUSE_DOWN_LEFT,
GUIM_MOUSE_DOWN_RIGHT,