Commit: 39aea50155dc623db48f900d2b9644b607425b6c
Author: Campbell Barton
Date:   Thu May 24 14:23:32 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB39aea50155dc623db48f900d2b9644b607425b6c

Fix T55178: Cursor fails to restore on cancel

574c0fe38f332bd97c588029c0075ecba1fe19cd caused complications
restoring the cursor.

Use WM_cursor_modal_set/restore which is intended for operator use,
calling ED_region_cursor_set after an operator runs isn't reliable.

===================================================================

M       source/blender/editors/transform/transform.h
M       source/blender/editors/transform/transform_generics.c
M       source/blender/editors/transform/transform_input.c
M       source/blender/windowmanager/intern/wm_event_system.c

===================================================================

diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index 2cf66794709..a8a71c95e37 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -601,6 +601,8 @@ typedef struct TransInfo {
        /** #TransInfo.center has been set, don't change it. */
 #define T_OVERRIDE_CENTER      (1 << 25)
 
+#define T_MODAL_CURSOR_SET     (1 << 26)
+
 /* TransInfo->modifiers */
 #define        MOD_CONSTRAINT_SELECT   0x01
 #define        MOD_PRECISION                   0x02
diff --git a/source/blender/editors/transform/transform_generics.c 
b/source/blender/editors/transform/transform_generics.c
index 818ac86cf0c..64f9ee58930 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1629,6 +1629,10 @@ void postTrans(bContext *C, TransInfo *t)
        if (t->draw_handle_cursor)
                WM_paint_cursor_end(CTX_wm_manager(C), t->draw_handle_cursor);
 
+       if (t->flag & T_MODAL_CURSOR_SET) {
+               WM_cursor_modal_restore(CTX_wm_window(C));
+       }
+
        /* Free all custom-data */
        freeTransCustomDataContainer(t, NULL, &t->custom);
        FOREACH_TRANS_DATA_CONTAINER (t, tc) {
diff --git a/source/blender/editors/transform/transform_input.c 
b/source/blender/editors/transform/transform_input.c
index 2004bba4f09..270ef08be50 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -351,7 +351,8 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, 
MouseInputMode mode)
                case HLP_NONE:
                        /* INPUT_VECTOR, INPUT_CUSTOM_RATIO, 
INPUT_CUSTOM_RATIO_FLIP */
                        if (t->flag & T_MODAL) {
-                               WM_cursor_set(win, BC_NSEW_SCROLLCURSOR);
+                               t->flag |= T_MODAL_CURSOR_SET;
+                               WM_cursor_modal_set(win, BC_NSEW_SCROLLCURSOR);
                        }
                        break;
                case HLP_SPRING:
@@ -360,7 +361,8 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, 
MouseInputMode mode)
                case HLP_HARROW:
                case HLP_VARROW:
                        if (t->flag & T_MODAL) {
-                               WM_cursor_set(win, CURSOR_NONE);
+                               t->flag |= T_MODAL_CURSOR_SET;
+                               WM_cursor_modal_set(win, CURSOR_NONE);
                        }
                        break;
                default:
diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index 4f3f8ece1f0..c800370a85d 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1958,14 +1958,7 @@ static int wm_handler_operator_call(bContext *C, 
ListBase *handlers, wmEventHand
 
                                /* remove modal handler, operator itself should 
have been canceled and freed */
                                if (retval & (OPERATOR_CANCELLED | 
OPERATOR_FINISHED)) {
-                                       /* set cursor back to the default for 
the region */
-                                       wmWindow *win = CTX_wm_window(C);
-                                       WM_cursor_grab_disable(win, NULL);
-                                       /* Causes crash when joining areas: 
T55166, seems this is not even needed. */
-#if 0
-                                       ED_region_cursor_set(win, area, region);
-#endif
-
+                                       
WM_cursor_grab_disable(CTX_wm_window(C), NULL);
 
                                        BLI_remlink(handlers, handler);
                                        wm_event_free_handler(handler);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to