summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2007-01-26 00:25:39 +0000
committerDarkvater <darkvater@openttd.org>2007-01-26 00:25:39 +0000
commitf4dad30da7c69f54b3cc089ec407d6d69d6f7d36 (patch)
tree1d69c10e1a1d7db35968224f9cf455de4ea1217c
parentc1530583789a405162348c612f63bb98c042be87 (diff)
downloadopenttd-f4dad30da7c69f54b3cc089ec407d6d69d6f7d36.tar.xz
(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).
-rw-r--r--src/news_gui.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 0119429ca..7a2432f57 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -559,7 +559,7 @@ void ShowLastNewsMessage(void)
/* 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 @@ void DeleteVehicleNews(VehicleID vid, StringID news)
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;
}