These have grown a little in size but are almost identical, factor out the common code.
Signed-off-by: Derek Foreman <[email protected]> --- src/wayland-server.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/wayland-server.c b/src/wayland-server.c index 4360874..3f252aa 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -163,9 +163,10 @@ log_closure(struct wl_resource *resource, } } -WL_EXPORT void -wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, - union wl_argument *args) +static void +handle_array(struct wl_resource *resource, uint32_t opcode, + union wl_argument *args, + int (*send_func)(struct wl_closure *, struct wl_connection *)) { struct wl_closure *closure; struct wl_object *object = &resource->object; @@ -178,7 +179,7 @@ wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, return; } - if (wl_closure_send(closure, resource->client->connection)) + if (send_func(closure, resource->client->connection)) resource->client->error = 1; log_closure(resource, closure, true); @@ -187,6 +188,13 @@ wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, } WL_EXPORT void +wl_resource_post_event_array(struct wl_resource *resource, uint32_t opcode, + union wl_argument *args) +{ + handle_array(resource, opcode, args, wl_closure_send); +} + +WL_EXPORT void wl_resource_post_event(struct wl_resource *resource, uint32_t opcode, ...) { union wl_argument args[WL_CLOSURE_MAX_ARGS]; @@ -206,23 +214,7 @@ WL_EXPORT void wl_resource_queue_event_array(struct wl_resource *resource, uint32_t opcode, union wl_argument *args) { - struct wl_closure *closure; - struct wl_object *object = &resource->object; - - closure = wl_closure_marshal(object, opcode, args, - &object->interface->events[opcode]); - - if (closure == NULL) { - resource->client->error = 1; - return; - } - - if (wl_closure_queue(closure, resource->client->connection)) - resource->client->error = 1; - - log_closure(resource, closure, true); - - wl_closure_destroy(closure); + handle_array(resource, opcode, args, wl_closure_queue); } WL_EXPORT void -- 2.11.0 _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
