[Bf-blender-cvs] [6a8e96d] temp_widgets_c++_experiment: Port over widget delete functions

Julian Eisel noreply at git.blender.org
Sun Dec 20 15:39:50 CET 2015


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;
 	}




More information about the Bf-blender-cvs mailing list