Wayland: Handle repeats which missed a timer

master
Emmanuel Gil Peyrot ago%!(EXTRA string=7 years) committed by linkmauve
parent 608f055c72
commit f67b610dd4
  1. 15
      src/wl_window.c

@ -445,7 +445,8 @@ handleEvents(int timeout)
{ wl_display_get_fd(display), POLLIN }, { wl_display_get_fd(display), POLLIN },
{ _glfw.wl.timerfd, POLLIN }, { _glfw.wl.timerfd, POLLIN },
}; };
char buf[8]; ssize_t read_ret;
uint64_t repeats, i;
while (wl_display_prepare_read(display) != 0) while (wl_display_prepare_read(display) != 0)
wl_display_dispatch_pending(display); wl_display_dispatch_pending(display);
@ -479,12 +480,14 @@ handleEvents(int timeout)
if (fds[1].revents & POLLIN) if (fds[1].revents & POLLIN)
{ {
_glfwInputKey(_glfw.wl.keyboardFocus, _glfw.wl.keyboardLastKey, read_ret = read(_glfw.wl.timerfd, &repeats, sizeof(repeats));
_glfw.wl.keyboardLastScancode, GLFW_REPEAT, if (read_ret != 8)
_glfw.wl.xkb.modifiers); return;
// Required to mark the fd as clean. for (i = 0; i < repeats; ++i)
read(_glfw.wl.timerfd, &buf, 8); _glfwInputKey(_glfw.wl.keyboardFocus, _glfw.wl.keyboardLastKey,
_glfw.wl.keyboardLastScancode, GLFW_REPEAT,
_glfw.wl.xkb.modifiers);
} }
} }
else else

Loading…
Cancel
Save