[Bf-blender-cvs] [6d888133da1] blender-v2.90-release: Timers: set first window as context in timer
Jacques Lucke
noreply at git.blender.org
Tue Aug 11 13:25:04 CEST 2020
Commit: 6d888133da1ce31f4cd68f44d1209534173b4562
Author: Jacques Lucke
Date: Tue Aug 11 13:24:52 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rB6d888133da1ce31f4cd68f44d1209534173b4562
Timers: set first window as context in timer
This avoids some crashes when running Python code in timers.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D8531
===================================================================
M source/blender/windowmanager/intern/wm_event_system.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 05ef4bfac30..8dbb608cd30 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -387,6 +387,18 @@ void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
CTX_wm_window_set(C, NULL);
}
+static void wm_event_execute_timers(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+
+ /* Set the first window as context, so that there is some minimal context. This avoids crashes
+ * when calling code that assumes that there is always a window in the context (which many
+ * operators do). */
+ CTX_wm_window_set(C, wm->windows.first);
+ BLI_timer_execute();
+ CTX_wm_window_set(C, NULL);
+}
+
/* called in mainloop */
void wm_event_do_notifiers(bContext *C)
{
@@ -398,7 +410,7 @@ void wm_event_do_notifiers(bContext *C)
return;
}
- BLI_timer_execute();
+ wm_event_execute_timers(C);
/* disable? - keep for now since its used for window level notifiers. */
#if 1
More information about the Bf-blender-cvs
mailing list