Gizmo: hide redo gizmo when spin tool not active

Selecting a another tool left the gizmo,
which could overlap other tools gizmos.
This commit is contained in:
2018-09-24 17:12:54 +10:00
parent 6db79dafb3
commit 3d860f53e8
3 changed files with 18 additions and 5 deletions

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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);
}