From c0249fdb66a93f3fd3b413f8c05d455f05ae8cdb Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Mon, 18 May 2020 00:59:50 +0900 Subject: KMix: fixed handling of slider's mute/unmute and wheel events. Fixed mixer's increase/decrease volume logic. Signed-off-by: Michele Calgaro --- kmix/mixer.cpp | 82 +++++++++++++++++++++++++--------------------------------- 1 file changed, 35 insertions(+), 47 deletions(-) (limited to 'kmix/mixer.cpp') diff --git a/kmix/mixer.cpp b/kmix/mixer.cpp index 46e4e138..9e3aa359 100644 --- a/kmix/mixer.cpp +++ b/kmix/mixer.cpp @@ -527,6 +527,11 @@ void Mixer::setVolume( int deviceidx, int percentage ) void Mixer::commitVolumeChange( MixDevice* md ) { _mixerBackend->writeVolumeToHW(md->num(), md->getVolume() ); _mixerBackend->setEnumIdHW(md->num(), md->enumId() ); + + // Muting/unmuting PulseAudio directly does not send back any notification to the mixer + // so we make sure we always update the tray icon after each operation. + readSetFromHWforceUpdate(); + TQTimer::singleShot(50, this, TQT_SLOT(readSetFromHW())); } // @dcop only @@ -624,51 +629,42 @@ int Mixer::masterVolume() void Mixer::increaseVolume( int deviceidx ) { MixDevice *mixdev= mixDeviceByType( deviceidx ); - if (mixdev != 0) { - Volume vol=mixdev->getVolume(); - double fivePercent = (vol.maxVolume()-vol.minVolume()+1) / 20; - for (unsigned int i=Volume::CHIDMIN; i <= Volume::CHIDMAX; i++) { - int volToChange = vol.getVolume((Volume::ChannelID)i); - if ( fivePercent < 1 ) fivePercent = 1; - volToChange += (int)fivePercent; - vol.setVolume((Volume::ChannelID)i, volToChange); - } - _mixerBackend->writeVolumeToHW(deviceidx, vol); + if (mixdev != 0) + { + Volume vol = mixdev->getVolume(); + long inc = vol.maxVolume() / 20; + if (inc == 0) + { + inc = 1; + } + for (int i = 0; i < vol.count(); i++) + { + long newVal = (vol[i]) + inc; + mixdev->setVolume(i, newVal < vol.maxVolume() ? newVal : vol.maxVolume()); + } + commitVolumeChange(mixdev); } - - /* see comment at the end of decreaseVolume() - int vol=volume(deviceidx); - setVolume(deviceidx, vol+5); - */ } // @dcop void Mixer::decreaseVolume( int deviceidx ) { MixDevice *mixdev= mixDeviceByType( deviceidx ); - if (mixdev != 0) { - Volume vol=mixdev->getVolume(); - double fivePercent = (vol.maxVolume()-vol.minVolume()+1) / 20; - for (unsigned int i=Volume::CHIDMIN; i <= Volume::CHIDMAX; i++) { - int volToChange = vol.getVolume((Volume::ChannelID)i); - //std::cout << "Mixer::decreaseVolume(): before: volToChange " <isMuted(); - - mixdev->setMuted( !previousState ); - - _mixerBackend->writeVolumeToHW(deviceidx, mixdev->getVolume()); - - // Muting/unmuting PulseAudio directly does not send back any notification to the mixer - // so we make sure we always update the tray icon after each operation. - readSetFromHWforceUpdate(); - TQTimer::singleShot(50, this, TQT_SLOT(readSetFromHW())); + mixdev->setMuted(!mixdev->isMuted()); + commitVolumeChange(mixdev); } // @dcop only -- cgit v1.2.3