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:
Diffstat (limited to 'source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 2ec0e4e7ec3..4207c3a40d3 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -70,7 +70,9 @@
wmGizmoGroup *wm_gizmogroup_new_from_type(wmGizmoMap *gzmap, wmGizmoGroupType *gzgt)
{
wmGizmoGroup *gzgroup = MEM_callocN(sizeof(*gzgroup), "gizmo-group");
+
gzgroup->type = gzgt;
+ gzgroup->type->users += 1;
/* keep back-link */
gzgroup->parent_gzmap = gzmap;
@@ -125,9 +127,25 @@ void wm_gizmogroup_free(bContext *C, wmGizmoGroup *gzgroup)
BLI_remlink(&gzmap->groups, gzgroup);
+ if (gzgroup->tag_remove == false) {
+ gzgroup->type->users -= 1;
+ }
+
MEM_freeN(gzgroup);
}
+void WM_gizmo_group_tag_remove(wmGizmoGroup *gzgroup)
+{
+ if (gzgroup->tag_remove == false) {
+ gzgroup->tag_remove = true;
+ gzgroup->type->users -= 1;
+ BLI_assert(gzgroup->type->users >= 0);
+ printf("Now users %d\n", gzgroup->type->users);
+
+ WM_gizmoconfig_update_tag_remove_single_group();
+ }
+}
+
/**
* Add \a gizmo to \a gzgroup and make sure its name is unique within the group.
*/
@@ -1066,4 +1084,20 @@ void WM_gizmo_group_type_unlink_delayed(const char *idname)
WM_gizmo_group_type_unlink_delayed_ptr(gzgt);
}
+void WM_gizmo_group_unlink_delayed_ptr_from_space(wmGizmoGroupType *gzgt,
+ wmGizmoMapType *gzmap_type,
+ ScrArea *sa)
+{
+ for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
+ wmGizmoMap *gzmap = ar->gizmo_map;
+ if (gzmap && gzmap->type == gzmap_type) {
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
+ if (gzgroup->type == gzgt) {
+ WM_gizmo_group_tag_remove(gzgroup);
+ }
+ }
+ }
+ }
+}
+
/** \} */