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-01-22 08:51:31 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-22 08:52:17 +0300
commitee3c177dd3d54b3b3a500dce392683edfe730586 (patch)
treeefd2f955a14f992833021bcfda310c766efde1ba /source/blender/windowmanager/gizmo
parenta93cbb70cd6ac32193ca3b656c47f620ef10a4d2 (diff)
Fix T60112: Smooth crashes w/ multiple views
Diffstat (limited to 'source/blender/windowmanager/gizmo')
-rw-r--r--source/blender/windowmanager/gizmo/WM_gizmo_api.h3
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c23
2 files changed, 21 insertions, 5 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
index 4ceb78be227..667646cf601 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
@@ -297,6 +297,9 @@ void WM_gizmomaptype_group_init_runtime_keymap(
void WM_gizmomaptype_group_init_runtime(
const struct Main *bmain, struct wmGizmoMapType *gzmap_type,
struct wmGizmoGroupType *gzgt);
+void WM_gizmomaptype_group_init_runtime_with_region(
+ struct wmGizmoMapType *gzmap_type,
+ struct wmGizmoGroupType *gzgt, struct ARegion *ar);
void WM_gizmomaptype_group_unlink(
struct bContext *C, struct Main *bmain, struct wmGizmoMapType *gzmap_type,
const struct wmGizmoGroupType *gzgt);
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 67b7149c0bd..9999f4034c6 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -792,6 +792,11 @@ void WM_gizmomaptype_group_init_runtime(
const Main *bmain, wmGizmoMapType *gzmap_type,
wmGizmoGroupType *gzgt)
{
+ /* Tools add themselves. */
+ if (gzgt->flag & WM_GIZMOGROUPTYPE_TOOL_INIT) {
+ return;
+ }
+
/* now create a gizmo for all existing areas */
for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
@@ -800,11 +805,7 @@ void WM_gizmomaptype_group_init_runtime(
for (ARegion *ar = lb->first; ar; ar = ar->next) {
wmGizmoMap *gzmap = ar->gizmo_map;
if (gzmap && gzmap->type == gzmap_type) {
- wm_gizmogroup_new_from_type(gzmap, gzgt);
-
- /* just add here, drawing will occur on next update */
- wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0);
- ED_region_tag_redraw(ar);
+ WM_gizmomaptype_group_init_runtime_with_region(gzmap_type, gzgt, ar);
}
}
}
@@ -812,6 +813,18 @@ void WM_gizmomaptype_group_init_runtime(
}
}
+void WM_gizmomaptype_group_init_runtime_with_region(
+ wmGizmoMapType *gzmap_type,
+ wmGizmoGroupType *gzgt, ARegion *ar)
+{
+ wmGizmoMap *gzmap = ar->gizmo_map;
+ BLI_assert(gzmap && gzmap->type == gzmap_type);
+
+ wm_gizmogroup_new_from_type(gzmap, gzgt);
+
+ wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0);
+ ED_region_tag_redraw(ar);
+}
/**
* Unlike #WM_gizmomaptype_group_unlink this doesn't maintain correct state, simply free.