(svn r103) Fix: rare newspaper crash with too many messages [ 1009976 ] (thx to blathij)s
authordominik
Sat, 21 Aug 2004 22:04:25 +0000
changeset 102 1d277a07f1f1
parent 101 17b572a0b30b
child 103 3af99b9373a1
(svn r103) Fix: rare newspaper crash with too many messages [ 1009976 ] (thx to blathij)s
news_gui.c
--- a/news_gui.c	Sat Aug 21 16:55:04 2004 +0000
+++ b/news_gui.c	Sat Aug 21 22:04:25 2004 +0000
@@ -28,7 +28,8 @@
 static byte _current_news = 255; // points to news item that should be shown next
 static byte _oldest_news = 0;    // points to first item in fifo queue
 static byte _latest_news = 255;  // points to last item in fifo queue
-static byte _forced_news = 255;  // points to a forced-to-be-shown item (255 for none)
+static byte _forced_news = 255;  // if the message being shown was forced by the user, its index is stored in _forced_news. 
+																 //forced_news is 255 otherwise. (Users can force messages through history or "last message")
 
 static byte _total_news = 0; // total news count
 
@@ -37,6 +38,7 @@
 void DrawNewsNewShipAvail(Window *w);
 void DrawNewsNewAircraftAvail(Window *w);
 void DrawNewsBankrupcy(Window *w);
+static void MoveToNexItem();
 
 StringID GetNewsStringNewTrainAvail(NewsItem *ni);
 StringID GetNewsStringNewRoadVehAvail(NewsItem *ni);
@@ -200,6 +202,10 @@
 	if (_game_mode == GM_MENU)
 		return;
 
+	// check the rare case that the oldest (to be overwritten) news item is open
+	if(_oldest_news == _current_news || _oldest_news == _forced_news)
+		MoveToNexItem();
+
 	_forced_news = 255;
 	if(_total_news < MAX_NEWS) _total_news++;
 	
@@ -366,6 +372,7 @@
 static void MoveToNexItem()
 {
 	DeleteWindowById(WC_NEWS_WINDOW, 0);
+	_forced_news = 255;
 
 	// if we're not at the last item, than move on
 	if(_current_news != _latest_news)