[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kmix] /: Added a default entry for selecting master control.
From: Christian Esken <esken () kde ! org>
Date: 2014-08-14 20:26:07
Message-ID: E1XI1b5-0002vK-Sn () scm ! kde ! org
[Download RAW message or body]
Git commit db9c8fafaec131f46f054d27370f6f91918b07c7 by Christian Esken.
Committed on 14/08/2014 at 20:25.
Pushed by esken into branch 'master'.
Added a default entry for selecting master control.
REVIEW: 116851
M +4 -6 apps/kmix.cpp
M +34 -8 core/mixer.cpp
M +2 -1 core/mixer.h
M +33 -5 gui/dialogselectmaster.cpp
http://commits.kde.org/kmix/db9c8fafaec131f46f054d27370f6f91918b07c7
diff --git a/apps/kmix.cpp b/apps/kmix.cpp
index df368b0..96473b5 100644
--- a/apps/kmix.cpp
+++ b/apps/kmix.cpp
@@ -419,12 +419,10 @@ void KMixWindow::saveBaseConfig()
config.writeEntry("ConfigVersion", KMIX_CONFIG_VERSION);
config.writeEntry("AutoUseMultimediaKeys", m_autouseMultimediaKeys);
- MasterControl& master = Mixer::getGlobalMasterPreferred();
- if (master.isValid())
- {
- config.writeEntry("MasterMixer", master.getCard());
- config.writeEntry("MasterMixerDevice", master.getControl());
- }
+ MasterControl& master = Mixer::getGlobalMasterPreferred(false);
+ config.writeEntry("MasterMixer", master.getCard());
+ config.writeEntry("MasterMixerDevice", master.getControl());
+
QString mixerIgnoreExpression = MixerToolBox::instance()->mixerIgnoreExpression();
config.writeEntry("MixerIgnoreExpression", mixerIgnoreExpression);
diff --git a/core/mixer.cpp b/core/mixer.cpp
index 1134a9c..2f9203b 100644
--- a/core/mixer.cpp
+++ b/core/mixer.cpp
@@ -275,6 +275,8 @@ bool Mixer::openIfValid()
{
if ( !m_dynamic )
kError(67100) << "Mixer::open() no master detected." << endl;
+ else
+ kDebug(67100) << "Mixer::open() no master detected." << endl;
QString noMaster = "---no-master-detected---";
setLocalMasterMD(noMaster); // no master
}
@@ -507,16 +509,25 @@ Mixer* Mixer::getGlobalMasterMixer()
* Return the preferred global master.
* If there is no preferred global master, returns the current master instead.
*/
-MasterControl& Mixer::getGlobalMasterPreferred()
+MasterControl& Mixer::getGlobalMasterPreferred(bool fallbackAllowed)
{
- if ( _globalMasterPreferred.isValid() ) {
+ static MasterControl result;
+
+ if ( !fallbackAllowed || _globalMasterPreferred.isValid() ) {
kDebug() << "Returning preferred master";
return _globalMasterPreferred;
}
- else {
- kDebug() << "Returning current master";
- return _globalMasterCurrent;
+
+ Mixer* mm = Mixer::getGlobalMasterMixerNoFalback();
+ if (mm) {
+ result.set(_globalMasterPreferred.getCard(), mm->getRecommendedDeviceId());
+ if (!result.getControl().isEmpty())
+ kDebug() << "Returning extended preferred master";
+ return result;
}
+
+ kDebug() << "Returning current master";
+ return _globalMasterCurrent;
}
@@ -536,6 +547,12 @@ shared_ptr<MixDevice> Mixer::getGlobalMasterMD(bool fallbackAllowed)
if ( mixer == 0 )
return mdRet;
+ if (_globalMasterCurrent.getControl().isEmpty())
+ {
+ // Default (recommended) control
+ return mixer->_mixerBackend->recommendedMaster();
+ }
+
foreach (shared_ptr<MixDevice> md, mixer->_mixerBackend->m_mixDevices )
{
if ( md.get() == 0 )
@@ -559,12 +576,21 @@ shared_ptr<MixDevice> Mixer::getGlobalMasterMD(bool fallbackAllowed)
return mdRet;
}
-
-
+QString Mixer::getRecommendedDeviceId()
+{
+ if ( _mixerBackend != 0 ) {
+ shared_ptr<MixDevice> recommendedMaster = _mixerBackend->recommendedMaster();
+ if ( recommendedMaster.get() != 0 )
+ return recommendedMaster->id();
+ }
+ return QString();
+}
shared_ptr<MixDevice> Mixer::getLocalMasterMD()
{
- return find( _masterDevicePK );
+ if (_mixerBackend && _masterDevicePK.isEmpty())
+ return _mixerBackend->recommendedMaster();
+ return find( _masterDevicePK );
}
void Mixer::setLocalMasterMD(QString &devPK)
diff --git a/core/mixer.h b/core/mixer.h
index e8c7eae..b04bce2 100644
--- a/core/mixer.h
+++ b/core/mixer.h
@@ -150,7 +150,8 @@ public:
static shared_ptr<MixDevice> getGlobalMasterMD(bool fallbackAllowed);
static Mixer* getGlobalMasterMixer();
static Mixer* getGlobalMasterMixerNoFalback();
- static MasterControl& getGlobalMasterPreferred();
+ static MasterControl& getGlobalMasterPreferred(bool fallbackAllowed = true);
+ QString getRecommendedDeviceId();
/******************************************
The recommended master of this Mixer.
diff --git a/gui/dialogselectmaster.cpp b/gui/dialogselectmaster.cpp
index cfbbd7f..788cdb9 100644
--- a/gui/dialogselectmaster.cpp
+++ b/gui/dialogselectmaster.cpp
@@ -155,13 +155,41 @@ void DialogSelectMaster::createPage(Mixer* mixer)
_layout->addWidget(m_channelSelector);
- shared_ptr<MixDevice> master = mixer->getLocalMasterMD();
- QString masterKey = ( master.get() != 0 ) ? master->id() : "----noMaster---"; // Use \
non-matching name as default +// shared_ptr<MixDevice> master = mixer->getLocalMasterMD();
+// QString masterKey = ( master.get() != 0 ) ? master->id() : "----noMaster---"; // Use \
non-matching name as default
const MixSet& mixset = mixer->getMixSet();
- MixSet& mset = const_cast<MixSet&>(mixset);
- // Populate ListView with the MixDevice's having a playbakc volume (excludes pure capture \
controls and pure enum's)
- for( int i=0; i< mset.count(); ++i )
+ MixSet& mset = const_cast<MixSet&>(mixset);
+
+ MasterControl mc = mixer->getGlobalMasterPreferred(false);
+ QString masterKey = mc.getControl();
+ if (!masterKey.isEmpty() && !mset.get(masterKey))
+ {
+ shared_ptr<MixDevice> master = mixer->getLocalMasterMD();
+ if (master.get() != 0)
+ masterKey = master->id();
+ }
+
+ int msetCount = 0;
+ for (int i = 0; i < mset.count(); ++i)
+ {
+ shared_ptr<MixDevice> md = mset[i];
+ if ( md->playbackVolume().hasVolume() )
+ ++msetCount;
+ }
+
+ if (msetCount > 0 && !mixer->isDynamic())
+ {
+ QString mdName = i18n("Automatic (%1 recommendation)").arg(mixer->getDriverName());
+ QPixmap icon = KIconLoader::global()->loadIcon("audio-volume-high", KIconLoader::Small, \
IconSize(KIconLoader::Small)); + QListWidgetItem *item = new QListWidgetItem(icon, \
mdName, m_channelSelector); + item->setData(Qt::UserRole, QString()); // ID here: see \
apply(), empty String => Automatic + if (masterKey.isEmpty())
+ m_channelSelector->setCurrentItem(item);
+ }
+
+ // Populate ListView with the MixDevice's having a playbakc volume (excludes pure capture \
controls and pure enum's) + for (int i = 0; i < mset.count(); ++i)
{
shared_ptr<MixDevice> md = mset[i];
if ( md->playbackVolume().hasVolume() )
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic