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:
authorJulian Eisel <eiseljulian@gmail.com>2015-04-07 00:10:21 +0300
committerJulian Eisel <eiseljulian@gmail.com>2015-04-07 00:10:21 +0300
commitbcc9a235487e9607204475ce66140d4cef3d59bf (patch)
tree5527ac1182d14c079ffed72cde5d4c4e0785efc0 /source/blender/windowmanager/intern
parent33a92473347a9b9ee4e95c20e579ec97fd67ef63 (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.c12
-rw-r--r--source/blender/windowmanager/intern/wm_window.c15
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;