+enum bt_graph_status
+bt_graph_add_filter_filter_component_ports_disconnected_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_filter_component_ports_disconnected_listener_func func,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *out_listener_id)
+{
+ struct bt_graph_listener_ports_disconnected listener = {
+ .base = {
+ .removed = listener_removed,
+ .data = data,
+ },
+ .func = (ports_disconnected_func_t) func,
+ };
+ int listener_id;
+
+ BT_ASSERT_PRE_NON_NULL(graph, "Graph");
+ BT_ASSERT_PRE_NON_NULL(func, "Listener");
+ BT_ASSERT_PRE_NON_NULL(func, "\"Listener removed\" listener");
+ BT_ASSERT_PRE(!graph->in_remove_listener,
+ "Graph currently executing a \"listener removed\" listener: "
+ "%!+g", graph);
+ g_array_append_val(graph->listeners.filter_filter_ports_disconnected,
+ listener);
+ listener_id = graph->listeners.filter_filter_ports_disconnected->len - 1;
+ BT_LIB_LOGV("Added \"filter to filter component ports disconnected\" listener to graph: "
+ "%![graph-]+g, listener-addr=%p, id=%d", graph, listener,
+ listener_id);
+
+ if (listener_id) {
+ *out_listener_id = listener_id;
+ }
+
+ return BT_GRAPH_STATUS_OK;
+}
+