mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-05-30 22:01:41 +00:00
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:
parent
9f71814849
commit
5d87a44ac4
@ -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一起更新
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
|
||||
void setPageStep(int step);
|
||||
void setRange(int min, int max);
|
||||
int getSliderValue();
|
||||
|
||||
Q_SIGNALS:
|
||||
void iconClicked(const IconPosition &);
|
||||
|
Loading…
x
Reference in New Issue
Block a user