default-nodes: Never consider Audio/Sink nodes as best for default audio.source node type

Audio/Sink nodes should only be used as default audio source node type if the
user has explicitly selected it. If the user has not explicitly selected it,
we should always ignore it and instead select the highest priority Audio/Source
node.

Fixes #886
This commit is contained in:
Julian Bouzas 2026-01-21 10:49:13 -05:00
parent a5a079ec1d
commit 80842cbb96

View file

@ -18,6 +18,8 @@ SimpleEventHook {
},
},
execute = function (event)
local props = event:get_properties ()
local def_node_type = props ["default-node.type"]
local available_nodes = event:get_data ("available-nodes")
local selected_prio = event:get_data ("selected-node-priority") or 0
local selected_route_prio = event:get_data ("selected-route-priority") or 0
@ -37,6 +39,12 @@ SimpleEventHook {
-- Highest priority node wins
local priority = nutils.get_session_priority (node_props)
local route_priority = nutils.get_route_priority (node_props)
local media_class = node_props ["media.class"]
-- Never consider sink nodes as best if audio.source is the def node type
if media_class == "Audio/Sink" and def_node_type == "audio.source" then
goto skip_node
end
if selected_node == nil or
priority > selected_prio or
@ -46,6 +54,8 @@ SimpleEventHook {
selected_route_prio = route_priority
selected_node = node_props ["node.name"]
end
::skip_node::
end
event:set_data ("selected-node-priority", selected_prio)