diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-05-26 12:57:52 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-05-26 13:07:58 +0300 |
commit | 718bc078a8dfb10b24fc2b78f5052e4aa56fc6e3 (patch) | |
tree | 87fc874804970e860a96db418408cc3125454bca /source/blender/windowmanager/intern/wm_event_system.c | |
parent | de68066c1ccfbdd3d9f185164e728677c91874ec (diff) |
Fix T44740: Tweak events stuck (ignored release)
Tweak event was being added to the end of the event queue (out of order),
meaning any mouse releases already in the queue wouldn't be used to exit the gesture.
Gestures could get stuck (mostly when the system wasn't able to handle events fast enough).
Now tweak events are now added in order.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 516e9907b7e..06449f5d45e 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -97,7 +97,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA /* ************ event management ************** */ -void wm_event_add(wmWindow *win, const wmEvent *event_to_add) +void wm_event_add_ex(wmWindow *win, const wmEvent *event_to_add, const wmEvent *event_to_add_after) { wmEvent *event = MEM_mallocN(sizeof(wmEvent), "wmEvent"); @@ -105,7 +105,18 @@ void wm_event_add(wmWindow *win, const wmEvent *event_to_add) update_tablet_data(win, event); - BLI_addtail(&win->queue, event); + if (event_to_add_after == NULL) { + BLI_addtail(&win->queue, event); + } + else { + /* note, strictly speaking this breaks const-correctness, however we're only changing 'next' member */ + BLI_insertlinkafter(&win->queue, (void *)event_to_add_after, event); + } +} + +void wm_event_add(wmWindow *win, const wmEvent *event_to_add) +{ + wm_event_add_ex(win, event_to_add, NULL); } void wm_event_free(wmEvent *event) |