diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-03-15 06:21:33 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-03-15 06:48:17 +0300 |
commit | 244315afc9bd905c6d725b5be2428fa6e382cd00 (patch) | |
tree | ebb138cc7f79856d38b2cbfdcfea6cfcafaba389 /source/blender/windowmanager | |
parent | d611f2889ec78993d7d7e644c78b0e2775573da9 (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.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/intern/wm_files.c | 75 | ||||
-rw-r--r-- | source/blender/windowmanager/wm.h | 1 |
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); |