xwayland: sync event queue to check compositor reply
Read and dispatch pending Wayland events to make sure we do not miss a possible reply from the compositor prior to discard a key repeat. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
26ad25a0ed
commit
88e981e708
|
@ -560,6 +560,9 @@ keyboard_check_repeat (DeviceIntPtr dev, XkbSrvInfoPtr xkbi, unsigned key)
|
||||||
struct wl_callback *callback;
|
struct wl_callback *callback;
|
||||||
struct sync_pending *p;
|
struct sync_pending *p;
|
||||||
|
|
||||||
|
/* Make sure we didn't miss a possible reply from the compositor */
|
||||||
|
xwl_sync_events (xwl_screen);
|
||||||
|
|
||||||
xorg_list_for_each_entry(p, &xwl_seat->sync_pending, l) {
|
xorg_list_for_each_entry(p, &xwl_seat->sync_pending, l) {
|
||||||
if (p->pending_dev == dev) {
|
if (p->pending_dev == dev) {
|
||||||
ErrorF("Key repeat discarded, Wayland compositor doesn't "
|
ErrorF("Key repeat discarded, Wayland compositor doesn't "
|
||||||
|
|
|
@ -519,6 +519,13 @@ block_handler(void *data, OSTimePtr pTimeout, void *pRead)
|
||||||
xwl_dispatch_events (xwl_screen);
|
xwl_dispatch_events (xwl_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
xwl_sync_events (struct xwl_screen *xwl_screen)
|
||||||
|
{
|
||||||
|
xwl_dispatch_events (xwl_screen);
|
||||||
|
xwl_read_events (xwl_screen);
|
||||||
|
}
|
||||||
|
|
||||||
static CARD32
|
static CARD32
|
||||||
add_client_fd(OsTimerPtr timer, CARD32 time, void *arg)
|
add_client_fd(OsTimerPtr timer, CARD32 time, void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -155,6 +155,8 @@ struct xwl_output {
|
||||||
|
|
||||||
struct xwl_pixmap;
|
struct xwl_pixmap;
|
||||||
|
|
||||||
|
void xwl_sync_events (struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen);
|
Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
struct xwl_screen *xwl_screen_get(ScreenPtr screen);
|
struct xwl_screen *xwl_screen_get(ScreenPtr screen);
|
||||||
|
|
Loading…
Reference in New Issue