[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