summaryrefslogtreecommitdiffstats
path: root/kmix/kmixdockwidget.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-05-12 01:34:29 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-05-25 13:24:32 +0900
commit2251b3395ac880f0b24db47615bf21ed97ec69f3 (patch)
tree219d0543f15a1b8651b87e78c33c7ae62d5bdb60 /kmix/kmixdockwidget.cpp
parenta00a998b33895808e19627966f047e7c32d2556c (diff)
downloadtdemultimedia-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.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();
}