Index: scribus/prefsmanager.cpp
===================================================================
--- scribus/prefsmanager.cpp	(revision 27002)
+++ scribus/prefsmanager.cpp	(working copy)
@@ -156,6 +156,7 @@
 
 	appPrefs.uiPrefs.mouseMoveTimeout = 150;
 	appPrefs.uiPrefs.wheelJump = 40;
+	appPrefs.uiPrefs.zoomSensitivity = 1.0;
 	appPrefs.uiPrefs.style = "";
 	appPrefs.uiPrefs.stylePalette = "auto";
 	// On Windows, use the Fusion theme by default when possible,
@@ -1363,6 +1364,7 @@
 	dcUI.setAttribute("Theme", appPrefs.uiPrefs.style);
 	dcUI.setAttribute("ThemePalette", appPrefs.uiPrefs.stylePalette);
 	dcUI.setAttribute("ScrollWheelJump", appPrefs.uiPrefs.wheelJump);
+	dcUI.setAttribute("ZoomSensitivity", ScCLocale::toQStringC(appPrefs.uiPrefs.zoomSensitivity));
 	dcUI.setAttribute("MouseMoveTimeout", appPrefs.uiPrefs.mouseMoveTimeout);
 	dcUI.setAttribute("ApplicationFontSize", appPrefs.uiPrefs.applicationFontSize);
 	dcUI.setAttribute("PaletteFontSize", appPrefs.uiPrefs.paletteFontSize);
@@ -2043,6 +2045,7 @@
 			appPrefs.uiPrefs.style = dc.attribute("Theme", "Default");
 			appPrefs.uiPrefs.stylePalette = dc.attribute("ThemePalette", "auto");
 			appPrefs.uiPrefs.wheelJump = dc.attribute("ScrollWheelJump").toInt();
+			appPrefs.uiPrefs.zoomSensitivity = ScCLocale::toDoubleC(dc.attribute("ZoomSensitivity"), 1.0);
 			appPrefs.uiPrefs.mouseMoveTimeout = dc.attribute("MouseMoveTimeout", "150").toInt();
 			appPrefs.uiPrefs.applicationFontSize = dc.attribute("ApplicationFontSize", "12").toInt();
 			appPrefs.uiPrefs.paletteFontSize = dc.attribute("PaletteFontSize", "10").toInt();
Index: scribus/prefsstructs.h
===================================================================
--- scribus/prefsstructs.h	(revision 27002)
+++ scribus/prefsstructs.h	(working copy)
@@ -117,6 +117,7 @@
 {
 	int mouseMoveTimeout {150}; //! Mouse move timeout for move/resize operations
 	int wheelJump {40}; //! Distance to jump with mouse wheel scrolling
+	double zoomSensitivity {1.0}; //! Sensitivity (responsiveness) experienced while zooming
 	int applicationFontSize {12}; //! Font size to use in the application, apart from pßalettes
 	int paletteFontSize {10}; //! Font size to use in the palettes
 	QString style; 	//! Currently used QStyle name
Index: scribus/scribusview.cpp
===================================================================
--- scribus/scribusview.cpp	(revision 27002)
+++ scribus/scribusview.cpp	(working copy)
@@ -2160,9 +2160,9 @@
 	}
 	rememberOldZoomLocation(oldZoomX, oldZoomY);
 
-	double newScale = m_canvas->scale() * (1 + static_cast<double>(m_doc->opToolPrefs().magStep) / 100.0);
+	double newScale = m_canvas->scale() * (1 + static_cast<double>(m_doc->opToolPrefs().magStep * Prefs->uiPrefs.zoomSensitivity) / 100.0);
 	if (static_cast<int>(newScale * 100.0) > static_cast<int>(100.0 * static_cast<double>(m_doc->opToolPrefs().magStep) * Prefs->displayPrefs.displayScale / 100.0))
