diff --git a/VolumeSlider.cpp b/VolumeSlider.cpp index 763dbe8..1388168 100644 --- a/VolumeSlider.cpp +++ b/VolumeSlider.cpp @@ -86,6 +86,9 @@ VolumeSlider::setPixmaps (Skin *skin) void VolumeSlider::changePixmap () { + XMMSHandler *xmmsh = XMMSHandler::getInstance (); + xmmsh->volumeSet (m_volume_base100); + m_volslider = m_skin->getVol (m_volume); drawPixmaps (); } diff --git a/XMMSHandler.cpp b/XMMSHandler.cpp index 2ca0750..fbf3d16 100644 --- a/XMMSHandler.cpp +++ b/XMMSHandler.cpp @@ -294,6 +294,21 @@ XMMSHandler::volumeGet (void) p->connect (sigc::mem_fun (this, &XMMSHandler::volume_get)); } + +void +XMMSHandler::volumeSet (uint volume) +{ + if(m_masterchan) + { + delete m_xmmsc->playback_volume_set ("master", volume); + } + else + { + delete m_xmmsc->playback_volume_set ("left", volume); + delete m_xmmsc->playback_volume_set ("right", volume); + } +} + void XMMSHandler::volume_changed (XMMSResult *res) { @@ -308,12 +323,22 @@ XMMSHandler::volume_get (XMMSResultDict *res) QListIterator vol (Values); uint right = atol (vol.next().toAscii()); - uint left = atol (vol.next().toAscii()); + if(vol.hasNext()) + { + uint left = atol (vol.next().toAscii()); + + if(left > right) + emit getVolume (left); + else + emit getVolume (right); - if(left > right) - emit getVolume (left); + m_masterchan = false; + } else + { emit getVolume (right); + m_masterchan = true; + } } diff --git a/XMMSHandler.h b/XMMSHandler.h index 82d7879..64c4e9d 100644 --- a/XMMSHandler.h +++ b/XMMSHandler.h @@ -37,6 +37,7 @@ class XMMSHandler : public QObject, public sigc::trackable { uint medialibQuery (QString); void medialibQueryAdd (QString q) { delete m_xmmsc->medialib_add_to_playlist (q.toUtf8 ()); } void volumeGet (void); + void volumeSet (uint volume); const XMMSClient *getXMMS () { return m_xmmsc; } @@ -80,6 +81,7 @@ class XMMSHandler : public QObject, public sigc::trackable { XMMSClient *m_xmmsc; static XMMSHandler *singleton; int m_currentid; + bool m_masterchan; }; #endif