Fix various scrolling issues

This commit is contained in:
Florian Bruhin 2016-06-15 13:04:50 +02:00
parent 16c397a9d2
commit 5fe2230e1f

View File

@ -233,7 +233,7 @@ class WebViewScroller(tab.AbstractScroller):
def to_point(self, point): def to_point(self, point):
self.widget.page().mainFrame().setScrollPosition(point) self.widget.page().mainFrame().setScrollPosition(point)
def delta(x=0, y=0): def delta(self, x=0, y=0):
qtutils.check_overflow(x, 'int') qtutils.check_overflow(x, 'int')
qtutils.check_overflow(y, 'int') qtutils.check_overflow(y, 'int')
self.widget.page().mainFrame().scroll(x, y) self.widget.page().mainFrame().scroll(x, y)
@ -244,13 +244,13 @@ class WebViewScroller(tab.AbstractScroller):
if y == 0: if y == 0:
pass pass
elif y < 0: elif y < 0:
self.page_up(count=y) self.page_up(count=-y)
elif y > 0: elif y > 0:
self.page_down(count=y) self.page_down(count=y)
y = 0 y = 0
if x == 0 and y == 0: if x == 0 and y == 0:
return return
size = frame.geometry() size = self.widget.page().mainFrame().geometry()
self.delta(x * size.width(), y * size.height()) self.delta(x * size.width(), y * size.height())
def to_perc(self, x=None, y=None): def to_perc(self, x=None, y=None):
@ -260,6 +260,7 @@ class WebViewScroller(tab.AbstractScroller):
self.bottom() self.bottom()
else: else:
for val, orientation in [(x, Qt.Horizontal), (y, Qt.Vertical)]: for val, orientation in [(x, Qt.Horizontal), (y, Qt.Vertical)]:
if val is not None:
perc = qtutils.check_overflow(val, 'int', fatal=False) perc = qtutils.check_overflow(val, 'int', fatal=False)
frame = self.widget.page().mainFrame() frame = self.widget.page().mainFrame()
m = frame.scrollBarMaximum(orientation) m = frame.scrollBarMaximum(orientation)
@ -273,9 +274,13 @@ class WebViewScroller(tab.AbstractScroller):
release_evt = QKeyEvent(QEvent.KeyRelease, key, Qt.NoModifier, 0, 0, 0) release_evt = QKeyEvent(QEvent.KeyRelease, key, Qt.NoModifier, 0, 0, 0)
getter = None if getter_name is None else getattr(frame, getter_name) getter = None if getter_name is None else getattr(frame, getter_name)
# FIXME needed?
# self.widget.setFocus()
for _ in range(count): for _ in range(count):
# Abort scrolling if the minimum/maximum was reached. # Abort scrolling if the minimum/maximum was reached.
if frame.scrollBarValue(direction) == getter(direction): if (getter is not None and
frame.scrollBarValue(direction) == getter(direction)):
return return
self.widget.keyPressEvent(press_evt) self.widget.keyPressEvent(press_evt)
self.widget.keyReleaseEvent(release_evt) self.widget.keyReleaseEvent(release_evt)