]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix zooming for high resolution scroll wheels
authorFriso Smit <fw.smit01@gmail.com>
Mon, 6 Feb 2023 13:17:29 +0000 (14:17 +0100)
committerMéven Car <meven.car@kdemail.net>
Thu, 9 Feb 2023 16:28:29 +0000 (16:28 +0000)
BUG: 432671

src/views/dolphinview.cpp
src/views/dolphinview.h

index 250fe4cc7a25b7f301f4e5039feebc489154e0ea..1f61bcbf2a54353ce3c60de5c228ea4ea5080aec 100644 (file)
@@ -931,6 +931,11 @@ bool DolphinView::eventFilter(QObject *watched, QEvent *event)
             }
         }
         break;
+    case QEvent::KeyRelease:
+        if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Control) {
+            m_controlWheelAccumulatedDelta = 0;
+        }
+        break;
     case QEvent::FocusIn:
         if (watched == m_container) {
             setActive(true);
@@ -969,10 +974,16 @@ bool DolphinView::eventFilter(QObject *watched, QEvent *event)
 void DolphinView::wheelEvent(QWheelEvent *event)
 {
     if (event->modifiers().testFlag(Qt::ControlModifier)) {
-        const QPoint numDegrees = event->angleDelta() / 8;
-        const QPoint numSteps = numDegrees / 15;
+        m_controlWheelAccumulatedDelta += event->angleDelta().y();
+
+        if (m_controlWheelAccumulatedDelta <= -QWheelEvent::DefaultDeltasPerStep) {
+            slotDecreaseZoom();
+            m_controlWheelAccumulatedDelta += QWheelEvent::DefaultDeltasPerStep;
+        } else if (m_controlWheelAccumulatedDelta >= QWheelEvent::DefaultDeltasPerStep) {
+            slotIncreaseZoom();
+            m_controlWheelAccumulatedDelta -= QWheelEvent::DefaultDeltasPerStep;
+        }
 
-        setZoomLevel(zoomLevel() + numSteps.y());
         event->accept();
     } else {
         event->ignore();
index cadf3e754622f293ff20d8010dfe0fb7e6853279..fc5fd52ff935a3343610a2204ab192a7345156ee 100644 (file)
@@ -924,6 +924,10 @@ private:
     bool m_scrollToCurrentItem; // Used for marking we need to scroll to current item or not
     QPoint m_restoredContentsPosition;
 
+    // Used for tracking the accumulated scroll amount (for zooming with high
+    // resolution scroll wheels)
+    int m_controlWheelAccumulatedDelta;
+
     QList<QUrl> m_selectedUrls; // Used for making the view to remember selections after F5
     bool m_clearSelectionBeforeSelectingNewItems;
     bool m_markFirstNewlySelectedItemAsCurrent;