(svn r8409) -Regression (r8049): When the latest news was deleted, the news queue wrapped back to the oldest item, showing all news again.
authorDarkvater
Fri, 26 Jan 2007 00:25:39 +0000
changeset 5839 15e33fa8f9f7
parent 5838 1f8d470eb700
child 5840 2ff9c5f3bfa4
(svn r8409) -Regression (r8049): When the latest news was deleted, the news queue wrapped back to the oldest item, showing all news again.
-Regression [FS#573] (r8049): ShowLastNewsMessage could show an out-of-bounds news item because it did not checked if a previous item actually existed the first time it is called (forced news is INVALID_NEWS).
src/news_gui.cpp
--- a/src/news_gui.cpp	Thu Jan 25 18:37:21 2007 +0000
+++ b/src/news_gui.cpp	Fri Jan 26 00:25:39 2007 +0000
@@ -559,7 +559,7 @@
 		/* 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 : decreaseIndex(_current_news));
+		ShowNewsMessage((w == NULL || (_current_news == _oldest_news)) ? _current_news : decreaseIndex(_current_news));
 	} else if (_forced_news == _oldest_news) {
 		/* We have reached the oldest news, start anew with the latest */
 		ShowNewsMessage(_latest_news);
@@ -918,9 +918,11 @@
 				for (NewsID i = n;; i = decreaseIndex(i)) {
 					_news_items[i] = _news_items[decreaseIndex(i)];
 
-					if (i == _current_news) _current_news = increaseIndex(_current_news);
-					if (i == _forced_news) _forced_news = increaseIndex(_forced_news);
-					if (i == visible_news) WP(w, news_d).ni = &_news_items[increaseIndex(visible_news)];
+					if (i != _latest_news) {
+						if (i == _current_news) _current_news = increaseIndex(_current_news);
+						if (i == _forced_news) _forced_news = increaseIndex(_forced_news);
+						if (i == visible_news) WP(w, news_d).ni = &_news_items[increaseIndex(visible_news)];
+					}
 
 					if (i == _oldest_news) break;
 				}