diff --git a/protocol/weston-test.xml b/protocol/weston-test.xml
index 17c7565f..538d6680 100644
--- a/protocol/weston-test.xml
+++ b/protocol/weston-test.xml
@@ -56,6 +56,12 @@
+
+
+
+
+
+
diff --git a/tests/weston-test.c b/tests/weston-test.c
index 649bddaa..eb431f3a 100644
--- a/tests/weston-test.c
+++ b/tests/weston-test.c
@@ -26,6 +26,7 @@
#include
#include
#include
+#include
#include "../src/compositor.h"
#include "weston-test-server-protocol.h"
@@ -195,6 +196,44 @@ send_key(struct wl_client *client, struct wl_resource *resource,
notify_key(seat, 100, key, state, STATE_UPDATE_AUTOMATIC);
}
+static void
+device_release(struct wl_client *client,
+ struct wl_resource *resource, const char *device)
+{
+ struct weston_test *test = wl_resource_get_user_data(resource);
+ struct weston_seat *seat = get_seat(test);
+
+ if (strcmp(device, "pointer") == 0) {
+ weston_seat_release_pointer(seat);
+ } else if (strcmp(device, "keyboard") == 0) {
+ weston_seat_release_keyboard(seat);
+ } else if (strcmp(device, "touch") == 0) {
+ weston_seat_release_touch(seat);
+ } else if (strcmp(device, "seat") == 0) {
+ weston_seat_release(seat);
+ } else {
+ assert(0 && "Unsupported device");
+ }
+}
+
+static void
+device_add(struct wl_client *client,
+ struct wl_resource *resource, const char *device)
+{
+ struct weston_test *test = wl_resource_get_user_data(resource);
+ struct weston_seat *seat = get_seat(test);
+
+ if (strcmp(device, "pointer") == 0) {
+ weston_seat_init_pointer(seat);
+ } else if (strcmp(device, "keyboard") == 0) {
+ weston_seat_init_keyboard(seat, NULL);
+ } else if (strcmp(device, "touch") == 0) {
+ weston_seat_init_touch(seat);
+ } else {
+ assert(0 && "Unsupported device");
+ }
+}
+
#ifdef ENABLE_EGL
static int
is_egl_buffer(struct wl_resource *resource)
@@ -242,6 +281,8 @@ static const struct weston_test_interface test_implementation = {
send_button,
activate_surface,
send_key,
+ device_release,
+ device_add,
get_n_buffers,
};