diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2015-04-07 00:10:21 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2015-04-07 00:10:21 +0300 |
commit | bcc9a235487e9607204475ce66140d4cef3d59bf (patch) | |
tree | 5527ac1182d14c079ffed72cde5d4c4e0785efc0 /source/blender/windowmanager/intern | |
parent | 33a92473347a9b9ee4e95c20e579ec97fd67ef63 (diff) |
Various Sticky fixes (tm)
* Revert 776bfa64a53191b and c3dad7953afccd4 (some X11 systems are doing
stupid things forcing me to do an extra check that completely breaks the
click type handling on other systems using the slightly changed
implementation from those commits - see T44278)
* Fix sample lines in Compositor+VSE
(And yes, this time I tested on both of my systems to make sure
everything is fine)
Diffstat (limited to 'source/blender/windowmanager/intern')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 12 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 15 |
2 files changed, 12 insertions, 15 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 225e3138859..8c013eb7cd4 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2994,7 +2994,7 @@ static wmWindow *wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *wi * - #KM_PRESS && time since first #KM_PRESS > U.click_timeout --> send #KM_HOLD * - #KM_PRESS after a #KM_RELEASE && time since previous #KM_PRESS < U.dbl_click_time --> send #KM_DBL_CLICK * - * \note: only #KM_DBL_CLICK and #KM_CLICK are handled here, #KM_HOLD in #wm_window_event_clicktype_init (wm_window.c) + * \note: only #KM_DBL_CLICK is handled here, rest in #wm_window_event_clicktype_init (wm_window.c) */ static void wm_event_clicktype_init(wmWindow *win, wmEvent *event, wmEvent *event_state) { @@ -3025,16 +3025,6 @@ static void wm_event_clicktype_init(wmWindow *win, wmEvent *event, wmEvent *even } } - /* click */ - if ((PIL_check_seconds_timer() - event->click_time) * 1000 <= U.click_timeout) { - if (event->val == KM_RELEASE) { - click_type = KM_CLICK; - if (G.debug & (G_DEBUG_HANDLERS | G_DEBUG_EVENTS)) { - printf("%s Send click event\n", __func__); - } - } - } - if (click_type != event->click_type) { event_state->click_type = event->click_type = click_type; } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 4b98f8bf71d..61bddb144ae 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -1107,9 +1107,9 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr } /** - * #KM_DBL_CLICK and #KM_CLICK are set in wm_event_clicktype_init (wm_event_system.c) - * Normally, #KM_HOLD should be there too, but we need a time precision of a few - * milliseconds for it, which we can't get from there + * #KM_DBL_CLICK is set in wm_event_clicktype_init (wm_event_system.c) + * Normally, this should be there too, but for #KM_CLICK/#KM_HOLD, we need a + * time precision of a few milliseconds, which we can't get from there */ static void wm_window_event_clicktype_init(const bContext *C) { @@ -1150,7 +1150,14 @@ static void wm_window_event_clicktype_init(const bContext *C) /* the actual test */ if ((PIL_check_seconds_timer() - event->click_time) * 1000 <= U.click_timeout) { - /* sending of KM_CLICK is handled in wm_event_clicktype_init (wm_event_system.c) */ + /* for any reason some X11 systems send two release events triggering two KM_CLICK + * events - making the rules more strict by checking for prevval resolves this */ + if (event->val == KM_RELEASE && event->prevval != KM_RELEASE) { + click_type = KM_CLICK; + if (G.debug & (G_DEBUG_HANDLERS | G_DEBUG_EVENTS)) { + printf("%s Send click event\n", __func__); + } + } } else if (event->is_key_pressed) { click_type = KM_HOLD; |