diff --git a/source/blender/editors/transform/transform.cc b/source/blender/editors/transform/transform.cc index 5dc244f96b6..575961b0156 100644 --- a/source/blender/editors/transform/transform.cc +++ b/source/blender/editors/transform/transform.cc @@ -1028,6 +1028,23 @@ static bool transform_event_modal_constraint(TransInfo *t, short modal_type) return true; } +static void tool_settings_update_snap_toggle(TransInfo *t) +{ + bool is_snap_enabled = (t->modifiers & MOD_SNAP) != 0; + + /* Type is #eSnapFlag, but type must match various snap attributes in #ToolSettings. */ + short *snap_flag_ptr; + + wmMsgParams_RNA msg_key_params = {{}}; + msg_key_params.ptr = RNA_pointer_create_discrete(&t->scene->id, &RNA_ToolSettings, t->settings); + if ((snap_flag_ptr = transform_snap_flag_from_spacetype_ptr(t, &msg_key_params.prop)) && + (is_snap_enabled != bool(*snap_flag_ptr & SCE_SNAP))) + { + SET_FLAG_FROM_TEST(*snap_flag_ptr, is_snap_enabled, SCE_SNAP); + WM_msg_publish_rna_params(t->mbus, &msg_key_params); + } +} + wmOperatorStatus transformEvent(TransInfo *t, wmOperator *op, const wmEvent *event) { bool is_navigating = t->vod ? ((RegionView3D *)t->region->regiondata)->rflag & RV3D_NAVIGATING : @@ -1174,6 +1191,7 @@ wmOperatorStatus transformEvent(TransInfo *t, wmOperator *op, const wmEvent *eve case TFM_MODAL_SNAP_TOGGLE: t->modifiers ^= MOD_SNAP; transform_snap_flag_from_modifiers_set(t); + tool_settings_update_snap_toggle(t); t->redraw |= TREDRAW_HARD; break; case TFM_MODAL_AXIS_X: @@ -1775,7 +1793,6 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) /* Save snapping settings. */ if ((prop = RNA_struct_find_property(op->ptr, "snap"))) { - bool is_snap_enabled = (t->modifiers & MOD_SNAP) != 0; /* Update the snap toggle in `ToolSettings`. */ if ( @@ -1788,19 +1805,10 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) /* Skip updating the snap toggle if snapping was enabled via operator properties. */ !RNA_property_is_set(op->ptr, prop)) { - /* Type is #eSnapFlag, but type must match various snap attributes in #ToolSettings. */ - short *snap_flag_ptr; - - wmMsgParams_RNA msg_key_params = {{}}; - msg_key_params.ptr = RNA_pointer_create_discrete(&t->scene->id, &RNA_ToolSettings, ts); - if ((snap_flag_ptr = transform_snap_flag_from_spacetype_ptr(t, &msg_key_params.prop)) && - (is_snap_enabled != bool(*snap_flag_ptr & SCE_SNAP))) - { - SET_FLAG_FROM_TEST(*snap_flag_ptr, is_snap_enabled, SCE_SNAP); - WM_msg_publish_rna_params(t->mbus, &msg_key_params); - } + tool_settings_update_snap_toggle(t); } + bool is_snap_enabled = (t->modifiers & MOD_SNAP) != 0; RNA_property_boolean_set(op->ptr, prop, is_snap_enabled); if ((prop = RNA_struct_find_property(op->ptr, "snap_elements"))) {