Fix zooming for high resolution scroll wheels

BUG: 432671
This commit is contained in:
Friso Smit 2023-02-06 14:17:29 +01:00 committed by Méven Car
parent c57c5384fc
commit b168f9a98b
2 changed files with 18 additions and 3 deletions

View 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();

View 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;