[Bf-blender-cvs] [244315afc9b] master: Cleanup: refactor auto-save timer usage
Campbell Barton
noreply at git.blender.org
Mon Mar 15 04:54:13 CET 2021
Commit: 244315afc9bd905c6d725b5be2428fa6e382cd00
Author: Campbell Barton
Date: Mon Mar 15 14:21:33 2021 +1100
Branches: master
https://developer.blender.org/rB244315afc9bd905c6d725b5be2428fa6e382cd00
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.
===================================================================
M source/blender/windowmanager/intern/wm_files.c
M source/blender/windowmanager/wm.h
===================================================================
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);
More information about the Bf-blender-cvs
mailing list