diff options
Diffstat (limited to 'source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c')
-rw-r--r-- | source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 34 |
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); + } + } + } + } +} + /** \} */ |