summaryrefslogtreecommitdiff
path: root/src/news_gui.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2012-12-08 17:19:09 +0000
committerfrosch <frosch@openttd.org>2012-12-08 17:19:09 +0000
commit7091f6640b5c75b1b12a816329edfeac6bdd8802 (patch)
treecb5131ce34b9c42cba98366ad79e10463f98c894 /src/news_gui.cpp
parentb533523258dfd943caa307d28413693bcaa64007 (diff)
downloadopenttd-7091f6640b5c75b1b12a816329edfeac6bdd8802.tar.xz
(svn r24802) -Fix [FS#4224]: When displaying the previous news message, don't consider news which are turned off.
Diffstat (limited to 'src/news_gui.cpp')
-rw-r--r--src/news_gui.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index f01ba40ee..20693e64c 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -890,19 +890,35 @@ static void ShowNewsMessage(const NewsItem *ni)
/** Show previous news item */
void ShowLastNewsMessage()
{
+ const NewsItem *ni = NULL;
if (_total_news == 0) {
return;
} else if (_forced_news == NULL) {
/* Not forced any news yet, show the current one, unless a news window is
* open (which can only be the current one), then show the previous item */
const Window *w = FindWindowById(WC_NEWS_WINDOW, 0);
- ShowNewsMessage((w == NULL || (_current_news == _oldest_news)) ? _current_news : _current_news->prev);
+ ni = (w == NULL || (_current_news == _oldest_news)) ? _current_news : _current_news->prev;
} else if (_forced_news == _oldest_news) {
/* We have reached the oldest news, start anew with the latest */
- ShowNewsMessage(_latest_news);
+ ni = _latest_news;
} else {
/* 'Scrolling' through news history show each one in turn */
- ShowNewsMessage(_forced_news->prev);
+ ni = _forced_news->prev;
+ }
+ bool wrap = false;
+ for (;;) {
+ if (_news_type_data[ni->type].display != ND_OFF) {
+ ShowNewsMessage(ni);
+ break;
+ }
+
+ ni = ni->prev;
+ if (ni == NULL) {
+ if (wrap) break;
+ /* We have reached the oldest news, start anew with the latest */
+ ni = _latest_news;
+ wrap = true;
+ }
}
}