changeset 11037:0b68b7f9ea7f draft

(svn r15377) -Fix [FS#2607]: filter did resort when unneeded and didn't deselect properly in some cases (Roujin)
author rubidium <rubidium@openttd.org>
date Fri, 06 Feb 2009 18:00:05 +0000
parents a7a7e54d52a6
children 1251bbc83146
files src/network/network_content_gui.cpp src/sortlist_type.h
diffstat 2 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -279,15 +279,18 @@
 	{
 		if (!this->content.Filter(this->edit_str_buf)) return;
 
-		this->selected = NULL;
-		this->list_pos = 0;
-
+		/* update list position */
 		for (ConstContentIterator iter = this->content.Begin(); iter != this->content.End(); iter++) {
 			if (*iter == this->selected) {
 				this->list_pos = iter - this->content.Begin();
-				break;
+				this->ScrollToSelected();
+				return;
 			}
 		}
+
+		/* previously selected item not in list anymore */
+		this->selected = NULL;
+		this->list_pos = 0;
 	}
 
 	/** Make sure that the currently selected content info is within the visible part of the matrix */
--- a/src/sortlist_type.h
+++ b/src/sortlist_type.h
@@ -321,16 +321,18 @@
 		/* Do not filter if the filter bit is not set */
 		if (!HASBITS(this->flags, VL_FILTER)) return false;
 
+		bool changed = false;
 		for (uint iter = 0; iter < this->items;) {
 			T *item = &this->data[iter];
 			if (!decide(item, filter_data)) {
 				this->Erase(item);
+				changed = true;
 			} else {
 				iter++;
 			}
 		}
 
-		return true;
+		return changed;
 	}
 
 	/**