diff options
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(); } |