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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 09:06:49 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-01-24 09:41:36 +0300
commit0b37399cbe241cb6c99cd4b758d5701e2791c7e3 (patch)
tree0dd2fb26d69d56de9742d9fddf3ca1b6e8560996 /source
parentcd8a342d7cce97b764123668b2c4edbcd09bdffc (diff)
Fix T60790, T60636, T60631: MMB emulation issues after recent changes.
The statusbar keymap display should not affect actual event handling.
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index ad8c7bb60a3..29bbd6b0641 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3721,7 +3721,7 @@ static int convert_key(GHOST_TKey key)
}
}
-static void wm_eventemulation(wmEvent *event)
+static void wm_eventemulation(wmEvent *event, bool test_only)
{
/* Store last mmb/rmb event value to make emulation work when modifier keys
* are released first. This really should be in a data structure somewhere. */
@@ -3734,13 +3734,19 @@ static void wm_eventemulation(wmEvent *event)
if (event->val == KM_PRESS && event->alt) {
event->type = MIDDLEMOUSE;
event->alt = 0;
- emulating_event = MIDDLEMOUSE;
+
+ if (!test_only) {
+ emulating_event = MIDDLEMOUSE;
+ }
}
#ifdef __APPLE__
else if (event->val == KM_PRESS && event->oskey) {
event->type = RIGHTMOUSE;
event->oskey = 0;
- emulating_event = RIGHTMOUSE;
+
+ if (!test_only) {
+ emulating_event = RIGHTMOUSE;
+ }
}
#endif
else if (event->val == KM_RELEASE) {
@@ -3753,7 +3759,10 @@ static void wm_eventemulation(wmEvent *event)
event->type = RIGHTMOUSE;
event->oskey = 0;
}
- emulating_event = EVENT_NONE;
+
+ if (!test_only) {
+ emulating_event = EVENT_NONE;
+ }
}
}
@@ -4036,7 +4045,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
else
event.type = MIDDLEMOUSE;
- wm_eventemulation(&event);
+ wm_eventemulation(&event, false);
/* copy previous state to prev event state (two old!) */
evt->prevval = evt->val;
@@ -4096,7 +4105,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
memcpy(event.utf8_buf, kd->utf8_buf, sizeof(event.utf8_buf)); /* might be not null terminated*/
event.val = (type == GHOST_kEventKeyDown) ? KM_PRESS : KM_RELEASE;
- wm_eventemulation(&event);
+ wm_eventemulation(&event, false);
/* copy previous state to prev event state (two old!) */
evt->prevval = evt->val;
@@ -4674,7 +4683,7 @@ void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
wmEvent test_event = *win->eventstate;
test_event.type = event_data[data_index].event_type;
test_event.val = event_data[data_index].event_value;
- wm_eventemulation(&test_event);
+ wm_eventemulation(&test_event, true);
wmKeyMapItem *kmi = NULL;
for (int handler_index = 0; handler_index < ARRAY_SIZE(handlers); handler_index++) {
kmi = wm_kmi_from_event(C, wm, handlers[handler_index], &test_event);