[PATCH weston 1/6] compositor-headless: create input devices

Emilio Pozuelo Monfort pochu27 at gmail.com
Thu Feb 6 03:30:31 PST 2014


From: Emilio Pozuelo Monfort <emilio.pozuelo at collabora.co.uk>

Fixes a segfault when using compositor-headless for the test suite
as many tests assume there are input devices and try to use them
through the wl_test interface.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo at collabora.co.uk>
---
 src/compositor-headless.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/compositor-headless.c b/src/compositor-headless.c
index 5a5c1e6..4ecb8d4 100644
--- a/src/compositor-headless.c
+++ b/src/compositor-headless.c
@@ -131,6 +131,25 @@ headless_compositor_create_output(struct headless_compositor *c,
 	return 0;
 }
 
+static int
+headless_input_create(struct headless_compositor *c)
+{
+	weston_seat_init(&c->fake_seat, &c->base, "default");
+
+	weston_seat_init_pointer(&c->fake_seat);
+
+	if (weston_seat_init_keyboard(&c->fake_seat, NULL) < 0)
+		return -1;
+
+	return 0;
+}
+
+static void
+headless_input_destroy(struct headless_compositor *c)
+{
+	weston_seat_release(&c->fake_seat);
+}
+
 static void
 headless_restore(struct weston_compositor *ec)
 {
@@ -141,7 +160,7 @@ headless_destroy(struct weston_compositor *ec)
 {
 	struct headless_compositor *c = (struct headless_compositor *) ec;
 
-	weston_seat_release(&c->fake_seat);
+	headless_input_destroy(c);
 	weston_compositor_shutdown(ec);
 
 	free(ec);
@@ -162,19 +181,22 @@ headless_compositor_create(struct wl_display *display,
 	if (weston_compositor_init(&c->base, display, argc, argv, config) < 0)
 		goto err_free;
 
-	weston_seat_init(&c->fake_seat, &c->base, "default");
+	if (headless_input_create(c) < 0)
+		goto err_compositor;
 
 	c->base.destroy = headless_destroy;
 	c->base.restore = headless_restore;
 
 	if (headless_compositor_create_output(c, width, height) < 0)
-		goto err_compositor;
+		goto err_input;
 
 	if (noop_renderer_init(&c->base) < 0)
-		goto err_compositor;
+		goto err_input;
 
 	return &c->base;
 
+err_input:
+	headless_input_destroy(c);
 err_compositor:
 	weston_compositor_shutdown(&c->base);
 err_free:
-- 
1.8.5.3



More information about the wayland-devel mailing list