diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index b269df969..bcc7f5494 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -367,48 +367,59 @@ class Editor: # shutdown return # focus lost or key/button pressed? - if cmd.startswith("blur") or cmd.startswith("key"): - (type, ord, nid, txt) = cmd.split(":", 3) - ord = int(ord) - try: - nid = int(nid) - except ValueError: - nid = 0 - if nid != self.note.id: - print("ignored late blur") - return - txt = unicodedata.normalize("NFC", txt) - txt = self.mungeHTML(txt) - # misbehaving apps may include a null byte in the text - txt = txt.replace("\x00", "") - # reverse the url quoting we added to get images to display - txt = self.mw.col.media.escapeImages(txt, unescape=True) - self.note.fields[ord] = txt - if not self.addMode: - self.note.flush() - self.mw.requireReset() - if type == "blur": - self.currentField = None - # run any filters - if gui_hooks.editor_did_unfocus_field(False, self.note, ord): - # something updated the note; update it after a subsequent focus - # event has had time to fire - self.mw.progress.timer(100, self.loadNoteKeepingFocus, False) - else: - self.checkValid() - else: - gui_hooks.editor_did_fire_typing_timer(self.note) - self.checkValid() + type, remaining = cmd.split(":", 1) + if type == "blur": + self.onBlur(*remaining.split(":", 2)) + elif type == "key": + self.onKey(*remaining.split(":", 2)) # focused into field? - elif cmd.startswith("focus"): - (type, num) = cmd.split(":", 1) - self.currentField = int(num) - gui_hooks.editor_did_focus_field(self.note, self.currentField) + elif type == "focus": + self.onFocus(remaining) elif cmd in self._links: self._links[cmd](self) else: print("uncaught cmd", cmd) + def onBlurOrKey(self, ord, nid, txt): + ord = int(ord) + try: + nid = int(nid) + except ValueError: + nid = 0 + if nid != self.note.id: + print("ignored late blur") + return + txt = unicodedata.normalize("NFC", txt) + txt = self.mungeHTML(txt) + # misbehaving apps may include a null byte in the text + txt = txt.replace("\x00", "") + # reverse the url quoting we added to get images to display + txt = self.mw.col.media.escapeImages(txt, unescape=True) + self.note.fields[ord] = txt + if not self.addMode: + self.note.flush() + self.mw.requireReset() + + def onBlur(self, ord, nid, txt): + self.onBlurOrKey(ord, nid, txt) + self.currentField = None + # run any filters + if gui_hooks.editor_did_unfocus_field(False, self.note, int(ord)): + # something updated the note; update it after a subsequent focus + # event has had time to fire + self.mw.progress.timer(100, self.loadNoteKeepingFocus, False) + else: + self.checkValid() + + def onKey(self, ord, nid, txt): + self.onBlurOrKey(ord, nid, txt) + gui_hooks.editor_did_fire_typing_timer(self.note) + self.checkValid() + + def onFocus(self, num): + self.currentField = int(num) + gui_hooks.editor_did_focus_field(self.note, self.currentField) + def mungeHTML(self, txt): if txt in ("
", "

"): return ""