diff --git a/plugins/sound/sounddeviceswidget.cpp b/plugins/sound/sounddeviceswidget.cpp index 834a9d6d1..29f8e8445 100644 --- a/plugins/sound/sounddeviceswidget.cpp +++ b/plugins/sound/sounddeviceswidget.cpp @@ -26,6 +26,7 @@ #include #include #include +#include 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一起更新 diff --git a/plugins/sound/sounddeviceswidget.h b/plugins/sound/sounddeviceswidget.h index c889378d5..27835d4b4 100644 --- a/plugins/sound/sounddeviceswidget.h +++ b/plugins/sound/sounddeviceswidget.h @@ -13,6 +13,7 @@ #include #include +#include namespace Dtk { namespace Widget { class DListView; } } @@ -91,6 +92,7 @@ private: DBusSink *m_sinkInter; QStandardItemModel *m_model; QList m_ports; + QTimer *m_setVolumeTimer; }; #endif // VOLUMEDEVICESWIDGET_H diff --git a/widgets/slidercontainer.cpp b/widgets/slidercontainer.cpp index bfbf33fb9..44e114281 100644 --- a/widgets/slidercontainer.cpp +++ b/widgets/slidercontainer.cpp @@ -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); diff --git a/widgets/slidercontainer.h b/widgets/slidercontainer.h index dd85c7bc5..70d4d82d1 100644 --- a/widgets/slidercontainer.h +++ b/widgets/slidercontainer.h @@ -41,6 +41,7 @@ public: void setPageStep(int step); void setRange(int min, int max); + int getSliderValue(); Q_SIGNALS: void iconClicked(const IconPosition &);