diff --git a/applet/contents/ui/DeviceListItem.qml b/applet/contents/ui/DeviceListItem.qml --- a/applet/contents/ui/DeviceListItem.qml +++ b/applet/contents/ui/DeviceListItem.qml @@ -26,18 +26,30 @@ draggable: false label: currentPort ? i18nc("label of device items", "%1 (%2)", currentPort.description, Description) : Description icon: { - if (currentPort) { - if (currentPort.name.indexOf("speaker") != -1) { + switch(FormFactor) { + case "internal": + return "audio-card"; + case "speaker": return "audio-speakers-symbolic"; - } else if (currentPort.name.indexOf("headphones") != -1) { - return "audio-headphones"; - } else if (currentPort.name.indexOf("hdmi") != -1) { + case "handset": + return "phone"; + case "tv": return "video-television"; - } else if (currentPort.name.indexOf("mic") != -1) { + case "webcam": + return "camera-web"; + case "microphone": return "audio-input-microphone"; - } else if (currentPort.name.indexOf("phone") != -1) { - return "phone"; - } + case "headset": + return "audio-headset"; + case "headphone": + return "audio-headphones"; +/* There are some form factors which we don't have any icon for, so we ignore them for now */ +// case "hands-free": break; +// case "car": break; +// case "hifi": break; + case "computer": + return "computer"; break; +// case "portable": break; } return IconName; } diff --git a/src/device.h b/src/device.h --- a/src/device.h +++ b/src/device.h @@ -38,6 +38,7 @@ Q_PROPERTY(State state READ state NOTIFY stateChanged) Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) + Q_PROPERTY(QString formFactor READ formFactor NOTIFY formFactorChanged) Q_PROPERTY(quint32 cardIndex READ cardIndex NOTIFY cardIndexChanged) Q_PROPERTY(QList ports READ ports NOTIFY portsChanged) Q_PROPERTY(quint32 activePortIndex READ activePortIndex WRITE setActivePortIndex NOTIFY activePortIndexChanged) @@ -67,6 +68,14 @@ m_description = info->description; emit descriptionChanged(); } + const char *form_factor = pa_proplist_gets(info->proplist, PA_PROP_DEVICE_FORM_FACTOR); + if (form_factor) { + QString formFactor = QString::fromUtf8(form_factor); + if (m_formFactor != formFactor) { + m_formFactor = formFactor; + emit formFactorChanged(); + } + } m_cardIndex = info->card; emit cardIndexChanged(); @@ -98,6 +107,7 @@ State state() const; QString name() const; QString description() const; + QString formFactor() const; quint32 cardIndex() const; QList ports() const; quint32 activePortIndex() const; @@ -109,6 +119,7 @@ void stateChanged(); void nameChanged(); void descriptionChanged(); + void formFactorChanged(); void cardIndexChanged(); void portsChanged(); void activePortIndexChanged(); @@ -122,6 +133,7 @@ QString m_name; QString m_description; + QString m_formFactor; quint32 m_cardIndex = -1; QList m_ports; quint32 m_activePortIndex = -1; diff --git a/src/device.cpp b/src/device.cpp --- a/src/device.cpp +++ b/src/device.cpp @@ -35,6 +35,11 @@ return m_description; } +QString QPulseAudio::Device::formFactor() const +{ + return m_formFactor; +} + quint32 QPulseAudio::Device::cardIndex() const { return m_cardIndex;