Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-06-01 06:57:41 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-06-01 07:06:55 +0300
commitf18ed7ad890ee5c89fc6e6a22e76c732fb5fc1bc (patch)
tree2f359678484ee870d778ce46abfc1d454cd23ab3 /source/blender
parentd5a92b188b5de590a59db4497294acece77505bc (diff)
Fix T67577: Add-on unregister can't access preferences on factory reset
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/windowmanager/intern/wm_files.c24
-rw-r--r--source/blender/windowmanager/wm_files.h6
2 files changed, 24 insertions, 6 deletions
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);