diff --git a/aqt/deckbrowser.py b/aqt/deckbrowser.py index bef8906cf..cc8f404eb 100644 --- a/aqt/deckbrowser.py +++ b/aqt/deckbrowser.py @@ -24,7 +24,7 @@ class DeckBrowser(object): def show(self, _init=True): if _init: self.web.setLinkHandler(self._linkHandler) - self.mw.setKeyHandler(self._keyHandler) + self.web.setKeyHandler(self._keyHandler) self._setupToolbar() # refresh or reorder if (time.time() - self._browserLastRefreshed > @@ -103,8 +103,7 @@ class DeckBrowser(object): if ((txt >= "0" and txt <= "9") or (txt >= "a" and txt <= "z")): self._openAccel(txt) - evt.accept() - evt.ignore() + return True def _openAccel(self, txt): for d in self._decks: diff --git a/aqt/main.py b/aqt/main.py index 79296eb43..e3f3416b9 100755 --- a/aqt/main.py +++ b/aqt/main.py @@ -339,16 +339,6 @@ Please do not file a bug report with Anki.
""") def closeAllDeckWindows(self): aqt.dialogs.closeAll() - def setKeyHandler(self, fn): - self._keyHandler = fn - - def keyPressEvent(self, evt): - "Show answer on RET or register answer." - if self._keyHandler: - self._keyHandler(evt) - else: - evt.ignore() - # to port # elif self.state == "studyScreen": # if evt.key() in (Qt.Key_Enter, diff --git a/aqt/overview.py b/aqt/overview.py index 14c9b239b..8c7e93e6f 100644 --- a/aqt/overview.py +++ b/aqt/overview.py @@ -16,7 +16,7 @@ class Overview(object): def show(self): self._setupToolbar() - self.mw.setKeyHandler(self._keyHandler) + self.web.setKeyHandler(self._keyHandler) self.web.setLinkHandler(self._linkHandler) self._renderPage() @@ -38,9 +38,8 @@ class Overview(object): elif txt == "d": self._linkHandler("list") else: - evt.ignore() return - evt.accept() + return True def _linkHandler(self, url): print "link", url diff --git a/aqt/reviewer.py b/aqt/reviewer.py index 72b35762e..4b63830c3 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -12,8 +12,6 @@ from anki.sound import playFromText, clearAudioQueue from aqt.utils import mungeQA, getBase import aqt -# fixme: space is scrolling instead of showing the current answer - class Reviewer(object): "Manage reviews. Maintains a separate state." @@ -26,7 +24,7 @@ class Reviewer(object): self._setupStatus() def show(self): - self.mw.setKeyHandler(self._keyHandler) + self.web.setKeyHandler(self._keyHandler) self.web.setLinkHandler(self._linkHandler) self._getCard() @@ -199,29 +197,27 @@ $(".ansbut").focus(); show = False if evt.key() in (Qt.Key_Enter, Qt.Key_Return): - evt.accept() show = True elif evt.key() == Qt.Key_Space and not self.typeAns(): - evt.accept() show = True if show: self._showAnswer() - return self.web.eval("showans();") + self.web.eval("showans();") + return True elif self.state == "answer": if evt.key() in (Qt.Key_Enter, Qt.Key_Return, Qt.Key_Space): self._answerCard(self._defaultEase()) - evt.accept() - return + return True else: key = unicode(evt.text()) if key and key >= "1" and key <= "4": key=int(key) if self.card.queue == 2 or key < 4: - evt.accept() - return self._answerCard(key) - evt.ignore() + self._answerCard(key) + return True + def _linkHandler(self, url): print "link", url diff --git a/aqt/webview.py b/aqt/webview.py index af8f70b9b..1e1a11d4c 100644 --- a/aqt/webview.py +++ b/aqt/webview.py @@ -44,12 +44,17 @@ class AnkiWebView(QWebView): self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge) self.setLinkHandler() + self.setKeyHandler() self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler) self.connect(self, SIGNAL("loadFinished(bool)"), self._loadFinished) def keyPressEvent(self, evt): if evt.matches(QKeySequence.Copy): self.triggerPageAction(QWebPage.Copy) evt.accept() + if self._keyHandler: + if self._keyHandler(evt): + evt.accept() + return QWebView.keyPressEvent(self, evt) def contextMenuEvent(self, evt): QWebView.contextMenuEvent(self, evt) @@ -60,6 +65,9 @@ class AnkiWebView(QWebView): self.linkHandler = handler else: self.linkHandler = self._openLinksExternally + def setKeyHandler(self, handler=None): + # handler should return true if event should be swallowed + self._keyHandler = handler def setHtml(self, html, loadCB=None): if loadCB: self._loadFinishedCB = loadCB