diff options
author | Matt Porter <mporter@konsulko.com> | 2017-04-20 12:49:15 -0400 |
---|---|---|
committer | Matt Porter <mporter@konsulko.com> | 2017-04-21 12:50:02 -0400 |
commit | 288256f33f6298204cd0166cea3202d1fde100da (patch) | |
tree | 2aa30a1b09c99e63ce3868ce2fa925472b70bf7c /app/pacontrolmodel.cpp | |
parent | 9e23981d8a86a3530c03be2d541585ce88e7b914 (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.cpp | 27 |
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; } |