Mercurial > hg > openttd
changeset 19869:bd00af6f5fe1 draft
(svn r24802) -Fix [FS#4224]: When displaying the previous news message, don't consider news which are turned off.
author | frosch <frosch@openttd.org> |
---|---|
date | Sat, 08 Dec 2012 17:19:09 +0000 |
parents | 9c28125866da |
children | ee19cd20b5a8 |
files | src/news_gui.cpp |
diffstat | 1 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -890,19 +890,35 @@ /** 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; + } } }