[Bf-blender-cvs] [10a26d583d3] master: Fix knife tool using an invalid event value check
Campbell Barton
noreply at git.blender.org
Mon Sep 27 08:28:26 CEST 2021
Commit: 10a26d583d34bf9ca293ca698ee1612d335a66b8
Author: Campbell Barton
Date: Mon Sep 27 14:39:54 2021 +1000
Branches: master
https://developer.blender.org/rB10a26d583d34bf9ca293ca698ee1612d335a66b8
Fix knife tool using an invalid event value check
The events value was checked without checking the expected modal state.
===================================================================
M source/blender/editors/mesh/editmesh_knife.c
===================================================================
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index 13519fad89d..341119270c2 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -4623,52 +4623,56 @@ static int knifetool_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (kcd->num.str_cur >= 2) {
knife_reset_snap_angle_input(kcd);
}
- /* Modal numinput inactive, try to handle numeric inputs last... */
- if (!handled && event->val == KM_PRESS && handleNumInput(C, &kcd->num, event)) {
- applyNumInput(&kcd->num, &snapping_increment_temp);
- /* Restrict number key input to 0 - 90 degree range. */
- if (snapping_increment_temp > KNIFE_MIN_ANGLE_SNAPPING_INCREMENT &&
- snapping_increment_temp < KNIFE_MAX_ANGLE_SNAPPING_INCREMENT) {
- kcd->angle_snapping_increment = snapping_increment_temp;
+ if (event->type != EVT_MODAL_MAP) {
+ /* Modal number-input inactive, try to handle numeric inputs last. */
+ if (!handled && event->val == KM_PRESS && handleNumInput(C, &kcd->num, event)) {
+ applyNumInput(&kcd->num, &snapping_increment_temp);
+ /* Restrict number key input to 0 - 90 degree range. */
+ if (snapping_increment_temp > KNIFE_MIN_ANGLE_SNAPPING_INCREMENT &&
+ snapping_increment_temp < KNIFE_MAX_ANGLE_SNAPPING_INCREMENT) {
+ kcd->angle_snapping_increment = snapping_increment_temp;
+ }
+ knife_update_active(C, kcd);
+ knife_update_header(C, op, kcd);
+ ED_region_tag_redraw(kcd->region);
+ return OPERATOR_RUNNING_MODAL;
}
- knife_update_active(C, kcd);
- knife_update_header(C, op, kcd);
- ED_region_tag_redraw(kcd->region);
- return OPERATOR_RUNNING_MODAL;
}
}
/* Constrain axes with X,Y,Z keys. */
- if (ELEM(event->val, KNF_MODAL_X_AXIS, KNF_MODAL_Y_AXIS, KNF_MODAL_Z_AXIS)) {
- if (event->val == KNF_MODAL_X_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_X) {
- kcd->constrain_axis = KNF_CONSTRAIN_AXIS_X;
- kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
- kcd->axis_string[0] = 'X';
- }
- else if (event->val == KNF_MODAL_Y_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_Y) {
- kcd->constrain_axis = KNF_CONSTRAIN_AXIS_Y;
- kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
- kcd->axis_string[0] = 'Y';
- }
- else if (event->val == KNF_MODAL_Z_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_Z) {
- kcd->constrain_axis = KNF_CONSTRAIN_AXIS_Z;
- kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
- kcd->axis_string[0] = 'Z';
- }
- else {
- /* Cycle through modes with repeated key presses. */
- if (kcd->constrain_axis_mode != KNF_CONSTRAIN_AXIS_MODE_LOCAL) {
- kcd->constrain_axis_mode++;
- kcd->axis_string[0] += 32; /* Lower case. */
+ if (event->type == EVT_MODAL_MAP) {
+ if (ELEM(event->val, KNF_MODAL_X_AXIS, KNF_MODAL_Y_AXIS, KNF_MODAL_Z_AXIS)) {
+ if (event->val == KNF_MODAL_X_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_X) {
+ kcd->constrain_axis = KNF_CONSTRAIN_AXIS_X;
+ kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
+ kcd->axis_string[0] = 'X';
+ }
+ else if (event->val == KNF_MODAL_Y_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_Y) {
+ kcd->constrain_axis = KNF_CONSTRAIN_AXIS_Y;
+ kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
+ kcd->axis_string[0] = 'Y';
+ }
+ else if (event->val == KNF_MODAL_Z_AXIS && kcd->constrain_axis != KNF_CONSTRAIN_AXIS_Z) {
+ kcd->constrain_axis = KNF_CONSTRAIN_AXIS_Z;
+ kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_GLOBAL;
+ kcd->axis_string[0] = 'Z';
}
else {
- kcd->constrain_axis = KNF_CONSTRAIN_AXIS_NONE;
- kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_NONE;
+ /* Cycle through modes with repeated key presses. */
+ if (kcd->constrain_axis_mode != KNF_CONSTRAIN_AXIS_MODE_LOCAL) {
+ kcd->constrain_axis_mode++;
+ kcd->axis_string[0] += 32; /* Lower case. */
+ }
+ else {
+ kcd->constrain_axis = KNF_CONSTRAIN_AXIS_NONE;
+ kcd->constrain_axis_mode = KNF_CONSTRAIN_AXIS_MODE_NONE;
+ }
}
+ kcd->axis_constrained = (kcd->constrain_axis != KNF_CONSTRAIN_AXIS_NONE);
+ knifetool_disable_angle_snapping(kcd);
+ knife_update_header(C, op, kcd);
}
- kcd->axis_constrained = (kcd->constrain_axis != KNF_CONSTRAIN_AXIS_NONE);
- knifetool_disable_angle_snapping(kcd);
- knife_update_header(C, op, kcd);
}
if (kcd->mode == MODE_DRAGGING) {
More information about the Bf-blender-cvs
mailing list