diff --git a/compositor/main.c b/compositor/main.c index 28f13e0b..b3f6ba25 100644 --- a/compositor/main.c +++ b/compositor/main.c @@ -3187,7 +3187,7 @@ int main(int argc, char *argv[]) } log_scope = weston_compositor_add_log_scope(log_ctx, "log", - "Weston and Wayland log\n", NULL, NULL); + "Weston and Wayland log\n", NULL, NULL, NULL); weston_log_file_open(log); weston_log_set_handler(vlog, vlog_continue); @@ -3274,7 +3274,7 @@ int main(int argc, char *argv[]) weston_compositor_add_log_scope(log_ctx, "proto", "Wayland protocol dump for all clients.\n", - NULL, NULL); + NULL, NULL, NULL); if (debug_protocol) { protologger = wl_display_add_protocol_logger(display, diff --git a/include/libweston/weston-log.h b/include/libweston/weston-log.h index d12f2578..bda0b7d2 100644 --- a/include/libweston/weston-log.h +++ b/include/libweston/weston-log.h @@ -67,6 +67,7 @@ weston_compositor_add_log_scope(struct weston_log_context *compositor, const char *name, const char *description, weston_log_scope_cb new_subscription, + weston_log_scope_cb destroy_subscription, void *user_data); void diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c index b21a5ed7..de2d1f84 100644 --- a/libweston/backend-drm/drm.c +++ b/libweston/backend-drm/drm.c @@ -3408,7 +3408,7 @@ drm_backend_create(struct weston_compositor *compositor, b->debug = weston_compositor_add_log_scope(compositor->weston_log_ctx, "drm-backend", "Debug messages from DRM/KMS backend\n", - NULL, NULL); + NULL, NULL, NULL); compositor->backend = &b->base; diff --git a/libweston/compositor.c b/libweston/compositor.c index d20dfe7e..d06eccba 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -7309,7 +7309,7 @@ weston_compositor_create(struct wl_display *display, ec->debug_scene = weston_compositor_add_log_scope(ec->weston_log_ctx, "scene-graph", "Scene graph details\n", - debug_scene_graph_cb, + debug_scene_graph_cb, NULL, ec); return ec; diff --git a/libweston/content-protection.c b/libweston/content-protection.c index 63aa7337..e958f895 100644 --- a/libweston/content-protection.c +++ b/libweston/content-protection.c @@ -343,6 +343,6 @@ weston_compositor_enable_content_protection(struct weston_compositor *compositor cp->debug = weston_compositor_add_log_scope(compositor->weston_log_ctx, "content-protection-debug", "debug-logs for content-protection", - NULL, NULL); + NULL, NULL, NULL); return 0; } diff --git a/libweston/weston-log.c b/libweston/weston-log.c index 877620dd..1021ebb2 100644 --- a/libweston/weston-log.c +++ b/libweston/weston-log.c @@ -82,6 +82,7 @@ struct weston_log_scope { char *name; char *desc; weston_log_scope_cb new_subscription; + weston_log_scope_cb destroy_subscription; void *user_data; struct wl_list compositor_link; struct wl_list subscription_list; /**< weston_log_subscription::source_link */ @@ -260,6 +261,10 @@ void weston_log_subscription_destroy(struct weston_log_subscription *sub) { assert(sub); + + if (sub->source->destroy_subscription) + sub->source->destroy_subscription(sub, sub->source->user_data); + if (sub->owner) wl_list_remove(&sub->owner_link); @@ -518,6 +523,8 @@ weston_compositor_is_debug_protocol_enabled(struct weston_compositor *wc) * @param description The log scope description for humans; must not be NULL. * @param new_subscription Optional callback when a client subscribes to this * scope. + * @param destroy_subscription Optional callback when a client destroys the + * subscription. * @param user_data Optional user data pointer for the callback. * @returns A valid pointer on success, NULL on failure. * @@ -561,6 +568,7 @@ weston_compositor_add_log_scope(struct weston_log_context *log_ctx, const char *name, const char *description, weston_log_scope_cb new_subscription, + weston_log_scope_cb destroy_subscription, void *user_data) { struct weston_log_scope *scope; @@ -593,6 +601,7 @@ weston_compositor_add_log_scope(struct weston_log_context *log_ctx, scope->name = strdup(name); scope->desc = strdup(description); scope->new_subscription = new_subscription; + scope->destroy_subscription = destroy_subscription; scope->user_data = user_data; wl_list_init(&scope->subscription_list); diff --git a/meson.build b/meson.build index 6db63f64..3d5aa5fb 100644 --- a/meson.build +++ b/meson.build @@ -10,7 +10,7 @@ project('weston', license: 'MIT/Expat', ) -libweston_major = 7 +libweston_major = 8 # libweston_revision is manufactured to follow the autotools build's # library file naming, thanks to libtool diff --git a/pipewire/pipewire-plugin.c b/pipewire/pipewire-plugin.c index bd873caa..1eb5de57 100644 --- a/pipewire/pipewire-plugin.c +++ b/pipewire/pipewire-plugin.c @@ -819,7 +819,7 @@ weston_module_init(struct weston_compositor *compositor) compositor->weston_log_ctx, "pipewire", "Debug messages from pipewire plugin\n", - NULL, NULL); + NULL, NULL, NULL); pipewire->destroy_listener.notify = weston_pipewire_destroy; wl_signal_add(&compositor->destroy_signal, &pipewire->destroy_listener); diff --git a/xwayland/launcher.c b/xwayland/launcher.c index 28383384..1d51ee8f 100644 --- a/xwayland/launcher.c +++ b/xwayland/launcher.c @@ -398,7 +398,7 @@ weston_module_init(struct weston_compositor *compositor) weston_compositor_add_log_scope(wxs->compositor->weston_log_ctx, "xwm-wm-x11", "XWM's window management X11 events\n", - NULL, NULL); + NULL, NULL, NULL); return 0; }