From 74e60df2957057f8b9027db21861cb52767ca5e6 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 17 Jul 2013 20:26:34 +0100 Subject: [PATCH] Work-around for bug 1134, crash with flightplans. When the active waypoint is deleted, and we can't offset the waypoint, simply switch to the inactive waypoint. This is not ideal but avoids the crash. --- src/Navaids/FlightPlan.cxx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Navaids/FlightPlan.cxx b/src/Navaids/FlightPlan.cxx index 2087d5cc1..5b190e972 100644 --- a/src/Navaids/FlightPlan.cxx +++ b/src/Navaids/FlightPlan.cxx @@ -269,14 +269,24 @@ int FlightPlan::clearWayptsWithFlag(WayptFlag flag) ++count; } } - + // test if the current leg will be removed bool currentIsBeingCleared = false; - if (_currentIndex >= 0) { - currentIsBeingCleared = _legs[_currentIndex]->waypoint()->flag(flag); + Leg* curLeg = currentLeg(); + if (curLeg) { + currentIsBeingCleared = curLeg->waypoint()->flag(flag); } _currentIndex -= count; + + // if we're clearing the current waypoint, what shall we do with the + // index? there's various options, but safest is to select no waypoint + // and let the use re-activate. + // http://code.google.com/p/flightgear-bugs/issues/detail?id=1134 + if (currentIsBeingCleared) { + SG_LOG(SG_GENERAL, SG_INFO, "currentIsBeingCleared:" << currentIsBeingCleared); + _currentIndex = -1; + } // now delete and remove RemoveWithFlag rf(flag);