From 3d860f53e8becaa8c500b250f5c9ac7215c4f6bf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 24 Sep 2018 17:12:54 +1000 Subject: Gizmo: hide redo gizmo when spin tool not active Selecting a another tool left the gizmo, which could overlap other tools gizmos. --- source/blender/editors/include/ED_gizmo_utils.h | 4 ++++ source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c | 8 ++++++-- source/blender/editors/util/gizmo_utils.c | 11 ++++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/include/ED_gizmo_utils.h b/source/blender/editors/include/ED_gizmo_utils.h index 90968754095..77956b9ca0d 100644 --- a/source/blender/editors/include/ED_gizmo_utils.h +++ b/source/blender/editors/include/ED_gizmo_utils.h @@ -35,6 +35,10 @@ bool ED_gizmo_poll_or_unlink_delayed_from_operator( const struct bContext *C, struct wmGizmoGroupType *gzgt, const char *idname); +bool ED_gizmo_poll_or_unlink_delayed_from_tool_ex( + const struct bContext *C, struct wmGizmoGroupType *gzgt, + const char *gzgt_idname); + /** Use this as poll function directly for: #wmGizmoGroupType.poll */ bool ED_gizmo_poll_or_unlink_delayed_from_tool( const struct bContext *C, struct wmGizmoGroupType *gzgt); diff --git a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c index 787038fca03..e3fa02e946e 100644 --- a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c +++ b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c @@ -683,10 +683,14 @@ static void gizmo_spin_prop_angle_set( static bool gizmo_mesh_spin_redo_poll(const bContext *C, wmGizmoGroupType *gzgt) { - return ED_gizmo_poll_or_unlink_delayed_from_operator(C, gzgt, "MESH_OT_spin"); + if (ED_gizmo_poll_or_unlink_delayed_from_operator(C, gzgt, "MESH_OT_spin")) { + if (ED_gizmo_poll_or_unlink_delayed_from_tool_ex(C, gzgt, "MESH_GGT_spin")) { + return true; + } + } + return false; } - static void gizmo_mesh_spin_redo_modal_from_setup( const bContext *C, wmGizmoGroup *gzgroup) { diff --git a/source/blender/editors/util/gizmo_utils.c b/source/blender/editors/util/gizmo_utils.c index 86eb2c1c003..6b150f93e38 100644 --- a/source/blender/editors/util/gizmo_utils.c +++ b/source/blender/editors/util/gizmo_utils.c @@ -57,15 +57,20 @@ bool ED_gizmo_poll_or_unlink_delayed_from_operator( return true; } -/** Can use this as poll function directly. */ -bool ED_gizmo_poll_or_unlink_delayed_from_tool(const bContext *C, wmGizmoGroupType *gzgt) +bool ED_gizmo_poll_or_unlink_delayed_from_tool_ex(const bContext *C, wmGizmoGroupType *gzgt, const char *gzgt_idname) { bToolRef_Runtime *tref_rt = WM_toolsystem_runtime_from_context((bContext *)C); if ((tref_rt == NULL) || - !STREQ(gzgt->idname, tref_rt->gizmo_group)) + !STREQ(gzgt_idname, tref_rt->gizmo_group)) { WM_gizmo_group_type_unlink_delayed_ptr(gzgt); return false; } return true; } + +/** Can use this as poll function directly. */ +bool ED_gizmo_poll_or_unlink_delayed_from_tool(const bContext *C, wmGizmoGroupType *gzgt) +{ + return ED_gizmo_poll_or_unlink_delayed_from_tool_ex(C, gzgt, gzgt->idname); +} -- cgit v1.2.3