diff --git a/applet/contents/code/icon.js b/applet/contents/code/icon.js --- a/applet/contents/code/icon.js +++ b/applet/contents/code/icon.js @@ -41,6 +41,7 @@ case "internal": return "audio-card"; case "speaker": + case "analog-output-speaker": return "audio-speakers-symbolic"; case "phone": return "phone"; @@ -55,6 +56,7 @@ case "headset": return "audio-headset"; case "headphone": + case "analog-output-headphones": return "audio-headphones"; case "hands-free": return "hands-free"; diff --git a/applet/contents/ui/main.qml b/applet/contents/ui/main.qml --- a/applet/contents/ui/main.qml +++ b/applet/contents/ui/main.qml @@ -169,7 +169,21 @@ return; } - var icon = Icon.formFactorIcon(defaultSink.formFactor); + // For some hardware, headphones are a port of the build-in audio sink + var port = defaultSink.ports[defaultSink.activePortIndex]; + var text = port.description; + var icon; + if (port.name == "analog-output-headphones") { + icon = Icon.formFactorIcon("headphone"); + } else if (port.name == "analog-output-speaker") { + icon = Icon.formFactorIcon("speaker"); + } + + if (!icon) { + icon = Icon.formFactorIcon(defaultSink.formFactor); + text = defaultSink.description; + } + if (!icon) { // Show "muted" icon for Dummy output if (isDummyOutput(defaultSink)) { @@ -180,7 +194,7 @@ if (!icon) { icon = Icon.name(defaultSink.volume, defaultSink.muted); } - osd.showText(icon, defaultSink.description); + osd.showText(icon, text); } } diff --git a/src/device.h b/src/device.h --- a/src/device.h +++ b/src/device.h @@ -91,12 +91,12 @@ Port *port = new Port(this); port->setInfo(*ports); m_ports.append(port); - if (info->active_port == *ports) { + if (info->active_port == *ports && m_activePortIndex != m_ports.length() - 1) { m_activePortIndex = m_ports.length() - 1; + Q_EMIT activePortIndexChanged(); } } Q_EMIT portsChanged(); - Q_EMIT activePortIndexChanged(); State infoState = stateFromPaState(info->state); if (infoState != m_state) { diff --git a/src/pulseaudio.cpp b/src/pulseaudio.cpp --- a/src/pulseaudio.cpp +++ b/src/pulseaudio.cpp @@ -261,6 +261,7 @@ Q_ASSERT(qobject_cast(context()->sinks().objectAt(index))); Sink *sink = static_cast(context()->sinks().objectAt(index)); connect(sink, &Sink::stateChanged, this, &SinkModel::updatePreferredSink); + connect(sink, &Sink::activePortIndexChanged, this, &SinkModel::defaultSinkChanged); updatePreferredSink(); }