summaryrefslogtreecommitdiff
path: root/lib/renderers/wayland/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/renderers/wayland/window.c')
-rw-r--r--lib/renderers/wayland/window.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/renderers/wayland/window.c b/lib/renderers/wayland/window.c
index 1890a60..2141eff 100644
--- a/lib/renderers/wayland/window.c
+++ b/lib/renderers/wayland/window.c
@@ -197,6 +197,7 @@ frame_callback(void *data, struct wl_callback *callback, uint32_t time)
struct window *window = data;
wl_callback_destroy(callback);
window->frame_cb = NULL;
+ window->render_pending = true;
}
static const struct wl_callback_listener listener = {
@@ -204,10 +205,21 @@ static const struct wl_callback_listener listener = {
};
void
+bm_wl_window_schedule_render(struct window *window)
+{
+ assert(window);
+ if (window->frame_cb)
+ return;
+
+ window->frame_cb = wl_surface_frame(window->surface);
+ wl_callback_add_listener(window->frame_cb, &listener, window);
+ wl_surface_commit(window->surface);
+}
+
+void
bm_wl_window_render(struct window *window, struct wl_display *display, const struct bm_menu *menu)
{
assert(window && menu);
-
struct buffer *buffer;
for (int tries = 0; tries < 2; ++tries) {
if (!(buffer = next_buffer(window))) {
@@ -232,13 +244,11 @@ bm_wl_window_render(struct window *window, struct wl_display *display, const str
destroy_buffer(buffer);
}
- 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);
buffer->busy = true;
+ window->render_pending = false;
}
void