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;