aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Output/alsa/outputalsa.cpp11
-rw-r--r--src/plugins/Output/alsa/outputalsa.h7
-rw-r--r--src/qmmp/volumehandler.cpp19
3 files changed, 24 insertions, 13 deletions
diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp
index 8a383558d..9489ad47f 100644
--- a/src/plugins/Output/alsa/outputalsa.cpp
+++ b/src/plugins/Output/alsa/outputalsa.cpp
@@ -439,6 +439,12 @@ VolumeSettings VolumeALSA::volume() const
return vol;
}
+Volume::VolumeFlags VolumeALSA::flags() const
+{
+
+ return Volume::HasNotifySignal;
+}
+
int VolumeALSA::setupMixer(QString card, QString device)
{
char *name;
@@ -557,8 +563,3 @@ int VolumeALSA::getMixer(snd_mixer_t **mixer, QString card)
}
return (*mixer != NULL);
}
-
-/*bool VolumeALSA::hasNotifySignal() const
-{
- return true;
-}*/
diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h
index 57d850b3f..0360337d9 100644
--- a/src/plugins/Output/alsa/outputalsa.h
+++ b/src/plugins/Output/alsa/outputalsa.h
@@ -76,8 +76,7 @@ public:
void setVolume(const VolumeSettings &vol) override;
VolumeSettings volume() const override;
-
- //bool hasNotifySignal() const override;
+ VolumeFlags flags() const override;
private:
//alsa mixer
@@ -85,8 +84,8 @@ private:
void parseMixerName(char *str, char **name, int *index);
int getMixer(snd_mixer_t **m_mixer, QString card);
snd_mixer_elem_t* getMixerElem(snd_mixer_t *m_mixer, char *name, int index);
- snd_mixer_t *m_mixer;
- snd_mixer_elem_t *pcm_element;
+ snd_mixer_t *m_mixer = nullptr;
+ snd_mixer_elem_t *pcm_element = nullptr;
};
#endif // OUTPUTALSA_H
diff --git a/src/qmmp/volumehandler.cpp b/src/qmmp/volumehandler.cpp
index 9932fa69d..d5e305886 100644
--- a/src/qmmp/volumehandler.cpp
+++ b/src/qmmp/volumehandler.cpp
@@ -92,13 +92,24 @@ void VolumeHandler::setBalance(int balance)
void VolumeHandler::setMuted(bool muted)
{
- if(m_muted != muted)
+ if(m_muted == muted)
+ return;
+
+ if(m_volume && (m_volume->flags() & Volume::IsMuteSupported))
{
- if(m_volume)
+ m_volume->setMuted(muted);
+ checkVolume();
+ }
+ else if(m_volume)
+ {
+ m_muted = muted;
+ m_apply = muted;
+ if(m_muted)
{
- m_volume->setMuted(muted);
- checkVolume();
+ m_scaleLeft = 0.0;
+ m_scaleRight = 0.0;
}
+ emit mutedChanged(muted);
}
}