Index: source/blender/windowmanager/intern/wm_operators.c =================================================================== --- source/blender/windowmanager/intern/wm_operators.c (révision 55113) +++ source/blender/windowmanager/intern/wm_operators.c (copie de travail) @@ -2774,6 +2774,7 @@ wmGesture *gesture = op->customdata; rcti *rect = gesture->customdata; int sx, sy; + int exit_code = OPERATOR_RUNNING_MODAL; if (event->type == MOUSEMOVE) { wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy); @@ -2781,6 +2782,7 @@ rect->xmin = event->x - sx; rect->ymin = event->y - sy; + gesture->type = WM_GESTURE_CIRCLE;// Show the circle wm_gesture_tag_redraw(C); if (gesture->mode) @@ -2788,7 +2790,7 @@ } else if (event->type == EVT_MODAL_MAP) { float fac; - + switch (event->val) { case GESTURE_MODAL_CIRCLE_SIZE: fac = 0.3f * (event->y - event->prevy); @@ -2821,19 +2823,21 @@ wm_gesture_tag_redraw(C); } break; - case GESTURE_MODAL_CANCEL: case GESTURE_MODAL_CONFIRM: wm_gesture_end(C, op); - return OPERATOR_FINISHED; /* use finish or we don't get an undo */ + exit_code = OPERATOR_FINISHED; /* use finish or we don't get an undo */ } } -// /* Allow view navigation??? */ -// else { -// return OPERATOR_PASS_THROUGH; -// } + else if (event->type == 0){//If you press tab to change toogle the mode, it close the operator + gesture->type = WM_GESTURE_CIRCLE;// Show the circle + } + else { + gesture->type = 0; // Don't show the circle when you do something else + exit_code = OPERATOR_PASS_THROUGH; + } - return OPERATOR_RUNNING_MODAL; + return exit_code; } int WM_gesture_circle_cancel(bContext *C, wmOperator *op) @@ -4098,7 +4102,7 @@ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_SELECT); -#if 0 /* Durien guys like this :S */ +#if 1 /* Durien guys like this :S */ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_SHIFT, 0, GESTURE_MODAL_DESELECT); WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_SHIFT, 0, GESTURE_MODAL_NOP); #else