Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-03-15 06:21:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-03-15 06:48:17 +0300
commit244315afc9bd905c6d725b5be2428fa6e382cd00 (patch)
treeebb138cc7f79856d38b2cbfdcfea6cfcafaba389
parentd611f2889ec78993d7d7e644c78b0e2775573da9 (diff)
Cleanup: refactor auto-save timer usage
- Split out auto-save file writing from timer code. - Add wm_autosave_timer_begin so there are both begin & end functions. - Replace WM_event_add_timer/WM_event_remove_timer with begin/end calls.
-rw-r--r--source/blender/windowmanager/intern/wm_files.c75
-rw-r--r--source/blender/windowmanager/wm.h1
2 files changed, 48 insertions, 28 deletions
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index fb0b9ed39e4..ca59174f8e8 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -1643,35 +1643,10 @@ static void wm_autosave_location(char *filepath)
BLI_join_dirfile(filepath, FILE_MAX, BKE_tempdir_base(), path);
}
-void WM_autosave_init(wmWindowManager *wm)
-{
- wm_autosave_timer_end(wm);
-
- if (U.flag & USER_AUTOSAVE) {
- wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, U.savetime * 60.0);
- }
-}
-
-void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
+static void wm_autosave_write(Main *bmain, wmWindowManager *wm)
{
char filepath[FILE_MAX];
- WM_event_remove_timer(wm, NULL, wm->autosavetimer);
-
- /* If a modal operator is running, don't autosave because we might not be in
- * a valid state to save. But try again in 10ms. */
- LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
- LISTBASE_FOREACH (wmEventHandler *, handler_base, &win->modalhandlers) {
- if (handler_base->type == WM_HANDLER_TYPE_OP) {
- wmEventHandler_Op *handler = (wmEventHandler_Op *)handler_base;
- if (handler->op) {
- wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, 0.01);
- return;
- }
- }
- }
- }
-
wm_autosave_location(filepath);
if (U.uiflag & USER_GLOBALUNDO) {
@@ -1690,8 +1665,20 @@ void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
/* Error reporting into console. */
BLO_write_file(bmain, filepath, fileflags, &(const struct BlendFileWriteParams){0}, NULL);
}
- /* do timer after file write, just in case file write takes a long time */
- wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, U.savetime * 60.0);
+}
+
+static void wm_autosave_timer_begin_ex(wmWindowManager *wm, double timestep)
+{
+ wm_autosave_timer_end(wm);
+
+ if (U.flag & USER_AUTOSAVE) {
+ wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, timestep);
+ }
+}
+
+void wm_autosave_timer_begin(wmWindowManager *wm)
+{
+ wm_autosave_timer_begin_ex(wm, U.savetime * 60.0);
}
void wm_autosave_timer_end(wmWindowManager *wm)
@@ -1702,6 +1689,38 @@ void wm_autosave_timer_end(wmWindowManager *wm)
}
}
+void WM_autosave_init(wmWindowManager *wm)
+{
+ wm_autosave_timer_begin(wm);
+}
+
+/**
+ * Run the auto-save timer action.
+ */
+void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
+{
+ wm_autosave_timer_end(wm);
+
+ /* If a modal operator is running, don't autosave because we might not be in
+ * a valid state to save. But try again in 10ms. */
+ LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
+ LISTBASE_FOREACH (wmEventHandler *, handler_base, &win->modalhandlers) {
+ if (handler_base->type == WM_HANDLER_TYPE_OP) {
+ wmEventHandler_Op *handler = (wmEventHandler_Op *)handler_base;
+ if (handler->op) {
+ wm_autosave_timer_begin_ex(wm, 0.01);
+ return;
+ }
+ }
+ }
+ }
+
+ wm_autosave_write(bmain, wm);
+
+ /* Restart the timer after file write, just in case file write takes a long time. */
+ wm_autosave_timer_begin(wm);
+}
+
void wm_autosave_delete(void)
{
char filename[FILE_MAX];
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 6fc44e82df0..7fddf60eb97 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -75,6 +75,7 @@ void wm_jobs_timer_end(wmWindowManager *wm, wmTimer *wt);
/* wm_files.c */
void wm_autosave_timer(struct Main *bmain, wmWindowManager *wm, wmTimer *wt);
+void wm_autosave_timer_begin(struct wmWindowManager *wm);
void wm_autosave_timer_end(wmWindowManager *wm);
void wm_autosave_delete(void);