[PATCH 0/1] MR9729: winex11: Check for events again after processing delayed events.
From: Rémi Bernon <rbernon(a)codeweavers.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59102 --- dlls/winex11.drv/event.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 153ec78f889..8c3c0a4ca24 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -484,8 +484,22 @@ BOOL X11DRV_ProcessEvents( DWORD mask ) if (data->current_event) mask = 0; /* don't process nested events */ prev_event.type = 0; - while (XCheckIfEvent( data->display, &event, filter_event, (XPointer)(UINT_PTR)mask )) + for (;;) { + if (!XCheckIfEvent( data->display, &event, filter_event, (XPointer)(UINT_PTR)mask )) + { + if (!prev_event.type) break; + call_event_handler( data->display, &prev_event ); + free_event_data( &prev_event ); + + /* Retry after processing delayed event, more events might have been read from the pipe, + * this is the case for instance with synchronous requests like when reading a property. + */ + action = MERGE_DISCARD; + prev_event.type = 0; + continue; + } + count++; if (XFilterEvent( &event, None )) { @@ -539,8 +553,7 @@ BOOL X11DRV_ProcessEvents( DWORD mask ) break; } } - if (prev_event.type) call_event_handler( data->display, &prev_event ); - free_event_data( &prev_event ); + XFlush( gdi_display ); if (count) TRACE( "processed %d events\n", count ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9729
participants (1)
-
Rémi Bernon