changeset 13805:97e8f494b7b9 draft

(svn r18331) -Fix [FS#3334]: news items would with some chat 'bars' not be displayed fully. Fix by erikjanp.
author rubidium <rubidium@openttd.org>
date Sun, 29 Nov 2009 00:41:08 +0000
parents d603390e5833
children efb571d2550d
files src/news_gui.cpp src/window.cpp src/window_func.h
diffstat 3 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -287,7 +287,7 @@
 	NewsWindow(const WindowDesc *desc, NewsItem *ni) : Window(), ni(ni)
 	{
 		NewsWindow::duration = 555;
-		const Window *w = FindWindowById(WC_SEND_NETWORK_MSG, 0);
+		const Window *w = FindWindowByClass(WC_SEND_NETWORK_MSG);
 		this->chat_height = (w != NULL) ? w->height : 0;
 		this->status_height = FindWindowById(WC_STATUS_BAR, 0)->height;
 
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -593,6 +593,22 @@
 }
 
 /**
+ * Find any window by its class. Useful when searching for a window that uses
+ * the window number as a WindowType, like WC_SEND_NETWORK_MSG.
+ * @param cls Window class
+ * @return Pointer to the found window, or \c NULL if not available
+ */
+Window *FindWindowByClass(WindowClass cls)
+{
+	Window *w;
+	FOR_ALL_WINDOWS_FROM_BACK(w) {
+		if (w->window_class == cls) return w;
+	}
+
+	return NULL;
+}
+
+/**
  * Delete a window by its class and window number (if it is open).
  * @param cls Window class
  * @param number Number of the window within the window class
@@ -807,7 +823,7 @@
 		if (FindWindowById(WC_MAIN_TOOLBAR, 0)     != NULL) w = w->z_back;
 		if (FindWindowById(WC_STATUS_BAR, 0)       != NULL) w = w->z_back;
 		if (FindWindowById(WC_NEWS_WINDOW, 0)      != NULL) w = w->z_back;
-		if (FindWindowById(WC_SEND_NETWORK_MSG, 0) != NULL) w = w->z_back;
+		if (FindWindowByClass(WC_SEND_NETWORK_MSG) != NULL) w = w->z_back;
 
 		if (w == NULL) {
 			_z_back_window->z_front = this;
--- a/src/window_func.h
+++ b/src/window_func.h
@@ -16,6 +16,7 @@
 #include "company_type.h"
 
 Window *FindWindowById(WindowClass cls, WindowNumber number);
+Window *FindWindowByClass(WindowClass cls);
 void ChangeWindowOwner(Owner old_owner, Owner new_owner);
 
 void ResizeWindow(Window *w, int x, int y);