diff --git a/src/apps/marble-kde/marble.kcfg b/src/apps/marble-kde/marble.kcfg
--- a/src/apps/marble-kde/marble.kcfg
+++ b/src/apps/marble-kde/marble.kcfg
@@ -194,6 +194,9 @@
true
+
+ true
+
false
diff --git a/src/apps/marble-kde/marble_part.cpp b/src/apps/marble-kde/marble_part.cpp
--- a/src/apps/marble-kde/marble_part.cpp
+++ b/src/apps/marble-kde/marble_part.cpp
@@ -1609,6 +1609,7 @@
// External map editor
m_controlView->setExternalMapEditor( m_externalEditorMapping[MarbleSettings::externalMapEditor()] );
m_controlView->marbleWidget()->inputHandler()->setInertialEarthRotationEnabled( MarbleSettings::inertialEarthRotation() );
+ m_controlView->marbleWidget()->inputHandler()->setMouseViewRotationEnabled( MarbleSettings::mouseViewRotation() );
CloudSyncManager* cloudSyncManager = m_controlView->cloudSyncManager();
cloudSyncManager->setOwncloudCredentials( MarbleSettings::owncloudServer(),
diff --git a/src/apps/marble-qt/QtMainWindow.cpp b/src/apps/marble-qt/QtMainWindow.cpp
--- a/src/apps/marble-qt/QtMainWindow.cpp
+++ b/src/apps/marble-qt/QtMainWindow.cpp
@@ -1494,6 +1494,7 @@
m_controlView->marbleWidget()->setAnimationsEnabled( m_configDialog->animateTargetVoyage() );
m_controlView->marbleWidget()->inputHandler()->setInertialEarthRotationEnabled( m_configDialog->inertialEarthRotation() );
+ m_controlView->marbleWidget()->inputHandler()->setMouseViewRotationEnabled( m_configDialog->mouseViewRotation() );
if ( !m_configDialog->externalMapEditor().isEmpty() ) {
m_controlView->setExternalMapEditor( m_configDialog->externalMapEditor() );
}
diff --git a/src/bindings/python/sip/QtMarbleConfigDialog.sip b/src/bindings/python/sip/QtMarbleConfigDialog.sip
--- a/src/bindings/python/sip/QtMarbleConfigDialog.sip
+++ b/src/bindings/python/sip/QtMarbleConfigDialog.sip
@@ -61,5 +61,6 @@
void initializeCustomTimezone ();
QLocale::MeasurementSystem measurementSystem () const;
bool inertialEarthRotation () const;
+ bool mouseViewRotation () const;
};
};
diff --git a/src/lib/marble/MarbleInputHandler.h b/src/lib/marble/MarbleInputHandler.h
--- a/src/lib/marble/MarbleInputHandler.h
+++ b/src/lib/marble/MarbleInputHandler.h
@@ -76,6 +76,10 @@
*/
bool inertialEarthRotationEnabled() const;
+ void setMouseViewRotationEnabled( bool enabled );
+
+ bool mouseViewRotationEnabled() const;
+
/// should the map do kinetic scrolling, this would stop the operation
virtual void stopInertialEarthRotation();
diff --git a/src/lib/marble/MarbleInputHandler.cpp b/src/lib/marble/MarbleInputHandler.cpp
--- a/src/lib/marble/MarbleInputHandler.cpp
+++ b/src/lib/marble/MarbleInputHandler.cpp
@@ -48,6 +48,7 @@
qreal m_wheelZoomTargetDistance;
bool m_panViaArrowsEnabled;
bool m_inertialEarthRotation;
+ bool m_mouseViewRotation;
int m_steps;
const int m_discreteZoomSteps = 120;
};
@@ -60,6 +61,7 @@
m_wheelZoomTargetDistance( 0.0 ),
m_panViaArrowsEnabled( true ),
m_inertialEarthRotation( true ),
+ m_mouseViewRotation( true ),
m_steps(0)
{
}
@@ -127,6 +129,16 @@
return d->m_inertialEarthRotation;
}
+void MarbleInputHandler::setMouseViewRotationEnabled(bool enabled)
+{
+ d->m_mouseViewRotation = enabled;
+}
+
+bool MarbleInputHandler::mouseViewRotationEnabled() const
+{
+ return d->m_mouseViewRotation;
+}
+
void MarbleInputHandler::stopInertialEarthRotation()
{
}
@@ -837,7 +849,7 @@
MarbleInputHandler::d->m_marblePresenter->setRadius(d->m_startingRadius * pow(1.005, dy));
}
- if (d->m_rightPressed)
+ if (d->m_rightPressed && MarbleInputHandler::d->m_mouseViewRotation)
{
qreal centerX, centerY;
MarbleInputHandler::d->m_marblePresenter->map()->screenCoordinates(
diff --git a/src/lib/marble/MarbleNavigationSettingsWidget.ui b/src/lib/marble/MarbleNavigationSettingsWidget.ui
--- a/src/lib/marble/MarbleNavigationSettingsWidget.ui
+++ b/src/lib/marble/MarbleNavigationSettingsWidget.ui
@@ -90,6 +90,16 @@
+ -
+
+
+ Use right mouse button to rotate the camera around
+
+
+ &Mouse view rotation
+
+
+
diff --git a/src/lib/marble/QtMarbleConfigDialog.h b/src/lib/marble/QtMarbleConfigDialog.h
--- a/src/lib/marble/QtMarbleConfigDialog.h
+++ b/src/lib/marble/QtMarbleConfigDialog.h
@@ -48,6 +48,7 @@
bool animateTargetVoyage() const;
QString externalMapEditor() const;
bool inertialEarthRotation() const;
+ bool mouseViewRotation() const;
// Cache Settings
int volatileTileCacheLimit() const;
diff --git a/src/lib/marble/QtMarbleConfigDialog.cpp b/src/lib/marble/QtMarbleConfigDialog.cpp
--- a/src/lib/marble/QtMarbleConfigDialog.cpp
+++ b/src/lib/marble/QtMarbleConfigDialog.cpp
@@ -300,6 +300,7 @@
d->ui_navigationSettings.kcfg_dragLocation->setCurrentIndex( Marble::KeepAxisVertically );
d->ui_navigationSettings.kcfg_onStartup->setCurrentIndex( onStartup() );
d->ui_navigationSettings.kcfg_inertialEarthRotation->setChecked( inertialEarthRotation() );
+ d->ui_navigationSettings.kcfg_mouseViewRotation->setChecked( mouseViewRotation() );
d->ui_navigationSettings.kcfg_animateTargetVoyage->setChecked( animateTargetVoyage() );
int editorIndex = 0;
if (externalMapEditor() == QLatin1String("potlatch")) {
@@ -393,6 +394,7 @@
d->m_settings.beginGroup( "Navigation" );
d->m_settings.setValue( "onStartup", d->ui_navigationSettings.kcfg_onStartup->currentIndex() );
d->m_settings.setValue( "inertialEarthRotation", d->ui_navigationSettings.kcfg_inertialEarthRotation->isChecked() );
+ d->m_settings.setValue( "mouseViewRotation", d->ui_navigationSettings.kcfg_mouseViewRotation->isChecked() );
d->m_settings.setValue( "animateTargetVoyage", d->ui_navigationSettings.kcfg_animateTargetVoyage->isChecked() );
if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 0 ) {
d->m_settings.setValue( "externalMapEditor", "" );
@@ -509,6 +511,11 @@
return d->m_settings.value( "Navigation/inertialEarthRotation", true ).toBool();
}
+bool QtMarbleConfigDialog::mouseViewRotation() const
+{
+ return d->m_settings.value( "Navigation/mouseViewRotation", true ).toBool();
+}
+
int QtMarbleConfigDialog::volatileTileCacheLimit() const
{
int defaultValue = (MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen) ? 6 : 100;