diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index c1f631465..72f206e9b 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -277,6 +277,10 @@ DATA = OrderedDict([ ('forward-unbound-keys', SettingValue(types.Bool(), 'false'), "Whether to forward unbound keys to the website in normal mode."), + + ('scroll-amount', + SettingValue(types.Float(minval=0), '0.5'), + "How many pixels to scroll per 1/8 degree mousewheel delta."), )), ('tabbar', sect.KeyValue( diff --git a/qutebrowser/widgets/webview.py b/qutebrowser/widgets/webview.py index 8b836ad66..3a8a1c6e0 100644 --- a/qutebrowser/widgets/webview.py +++ b/qutebrowser/widgets/webview.py @@ -20,7 +20,7 @@ import logging import functools -from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt +from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QPoint from PyQt5.QtWidgets import QApplication from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKitWidgets import QWebView, QWebPage @@ -526,3 +526,17 @@ class WebView(QWebView): self._mousepress_insertmode(e) self._mousepress_opentarget(e) return super().mousePressEvent(e) + + def wheelEvent(self, e): + """Override wheelEvent because we handle scrolling ourselves. + + WebKit's scrolling doesn't allow us to scroll while scrollbars are + enabled... + """ + if not e.pixelDelta().isNull(): + delta = QPoint(e.pixelDelta()) + else: + delta = e.angleDelta() * config.get('input', 'scroll-amount') + frame = self.page_.currentFrame() + pos = frame.scrollPosition() - delta + frame.setScrollPosition(pos)