From 5bdd291d28730a27bc1fbf89a3cde3d00fed4af0 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Mon, 8 May 2017 23:11:50 -0700 Subject: [PATCH] Refactor key_press into _repeated_key_press Also split off generic key pressing ability from WebKitScroller to WebKitTab --- qutebrowser/browser/webengine/webenginetab.py | 29 ++++++++++--------- qutebrowser/browser/webkit/webkittab.py | 13 +++++---- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 0ffe06664..bb3f017ab 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -311,6 +311,10 @@ class WebEngineScroller(browsertab.AbstractScroller): page = widget.page() page.scrollPositionChanged.connect(self._update_pos) + def _repeated_key_press(self, key, count=1, modifier=Qt.NoModifier): + for _ in range(min(count, 5000)): + self._tab.key_press(key, modifier) + @pyqtSlot() def _update_pos(self): """Update the scroll position attributes when it changed.""" @@ -366,16 +370,16 @@ class WebEngineScroller(browsertab.AbstractScroller): self._tab.run_js_async(js_code) def up(self, count=1): - self._tab.key_press(Qt.Key_Up, count) + self._repeated_key_press(Qt.Key_Up, count) def down(self, count=1): - self._tab.key_press(Qt.Key_Down, count) + self._repeated_key_press(Qt.Key_Down, count) def left(self, count=1): - self._tab.key_press(Qt.Key_Left, count) + self._repeated_key_press(Qt.Key_Left, count) def right(self, count=1): - self._tab.key_press(Qt.Key_Right, count) + self._repeated_key_press(Qt.Key_Right, count) def top(self): self._tab.key_press(Qt.Key_Home) @@ -384,10 +388,10 @@ class WebEngineScroller(browsertab.AbstractScroller): self._tab.key_press(Qt.Key_End) def page_up(self, count=1): - self._tab.key_press(Qt.Key_PageUp, count) + self._repeated_key_press(Qt.Key_PageUp, count) def page_down(self, count=1): - self._tab.key_press(Qt.Key_PageDown, count) + self._repeated_key_press(Qt.Key_PageDown, count) def at_top(self): return self.pos_px().y() == 0 @@ -647,13 +651,12 @@ class WebEngineTab(browsertab.AbstractTab): def clear_ssl_errors(self): raise browsertab.UnsupportedOperationError - def key_press(self, key, count=1, modifier=Qt.NoModifier): - for _ in range(min(count, 5000)): - press_evt = QKeyEvent(QEvent.KeyPress, key, modifier, 0, 0, 0) - release_evt = QKeyEvent(QEvent.KeyRelease, key, modifier, - 0, 0, 0) - self.send_event(press_evt) - self.send_event(release_evt) + def key_press(self, key, modifier=Qt.NoModifier): + press_evt = QKeyEvent(QEvent.KeyPress, key, modifier, 0, 0, 0) + release_evt = QKeyEvent(QEvent.KeyRelease, key, modifier, + 0, 0, 0) + self.send_event(press_evt) + self.send_event(release_evt) @pyqtSlot() def _on_history_trigger(self): diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index 54b3d3378..f1f876a6e 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -468,15 +468,11 @@ class WebKitScroller(browsertab.AbstractScroller): # self._widget.setFocus() for _ in range(min(count, 5000)): - press_evt = QKeyEvent(QEvent.KeyPress, key, Qt.NoModifier, 0, 0, 0) - release_evt = QKeyEvent(QEvent.KeyRelease, key, Qt.NoModifier, - 0, 0, 0) # Abort scrolling if the minimum/maximum was reached. if (getter is not None and frame.scrollBarValue(direction) == getter(direction)): return - self._widget.keyPressEvent(press_evt) - self._widget.keyReleaseEvent(release_evt) + self._tab.key_press(key) def up(self, count=1): self._key_press(Qt.Key_Up, count, 'scrollBarMinimum', Qt.Vertical) @@ -702,6 +698,13 @@ class WebKitTab(browsertab.AbstractTab): def clear_ssl_errors(self): self.networkaccessmanager().clear_all_ssl_errors() + def key_press(self, key, modifier=Qt.NoModifier): + press_evt = QKeyEvent(QEvent.KeyPress, key, modifier, 0, 0, 0) + release_evt = QKeyEvent(QEvent.KeyRelease, key, modifier, + 0, 0, 0) + self.send_event(press_evt) + self.send_event(release_evt) + @pyqtSlot() def _on_history_trigger(self): url = self.url()