diff --git a/compositor/main.c b/compositor/main.c index 80c0ade99..14d3d5839 100644 --- a/compositor/main.c +++ b/compositor/main.c @@ -149,6 +149,7 @@ struct wet_compositor { pid_t autolaunch_pid; bool autolaunch_watch; bool use_color_manager; + bool drm_backend_loaded; struct wl_listener screenshot_auth; enum require_outputs require_outputs; }; @@ -158,6 +159,12 @@ static struct weston_log_scope *log_scope; static struct weston_log_scope *protocol_scope; static int cached_tm_mday = -1; +static void +load_remoting(struct weston_compositor *c, struct weston_config *wc); + +static void +load_pipewire(struct weston_compositor *c, struct weston_config *wc); + static void custom_handler(const char *fmt, va_list arg) { @@ -1030,6 +1037,15 @@ load_modules(struct weston_compositor *ec, const char *modules, return 0; } +static void +load_additional_modules(struct wet_compositor wet) +{ + if (wet.drm_backend_loaded) { + load_remoting(wet.compositor, wet.config); + load_pipewire(wet.compositor, wet.config); + } +} + static int save_touch_device_calibration(struct weston_compositor *compositor, struct weston_touch_device *device, @@ -3054,11 +3070,8 @@ load_drm_backend(struct weston_compositor *c, int *argc, char **argv, if (!wb) return -1; - /* remoting */ - load_remoting(c, wc); - /* pipewire */ - load_pipewire(c, wc); + wet->drm_backend_loaded = true; free(config.gbm_format); free(config.seat_id); @@ -4256,6 +4269,8 @@ wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_data) goto out; } + load_additional_modules(wet); + weston_compositor_flush_heads_changed(wet.compositor); if (wet.init_failed) goto out;