summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-11-29 00:41:08 +0000
committerrubidium <rubidium@openttd.org>2009-11-29 00:41:08 +0000
commit5d38d06313b3c2bc440283cc15cb1e86aa48cbf4 (patch)
treed19238f07c89292ae2e0517137724917438c236f
parentb00a5f1069b5bcf37af5d601e3e2828d0d09a1f0 (diff)
downloadopenttd-5d38d06313b3c2bc440283cc15cb1e86aa48cbf4.tar.xz
(svn r18331) -Fix [FS#3334]: news items would with some chat 'bars' not be displayed fully. Fix by erikjanp.
-rw-r--r--src/news_gui.cpp2
-rw-r--r--src/window.cpp18
-rw-r--r--src/window_func.h1
3 files changed, 19 insertions, 2 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 6a6876443..c36fe29ec 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -287,7 +287,7 @@ struct NewsWindow : Window {
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;
diff --git a/src/window.cpp b/src/window.cpp
index 5a00f3909..5fe73b7e5 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -593,6 +593,22 @@ Window *FindWindowById(WindowClass cls, WindowNumber number)
}
/**
+ * 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 @@ void Window::InitializeData(WindowClass cls, int window_number, uint32 desc_flag
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;
diff --git a/src/window_func.h b/src/window_func.h
index 4d21c4192..b61359900 100644
--- 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);