mirror of
https://github.com/ankitects/anki.git
synced 2025-11-11 15:17:12 -05:00
move the key handler into the webview instead of the main window
This commit is contained in:
parent
7b2ff671e8
commit
f561bd1473
5 changed files with 19 additions and 27 deletions
|
|
@ -24,7 +24,7 @@ class DeckBrowser(object):
|
||||||
def show(self, _init=True):
|
def show(self, _init=True):
|
||||||
if _init:
|
if _init:
|
||||||
self.web.setLinkHandler(self._linkHandler)
|
self.web.setLinkHandler(self._linkHandler)
|
||||||
self.mw.setKeyHandler(self._keyHandler)
|
self.web.setKeyHandler(self._keyHandler)
|
||||||
self._setupToolbar()
|
self._setupToolbar()
|
||||||
# refresh or reorder
|
# refresh or reorder
|
||||||
if (time.time() - self._browserLastRefreshed >
|
if (time.time() - self._browserLastRefreshed >
|
||||||
|
|
@ -103,8 +103,7 @@ class DeckBrowser(object):
|
||||||
if ((txt >= "0" and txt <= "9") or
|
if ((txt >= "0" and txt <= "9") or
|
||||||
(txt >= "a" and txt <= "z")):
|
(txt >= "a" and txt <= "z")):
|
||||||
self._openAccel(txt)
|
self._openAccel(txt)
|
||||||
evt.accept()
|
return True
|
||||||
evt.ignore()
|
|
||||||
|
|
||||||
def _openAccel(self, txt):
|
def _openAccel(self, txt):
|
||||||
for d in self._decks:
|
for d in self._decks:
|
||||||
|
|
|
||||||
10
aqt/main.py
10
aqt/main.py
|
|
@ -339,16 +339,6 @@ Please do not file a bug report with Anki.<br>""")
|
||||||
def closeAllDeckWindows(self):
|
def closeAllDeckWindows(self):
|
||||||
aqt.dialogs.closeAll()
|
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
|
# to port
|
||||||
# elif self.state == "studyScreen":
|
# elif self.state == "studyScreen":
|
||||||
# if evt.key() in (Qt.Key_Enter,
|
# if evt.key() in (Qt.Key_Enter,
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class Overview(object):
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
self._setupToolbar()
|
self._setupToolbar()
|
||||||
self.mw.setKeyHandler(self._keyHandler)
|
self.web.setKeyHandler(self._keyHandler)
|
||||||
self.web.setLinkHandler(self._linkHandler)
|
self.web.setLinkHandler(self._linkHandler)
|
||||||
self._renderPage()
|
self._renderPage()
|
||||||
|
|
||||||
|
|
@ -38,9 +38,8 @@ class Overview(object):
|
||||||
elif txt == "d":
|
elif txt == "d":
|
||||||
self._linkHandler("list")
|
self._linkHandler("list")
|
||||||
else:
|
else:
|
||||||
evt.ignore()
|
|
||||||
return
|
return
|
||||||
evt.accept()
|
return True
|
||||||
|
|
||||||
def _linkHandler(self, url):
|
def _linkHandler(self, url):
|
||||||
print "link", url
|
print "link", url
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ from anki.sound import playFromText, clearAudioQueue
|
||||||
from aqt.utils import mungeQA, getBase
|
from aqt.utils import mungeQA, getBase
|
||||||
import aqt
|
import aqt
|
||||||
|
|
||||||
# fixme: space is scrolling instead of showing the current answer
|
|
||||||
|
|
||||||
class Reviewer(object):
|
class Reviewer(object):
|
||||||
"Manage reviews. Maintains a separate state."
|
"Manage reviews. Maintains a separate state."
|
||||||
|
|
||||||
|
|
@ -26,7 +24,7 @@ class Reviewer(object):
|
||||||
self._setupStatus()
|
self._setupStatus()
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
self.mw.setKeyHandler(self._keyHandler)
|
self.web.setKeyHandler(self._keyHandler)
|
||||||
self.web.setLinkHandler(self._linkHandler)
|
self.web.setLinkHandler(self._linkHandler)
|
||||||
self._getCard()
|
self._getCard()
|
||||||
|
|
||||||
|
|
@ -199,29 +197,27 @@ $(".ansbut").focus();
|
||||||
show = False
|
show = False
|
||||||
if evt.key() in (Qt.Key_Enter,
|
if evt.key() in (Qt.Key_Enter,
|
||||||
Qt.Key_Return):
|
Qt.Key_Return):
|
||||||
evt.accept()
|
|
||||||
show = True
|
show = True
|
||||||
elif evt.key() == Qt.Key_Space and not self.typeAns():
|
elif evt.key() == Qt.Key_Space and not self.typeAns():
|
||||||
evt.accept()
|
|
||||||
show = True
|
show = True
|
||||||
if show:
|
if show:
|
||||||
self._showAnswer()
|
self._showAnswer()
|
||||||
return self.web.eval("showans();")
|
self.web.eval("showans();")
|
||||||
|
return True
|
||||||
elif self.state == "answer":
|
elif self.state == "answer":
|
||||||
if evt.key() in (Qt.Key_Enter,
|
if evt.key() in (Qt.Key_Enter,
|
||||||
Qt.Key_Return,
|
Qt.Key_Return,
|
||||||
Qt.Key_Space):
|
Qt.Key_Space):
|
||||||
self._answerCard(self._defaultEase())
|
self._answerCard(self._defaultEase())
|
||||||
evt.accept()
|
return True
|
||||||
return
|
|
||||||
else:
|
else:
|
||||||
key = unicode(evt.text())
|
key = unicode(evt.text())
|
||||||
if key and key >= "1" and key <= "4":
|
if key and key >= "1" and key <= "4":
|
||||||
key=int(key)
|
key=int(key)
|
||||||
if self.card.queue == 2 or key < 4:
|
if self.card.queue == 2 or key < 4:
|
||||||
evt.accept()
|
self._answerCard(key)
|
||||||
return self._answerCard(key)
|
return True
|
||||||
evt.ignore()
|
|
||||||
|
|
||||||
def _linkHandler(self, url):
|
def _linkHandler(self, url):
|
||||||
print "link", url
|
print "link", url
|
||||||
|
|
|
||||||
|
|
@ -44,12 +44,17 @@ class AnkiWebView(QWebView):
|
||||||
self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
|
self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
|
||||||
self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge)
|
self.page().mainFrame().addToJavaScriptWindowObject("py", self._bridge)
|
||||||
self.setLinkHandler()
|
self.setLinkHandler()
|
||||||
|
self.setKeyHandler()
|
||||||
self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler)
|
self.connect(self, SIGNAL("linkClicked(QUrl)"), self._linkHandler)
|
||||||
self.connect(self, SIGNAL("loadFinished(bool)"), self._loadFinished)
|
self.connect(self, SIGNAL("loadFinished(bool)"), self._loadFinished)
|
||||||
def keyPressEvent(self, evt):
|
def keyPressEvent(self, evt):
|
||||||
if evt.matches(QKeySequence.Copy):
|
if evt.matches(QKeySequence.Copy):
|
||||||
self.triggerPageAction(QWebPage.Copy)
|
self.triggerPageAction(QWebPage.Copy)
|
||||||
evt.accept()
|
evt.accept()
|
||||||
|
if self._keyHandler:
|
||||||
|
if self._keyHandler(evt):
|
||||||
|
evt.accept()
|
||||||
|
return
|
||||||
QWebView.keyPressEvent(self, evt)
|
QWebView.keyPressEvent(self, evt)
|
||||||
def contextMenuEvent(self, evt):
|
def contextMenuEvent(self, evt):
|
||||||
QWebView.contextMenuEvent(self, evt)
|
QWebView.contextMenuEvent(self, evt)
|
||||||
|
|
@ -60,6 +65,9 @@ class AnkiWebView(QWebView):
|
||||||
self.linkHandler = handler
|
self.linkHandler = handler
|
||||||
else:
|
else:
|
||||||
self.linkHandler = self._openLinksExternally
|
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):
|
def setHtml(self, html, loadCB=None):
|
||||||
if loadCB:
|
if loadCB:
|
||||||
self._loadFinishedCB = loadCB
|
self._loadFinishedCB = loadCB
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue