diff --git a/libweston/color-lcms/color-lcms.c b/libweston/color-lcms/color-lcms.c index 23965c905..ffff2d745 100644 --- a/libweston/color-lcms/color-lcms.c +++ b/libweston/color-lcms/color-lcms.c @@ -32,7 +32,7 @@ #include "color.h" #include "color-lcms.h" -#include "color-management.h" +#include "color-properties.h" #include "shared/helpers.h" #include "shared/xalloc.h" #include "shared/weston-assert.h" @@ -470,6 +470,7 @@ weston_color_manager_create(struct weston_compositor *compositor) cm->base.name = "work-in-progress"; cm->base.compositor = compositor; + cm->base.supports_client_protocol = true; cm->base.init = cmlcms_init; cm->base.destroy = cmlcms_destroy; cm->base.destroy_color_profile = cmlcms_destroy_color_profile; @@ -480,10 +481,6 @@ weston_color_manager_create(struct weston_compositor *compositor) cm->base.get_surface_color_transform = cmlcms_get_surface_color_transform; cm->base.create_output_color_outcome = cmlcms_create_output_color_outcome; - /* We support the CM&HDR protocol extension when using LittleCMS. */ - if (weston_compositor_enable_color_management_protocol(compositor) < 0) - goto err; - /* We still do not support creating parametric color profiles. */ cm->base.supported_color_features = (1 << WESTON_COLOR_FEATURE_ICC); diff --git a/libweston/color-management.c b/libweston/color-management.c index c757c0d14..986fd5623 100644 --- a/libweston/color-management.c +++ b/libweston/color-management.c @@ -1105,7 +1105,7 @@ bind_color_management(struct wl_client *client, void *data, uint32_t version, * \param compositor The compositor to init for. * \return Zero on success, -1 on failure. */ -WL_EXPORT int +int weston_compositor_enable_color_management_protocol(struct weston_compositor *compositor) { uint32_t version = 1; diff --git a/libweston/color-noop.c b/libweston/color-noop.c index 0ace976bf..22ca289cb 100644 --- a/libweston/color-noop.c +++ b/libweston/color-noop.c @@ -250,6 +250,7 @@ weston_color_manager_noop_create(struct weston_compositor *compositor) cm->base.name = "no-op"; cm->base.compositor = compositor; + cm->base.supports_client_protocol = false; cm->base.init = cmnoop_init; cm->base.destroy = cmnoop_destroy; cm->base.destroy_color_profile = cmnoop_destroy_color_profile; diff --git a/libweston/color.h b/libweston/color.h index cd08b9ef4..1ac2a4e00 100644 --- a/libweston/color.h +++ b/libweston/color.h @@ -252,6 +252,9 @@ struct weston_color_manager { /** This compositor instance */ struct weston_compositor *compositor; + /** Supports the Wayland CM&HDR protocol extension? */ + bool supports_client_protocol; + /** * Supported color features from Wayland CM&HDR protocol extension. * diff --git a/libweston/compositor.c b/libweston/compositor.c index 203cf1f27..5745af27a 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -9455,6 +9455,17 @@ weston_compositor_backends_loaded(struct weston_compositor *compositor) return -1; weston_log("Color manager: %s\n", compositor->color_manager->name); + weston_log_continue(STAMP_SPACE " protocol support: %s\n", + yesno(compositor->color_manager->supports_client_protocol)); + + if (compositor->color_manager->supports_client_protocol && + weston_compositor_enable_color_management_protocol(compositor) < 0) { + /* + * The only way out is to quit the compositor, + * and that will clean up. + */ + return -1; + } return 0; }