summaryrefslogtreecommitdiffstats
path: root/app/pacontrolmodel.cpp
diff options
context:
space:
mode:
authorMatt Porter <mporter@konsulko.com>2017-04-20 12:49:15 -0400
committerMatt Porter <mporter@konsulko.com>2017-04-21 12:50:02 -0400
commit288256f33f6298204cd0166cea3202d1fde100da (patch)
tree2aa30a1b09c99e63ce3868ce2fa925472b70bf7c /app/pacontrolmodel.cpp
parent9e23981d8a86a3530c03be2d541585ce88e7b914 (diff)
Add support for handling external sink/source volume change events
Subscribes to PA volume change events, updating the local cached volume levels, and propagating the change to the UI. This allows changes to sink/source volumes levels from the command line (pactl) or a master volume control to be reflected in the mixer UI controls. Change-Id: I1d570dffeab9fcf4b6ba51e4792852b44a6149ca AGL-Bug: SPEC-549 Signed-off-by: Matt Porter <mporter@konsulko.com>
Diffstat (limited to 'app/pacontrolmodel.cpp')
-rw-r--r--app/pacontrolmodel.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/app/pacontrolmodel.cpp b/app/pacontrolmodel.cpp
index bca72c5..fe5de53 100644
--- a/app/pacontrolmodel.cpp
+++ b/app/pacontrolmodel.cpp
@@ -82,7 +82,8 @@ void PaControl::setVolume(PaControlModel *pacm, const QVariant &volume)
{
if (volume != m_volume) {
m_volume = volume.toUInt();
- emit pacm->volumeChanged(type(), cindex(), channel(), m_volume);
+ if (pacm)
+ emit pacm->volumeChanged(type(), cindex(), channel(), m_volume);
}
}
@@ -103,6 +104,26 @@ void PaControlModel::addOneControl(int cindex, QString desc, int type, int chann
addControl(PaControl(cindex, desc, type, channel, cdesc, volume));
}
+void PaControlModel::changeExternalVolume(uint32_t type, uint32_t cindex, uint32_t channel, uint32_t volume)
+{
+ QList<PaControl>::iterator i;
+ int row;
+
+ for (i = m_controls.begin(), row = 0; i < m_controls.end(); ++i, ++row) {
+ if ((i->type() == type) &&
+ (i->cindex() == cindex) &&
+ (i->channel() == channel)) {
+ break;
+ }
+ }
+
+ i->setVolume(NULL, QVariant(volume));
+ QModelIndex qmindex = index(row);
+ QVector<int> roles;
+ roles.push_back(VolumeRole);
+ emit dataChanged(qmindex, qmindex, roles);
+}
+
int PaControlModel::rowCount(const QModelIndex & parent) const {
Q_UNUSED(parent);
return m_controls.count();
@@ -124,7 +145,9 @@ bool PaControlModel::setData(const QModelIndex &index, const QVariant &value, in
control.setCDesc(value);
else if (role == VolumeRole)
control.setVolume(this, value);
- emit dataChanged(index, index);
+ QVector<int> roles;
+ roles.push_back(role);
+ emit dataChanged(index, index, roles);
return true;
}