diff options
-rw-r--r-- | src/news_gui.cpp | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp index df3936af1..c8357396a 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -273,7 +273,6 @@ void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b) if (_total_news == MAX_NEWS && (_oldest_news == _current_news || _oldest_news == _forced_news)) MoveToNextItem(); - _forced_news = INVALID_NEWS; if (_total_news < MAX_NEWS) _total_news++; /* Increase _latest_news. If we have no news yet, use _oldest news as an @@ -288,8 +287,8 @@ void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b) _oldest_news = increaseIndex(_oldest_news); } - /*DEBUG(misc, 0) ("+cur %3d, old %2d, lat %3d, for %3d, tot %2d", - _current_news, _oldest_news, _latest_news, _forced_news, _total_news); */ + /*DEBUG(misc, 0, "+cur %3d, old %2d, lat %3d, for %3d, tot %2d", + _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/ { /* Add news to _latest_news */ Window *w; @@ -443,8 +442,8 @@ static void ShowNewspaper(NewsItem *ni) } } - /*DEBUG(misc, 0) (" cur %3d, old %2d, lat %3d, for %3d, tot %2d", - _current_news, _oldest_news, _latest_news, _forced_news, _total_news); */ + /*DEBUG(misc, 0, " cur %3d, old %2d, lat %3d, for %3d, tot %2d", + _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/ WP(w, news_d).ni = &_news_items[_forced_news == INVALID_NEWS ? _current_news : _forced_news]; w->flags4 |= WF_DISABLE_VP_SCROLL; @@ -556,16 +555,17 @@ static void ShowNewsMessage(NewsID i) void ShowLastNewsMessage(void) { - switch (_forced_news) { - case INVALID_NEWS: // Not forced any news yet, show the current one - ShowNewsMessage(_current_news); - break; - case 0: // - ShowNewsMessage(_total_news != MAX_NEWS ? _latest_news : MAX_NEWS - 1); - break; - default: // 'Scrolling' through news history show each one in turn - ShowNewsMessage(_forced_news - 1); - break; + if (_forced_news == INVALID_NEWS) { + /* 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)); + } else if (_forced_news == _oldest_news) { + /* We have reached the oldest news, start anew with the latest */ + ShowNewsMessage(_latest_news); + } else { + /* 'Scrolling' through news history show each one in turn */ + ShowNewsMessage(decreaseIndex(_forced_news)); } } @@ -890,7 +890,10 @@ void DeleteVehicleNews(VehicleID vid, StringID news) (news == INVALID_STRING_ID || ni->string_id == news)) { Window *w; - if (_forced_news == n || _current_news == n) MoveToNextItem(); + /* If we delete a forced news and it is just before the current news + * then we need to advance to the next news (if any) */ + if (_forced_news == n) MoveToNextItem(); + if (_forced_news == INVALID_NEWS && _current_news == n) MoveToNextItem(); _total_news--; /* If this is the last news item, invalidate _latest_news */ @@ -909,11 +912,10 @@ void DeleteVehicleNews(VehicleID vid, StringID news) * We also need an update of the current, forced and visible (open window) * news's as this shifting could change the items they were pointing to */ if (_total_news != 0) { - NewsID i, visible_news; w = FindWindowById(WC_NEWS_WINDOW, 0); - visible_news = (w != NULL) ? (NewsID)(WP(w, news_d).ni - _news_items) : INVALID_NEWS; + NewsID visible_news = (w != NULL) ? (NewsID)(WP(w, news_d).ni - _news_items) : INVALID_NEWS; - for (i = n;; i = decreaseIndex(i)) { + for (NewsID i = n;; i = decreaseIndex(i)) { _news_items[i] = _news_items[decreaseIndex(i)]; if (i == _current_news) _current_news = increaseIndex(_current_news); @@ -925,8 +927,8 @@ void DeleteVehicleNews(VehicleID vid, StringID news) _oldest_news = increaseIndex(_oldest_news); } - /*DEBUG(misc, 0) ("-cur %3d, old %2d, lat %3d, for %3d, tot %2d", - _current_news, _oldest_news, _latest_news, _forced_news, _total_news); */ + /*DEBUG(misc, 0, "-cur %3d, old %2d, lat %3d, for %3d, tot %2d", + _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/ w = FindWindowById(WC_MESSAGE_HISTORY, 0); if (w != NULL) { |