diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-22 08:51:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-22 08:52:17 +0300 |
commit | ee3c177dd3d54b3b3a500dce392683edfe730586 (patch) | |
tree | efd2f955a14f992833021bcfda310c766efde1ba /source/blender/windowmanager | |
parent | a93cbb70cd6ac32193ca3b656c47f620ef10a4d2 (diff) |
Fix T60112: Smooth crashes w/ multiple views
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/gizmo/WM_gizmo_api.h | 3 | ||||
-rw-r--r-- | source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 23 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 7 |
3 files changed, 27 insertions, 6 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. diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index a2850a7554b..5feacea9666 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2057,7 +2057,12 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false); if (gzgt != NULL) { if ((gzgt->flag & WM_GIZMOGROUPTYPE_TOOL_INIT) != 0) { - WM_gizmo_group_type_ensure_ptr(gzgt); + ARegion *ar = CTX_wm_region(C); + if (ar != NULL) { + wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure(&gzgt->gzmap_params); + WM_gizmo_group_type_ensure_ptr_ex(gzgt, gzmap_type); + WM_gizmomaptype_group_init_runtime_with_region(gzmap_type, gzgt, ar); + } } } } |