[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