changeset 11682:2b28014c1684 draft

(svn r16065) -Fix: don't readd (and resolve) the last joined server each time the window gets repainted
author rubidium <rubidium@openttd.org>
date Wed, 15 Apr 2009 20:37:00 +0000
parents d03a2442b31f
children 93d27bbd1397
files src/network/core/address.h src/network/network_gui.cpp
diffstat 2 files changed, 12 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/core/address.h
+++ b/src/network/core/address.h
@@ -179,7 +179,7 @@
 	 * @param address the other address.
 	 * @return < 0 if address is less, 0 if equal and > 0 if address is more
 	 */
-	int CompareTo(NetworkAddress address)
+	int CompareTo(NetworkAddress &address)
 	{
 		int r = this->GetAddressLength() - address.GetAddressLength();
 		if (r == 0) r = this->address.ss_family - address.address.ss_family;
@@ -193,7 +193,7 @@
 	 * @param address the other address.
 	 * @return true if both match.
 	 */
-	bool operator == (NetworkAddress address)
+	bool operator == (NetworkAddress &address)
 	{
 		return this->CompareTo(address) == 0;
 	}
@@ -203,7 +203,7 @@
 	 * @param address the other address.
 	 * @return true if both match.
 	 */
-	bool operator == (NetworkAddress address) const
+	bool operator == (NetworkAddress &address) const
 	{
 		return const_cast<NetworkAddress*>(this)->CompareTo(address) == 0;
 	}
@@ -212,7 +212,7 @@
 	 * Compare the address of this class with the address of another.
 	 * @param address the other address.
 	 */
-	bool operator < (NetworkAddress address)
+	bool operator < (NetworkAddress &address)
 	{
 		return this->CompareTo(address) < 0;
 	}
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -120,10 +120,11 @@
 	/* Constants for sorting servers */
 	static GUIGameServerList::SortFunction * const sorter_funcs[];
 
-	byte field;                  ///< selected text-field
-	NetworkGameList *server;     ///< selected server
-	GUIGameServerList servers;   ///< list with game servers.
-	ServerListPosition list_pos; ///< position of the selected server
+	byte field;                   ///< selected text-field
+	NetworkGameList *server;      ///< selected server
+	NetworkGameList *last_joined; ///< the last joined server
+	GUIGameServerList servers;    ///< list with game servers.
+	ServerListPosition list_pos;  ///< position of the selected server
 
 	/**
 	 * (Re)build the network game list as its amount has changed because
@@ -337,6 +338,8 @@
 		this->server = NULL;
 		this->list_pos = SLP_INVALID;
 
+		this->last_joined = NetworkGameListAddItem(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port));
+
 		this->servers.SetListing(this->last_sorting);
 		this->servers.SetSortFuncs(this->sorter_funcs);
 		this->servers.ForceRebuild();
@@ -403,9 +406,8 @@
 			y += NET_PRC__SIZE_OF_ROW;
 		}
 
-		const NetworkGameList *last_joined = NetworkGameListAddItem(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port));
 		/* Draw the last joined server, if any */
-		if (last_joined != NULL) this->DrawServerLine(last_joined, y = this->widget[NGWW_LASTJOINED].top + 3, last_joined == sel);
+		if (this->last_joined != NULL) this->DrawServerLine(this->last_joined, y = this->widget[NGWW_LASTJOINED].top + 3, this->last_joined == sel);
 
 		/* Draw the right menu */
 		GfxFillRect(this->widget[NGWW_DETAILS].left + 1, 43, this->widget[NGWW_DETAILS].right - 1, 92, 157);