diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-02-15 05:32:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-02-15 05:32:31 +0300 |
commit | 90f6fd0a3651587b2f1e875b2537a5d007d77630 (patch) | |
tree | 7925714ce68249ff062c32c2fe5427b9ecaae238 /source/blender/windowmanager/gizmo | |
parent | 796abc90a8ba27aa0da5808790a9607d08df61d0 (diff) |
Fix T60905: Crash using smooth tool
Tools were relying on gizmos drawing to initialize their gizmos,
now tool gizmos are initialized immediately.
Diffstat (limited to 'source/blender/windowmanager/gizmo')
4 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h index 74676221e7e..604328ee891 100644 --- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h +++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h @@ -233,6 +233,9 @@ struct wmKeyMap *WM_gizmogroup_keymap_common( struct wmKeyMap *WM_gizmogroup_keymap_common_select( const struct wmGizmoGroupType *gzgt, struct wmKeyConfig *config); +void WM_gizmogroup_ensure_init( + const struct bContext *C, struct wmGizmoGroup *gzgroup); + /* Sort utilities for use with 'BLI_listbase_sort'. */ int WM_gizmo_cmp_temp_fl(const void *gz_a_ptr, const void *gz_b_ptr); int WM_gizmo_cmp_temp_fl_reverse(const void *gz_a_ptr, const void *gz_b_ptr); @@ -292,7 +295,7 @@ 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( +wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region( struct wmGizmoMapType *gzmap_type, struct wmGizmoGroupType *gzgt, struct ARegion *ar); void WM_gizmomaptype_group_unlink( diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index 9dcd3dc6743..821b452175b 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -190,7 +190,7 @@ void wm_gizmogroup_intersectable_gizmos_to_list(const wmGizmoGroup *gzgroup, Lis } } -void wm_gizmogroup_ensure_initialized(wmGizmoGroup *gzgroup, const bContext *C) +void WM_gizmogroup_ensure_init(const bContext *C, wmGizmoGroup *gzgroup) { /* prepare for first draw */ if (UNLIKELY((gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0)) { @@ -806,7 +806,7 @@ void WM_gizmomaptype_group_init_runtime( } } -void WM_gizmomaptype_group_init_runtime_with_region( +wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region( wmGizmoMapType *gzmap_type, wmGizmoGroupType *gzgt, ARegion *ar) { @@ -814,10 +814,13 @@ void WM_gizmomaptype_group_init_runtime_with_region( BLI_assert(gzmap && gzmap->type == gzmap_type); UNUSED_VARS_NDEBUG(gzmap_type); - wm_gizmogroup_new_from_type(gzmap, gzgt); + wmGizmoGroup *gzgroup = wm_gizmogroup_new_from_type(gzmap, gzgt); wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0); + ED_region_tag_redraw(ar); + + return gzgroup; } /** diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h b/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h index b89e46b4ba5..eabe4cce975 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h @@ -67,7 +67,6 @@ struct wmGizmo *wm_gizmogroup_find_intersected_gizmo( int *r_part); void wm_gizmogroup_intersectable_gizmos_to_list( const struct wmGizmoGroup *gzgroup, struct ListBase *listbase); -void wm_gizmogroup_ensure_initialized(struct wmGizmoGroup *gzgroup, const struct bContext *C); bool wm_gizmogroup_is_visible_in_drawstep( const struct wmGizmoGroup *gzgroup, const eWM_GizmoFlagMapDrawStep drawstep); diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index b5081b0ebe9..824d36ec844 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -355,7 +355,7 @@ static void gizmomap_prepare_drawing( gzgroup->init_flag &= ~WM_GIZMOGROUP_INIT_REFRESH; } /* Calls `setup`, `setup_keymap` and `refresh` if they're defined. */ - wm_gizmogroup_ensure_initialized(gzgroup, C); + WM_gizmogroup_ensure_init(C, gzgroup); /* prepare drawing */ if (gzgroup->type->draw_prepare) { |