From 1e433a7cdd8c7b33c5cc7cdb40a1a757ec79d6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20L=C3=B6nnhager?= Date: Tue, 9 Apr 2019 13:50:38 +0200 Subject: [PATCH] Workaround for AltGr '@' issue. --- aqt/webview.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/aqt/webview.py b/aqt/webview.py index 4bc5497e6..e840c368a 100644 --- a/aqt/webview.py +++ b/aqt/webview.py @@ -84,6 +84,30 @@ class AnkiWebPage(QWebEnginePage): def _onCmd(self, str): return self._onBridgeCmd(str) +def runJavaScriptSync(page, js, timeout=500): + result = None + eventLoop = QEventLoop() + called = False + + def callback(val): + nonlocal result, called + result = val + called = True + eventLoop.quit() + + page.runJavaScript(js, callback) + + if not called: + timer = QTimer() + timer.setSingleShot(True) + timer.timeout.connect(eventLoop.quit) + timer.start(timeout) + eventLoop.exec_() + + if not called: + print('runJavaScriptSync() timed out') + return result + # Main web view ########################################################################## @@ -119,6 +143,17 @@ class AnkiWebView(QWebEngineView): QShortcut(QKeySequence("ctrl+shift+v"), self, context=Qt.WidgetWithChildrenShortcut, activated=self.onPaste) + def event(self, evt): + if evt.type() == QEvent.ShortcutOverride: + # alt-gr bug workaround + exceptChars = (str(num) for num in range(1, 10)) + if evt.text() not in exceptChars: + js = '["INPUT", "TEXTAREA"].indexOf(document.activeElement.tagName) !== -1' + if runJavaScriptSync(self.page(), js, timeout=100): + evt.accept() + return True + return QWebEngineView.event(self, evt) + def eventFilter(self, obj, evt): # disable pinch to zoom gesture if isinstance(evt, QNativeGestureEvent):