diff options
author | frosch <frosch@openttd.org> | 2012-12-08 17:19:09 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2012-12-08 17:19:09 +0000 |
commit | 7091f6640b5c75b1b12a816329edfeac6bdd8802 (patch) | |
tree | cb5131ce34b9c42cba98366ad79e10463f98c894 | |
parent | b533523258dfd943caa307d28413693bcaa64007 (diff) | |
download | openttd-7091f6640b5c75b1b12a816329edfeac6bdd8802.tar.xz |
(svn r24802) -Fix [FS#4224]: When displaying the previous news message, don't consider news which are turned off.
-rw-r--r-- | src/news_gui.cpp | 22 |
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; + } } } |