-		newScale = m_canvas->scale() + static_cast<double>(m_doc->opToolPrefs().magStep) * Prefs->displayPrefs.displayScale / 100.0;
+		newScale = m_canvas->scale() + static_cast<double>(m_doc->opToolPrefs().magStep) * Prefs->displayPrefs.displayScale * Prefs->uiPrefs.zoomSensitivity / 100.0;
 
 	int zoomPointX(m_oldZoomX), zoomPointY(m_oldZoomY);
 	if (!preservePoint)
@@ -2194,9 +2194,9 @@
 	}
 	rememberOldZoomLocation(oldZoomX, oldZoomY);
 
-	double newScale = m_canvas->scale() - static_cast<double>(m_doc->opToolPrefs().magStep) * Prefs->displayPrefs.displayScale / 100.0;
+	double newScale = m_canvas->scale() - static_cast<double>(m_doc->opToolPrefs().magStep) * Prefs->displayPrefs.displayScale * Prefs->uiPrefs.zoomSensitivity / 100.0;
 	if (newScale <= Prefs->displayPrefs.displayScale / 100.0)
-		newScale = m_canvas->scale() / (1 + static_cast<double>(m_doc->opToolPrefs().magStep) / 100.0);
+		newScale = m_canvas->scale() + Prefs->uiPrefs.zoomSensitivity * ((m_canvas->scale() / (1 + static_cast<double>(m_doc->opToolPrefs().magStep) / 100.0)) - m_canvas->scale());
 	if (newScale <= Prefs->displayPrefs.displayScale / 100.0)
 		newScale = m_canvas->scale();
 
