From 5d38d06313b3c2bc440283cc15cb1e86aa48cbf4 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 29 Nov 2009 00:41:08 +0000 Subject: [PATCH] (svn r18331) -Fix [FS#3334]: news items would with some chat 'bars' not be displayed fully. Fix by erikjanp. --- src/news_gui.cpp | 2 +- src/window.cpp | 18 +++++++++++++++++- src/window_func.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 6a68764438..c36fe29ecf 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 5a00f3909a..5fe73b7e5b 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -592,6 +592,22 @@ Window *FindWindowById(WindowClass cls, WindowNumber number) return NULL; } +/** + * 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 @@ -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 4d21c41924..b61359900d 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);