From kde-commits Thu Jul 21 23:15:32 2011 From: Christian Esken Date: Thu, 21 Jul 2011 23:15:32 +0000 To: kde-commits Subject: KDE/kdemultimedia/kmix Message-Id: <20110721231532.E78E1AC890 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=131129020514583 SVN commit 1242602 by esken: Imlement multi-backend intialization (aka "backend filter") M +2 -1 apps/kmix.cpp M +1 -0 apps/kmix.h M +1 -1 apps/kmixctrl.cpp M +2 -1 apps/kmixd.cpp M +1 -0 apps/kmixd.h M +3 -3 core/mixdevice.cpp M +21 -3 core/mixertoolbox.cpp M +2 -1 core/mixertoolbox.h M +8 -10 gui/kmixdockwidget.cpp --- trunk/KDE/kdemultimedia/kmix/apps/kmix.cpp #1242601:1242602 @@ -89,7 +89,7 @@ KGlobal::locale()->insertCatalog( QLatin1String( "kmix-controls" )); initWidgets(); initPrefDlg(); - MixerToolBox::instance()->initMixer(m_multiDriverMode, m_hwInfoString); + MixerToolBox::instance()->initMixer(m_multiDriverMode, m_backendFilter, m_hwInfoString); KMixDeviceManager *theKMixDeviceManager = KMixDeviceManager::instance(); initActionsAfterInitMixer(); // init actions that require initialized mixer backend(s). @@ -434,6 +434,7 @@ //} QString mixerIgnoreExpression = config.readEntry( "MixerIgnoreExpression", "Modem" ); MixerToolBox::instance()->setMixerIgnoreExpression(mixerIgnoreExpression); + m_backendFilter = config.readEntry<>( "Backends", QList() ); if ( orientationString == "Horizontal" ) m_toplevelOrientation = Qt::Horizontal; --- trunk/KDE/kdemultimedia/kmix/apps/kmix.h #1242601:1242602 @@ -123,6 +123,7 @@ QString m_defaultCardOnStart; bool m_dontSetDefaultCardOnStart; QLabel *m_errorLabel; + QList m_backendFilter; ViewDockAreaPopup *_dockAreaPopup; unsigned int m_configVersion; void showVolumeDisplay(); --- trunk/KDE/kdemultimedia/kmix/apps/kmixctrl.cpp #1242601:1242602 @@ -57,7 +57,7 @@ // create mixers QString dummyStringHwinfo; - MixerToolBox::instance()->initMixer(false, dummyStringHwinfo); + MixerToolBox::instance()->initMixer(false, QList(), dummyStringHwinfo); // load volumes if ( args->isSet("restore") ) --- trunk/KDE/kdemultimedia/kmix/apps/kmixd.cpp #1242601:1242602 @@ -100,7 +100,7 @@ //KGlobal::locale()->insertCatalog( QLatin1String( "kmix-controls" )); //initWidgets(); //initPrefDlg(); - MixerToolBox::instance()->initMixer(m_multiDriverMode, m_hwInfoString); + MixerToolBox::instance()->initMixer(m_multiDriverMode, m_backendFilter, m_hwInfoString); KMixDeviceManager *theKMixDeviceManager = KMixDeviceManager::instance(); //recreateGUI(false); fixConfigAfterRead(); @@ -222,6 +222,7 @@ Mixer::setGlobalMaster(mixerMasterCard, masterDev, true); //} QString mixerIgnoreExpression = config.readEntry( "MixerIgnoreExpression", "Modem" ); + m_backendFilter = config.readEntry<>( "Backends", QList() ); MixerToolBox::instance()->setMixerIgnoreExpression(mixerIgnoreExpression); } --- trunk/KDE/kdemultimedia/kmix/apps/kmixd.h #1242601:1242602 @@ -84,6 +84,7 @@ bool m_dontSetDefaultCardOnStart; unsigned int m_configVersion; //void increaseOrDecreaseVolume(bool increase); + QList m_backendFilter; private slots: void saveConfig(); --- trunk/KDE/kdemultimedia/kmix/core/mixdevice.cpp #1242601:1242602 @@ -212,9 +212,9 @@ void MixDevice::setRecSource(bool value) { _captureVolume.setSwitch( value ); } bool MixDevice::isEnum() { return ( ! _enumValues.empty() ); } -int MixDevice::mediaPlay() { mixer()->mediaPlay(_id); } -int MixDevice::mediaPrev() { mixer()->mediaPrev(_id); } -int MixDevice::mediaNext() { mixer()->mediaNext(_id); } +int MixDevice::mediaPlay() { return mixer()->mediaPlay(_id); } +int MixDevice::mediaPrev() { return mixer()->mediaPrev(_id); } +int MixDevice::mediaNext() { return mixer()->mediaNext(_id); } bool MixDevice::operator==(const MixDevice& other) const { --- trunk/KDE/kdemultimedia/kmix/core/mixertoolbox.cpp #1242601:1242602 @@ -70,12 +70,24 @@ * @par multiDriverMode Whether the Mixer scan should try more all backendends. * 'true' means to scan all backends. 'false' means: After scanning the * current backend the next backend is only scanned if no Mixers were found yet. + * @par backendList Activated backends (typically a value from the kmixrc or a default) * @par ref_hwInfoString Here a descripitive text of the scan is returned (Hardware Information) */ -void MixerToolBox::initMixer(bool multiDriverMode, QString& ref_hwInfoString) +void MixerToolBox::initMixer(bool multiDriverMode, QList backendList, QString& ref_hwInfoString) { - //kDebug(67100) << "IN MixerToolBox::initMixer()"; + initMixerInternal(multiDriverMode, backendList, ref_hwInfoString); + if ( Mixer::mixers().isEmpty() ) + initMixerInternal(multiDriverMode, QList(), ref_hwInfoString); // try again without filter +} + +/** + * + */ +void MixerToolBox::initMixerInternal(bool multiDriverMode, QList backendList, QString& ref_hwInfoString) +{ + bool useBackendFilter = ( ! backendList.isEmpty() ); + // Find all mixers and initialize them int drvNum = Mixer::numDrivers(); @@ -111,7 +123,13 @@ { QString driverName = Mixer::driverName(drv); kDebug(67100) << "Looking for mixers with the : " << driverName << " driver"; + if ( useBackendFilter && ! backendList.contains(driverName) ) + { + kDebug() << "Skipping " << driverName << " (filtered)"; + continue; + } + if ( autodetectionFinished ) { // inner loop indicates that we are finished => sane exit from outer loop break; @@ -129,7 +147,7 @@ bool mixerAccepted = possiblyAddMixer(mixer); /* Lets decide if the autoprobing shall end (BTW: In multiDriver mode we scan all devices, so no check is necessary) */ - if ( ! multiDriverMode ) { + if ( (! multiDriverMode) && ( ! useBackendFilter) ) { // In Single-Driver-mode we only need to check after we reached devNumMax if ( dev == devNumMax && Mixer::mixers().count() != 0 ) autodetectionFinished = true; // highest device number of driver and a Mixer => finished --- trunk/KDE/kdemultimedia/kmix/core/mixertoolbox.h #1242601:1242602 @@ -42,7 +42,8 @@ public: static MixerToolBox* instance(); - void initMixer(bool, QString&); + void initMixer(bool, QList backendList, QString&); + void initMixerInternal(bool, QList backendList, QString&); void deinitMixer(); bool possiblyAddMixer(Mixer *mixer); void removeMixer(Mixer *mixer); --- trunk/KDE/kdemultimedia/kmix/gui/kmixdockwidget.cpp #1242601:1242602 @@ -387,17 +387,15 @@ MixDevice *md = Mixer::getGlobalMasterMD(); if ( md != 0 ) { - Volume vol = md->playbackVolume(); - if ( md->playbackVolume().hasVolume() ) - vol = md->playbackVolume(); - else - vol = md->captureVolume(); - + Volume &vol = ( md->playbackVolume().hasVolume() ) ? md->playbackVolume() : md->captureVolume(); int inc = vol.maxVolume() / 20; if ( inc < 1 ) inc = 1; - vol.changeAllVolumes( (inc * delta) / 120 ); + long int cv = inc * (delta / 120 ); + kDebug() << "twe: " << cv << " : " << vol; + vol.changeAllVolumes(cv); + kDebug() << "twe: " << cv << " : " << vol; /* for ( int i = 0; i < vol.count(); i++ ) { int newVal = vol[i] + (inc * (delta / 120)); if( newVal < 0 ) newVal = 0; @@ -410,11 +408,11 @@ _audioPlayer->setCurrentSource(fileName); _audioPlayer->play(); } - if ( md->playbackVolume().hasVolume() ) +/* if ( md->playbackVolume().hasVolume() ) md->playbackVolume().setVolume(vol); else - md->captureVolume().setVolume(vol); - m_mixer->commitVolumeChange(md); + md->captureVolume().setVolume(vol);;*/ + md->mixer()->commitVolumeChange(md); setVolumeTip(); } }