diff --git a/src/widget/utils/kexirecordnavigator.cpp b/src/widget/utils/kexirecordnavigator.cpp --- a/src/widget/utils/kexirecordnavigator.cpp +++ b/src/widget/utils/kexirecordnavigator.cpp @@ -103,6 +103,7 @@ Private(KexiRecordNavigator *navigator) : q(navigator) , handler(0) + , offsetAccumulated(0.0f) , view(0) , editingIndicatorLabel(0) , editingIndicatorEnabled(false) @@ -140,6 +141,7 @@ QWidget *navRecordCountParent; QLineEdit *navRecordCount; //!< readonly counter int nav1DigitWidth; + float offsetAccumulated; QAbstractScrollArea *view; QLabel *editingIndicatorLabel; @@ -354,13 +356,20 @@ void KexiRecordNavigator::wheelEvent(QWheelEvent* wheelEvent) { const int delta = wheelEvent->delta(); + float offset = float(delta) / 120.0f; + if (d->offsetAccumulated != 0.0f && (offset / d->offsetAccumulated) < 0) { + d->offsetAccumulated = 0.0f; + } + d->offsetAccumulated += offset; + int recordsToScroll = int(d->offsetAccumulated); + d->offsetAccumulated -= int(d->offsetAccumulated); // trigger the respective button slots - if (delta > 0) { + if (recordsToScroll > 0) { if (d->navBtnPrev->isEnabled()) { slotPrevButtonClicked(); } - } else if (delta < 0) { + } else if (recordsToScroll < 0) { if (d->navBtnNext->isEnabled()) { slotNextButtonClicked(); }