From: Rémi Bernon rbernon@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55027 --- dlls/winex11.drv/event.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index b5fbfcfc7fe..f364cdbe715 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -309,6 +309,8 @@ static inline BOOL call_event_handler( Display *display, XEvent *event ) return FALSE; /* no handler, ignore it */ }
+ get_event_data( event ); + #ifdef GenericEvent if (event->type == GenericEvent) hwnd = 0; else #endif @@ -323,6 +325,8 @@ static inline BOOL call_event_handler( Display *display, XEvent *event ) thread_data->current_event = event; ret = handlers[event->type]( hwnd, event ); thread_data->current_event = prev; + + free_event_data( event ); return ret; }
@@ -371,7 +375,6 @@ static BOOL process_events( Display *display, Bool (*filter)(Display*, XEvent*,X else continue; /* filtered, ignore it */ } - get_event_data( &event ); if (prev_event.type) action = merge_events( &prev_event, &event ); switch( action ) { @@ -379,19 +382,16 @@ static BOOL process_events( Display *display, Bool (*filter)(Display*, XEvent*,X queued |= call_event_handler( display, &prev_event ); /* fall through */ case MERGE_DISCARD: /* discard prev, keep new */ - free_event_data( &prev_event ); prev_event = event; break; case MERGE_KEEP: /* handle new, keep prev for future merging */ queued |= call_event_handler( display, &event ); /* fall through */ case MERGE_IGNORE: /* ignore new, keep prev for future merging */ - free_event_data( &event ); break; } } if (prev_event.type) queued |= call_event_handler( display, &prev_event ); - free_event_data( &prev_event ); XFlush( gdi_display ); if (count) TRACE( "processed %d events, returning %d\n", count, queued ); return queued;