pid_t pid;
wayland_tbm_server_client_queue_dequeue_cb dequeue_cb;
- void *dequeue_cb_data;;
+ void *dequeue_cb_data;
+
+ wayland_tbm_server_client_queue_wait_usable_cb wait_usable_cb;
+ void *wait_usable_cb_data;
struct wl_list link;
};
cqueue->dequeue_cb(cqueue, tbm_buffer->surface, cqueue->dequeue_cb_data);
}
+static void
+_wayland_tbm_server_queue_impl_wait_usable(struct wl_client *client,
+ struct wl_resource *wl_tbm_queue)
+{
+ struct wayland_tbm_client_queue *cqueue = NULL;
+
+#ifdef DEBUG_TRACE
+ pid_t pid;
+
+ wl_client_get_credentials(client, &pid, NULL, NULL);
+ WL_TBM_TRACE("wait usable. pid:%d", pid);
+#endif
+
+ cqueue = wl_resource_get_user_data(wl_tbm_queue);
+ WL_TBM_RETURN_IF_FAIL(cqueue);
+
+ if (cqueue->wait_usable_cb)
+ cqueue->wait_usable_cb(cqueue, cqueue->wait_usable_cb_data);
+}
+
static const struct wl_tbm_queue_interface _wayland_tbm_queue_impementation = {
_wayland_tbm_server_queue_impl_destroy,
_wayland_tbm_server_queue_impl_detach_buffer,
_wayland_tbm_server_queue_impl_dequeue_buffer,
+ _wayland_tbm_server_queue_impl_wait_usable,
};
static void
}
int
+wayland_tbm_server_client_queue_set_wait_usable_cb(struct wayland_tbm_client_queue *cqueue,
+ wayland_tbm_server_client_queue_wait_usable_cb wait_usable_cb, void *user_data)
+{
+ WL_TBM_RETURN_VAL_IF_FAIL(cqueue != NULL, 0);
+ WL_TBM_RETURN_VAL_IF_FAIL(cqueue->wl_tbm_queue != NULL, 0);
+
+#ifdef DEBUG_TRACE
+ WL_TBM_TRACE(" pid:%d", cqueue->pid);
+#endif
+ cqueue->wait_usable_cb = wait_usable_cb;
+ cqueue->wait_usable_cb_data = user_data;
+
+ return 1;
+}
+
+int
wayland_tbm_server_client_queue_send_buffer_usable(struct wayland_tbm_client_queue *cqueue,
struct wl_resource *wl_buffer)
{
typedef void (*wayland_tbm_server_client_queue_dequeue_cb) (struct wayland_tbm_client_queue *cqueue,
tbm_surface_h surface, void *data);
+typedef void (*wayland_tbm_server_client_queue_wait_usable_cb) (struct wayland_tbm_client_queue *cqueue,
+ void *data);
+
struct wayland_tbm_server *
wayland_tbm_server_init(struct wl_display *display,
const char *device_name,
wayland_tbm_server_client_queue_send_buffer_usable(struct wayland_tbm_client_queue *cqueue,
struct wl_resource *wl_buffer);
+int
+wayland_tbm_server_client_queue_set_wait_usable_cb(struct wayland_tbm_client_queue *cqueue,
+ wayland_tbm_server_client_queue_wait_usable_cb wait_usable_cb, void *user_data);
+
#ifdef __cplusplus
}
#endif