[Bf-blender-cvs] [f18ed7ad890] blender-v2.83-release: Fix T67577: Add-on unregister can't access preferences on factory reset

Campbell Barton noreply at git.blender.org
Mon Jun 1 06:07:35 CEST 2020


Commit: f18ed7ad890ee5c89fc6e6a22e76c732fb5fc1bc
Author: Campbell Barton
Date:   Mon Jun 1 13:57:41 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rBf18ed7ad890ee5c89fc6e6a22e76c732fb5fc1bc

Fix T67577: Add-on unregister can't access preferences on factory reset

===================================================================

M	source/blender/windowmanager/intern/wm_files.c
M	source/blender/windowmanager/wm_files.h

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index cc81e4f2715..1220c75f641 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -516,9 +516,13 @@ static void wm_file_read_post(bContext *C,
           BPY_execute_string(
               C, (const char *[]){"bl_app_template_utils", NULL}, "bl_app_template_utils.reset()");
         }
+      }
+
+      if (use_userdef) {
         /* sync addons, these may have changed from the defaults */
         BPY_execute_string(C, (const char *[]){"addon_utils", NULL}, "addon_utils.reset_all()");
       }
+
       if (use_data) {
         BPY_python_reset(C);
       }
@@ -767,9 +771,9 @@ const char *WM_init_state_app_template_get(void)
 void wm_homefile_read(bContext *C,
                       ReportList *reports,
                       bool use_factory_settings,
-                      bool use_empty_data,
-                      bool use_data,
-                      bool use_userdef,
+                      const bool use_empty_data,
+                      const bool use_data,
+                      const bool use_userdef,
                       const char *filepath_startup_override,
                       const char *app_template_override,
                       bool *r_is_factory_startup)
@@ -809,6 +813,20 @@ void wm_homefile_read(bContext *C,
     SET_FLAG_FROM_TEST(G.f, (U.flag & USER_SCRIPT_AUTOEXEC_DISABLE) == 0, G_FLAG_SCRIPT_AUTOEXEC);
   }
 
+  if (use_userdef) {
+#ifdef WITH_PYTHON
+    /* This only runs once Blender has already started. */
+    if (CTX_py_init_get(C)) {
+      /* This is restored by 'wm_file_read_post', disable before loading any preferences
+       * so an add-on can read their own preferences when un-registering, see T67577.
+       *
+       * Note that this would fit into a matching 'wm_file_read_pre' function,
+       * but this gets complicated by blend files not always loading, call inline instead. */
+      BPY_execute_string(C, (const char *[]){"addon_utils", NULL}, "addon_utils.disable_all()");
+    }
+#endif /* WITH_PYTHON */
+  }
+
   if (use_data) {
     BKE_callback_exec_null(CTX_data_main(C), BKE_CB_EVT_LOAD_PRE);
     BLI_timer_on_file_load();
diff --git a/source/blender/windowmanager/wm_files.h b/source/blender/windowmanager/wm_files.h
index e081742b904..a37eb6e777b 100644
--- a/source/blender/windowmanager/wm_files.h
+++ b/source/blender/windowmanager/wm_files.h
@@ -33,9 +33,9 @@ void wm_history_file_read(void);
 void wm_homefile_read(struct bContext *C,
                       struct ReportList *reports,
                       bool use_factory_settings,
-                      bool use_empty_data,
-                      bool use_data,
-                      bool use_userdef,
+                      const bool use_empty_data,
+                      const bool use_data,
+                      const bool use_userdef,
                       const char *filepath_startup_override,
                       const char *app_template_override,
                       bool *r_is_factory_startup);



More information about the Bf-blender-cvs mailing list