From 7091f6640b5c75b1b12a816329edfeac6bdd8802 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 8 Dec 2012 17:19:09 +0000 Subject: [PATCH] (svn r24802) -Fix [FS#4224]: When displaying the previous news message, don't consider news which are turned off. --- src/news_gui.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index f01ba40ee7..20693e64cc 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; + } } }