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;
+		}
 	}
 }