fix: 解决任务栏音量和控制中心显示不一致问题

1.SoundApplet.cpp中defaultSinkChanged()信号先触发然后再设置浮框slider当前值导致sounditem.cpp中m_applet->volumeValue()获取的总是切换前的数据.
2.输出音频设备切换时SoundApplet.cpp中onDefaultSinkChanged()比increaseVolumeChanged()先执行,导致当声音输出设备开启音量增强且音量值超过100时,切换设备后,获取slider的当前值总是100.
3.设置完最大值后需要重新设置当前值,需要更新左键点击浮框slider当前值.

Log: 修复任务栏声音插件悬浮信息异常问题
Bug: https://pms.uniontech.com/zentao/bug-view-90297.html
Change-Id: I2459b8418c9872da1f0a9f7c26bb7494ee225d31
This commit is contained in:
songwentao 2021-08-06 14:58:55 +08:00
parent 52e7de8198
commit 10a774288f
2 changed files with 18 additions and 3 deletions

View File

@ -296,8 +296,8 @@ void SoundApplet::onDefaultSinkChanged()
}
activePort(portId,cardId);
emit defaultSinkChanged(m_defSinkInter);
onVolumeChanged(m_defSinkInter->volume());
emit defaultSinkChanged(m_defSinkInter);
}
void SoundApplet::onVolumeChanged(double volume)
@ -381,7 +381,15 @@ void SoundApplet::cardsChanged(const QString &cards)
void SoundApplet::increaseVolumeChanged()
{
// 触发VolumeSlider::valueChanged
m_volumeSlider->setMaximum(m_audioInter->maxUIVolume() * 100.0f);
// onDefaultSinkChanged()比increaseVolumeChanged()先执行,设置完最大值后需要重新设置当前值
if (m_defSinkInter) {
// 规避因开启声音增强声音值超过100后关闭声音增强后读取到数据为旧数据的问题
if (m_audioInter->increaseVolume())
m_volumeSlider->setValue(std::min(150, qRound(m_defSinkInter->volume() * 100.0)));
}
}
void SoundApplet::refreshIcon()

View File

@ -65,7 +65,10 @@ SoundItem::SoundItem(QWidget *parent)
QWidget *SoundItem::tipsWidget()
{
refreshTips(m_applet->volumeValue(), true);
if (m_sinkInter)
refreshTips(std::min(150, qRound(m_sinkInter->volume() * 100.0)), true);
else
refreshTips(m_applet->volumeValue(), true);
m_tipsLabel->resize(m_tipsLabel->sizeHint().width() + 10,
m_tipsLabel->sizeHint().height());
@ -237,5 +240,9 @@ void SoundItem::refreshTips(const int volume, const bool force)
void SoundItem::sinkChanged(DBusSink *sink)
{
m_sinkInter = sink;
refresh(m_applet->volumeValue());
if (m_sinkInter)
refresh(std::min(150, qRound(m_sinkInter->volume() * 100.0)));
else
refresh(m_applet->volumeValue());
}