Split weston_compositor_init into base and _gl

weston_compositor_init is always called late because most
implementations can't initialise GL until fairly late in the game.
Split it into a base version with the same name, followed by
weston_compositor_init_gl which can be called later on.

This simplifies compositor-wayland, which no longer needs a separate
global handler just for wl_seat.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
diff --git a/src/compositor.c b/src/compositor.c
index b57d10b..eb795a2 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2988,7 +2988,6 @@
 		       const char *config_file)
 {
 	struct wl_event_loop *loop;
-	const char *extensions;
 	struct xkb_rule_names xkb_names;
         const struct config_key keyboard_config_keys[] = {
 		{ "keymap_rules", CONFIG_KEY_STRING, &xkb_names.rules },
@@ -3020,8 +3019,41 @@
 				   ec, compositor_bind))
 		return -1;
 
+	wl_list_init(&ec->surface_list);
+	wl_list_init(&ec->layer_list);
+	wl_list_init(&ec->seat_list);
+	wl_list_init(&ec->output_list);
+	wl_list_init(&ec->key_binding_list);
+	wl_list_init(&ec->button_binding_list);
+	wl_list_init(&ec->axis_binding_list);
+	wl_list_init(&ec->fade.animation.link);
+
+	weston_compositor_xkb_init(ec, &xkb_names);
+
+	ec->ping_handler = NULL;
+
+	screenshooter_create(ec);
+	text_cursor_position_notifier_create(ec);
+	input_method_create(ec);
+
+	wl_data_device_manager_init(ec->wl_display);
+
 	wl_display_init_shm(display);
 
+	loop = wl_display_get_event_loop(ec->wl_display);
+	ec->idle_source = wl_event_loop_add_timer(loop, idle_handler, ec);
+	wl_event_source_timer_update(ec->idle_source, ec->idle_time * 1000);
+
+	ec->input_loop = wl_event_loop_create();
+
+	return 0;
+}
+
+WL_EXPORT int
+weston_compositor_init_gl(struct weston_compositor *ec)
+{
+	const char *extensions;
+
 	log_egl_gl_info(ec->egl_display);
 
 	ec->image_target_texture_2d =
@@ -3066,28 +3098,12 @@
 	if (ec->has_bind_display)
 		ec->bind_display(ec->egl_display, ec->wl_display);
 
-	wl_list_init(&ec->surface_list);
-	wl_list_init(&ec->layer_list);
-	wl_list_init(&ec->seat_list);
-	wl_list_init(&ec->output_list);
-	wl_list_init(&ec->key_binding_list);
-	wl_list_init(&ec->button_binding_list);
-	wl_list_init(&ec->axis_binding_list);
 	weston_spring_init(&ec->fade.spring, 30.0, 1.0, 1.0);
 	ec->fade.animation.frame = fade_frame;
-	wl_list_init(&ec->fade.animation.link);
 
 	weston_layer_init(&ec->fade_layer, &ec->layer_list);
 	weston_layer_init(&ec->cursor_layer, &ec->fade_layer.link);
 
-	screenshooter_create(ec);
-	text_cursor_position_notifier_create(ec);
-	input_method_create(ec);
-
-	ec->ping_handler = NULL;
-
-	wl_data_device_manager_init(ec->wl_display);
-
 	glActiveTexture(GL_TEXTURE0);
 
 	if (weston_shader_init(&ec->texture_shader,
@@ -3097,14 +3113,6 @@
 			     vertex_shader, solid_fragment_shader) < 0)
 		return -1;
 
-	weston_compositor_xkb_init(ec, &xkb_names);
-
-	loop = wl_display_get_event_loop(ec->wl_display);
-	ec->idle_source = wl_event_loop_add_timer(loop, idle_handler, ec);
-	wl_event_source_timer_update(ec->idle_source, ec->idle_time * 1000);
-
-	ec->input_loop = wl_event_loop_create();
-
 	weston_compositor_schedule_repaint(ec);
 
 	return 0;