Commit: 6a8e96debace083bb78c054cf6a8bcfd4bdc245d
Author: Julian Eisel
Date:   Sun Dec 20 15:20:52 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rB6a8e96debace083bb78c054cf6a8bcfd4bdc245d

Port over widget delete functions

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

M       source/blender/windowmanager/intern/widgets/wm_widget.cc
M       source/blender/windowmanager/intern/widgets/wm_widget.h
M       source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc

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

diff --git a/source/blender/windowmanager/intern/widgets/wm_widget.cc 
b/source/blender/windowmanager/intern/widgets/wm_widget.cc
index 57c5af2..e546fac 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widget.cc
+++ b/source/blender/windowmanager/intern/widgets/wm_widget.cc
@@ -33,6 +33,10 @@
 #include "DNA_listBase.h"
 #include "DNA_windowmanager_types.h"
 
+#include "MEM_guardedalloc.h"
+
+#include "WM_api.h"
+
 #include "wm_widgetgroup.h"
 #include "wm_widget.h" // own include
 
@@ -45,6 +49,31 @@ wmWidget::wmWidget()
 }
 #endif
 
+/**
+ * Free widget data, not widget itself.
+ */
+static void widget_data_free(wmWidget *widget)
+{
+       if (widget->opptr.data) {
+               WM_operator_properties_free(&widget->opptr);
+       }
+
+       MEM_freeN(widget->props);
+       MEM_freeN(widget->ptr);
+}
+
+/**
+ * Free and NULL \a widget.
+ * \a widgetlist is allowed to be NULL.
+ */
+void widget_delete(ListBase *widgetlist, wmWidget *widget)
+{
+       widget_data_free(widget);
+       if (widgetlist)
+               BLI_remlink(widgetlist, widget);
+       MEM_SAFE_FREE(widget);
+}
+
 void widget_find_active_3D_loop(const bContext *C, ListBase *visible_widgets)
 {
        int selectionbase = 0;
diff --git a/source/blender/windowmanager/intern/widgets/wm_widget.h 
b/source/blender/windowmanager/intern/widgets/wm_widget.h
index f921a93..2de9315 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widget.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widget.h
@@ -60,6 +60,7 @@ public:
 };
 #endif
 
+void widget_delete(ListBase *widgetlist, wmWidget *widget);
 void widget_find_active_3D_loop(const bContext *C, ListBase *visible_widgets);
 
 #endif // __WM_WIDGET_H__
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc 
b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc
index d17fcdd..4efbf6d 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc
@@ -63,7 +63,7 @@ void widgetgroup_free(bContext *C, wmWidgetMap *wmap, 
wmWidgetGroup *wgroup)
                if (widget->flag & WM_WIDGET_ACTIVE) {
 //                     wm_widgetmap_set_active_widget(wmap, C, NULL, NULL);
                }
-//             wm_widget_delete(&wgroup->widgets, widget);
+               widget_delete(&wgroup->widgets, widget);
                widget = widget_next;
        }

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

Reply via email to