Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-09-27 07:39:54 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-09-27 09:28:01 +0300
commit10a26d583d34bf9ca293ca698ee1612d335a66b8 (patch)
tree322c06c1178b550b338cc50a1aaea6850081d2bd /source/blender/editors/mesh/editmesh_knife.c
parent037e66999af2e0f8cd0f5bfbd0e3bc91e2581ccb (diff)
Fix knife tool using an invalid event value check
The events value was checked without checking the expected modal state.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_knife.c')
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c78
1 files changed, 41 insertions, 37 deletions
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) {