summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2017-01-24 12:07:19 -0600
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2017-01-25 14:59:02 +0200
commit5fbc9daa409371d15ffb9012cc21dddc934fad4a (patch)
treee370b6ef69b50822711237dc23c5330e201f4e69
parentc44eed1c064999f1e0297088bacd56c602dee2eb (diff)
downloadwayland-5fbc9daa409371d15ffb9012cc21dddc934fad4a.tar.gz
server: Refactor array send functions
These have grown a little in size but are almost identical, factor out the common code. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-rw-r--r--src/wayland-server.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/src/wayland-server.c b/src/wayland-server.c
index ac634da..a981fda 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -168,9 +168,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;
@@ -183,7 +184,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);
@@ -192,6 +193,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];
@@ -211,23 +219,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