Commit: ee4fb233618c0842e216042f442fbbc4d000b0bb
Author: Campbell Barton
Date:   Tue Oct 28 15:47:51 2014 +0100
Branches: master
https://developer.blender.org/rBee4fb233618c0842e216042f442fbbc4d000b0bb

WM: clear operator memory on file load

Was causing problems when opening scenes with different scale set.

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

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

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

diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index cf9f94a..a580260 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -230,6 +230,7 @@ void                WM_operatortype_append_ptr(void 
(*opfunc)(struct wmOperatorType *, void *)
 void           WM_operatortype_append_macro_ptr(void (*opfunc)(struct 
wmOperatorType *, void *), void *userdata);
 void        WM_operatortype_remove_ptr(struct wmOperatorType *ot);
 bool        WM_operatortype_remove(const char *idname);
+void        WM_operatortype_last_properties_clear_all(void);
 
 struct wmOperatorType *WM_operatortype_append_macro(const char *idname, const 
char *name, const char *description, int flag);
 struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType 
*ot, const char *idname);
diff --git a/source/blender/windowmanager/intern/wm_files.c 
b/source/blender/windowmanager/intern/wm_files.c
index 7865e09..8f0f764 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -476,6 +476,8 @@ bool WM_file_read(bContext *C, const char *filepath, 
ReportList *reports)
                BPY_python_reset(C);
 #endif
 
+               WM_operatortype_last_properties_clear_all();
+
                /* important to do before NULL'ing the context */
                BLI_callback_exec(CTX_data_main(C), NULL, 
BLI_CB_EVT_VERSION_UPDATE);
                BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST);
@@ -668,6 +670,8 @@ int wm_homefile_read(bContext *C, ReportList *reports, bool 
from_memory, const c
        }
 #endif
 
+       WM_operatortype_last_properties_clear_all();
+
        /* important to do before NULL'ing the context */
        BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_VERSION_UPDATE);
        BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST);
diff --git a/source/blender/windowmanager/intern/wm_operators.c 
b/source/blender/windowmanager/intern/wm_operators.c
index 77f6028..154249a 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -494,6 +494,27 @@ bool WM_operatortype_remove(const char *idname)
        return true;
 }
 
+/**
+ * Remove memory of all previously executed tools.
+ */
+void WM_operatortype_last_properties_clear_all(void)
+{
+       GHashIterator iter;
+
+       for (WM_operatortype_iter(&iter);
+            (!BLI_ghashIterator_done(&iter));
+            (BLI_ghashIterator_step(&iter)))
+       {
+               wmOperatorType *ot = BLI_ghashIterator_getValue(&iter);
+
+               if (ot->last_properties) {
+                       IDP_FreeProperty(ot->last_properties);
+                       MEM_freeN(ot->last_properties);
+                       ot->last_properties = NULL;
+               }
+       }
+}
+
 /* SOME_OT_op -> some.op */
 void WM_operator_py_idname(char *to, const char *from)
 {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to