Module: wine Branch: master Commit: 8e9b4e0a5c6bee5f72ca2314db26233638f0e1d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8e9b4e0a5c6bee5f72ca2314db...
Author: Alexandre Julliard julliard@winehq.org Date: Fri May 13 16:19:45 2011 +0200
winex11: Allow MotionNotify events through occasionally while XInput is active.
---
dlls/winex11.drv/event.c | 10 +++++++--- dlls/winex11.drv/mouse.c | 12 +++++++----- dlls/winex11.drv/x11drv.h | 1 + 3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 6ef1e07..f2e2841 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -323,10 +323,14 @@ static enum event_merge_action merge_events( XEvent *prev, XEvent *next ) switch (next->type) { case MotionNotify: - if (next->xany.window == x11drv_thread_data()->clip_window) { - TRACE( "ignoring MotionNotify for clip window\n" ); - return MERGE_IGNORE; + struct x11drv_thread_data *thread_data = x11drv_thread_data(); + if (next->xany.window == thread_data->clip_window && + next->xmotion.time - thread_data->last_motion_notify < 1000) + { + TRACE( "ignoring MotionNotify for clip window\n" ); + return MERGE_IGNORE; + } } break; case GenericEvent: diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 6c56b15..70cdd86 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -547,11 +547,6 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU if (thread_data->clip_window != window) return; input->u.mi.dx += clip_rect.left; input->u.mi.dy += clip_rect.top; - if (!(input->u.mi.dwFlags & ~(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE))) - { - /* motion events are ignored when xinput2 is active */ - if (thread_data->xi2_state == xi_enabled) return; - } __wine_send_input( hwnd, input ); return; } @@ -1366,6 +1361,13 @@ void X11DRV_MotionNotify( HWND hwnd, XEvent *xev ) input.u.mi.time = EVENT_x11_time_to_win32_time( event->time ); input.u.mi.dwExtraInfo = 0;
+ if (!hwnd) + { + struct x11drv_thread_data *thread_data = x11drv_thread_data(); + if (event->time - thread_data->last_motion_notify < 1000) return; + thread_data->last_motion_notify = event->time; + } + send_mouse_input( hwnd, event->window, event->state, &input ); }
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index ca7a379..a14fa39 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -548,6 +548,7 @@ struct x11drv_thread_data HWND last_focus; /* last window that had focus */ XIM xim; /* input method */ HWND last_xic_hwnd; /* last xic window */ + Time last_motion_notify; /* time of last mouse motion */ XFontSet font_set; /* international text drawing font set */ Window selection_wnd; /* window used for selection interactions */ Window clip_window; /* window used for cursor clipping */