diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-11-02 06:48:53 +0200 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-11-02 06:48:53 +0200 |
commit | 0d5cdc2c962179bfbfb04ba1f87a4be7d6e44913 (patch) | |
tree | 1a80b3a33a04d4128d9866d6ff20a227c5f65e9f /lib/renderers/wayland/window.c | |
parent | ee3c41f162a9068505efdb5025c415b889cf414d (diff) | |
download | bemenu-0d5cdc2c962179bfbfb04ba1f87a4be7d6e44913.tar.gz bemenu-0d5cdc2c962179bfbfb04ba1f87a4be7d6e44913.tar.bz2 bemenu-0d5cdc2c962179bfbfb04ba1f87a4be7d6e44913.zip |
Key repeats.
Diffstat (limited to 'lib/renderers/wayland/window.c')
-rw-r--r-- | lib/renderers/wayland/window.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/renderers/wayland/window.c b/lib/renderers/wayland/window.c index 4282e13..057863d 100644 --- a/lib/renderers/wayland/window.c +++ b/lib/renderers/wayland/window.c @@ -246,11 +246,27 @@ static const struct xdg_surface_listener xdg_surface_listener = { .close = xdg_surface_close, }; +static void +frame_callback(void *data, struct wl_callback *callback, uint32_t time) +{ + (void)time; + struct window *window = data; + wl_callback_destroy(callback); + window->frame_cb = NULL; +} + +static const struct wl_callback_listener listener = { + frame_callback +}; + void bm_wl_window_render(struct window *window, const struct bm_menu *menu, uint32_t lines) { assert(window && menu); + if (window->frame_cb) + return; + struct buffer *buffer; if (!(buffer = next_buffer(window))) return; @@ -265,6 +281,9 @@ bm_wl_window_render(struct window *window, const struct bm_menu *menu, uint32_t if (window->notify.render) window->displayed = window->notify.render(&buffer->cairo, buffer->width, buffer->height, menu); + window->frame_cb = wl_surface_frame(window->surface); + wl_callback_add_listener(window->frame_cb, &listener, window); + wl_surface_damage(window->surface, 0, 0, buffer->width, buffer->height); wl_surface_attach(window->surface, buffer->buffer, 0, 0); wl_surface_commit(window->surface); |