summaryrefslogtreecommitdiffstats
path: root/kmix/kmixdockwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmix/kmixdockwidget.cpp')
-rw-r--r--kmix/kmixdockwidget.cpp55
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();
}