[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