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:
authorCampbell Barton <ideasman42@gmail.com>2019-07-01 06:51:13 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-07-01 06:51:13 +0300
commitfc10a5cf9e008343ecb925fdb87a4faa18918359 (patch)
tree7d96773f75f66a5203391b64cf32c4073b975deb /source/blender/windowmanager
parent1a5e1273c1cb220daa9ce68a200cbae412d19321 (diff)
Fix T66229: gizmos overlap when switching modes
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c9
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c52
2 files changed, 35 insertions, 26 deletions
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 40d99ce8ba6..50c98630a16 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -927,6 +927,15 @@ wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region(wmGizmoMapType *gzm
wmGizmoGroup *gzgroup = wm_gizmogroup_new_from_type(gzmap, gzgt);
+ /* Don't allow duplicates when switching modes for e.g. see: T66229. */
+ LISTBASE_FOREACH (wmGizmoGroup *, gzgroup_iter, &gzmap->groups) {
+ if (gzgroup_iter->type == gzgt) {
+ if (gzgroup_iter != gzgroup) {
+ WM_gizmo_group_tag_remove(gzgroup_iter);
+ }
+ }
+ }
+
wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0);
ED_region_tag_redraw(ar);
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index be123bee5df..6ec908bcf29 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -1283,32 +1283,6 @@ void WM_gizmoconfig_update(struct Main *bmain)
return;
}
- if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) {
- for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
- for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
- for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
- ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
- for (ARegion *ar = regionbase->first; ar; ar = ar->next) {
- wmGizmoMap *gzmap = ar->gizmo_map;
- if (gzmap != NULL && gzmap->tag_remove_group) {
- gzmap->tag_remove_group = false;
-
- for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup;
- gzgroup = gzgroup_next) {
- gzgroup_next = gzgroup->next;
- if (gzgroup->tag_remove) {
- wm_gizmogroup_free(NULL, gzgroup);
- ED_region_tag_redraw(ar);
- }
- }
- }
- }
- }
- }
- }
- wm_gzmap_type_update_flag &= ~WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE;
- }
-
if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type;
gzmap_type = gzmap_type->next) {
@@ -1352,6 +1326,32 @@ void WM_gizmoconfig_update(struct Main *bmain)
wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
}
+
+ if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) {
+ for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ for (ARegion *ar = regionbase->first; ar; ar = ar->next) {
+ wmGizmoMap *gzmap = ar->gizmo_map;
+ if (gzmap != NULL && gzmap->tag_remove_group) {
+ gzmap->tag_remove_group = false;
+
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup;
+ gzgroup = gzgroup_next) {
+ gzgroup_next = gzgroup->next;
+ if (gzgroup->tag_remove) {
+ wm_gizmogroup_free(NULL, gzgroup);
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ wm_gzmap_type_update_flag &= ~WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE;
+ }
}
/** \} */