fix: adjust the slider to set the sound multiple times

log: add a timer to set once in 50 ms
This commit is contained in:
tsic404 2023-08-23 14:11:20 +08:00 committed by deepin-bot[bot]
parent 9f71814849
commit 5d87a44ac4
4 changed files with 18 additions and 1 deletions

View File

@ -26,6 +26,7 @@
#include <QtConcurrent>
#include <QIcon>
#include <QPixmap>
#include <QTimer>
DWIDGET_USE_NAMESPACE
@ -55,10 +56,13 @@ SoundDevicesWidget::SoundDevicesWidget(QWidget *parent)
, m_soundInter(new DBusAudio("org.deepin.dde.Audio1", "/org/deepin/dde/Audio1", QDBusConnection::sessionBus(), this))
, m_sinkInter(new DBusSink("org.deepin.dde.Audio1", m_soundInter->defaultSink().path(), QDBusConnection::sessionBus(), this))
, m_model(new QStandardItemModel(this))
, m_setVolumeTimer(new QTimer(this))
{
initUi();
initConnection();
onAudioDevicesChanged();
m_setVolumeTimer->setInterval(50);
m_setVolumeTimer->setSingleShot(true);
QMetaObject::invokeMethod(this, [ this ] {
deviceEnabled(m_ports.size() > 0);
@ -208,13 +212,18 @@ void SoundDevicesWidget::initConnection()
m_sliderContainer->setRange(0, std::round(maxValue * 100.00));
emit iconChanged();
});
connect(m_sliderContainer, &SliderContainer::sliderValueChanged, this, [ this ](int value) {
connect(m_setVolumeTimer, &QTimer::timeout, this, [=](){
int value = m_sliderContainer->getSliderValue();
m_sinkInter->SetVolume(value * 0.01, true);
if (m_sinkInter->mute()) {
m_sinkInter->SetMuteQueued(false);
}
emit iconChanged();
});
connect(m_sliderContainer, &SliderContainer::sliderValueChanged, this, [=](int value) {
Q_UNUSED(value)
m_setVolumeTimer->start();
});
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [ = ] {
// 更新右icon左icon放在pixmap跟随refreshIcon一起更新

View File

@ -13,6 +13,7 @@
#include <QWidget>
#include <DGuiApplicationHelper>
#include <QTimer>
namespace Dtk { namespace Widget { class DListView; } }
@ -91,6 +92,7 @@ private:
DBusSink *m_sinkInter;
QStandardItemModel *m_model;
QList<SoundDevicePort *> m_ports;
QTimer *m_setVolumeTimer;
};
#endif // VOLUMEDEVICESWIDGET_H

View File

@ -193,6 +193,11 @@ void SliderContainer::updateSliderValue(int value)
m_slider->blockSignals(false);
}
int SliderContainer::getSliderValue()
{
return m_slider->value();
}
void SliderContainer::setSliderProxyStyle(QProxyStyle *proxyStyle)
{
proxyStyle->setParent(m_slider);

View File

@ -41,6 +41,7 @@ public:
void setPageStep(int step);
void setRange(int min, int max);
int getSliderValue();
Q_SIGNALS:
void iconClicked(const IconPosition &);