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>2020-02-13 05:52:35 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-02-13 05:55:37 +0300
commitf874f6817d1c793da4fd423a3c8bf0e504ebfa4a (patch)
tree78669382441c8f91637bbfdbf4cf9cf31d1f6fda /source/blender/windowmanager/gizmo
parenteaea5c8904bee569384598cc96af10f7f55a9be8 (diff)
Fix T73727: Invalid event.type for Gizmo.modal callback
Diffstat (limited to 'source/blender/windowmanager/gizmo')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 14657bfa6bd..ab38b850ada 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -547,15 +547,32 @@ static int gizmo_tweak_modal(bContext *C, wmOperator *op, const wmEvent *event)
/* handle gizmo */
wmGizmoFnModal modal_fn = gz->custom_modal ? gz->custom_modal : gz->type->modal;
if (modal_fn) {
+ /* Ugly hack to ensure Python won't get 'EVT_MODAL_MAP' which isn't supported, see T73727.
+ * note that we could move away from wrapping modal gizmos in a modal operator,
+ * since it's causing the need for code like this. */
+ wmEvent *evil_event = (wmEvent *)event;
+ short event_modal_val = 0;
+
+ if (event->type == EVT_MODAL_MAP) {
+ event_modal_val = evil_event->val;
+ evil_event->type = evil_event->prevtype;
+ evil_event->val = evil_event->prevval;
+ }
+
int modal_retval = modal_fn(C, gz, event, mtweak->flag);
+ if (event_modal_val != 0) {
+ evil_event->type = EVT_MODAL_MAP;
+ evil_event->val = event_modal_val;
+ }
+
if ((modal_retval & OPERATOR_RUNNING_MODAL) == 0) {
gizmo_tweak_finish(C, op, (modal_retval & OPERATOR_CANCELLED) != 0, true);
return OPERATOR_FINISHED;
}
/* Ugly hack to send gizmo events */
- ((wmEvent *)event)->type = EVT_GIZMO_UPDATE;
+ evil_event->type = EVT_GIZMO_UPDATE;
}
/* always return PASS_THROUGH so modal handlers