@@ -3205,10 +3205,19 @@
 
 void ScribusView::wheelEvent(QWheelEvent *w)
 {
+	if (m_scrollTimer.isValid()) {
+		if (!m_scrollTimer.hasExpired(Prefs->uiPrefs.mouseMoveTimeout)) {
+		    return;
+		}
+		m_scrollTimer.restart();
+	} else {
+		m_scrollTimer.start();
+	}
 	QPoint angleDelta = w->angleDelta();
 	if (w->modifiers() == Qt::ControlModifier)
 	{
 		FPoint mp = m_canvas->globalToCanvas(w->globalPosition());
+qDebug() << "angleDelta.y() = " << angleDelta.y();
 		angleDelta.y() > 0 ? slotZoomIn(mp.x(), mp.y(), true) : slotZoomOut(mp.x(), mp.y(), true);
 	}
 	else
Index: scribus/scribusview.h
===================================================================
--- scribus/scribusview.h	(revision 27002)
+++ scribus/scribusview.h	(working copy)
@@ -289,6 +289,7 @@
 	QMenu *pmenResolution { nullptr };
 	QPointF m_pressLocation;
 	QElapsedTimer m_moveTimer;
+	QElapsedTimer m_scrollTimer;
 	QTimer *m_dragTimer { nullptr };
 	bool m_dragTimerFired { false };
 	bool m_ready { false }; 
Index: scribus/ui/prefs_userinterface.cpp
===================================================================
--- scribus/ui/prefs_userinterface.cpp	(revision 27002)
+++ scribus/ui/prefs_userinterface.cpp	(working copy)
@@ -81,6 +81,7 @@
 	fontSizePaletteSpinBox->setToolTip( "<qt>" + tr( "Default font size for the tool windows" ) + "</qt>");
 	resizeMoveDelaySpinBox->setToolTip( "<qt>" + tr( "Time before resize or move starts allows for a slight delay between when you click and the operation happens to avoid unintended moves. This can be helpful when dealing with mouse sensitivity settings or accessibility issues related to ergonomic mice, touch pads or moveability of the wrists and hands." ) + "</qt>");
 	wheelJumpSpinBox->setToolTip( "<qt>" + tr( "Number of lines Scribus will scroll for each \"notch\" of the mouse wheel" ) + "</qt>");
+	zoomSensitivitySlider->setToolTip( "<qt>" + tr( "Sensitivity (responsiveness) experienced while zooming" ) + "</qt>");
 	//showSplashCheckBox->setToolTip( "<qt>" + tr( "" ) + "</qt>");
 	//showStartupDialogCheckBox->setToolTip( "<qt>" + tr( "" ) + "</qt>");
 	storyEditorUseSmartSelectionCheckBox->setToolTip( "<qt>" + tr( "The default behavior when double-clicking on a word is to select the word and the first following space. Smart selection will select only the word, without the following space." ) + "</qt>");
@@ -110,7 +111,7 @@
 		themePaletteComboBox->setCurrentIndex(index);
 	else
 		themePaletteComboBox->setCurrentIndex(0);
-
+qDebug() << "zoomSensitivity = " << prefsData->uiPrefs.zoomSensitivity;
 	setCurrentComboItem(languageComboBox, langString);
 	numberFormatComboBox->setCurrentIndex(prefsData->uiPrefs.userPreferredLocale == "System" ? 0 : 1);
 	setCurrentComboItem(themeComboBox, prefsData->uiPrefs.style);
@@ -118,6 +119,7 @@
 	fontSizeMenuSpinBox->setValue( prefsData->uiPrefs.applicationFontSize );
 	fontSizePaletteSpinBox->setValue( prefsData->uiPrefs.paletteFontSize);
 	wheelJumpSpinBox->setValue( prefsData->uiPrefs.wheelJump );
+	zoomSensitivitySlider->setValue( static_cast<int>(prefsData->uiPrefs.zoomSensitivity * 100) );
 	resizeMoveDelaySpinBox->setValue(prefsData->uiPrefs.mouseMoveTimeout);
 	recentDocumentsSpinBox->setValue( prefsData->uiPrefs.recentDocCount );
 	showStartupDialogCheckBox->setChecked(prefsData->uiPrefs.showStartupDialog);
@@ -142,6 +144,7 @@
 	prefsData->uiPrefs.applicationFontSize = fontSizeMenuSpinBox->value();
 	prefsData->uiPrefs.paletteFontSize = fontSizePaletteSpinBox->value();
 	prefsData->uiPrefs.wheelJump = wheelJumpSpinBox->value();
+	prefsData->uiPrefs.zoomSensitivity = static_cast<double>(zoomSensitivitySlider->value()) / 100.0;
 	prefsData->uiPrefs.mouseMoveTimeout = resizeMoveDelaySpinBox->value();
 	prefsData->uiPrefs.recentDocCount = recentDocumentsSpinBox->value();
 	prefsData->uiPrefs.showStartupDialog = showStartupDialogCheckBox->isChecked();
Index: scribus/ui/prefs_userinterfacebase.ui
===================================================================
--- scribus/ui/prefs_userinterfacebase.ui	(revision 27002)
+++ scribus/ui/prefs_userinterfacebase.ui	(working copy)
@@ -397,6 +397,50 @@
          <item row="1" column="1">
           <widget class="QSpinBox" name="wheelJumpSpinBox"/>
          </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="zoomSensitivityLabel">
+           <property name="text">
+            <string>&amp;Zoom Sensitivity:</string>
+           </property>
+           <property name="buddy">
+            <cstring>zoomSensitivitySlider</cstring>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QSlider" name="zoomSensitivitySlider">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>200</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>100</number>
+           </property>
+           <property name="singleStep">
+            <number>1</number>
+           </property>
+           <property name="pageStep">
+            <number>10</number>
+           </property>
+           <property name="tracking">
+            <bool>false</bool>
+           </property>
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+          </widget>
+         </item>
         </layout>
        </item>
        <item>
@@ -470,6 +514,7 @@
   <tabstop>fontSizeMenuSpinBox</tabstop>
   <tabstop>fontSizePaletteSpinBox</tabstop>
   <tabstop>wheelJumpSpinBox</tabstop>
+  <tabstop>zoomSensitivitySlider</tabstop>
   <tabstop>showSplashCheckBox</tabstop>
   <tabstop>showStartupDialogCheckBox</tabstop>
   <tabstop>storyEditorUseSmartSelectionCheckBox</tabstop>
