diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-05-12 01:34:29 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-05-25 13:24:32 +0900 |
commit | 2251b3395ac880f0b24db47615bf21ed97ec69f3 (patch) | |
tree | 219d0543f15a1b8651b87e78c33c7ae62d5bdb60 /kmix/kmixdockwidget.cpp | |
parent | a00a998b33895808e19627966f047e7c32d2556c (diff) | |
download | tdemultimedia-2251b3395ac880f0b24db47615bf21ed97ec69f3.tar.gz tdemultimedia-2251b3395ac880f0b24db47615bf21ed97ec69f3.zip |
Added initial support for PulseAudio in KMix. The mixer/device channel to control
from the system tray widget is now selectable from the user and default
to the main one if not specifically selected. This allows to control
PulseAudio volume from KMix correctly.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'kmix/kmixdockwidget.cpp')
-rw-r--r-- | kmix/kmixdockwidget.cpp | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/kmix/kmixdockwidget.cpp b/kmix/kmixdockwidget.cpp index 1402191c..42ccccaa 100644 --- a/kmix/kmixdockwidget.cpp +++ b/kmix/kmixdockwidget.cpp @@ -57,7 +57,8 @@ KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name _oldToolTipValue(-1), _oldPixmapType('-'), _volumePopup(volumePopup), - _dockIconMuting(dockIconMuting) + _dockIconMuting(dockIconMuting), + _dsm(NULL) { Mixer* preferredMasterMixer = Mixer::masterCard(); if ( preferredMasterMixer != 0 ) { @@ -74,6 +75,10 @@ KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name KMixDockWidget::~KMixDockWidget() { + if (_dsm) + { + delete _dsm; + } delete _audioPlayer; delete _dockAreaPopup; } @@ -146,24 +151,52 @@ void KMixDockWidget::slotUpdatePixmap() void KMixDockWidget::selectMaster() { - DialogSelectMaster* dsm = new DialogSelectMaster(m_mixer); - connect ( dsm, TQT_SIGNAL(newMasterSelected(int, TQString&)), TQT_SLOT( handleNewMaster(int,TQString&)) ); - dsm->show(); - // !! The dialog is modal. Does it delete itself? + if (!_dsm) + { + _dsm = new DialogSelectMaster(m_mixer); + connect(_dsm, TQT_SIGNAL(newMasterSelected(bool, int, const TQString&)), TQT_SLOT( handleNewMaster(bool, int, const TQString&))); + } + _dsm->show(); } -void KMixDockWidget::handleNewMaster(int soundcard_id, TQString& channel_id) // !! @todo rework parameters +void KMixDockWidget::handleNewMaster(bool defaultMaster, int soundcard_id, const TQString &channel_id) { - //kdDebug(67100) << "KMixDockWidget::handleNewMaster() soundcard_id=" << soundcard_id << " , channel_id=" << channel_id << endl; - Mixer *mixer = Mixer::mixers().at(soundcard_id); - if ( mixer == 0 ) { - kdError(67100) << "KMixDockWidget::createPage(): Invalid Mixer (soundcard_id=" << soundcard_id << ")" << endl; + //kdDebug(67100) << "KMixDockWidget::handleNewMaster() default master=" << defaultMaster << ", soundcard_id=" << soundcard_id << ", channel_id=" << channel_id << endl; + kapp->config()->setGroup(0); + kapp->config()->writeEntry("UseDefaultMaster", defaultMaster); + Mixer *mixer; + TQString channel = TQString::null; + if (defaultMaster) + { + mixer = Mixer::mixers().first(); + if (mixer) + { + MixSet ms = mixer->getMixSet(); + for (MixDevice *md = ms.first(); md != 0; md = ms.next()) + { + if (!md->isRecordable() && !md->isSwitch() && !md->isEnum()) + { + channel = md->getPK(); + break; + } + } + } + } + else + { + mixer = Mixer::mixers().at(soundcard_id); + channel = channel_id; + } + + if (!mixer || channel.isEmpty()) { + kdError(67100) << "KMixDockWidget::createPage(): Invalid Mixer (default master=" << defaultMaster << ", soundcard_id=" + << soundcard_id << ", channel_id=" << channel_id << ")" << endl; return; // can not happen } m_mixer = mixer; Mixer::setMasterCard(mixer->id()); // We must save this information "somewhere". - Mixer::setMasterCardDevice( channel_id ); + Mixer::setMasterCardDevice(channel); createMasterVolWidget(); } |