changeset 13009:dea163c879fa draft

(svn r17503) -Fix (r17502): Save all files before commit.
author alberth <alberth@openttd.org>
date Fri, 11 Sep 2009 18:54:33 +0000
parents 3abc6651764b
children ecec35d9435b
files src/window_gui.h
diffstat 1 files changed, 24 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -503,16 +503,33 @@
 	 */
 	inline bool SetFocusedWidget(byte widget_index)
 	{
-		if (widget_index >= this->widget_count || this->widget + widget_index == this->focused_widget) {
-			return false;
+		if (this->widget != NULL) {
+			/* Do nothing if widget_index is already focused, or if it wasn't a valid widget. */
+			if (widget_index >= this->widget_count || this->widget + widget_index == this->focused_widget) return false;
+
+			if (this->focused_widget != NULL) {
+				/* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */
+				this->InvalidateWidget(this->focused_widget - this->widget);
+			}
+			this->focused_widget = &this->widget[widget_index];
+			return true;
 		}
 
-		if (this->focused_widget != NULL) {
-			/* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */
-			this->InvalidateWidget(this->focused_widget - this->widget);
+		if (this->nested_array != NULL) {
+			/* Do nothing if widget_index is already focused, or if it wasn't a valid widget. */
+			if (widget_index >= this->nested_array_size) return false;
+
+			assert(this->nested_array[widget_index] != NULL); // Setting focus to a non-existing widget is a bad idea.
+			if (this->nested_focus != NULL) {
+				if (this->nested_array[widget_index] == this->nested_focus) return false;
+
+				/* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */
+				this->nested_focus->Invalidate(this);
+			}
+			this->nested_focus = this->nested_array[widget_index];
+			return true;
 		}
-		this->focused_widget = &this->widget[widget_index];
-		return true;
+		NOT_REACHED();
 	}
 
 	/**