ignore immediate=True in progress dialog

Instead, set the busy cursor immediately to give the user feedback,
but defer popup for at least 500ms. This will hopefully address the
white flash in night mode on Windows, and prevent progress dialogs
from rapidly appearing and disappearing for short operations.
This commit is contained in:
Damien Elmes 2020-01-31 08:47:05 +10:00
parent eb6b64f4b1
commit d48038cc29

View file

@ -106,6 +106,7 @@ class ProgressManager:
evt.ignore() evt.ignore()
self.wantCancel = True self.wantCancel = True
# note: immediate is no longer used
def start(self, max=0, min=0, label=None, parent=None, immediate=False): def start(self, max=0, min=0, label=None, parent=None, immediate=False):
self._levels += 1 self._levels += 1
if self._levels > 1: if self._levels > 1:
@ -124,10 +125,8 @@ class ProgressManager:
self._win.setWindowTitle("Anki") self._win.setWindowTitle("Anki")
self._win.setWindowModality(Qt.ApplicationModal) self._win.setWindowModality(Qt.ApplicationModal)
self._win.setMinimumWidth(300) self._win.setMinimumWidth(300)
if immediate: self._setBusy()
self._showWin() self._shown = False
else:
self._shown = False
self._counter = min self._counter = min
self._min = min self._min = min
self._max = max self._max = max
@ -159,8 +158,10 @@ class ProgressManager:
def finish(self): def finish(self):
self._levels -= 1 self._levels -= 1
self._levels = max(0, self._levels) self._levels = max(0, self._levels)
if self._levels == 0 and self._win: if self._levels == 0:
self._closeWin() if self._win:
self._closeWin()
self._unsetBusy()
def clear(self): def clear(self):
"Restore the interface after an error." "Restore the interface after an error."
@ -181,7 +182,6 @@ class ProgressManager:
def _showWin(self): def _showWin(self):
self._shown = time.time() self._shown = time.time()
self._win.show() self._win.show()
self._setBusy()
def _closeWin(self): def _closeWin(self):
if self._shown: if self._shown:
@ -197,7 +197,6 @@ class ProgressManager:
self._win.cancel() self._win.cancel()
self._win = None self._win = None
self._shown = False self._shown = False
self._unsetBusy()
def _setBusy(self): def _setBusy(self):
self.mw.app.setOverrideCursor(QCursor(Qt.WaitCursor)) self.mw.app.setOverrideCursor(QCursor(Qt.WaitCursor))