diff --git a/src/libeis-handshake.c b/src/libeis-handshake.c index b4bd0a1..90a4de5 100644 --- a/src/libeis-handshake.c +++ b/src/libeis-handshake.c @@ -118,10 +118,25 @@ client_msg_finish(struct eis_handshake *setup) return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_PROTOCOL, "Missing versions for required interfaces"); - /* ei_callback needs a client-created object, so tell the client - * about our version */ - eis_handshake_event_interface_version(setup, EIS_CALLBACK_INTERFACE_NAME, - setup->client_versions.ei_callback); + /* ei_callback needs a client-created object, so we must tell the client + * about our version. But for convenience and to make sure this all works + * send all our versions down the wire */ +#define SEND_INTERFACE_VERSION(upper_name_, lower_name_) \ + eis_handshake_event_interface_version(setup, upper_name_ ##_INTERFACE_NAME, \ + setup->client_versions.lower_name_); + + SEND_INTERFACE_VERSION(EIS_CALLBACK, ei_callback); + SEND_INTERFACE_VERSION(EIS_CONNECTION, ei_connection); + SEND_INTERFACE_VERSION(EIS_PINGPONG, ei_pingpong); + SEND_INTERFACE_VERSION(EIS_SEAT, ei_seat); + SEND_INTERFACE_VERSION(EIS_DEVICE, ei_device); + SEND_INTERFACE_VERSION(EIS_POINTER, ei_pointer); + SEND_INTERFACE_VERSION(EIS_POINTER_ABSOLUTE, ei_pointer_absolute); + SEND_INTERFACE_VERSION(EIS_BUTTON, ei_button); + SEND_INTERFACE_VERSION(EIS_KEYBOARD, ei_keyboard); + SEND_INTERFACE_VERSION(EIS_TOUCHSCREEN, ei_touchscreen); + +#undef SEND_INTERFACE_VERSION eis_client_setup_done(client, setup->name, setup->is_sender, &setup->client_versions);