void
wl_closure_print(struct wl_closure *closure, struct wl_object *target,
- int send, int discarded)
+ int send, int discarded, uint32_t (*n_parse)(union wl_argument *arg))
{
int i;
struct argument_details arg;
const char *signature = closure->message->signature;
struct timespec tp;
unsigned int time;
+ uint32_t nval;
clock_gettime(CLOCK_REALTIME, &tp);
time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000);
fprintf(stderr, "nil");
break;
case 'n':
+ if (n_parse)
+ nval = n_parse(&closure->args[i]);
+ else
+ nval = closure->args[i].n;
+
fprintf(stderr, "new id %s@",
(closure->message->types[i]) ?
closure->message->types[i]->name :
"[unknown]");
- if (closure->args[i].n != 0)
- fprintf(stderr, "%u", closure->args[i].n);
+ if (nval != 0)
+ fprintf(stderr, "%u", nval);
else
fprintf(stderr, "nil");
break;
}
if (debug_client)
- wl_closure_print(closure, &proxy->object, true, false);
+ wl_closure_print(closure, &proxy->object, true, false, NULL);
if (wl_closure_send(closure, proxy->display->connection)) {
wl_log("Error sending request: %s\n", strerror(errno));
return size;
}
+static uint32_t
+id_from_object(union wl_argument *arg)
+{
+ struct wl_proxy *proxy;
+
+ if (arg->o) {
+ proxy = (struct wl_proxy *)arg->o;
+ return proxy->object.id;
+ }
+
+ return 0;
+}
+
static void
dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
{
proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
if (proxy_destroyed) {
if (debug_client)
- wl_closure_print(closure, &proxy->object, false, true);
+ wl_closure_print(closure, &proxy->object, false, true, id_from_object);
destroy_queued_closure(closure);
return;
}
if (proxy->dispatcher) {
if (debug_client)
- wl_closure_print(closure, &proxy->object, false, false);
+ wl_closure_print(closure, &proxy->object, false, false, id_from_object);
wl_closure_dispatch(closure, proxy->dispatcher,
&proxy->object, opcode);
} else if (proxy->object.implementation) {
if (debug_client)
- wl_closure_print(closure, &proxy->object, false, false);
+ wl_closure_print(closure, &proxy->object, false, false, id_from_object);
wl_closure_invoke(closure, WL_CLOSURE_INVOKE_CLIENT,
&proxy->object, opcode, proxy->user_data);
void
wl_closure_print(struct wl_closure *closure,
- struct wl_object *target, int send, int discarded);
+ struct wl_object *target, int send, int discarded,
+ uint32_t (*n_parse)(union wl_argument *arg));
void
wl_closure_destroy(struct wl_closure *closure);
struct wl_protocol_logger_message message;
if (debug_server)
- wl_closure_print(closure, object, send, false);
+ wl_closure_print(closure, object, send, false, NULL);
if (!wl_list_empty(&display->protocol_loggers)) {
message.resource = resource;