diff --git a/src/lib/marble/AutoNavigation.cpp b/src/lib/marble/AutoNavigation.cpp --- a/src/lib/marble/AutoNavigation.cpp +++ b/src/lib/marble/AutoNavigation.cpp @@ -19,6 +19,9 @@ #include "MarbleMath.h" #include "ViewportParams.h" #include "MarbleGlobal.h" +#include "RoutingManager.h" +#include "RoutingModel.h" +#include "Route.h" #include #include @@ -37,9 +40,9 @@ const ViewportParams *const m_viewport; const PositionTracking *const m_tracking; AutoNavigation::CenterMode m_recenterMode; - bool m_adjustZoom; - QTimer m_lastWidgetInteraction; - bool m_selfInteraction; + bool m_adjustZoom; + QTimer m_lastWidgetInteraction; + bool m_selfInteraction; /** Constructor */ Private( MarbleModel *model, const ViewportParams *viewport, AutoNavigation *parent ); @@ -298,7 +301,13 @@ void AutoNavigation::Private::centerOn( const GeoDataCoordinates &position ) { m_selfInteraction = true; - emit m_parent->centerOn( position, false ); + RoutingModel const * routingModel = m_model->routingManager()->routingModel(); + if (routingModel->deviatedFromRoute()){ + emit m_parent->centerOn( position, false ); + } else { + GeoDataCoordinates positionOnRoute = routingModel->route().positionOnRoute(); + emit m_parent->centerOn( positionOnRoute, false ); + } m_selfInteraction = false; }