avoid refreshing preview when nothing has changed

fixes visible redraw when:
- opening preview screen while cursor in field (as editTimer
fires even if note has not changed)
- moving between cards (as loadNote and rowChanged hooks are both
fired)
This commit is contained in:
Damien Elmes 2019-02-26 11:18:32 +10:00
parent 4116ab65b0
commit c07f2d0747

View file

@ -1253,6 +1253,7 @@ where id in %s""" % ids2str(sf))
_previewTimer = None
_lastPreviewRender = 0
_lastPreviewState = None
def onTogglePreview(self):
if self._previewWindow:
@ -1385,15 +1386,22 @@ where id in %s""" % ids2str(sf))
txt = _("(please select 1 card)")
bodyclass = ""
else:
if self._previewBothSides:
self._previewState = "answer"
elif cardChanged:
self._previewState = "question"
currentState = self._previewStateAndMod()
if currentState == self._lastPreviewState:
# nothing has changed, avoid refreshing
return
# need to force reload even if answer
txt = c.q(reload=True)
questionAudio = []
if self._previewBothSides:
self._previewState = "answer"
questionAudio = allSounds(txt)
elif cardChanged:
self._previewState = "question"
if self._previewState == "answer":
func = "_showAnswer"
txt = c.a()
@ -1414,7 +1422,7 @@ where id in %s""" % ids2str(sf))
txt = mungeQA(self.col, txt)
txt = runFilter("prepareQA", txt, c,
"preview"+self._previewState.capitalize())
self._lastPreviewState = self._previewStateAndMod()
self._updatePreviewButtons()
self._previewWeb.eval(
"{}({},'{}');".format(func, json.dumps(txt), bodyclass))
@ -1427,6 +1435,9 @@ where id in %s""" % ids2str(sf))
self._previewState = "question"
self._renderPreview()
def _previewStateAndMod(self):
return (self._previewState, self.card.note().mod)
# Card deletion
######################################################################