Hello community, here is the log from the commit of package kmix for openSUSE:Factory checked in at 2014-07-16 16:17:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kmix (Old) and /work/SRC/openSUSE:Factory/.kmix.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kmix" Changes: -------- --- /work/SRC/openSUSE:Factory/kmix/kmix.changes 2014-06-19 13:16:39.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kmix.new/kmix.changes 2014-07-16 16:17:53.000000000 +0200 @@ -1,0 +2,7 @@ +Thu Jul 10 22:19:34 UTC 2014 - [email protected] + +- Update to 4.13.80 + * KDE 4.14 Beta 1 release + * See http://www.kde.org/announcements/announce-4.14-beta1.php + +------------------------------------------------------------------- Old: ---- kmix-4.13.2.tar.xz New: ---- kmix-4.13.80.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kmix.spec ++++++ --- /var/tmp/diff_new_pack.P9Dgli/_old 2014-07-16 16:17:54.000000000 +0200 +++ /var/tmp/diff_new_pack.P9Dgli/_new 2014-07-16 16:17:54.000000000 +0200 @@ -27,7 +27,7 @@ License: GPL-2.0+ Group: Productivity/Multimedia/Sound/Mixers Url: http://www.kde.org -Version: 4.13.2 +Version: 4.13.80 Release: 0 Source0: %{name}-%{version}.tar.xz # PATCH-FIX-OPENSUSE Who-needs-event-slider.patch -- since KNotify will no longer be able pretending it can ++++++ kmix-4.13.2.tar.xz -> kmix-4.13.80.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/CMakeLists.txt new/kmix-4.13.80/CMakeLists.txt --- old/kmix-4.13.2/CMakeLists.txt 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/CMakeLists.txt 2014-06-24 02:41:10.000000000 +0200 @@ -11,11 +11,14 @@ find_package(Alsa) -macro_optional_find_package(PulseAudio "0.9.12") -macro_log_feature(PULSEAUDIO_FOUND "PulseAudio" "PulseAudio Audio Server" "http://www.pulseaudio.org/" FALSE "0.9.12" "libpulse is needed to let KMix control PulseAudio") +set(PA_VER "0.9.16") +macro_optional_find_package(PulseAudio "${PA_VER}") +macro_log_feature(PULSEAUDIO_FOUND "PulseAudio" "PulseAudio Audio Server" + "http://www.pulseaudio.org/" FALSE "${PA_VER}" "libpulse is needed to let KMix control PulseAudio") find_package(GLIB2) macro_optional_find_package(Canberra) -macro_log_feature(CANBERRA_FOUND "libcanberra" "libcanberra audio library" "http://0pointer.de/lennart/projects/libcanberra/" FALSE "" "libcanberra is needed for kmix sound feedback") +macro_log_feature(CANBERRA_FOUND "libcanberra" "libcanberra audio library" + "http://0pointer.de/lennart/projects/libcanberra/" FALSE "" "libcanberra is needed for kmix sound feedback") alsa_configure_file(${CMAKE_BINARY_DIR}/config-alsa.h) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/apps/kmix.cpp new/kmix-4.13.80/apps/kmix.cpp --- old/kmix-4.13.2/apps/kmix.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/apps/kmix.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -78,7 +78,7 @@ KXmlGuiWindow(0, Qt::WindowFlags( KDE_DEFAULT_WINDOWFLAGS | Qt::WindowContextHelpButtonHint)), m_multiDriverMode(false), // -<- I never-ever want the multi-drivermode to be activated by accident - m_dockWidget(), m_dontSetDefaultCardOnStart(false) + m_dockWidget(), m_dsm(0), m_dontSetDefaultCardOnStart(false) { setObjectName(QLatin1String("KMixWindow")); // disable delete-on-close because KMix might just sit in the background waiting for cards to be plugged in @@ -132,7 +132,9 @@ { ControlManager::instance().removeListener(this); + delete m_dsm; delete osdWidget; + // -1- Cleanup Memory: clearMixerWidgets while (m_wsMixers->count() != 0) { @@ -1322,14 +1324,24 @@ view->configureView(); } +void KMixWindow::slotSelectMasterClose(QObject*) +{ + m_dsm = 0; +} + void KMixWindow::slotSelectMaster() { Mixer *mixer = Mixer::getGlobalMasterMixer(); if (mixer != 0) { - QPointer<DialogSelectMaster> dsm = new DialogSelectMaster(Mixer::getGlobalMasterMixer()); - dsm->setAttribute(Qt::WA_DeleteOnClose, true); - dsm->show(); + if (!m_dsm) { + m_dsm = new DialogSelectMaster(Mixer::getGlobalMasterMixer(), this); + connect(m_dsm, SIGNAL(destroyed(QObject*)), this, SLOT(slotSelectMasterClose(QObject*))); + m_dsm->setAttribute(Qt::WA_DeleteOnClose, true); + m_dsm->show(); + } + m_dsm->raise(); + m_dsm->activateWindow(); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/apps/kmix.h new/kmix-4.13.80/apps/kmix.h --- old/kmix-4.13.2/apps/kmix.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/apps/kmix.h 2014-06-24 02:41:10.000000000 +0200 @@ -49,6 +49,7 @@ #include "core/mixer.h" class OSDWidget; +class DialogSelectMaster; class KMixWindow : public KXmlGuiWindow @@ -95,6 +96,7 @@ void recreateGUI(bool saveConfig, const QString& mixerId, bool forceNewTab); void recreateGUIwithSavingView(); void newMixerShown(int tabIndex); + void slotSelectMaster(); private: KMixerWidget* findKMWforTab( const QString& tabId ); @@ -119,6 +121,8 @@ KTabWidget *m_wsMixers; KMixDockWidget *m_dockWidget; + DialogSelectMaster *m_dsm; + QString m_hwInfoString; QString m_defaultCardOnStart; bool m_dontSetDefaultCardOnStart; @@ -144,13 +148,13 @@ void slotHWInfo(); void slotKdeAudioSetupExec(); void slotConfigureCurrentView(); - void slotSelectMaster(); void plugged( const char* driverName, const QString& udi, QString& dev); void unplugged( const QString& udi); void hideOrClose(); void slotIncreaseVolume(); void slotDecreaseVolume(); void slotMute(); + void slotSelectMasterClose(QObject*); void newView(); void saveAndCloseView(int); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/apps/kmixremote new/kmix-4.13.80/apps/kmixremote --- old/kmix-4.13.2/apps/kmixremote 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/apps/kmixremote 2014-06-24 02:41:10.000000000 +0200 @@ -1,3 +1,4 @@ +#!/bin/sh ################################################################################# # kmixremote - control kmix from a script. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_alsa9.cpp new/kmix-4.13.80/backends/mixer_alsa9.cpp --- old/kmix-4.13.2/backends/mixer_alsa9.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_alsa9.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -315,7 +315,9 @@ return Mixer::ERR_READ; } const char* mixer_card_name = snd_ctl_card_info_get_name( hw_info ); - m_mixerName = mixer_card_name; + //QString mixer_card_name_QString = mixer_card_name; + registerCard(mixer_card_name); + snd_ctl_close( ctl_handle ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_backend.cpp new/kmix-4.13.80/backends/mixer_backend.cpp --- old/kmix-4.13.2/backends/mixer_backend.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_backend.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -35,7 +35,7 @@ #include "mixer_backend_i18n.cpp" Mixer_Backend::Mixer_Backend(Mixer *mixer, int device) : -m_devnum (device) , m_isOpen(false), m_recommendedMaster(), _mixer(mixer), _pollingTimer(0) +m_devnum (device) , m_isOpen(false), m_recommendedMaster(), _mixer(mixer), _pollingTimer(0), _cardInstance(1) { // In all cases create a QTimer. We will use it once as a singleShot(), even if something smart @@ -64,6 +64,7 @@ Mixer_Backend::~Mixer_Backend() { + unregisterCard(this->getName()); if (!m_mixDevices.isEmpty()) { kDebug() << "Implicit close on " << this << ". Please instead call closeCommon() and close() explicitly (in concrete Backend destructor)"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_backend.h new/kmix-4.13.80/backends/mixer_backend.h --- old/kmix-4.13.2/backends/mixer_backend.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_backend.h 2014-06-24 02:41:10.000000000 +0200 @@ -130,6 +130,7 @@ */ virtual QString getName() const; virtual QString getId() const; + virtual int getCardInstance() const { return _cardInstance; } // All controls of this card MixSet m_mixDevices; @@ -162,13 +163,66 @@ virtual void reinit() {}; protected: - QString m_mixerName; void freeMixDevices(); + QMap<QString,int> s_mixerNums; + + /** + * Registers the card for this Backend and sets the card discriminator for the given card name. + * The discriminator should always be 1, unless a second card with + * the same name of a registered card was already registered. Default implementation will return 2, 3 and so on + * for more cards. Subclasses can override this and return arbitrary ID's, but any ID that is not 1 will be + * displayed to the user everywhere where a mixer name is shown, like in the tab name. + * + * For the background please see BKO-327471 and read the following info: + * "Count mixer nums for every mixer name to identify mixers with equal names. + * This is for creating persistent (reusable) primary keys, which can safely + * be referenced (especially for config file access, so it is meant to be persistent!)." + * + * + * + * @param cardBaseName + */ + void registerCard(QString cardBaseName) + { + m_mixerName = cardBaseName; + int cardDiscriminator = 1 + s_mixerNums[cardBaseName]; + kDebug() << "cardBaseName=" << cardBaseName << ", cardDiscriminator=" << cardDiscriminator; + _cardInstance = cardDiscriminator; +// return cardDiscriminator; + } + + /** + * Unregisters the card of this Backend. The cardDiscriminator counter for this card name is reduced by 1. + * See #registerCard() for more info. + * + * TODO This is not entirely correct. Example: If the first card (cardDiscrimiator == 1) is unpluggged, then + * s_mixerNums["cardName"] is changed from 2 to 1. The next plug of registerCard("cardName") will use + * cardDiscriminator == 2, but the card with taht discrimniator was not unplugged => BANG!!! + * + * @param cardBaseName + */ + void unregisterCard(QString cardBaseName) + { + QMap<QString,int>::const_iterator it = s_mixerNums.constFind(cardBaseName); + if (it != s_mixerNums.constEnd()) + { + int beforeValue = it.value(); + int afterValue = beforeValue-1; + if (beforeValue > 0) + s_mixerNums[cardBaseName] = afterValue; + kDebug() << "beforeValue=" << beforeValue << ", afterValue" << afterValue; + } + } + + int _cardInstance; + + protected slots: virtual void readSetFromHW(); private: QTime _fastPollingEndsAt; + QString m_mixerName; }; typedef Mixer_Backend *getMixerFunc( Mixer* mixer, int device ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_mpris2.cpp new/kmix-4.13.80/backends/mixer_mpris2.cpp --- old/kmix-4.13.2/backends/mixer_mpris2.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_mpris2.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -49,7 +49,7 @@ if ( m_devnum != 0 ) return Mixer::ERR_OPEN; - m_mixerName = i18n("Playback Streams"); + registerCard(i18n("Playback Streams")); _id = "Playback Streams"; _mixer->setDynamic(); return addAllRunningPlayersAndInitHotplug(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_oss.cpp new/kmix-4.13.80/backends/mixer_oss.cpp --- old/kmix-4.13.2/backends/mixer_oss.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_oss.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -176,12 +176,13 @@ struct mixer_info l_mix_info; if (ioctl(m_fd, SOUND_MIXER_INFO, &l_mix_info) != -1) { - m_mixerName = l_mix_info.name; + registerCard(l_mix_info.name); } else #endif - - m_mixerName = "OSS Audio Mixer"; + { + registerCard("OSS Audio Mixer"); + } m_isOpen = true; return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_oss4.cpp new/kmix-4.13.80/backends/mixer_oss4.cpp --- old/kmix-4.13.2/backends/mixer_oss4.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_oss4.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -259,7 +259,7 @@ } oss_mixext_root *root = (oss_mixext_root *) ext.data; - m_mixerName = root->name; + registerCard(root->name); for ( int i = 1; i < m_numExtensions; i++ ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_pulse.cpp new/kmix-4.13.80/backends/mixer_pulse.cpp --- old/kmix-4.13.2/backends/mixer_pulse.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_pulse.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -65,7 +65,6 @@ QMap<int,Mixer_PULSE*> s_mixers; -typedef QMap<int,devinfo> devmap; static devmap outputDevices; static devmap captureDevices; static QMap<int,QString> clients; @@ -218,6 +217,10 @@ s.mute = !!i->mute; s.stream_restore_rule = ""; + s.priority = 0; + if (i->active_port != NULL) + s.priority = i->active_port->priority; + translateMasksAndMaps(s); bool is_new = !outputDevices.contains(s.index); @@ -822,15 +825,38 @@ ControlManager::instance().announce(mixerId, ControlChangeType::ControlList, getDriverName()); } +void Mixer_PULSE::updateRecommendedMaster(devmap* map) +{ + unsigned int prio = 0; + shared_ptr<MixDevice> res; + MixSet::iterator iter; + + for (iter = m_mixDevices.begin(); iter != m_mixDevices.end(); ++iter) { + unsigned int devprio = map->value( id2num((*iter)->id()) ).priority; + if (( devprio > prio ) || !res ) { + prio = devprio; + res = *iter; + } + } + + if (res) + kDebug(67100) << "Selecting master " << res->id() + << " for type " << m_devnum; + m_recommendedMaster = res; +} + void Mixer_PULSE::addWidget(int index, bool isAppStream) { devmap* map = get_widget_map(m_devnum, index); if (!map->contains(index)) { - kWarning(67100) << "New " << m_devnum << " widget notified for index " << index << " but I cannot find it in my list :s"; + kWarning(67100) << "New " << m_devnum << " widget notified for index " + << index << " but I cannot find it in my list :s"; return; } - addDevice((*map)[index], isAppStream); + + if (addDevice((*map)[index], isAppStream)) + updateRecommendedMaster(map); emitControlsReconfigured(); } @@ -839,7 +865,8 @@ devmap* map = get_widget_map(m_devnum); if (!map->contains(index)) { - //kWarning(67100) << "Removing " << m_devnum << " widget notified for index " << index << " but I cannot find it in my list :s"; + kDebug(67100) << "Removing " << m_devnum << " widget notified for index " + << index << " but I cannot find it in my list :s"; // Sometimes we ignore things (e.g. event sounds) so don't be too noisy here. return; } @@ -849,22 +876,25 @@ // We need to find the MixDevice that goes with this widget and remove it. MixSet::iterator iter; + shared_ptr<MixDevice> md; for (iter = m_mixDevices.begin(); iter != m_mixDevices.end(); ++iter) { if ((*iter)->id() == id) { - shared_ptr<MixDevice> md = m_mixDevices.get(id); - kDebug() << "MixDevice 1 useCount=" << md.use_count(); - md->close(); - kDebug() << "MixDevice 2 useCount=" << md.use_count(); - + md = m_mixDevices.get(id); + kDebug() << "MixDevice 1 useCount=" << md.use_count(); + md->close(); + kDebug() << "MixDevice 2 useCount=" << md.use_count(); m_mixDevices.erase(iter); - kDebug() << "MixDevice 3 useCount=" << md.use_count(); - emitControlsReconfigured(); - kDebug() << "MixDevice 4 useCount=" << md.use_count(); - return; + kDebug() << "MixDevice 3 useCount=" << md.use_count(); + break; } } + + if (md) + updateRecommendedMaster(map); + emitControlsReconfigured(); + kDebug() << "MixDevice 4 useCount=" << md.use_count(); } void Mixer_PULSE::removeAllWidgets() @@ -880,9 +910,11 @@ emitControlsReconfigured(); } -void Mixer_PULSE::addDevice(devinfo& dev, bool isAppStream) +bool Mixer_PULSE::addDevice(devinfo& dev, bool isAppStream) { - if (dev.chanMask != Volume::MNONE) { + if (dev.chanMask == Volume::MNONE) + return false; + MixSet *ms = 0; if (m_devnum == KMIXPA_APP_PLAYBACK && s_mixers.contains(KMIXPA_PLAYBACK)) ms = s_mixers[KMIXPA_PLAYBACK]->getMixSet(); @@ -897,11 +929,13 @@ if (isAppStream) md->setApplicationStream(true); - kDebug() << "Adding Pulse volume " << dev.name << ", isCapture= " << (m_devnum == KMIXPA_CAPTURE || m_devnum == KMIXPA_APP_CAPTURE) << ", isAppStream= " << isAppStream << "=" << md->isApplicationStream() << ", devnum=" << m_devnum; + kDebug(67100) << "Adding Pulse volume " << dev.name << ", isCapture= " + << (m_devnum == KMIXPA_CAPTURE || m_devnum == KMIXPA_APP_CAPTURE) + << ", isAppStream= " << isAppStream << "=" << md->isApplicationStream() << ", devnum=" << m_devnum; md->addPlaybackVolume(v); md->setMuted(dev.mute); m_mixDevices.append(md->addToPool()); - } + return true; } Mixer_Backend* PULSE_getMixer( Mixer *mixer, int devnum ) @@ -1064,35 +1098,40 @@ if (KMIXPA_PLAYBACK == m_devnum) { _id = "Playback Devices"; - m_mixerName = i18n("Playback Devices"); + registerCard(i18n("Playback Devices")); for (iter = outputDevices.begin(); iter != outputDevices.end(); ++iter) addDevice(*iter); + updateRecommendedMaster(&outputDevices); } else if (KMIXPA_CAPTURE == m_devnum) { _id = "Capture Devices"; - m_mixerName = i18n("Capture Devices"); + registerCard(i18n("Capture Devices")); for (iter = captureDevices.begin(); iter != captureDevices.end(); ++iter) addDevice(*iter); + updateRecommendedMaster(&outputDevices); } else if (KMIXPA_APP_PLAYBACK == m_devnum) { _id = "Playback Streams"; - m_mixerName = i18n("Playback Streams"); + registerCard(i18n("Playback Streams")); for (iter = outputRoles.begin(); iter != outputRoles.end(); ++iter) addDevice(*iter, true); + updateRecommendedMaster(&outputRoles); for (iter = outputStreams.begin(); iter != outputStreams.end(); ++iter) addDevice(*iter, true); + updateRecommendedMaster(&outputStreams); } else if (KMIXPA_APP_CAPTURE == m_devnum) { _id = "Capture Streams"; - m_mixerName = i18n("Capture Streams"); + registerCard(i18n("Capture Streams")); for (iter = captureStreams.begin(); iter != captureStreams.end(); ++iter) addDevice(*iter); + updateRecommendedMaster(&captureStreams); } - kDebug(67100) << "Using PulseAudio for mixer: " << m_mixerName; + kDebug(67100) << "Using PulseAudio for mixer: " << getName(); m_isOpen = true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_pulse.h new/kmix-4.13.80/backends/mixer_pulse.h --- old/kmix-4.13.2/backends/mixer_pulse.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_pulse.h 2014-06-24 02:41:10.000000000 +0200 @@ -41,7 +41,9 @@ Volume::ChannelMask chanMask; chanIDMap chanIDs; + unsigned int priority; } devinfo; +typedef QMap<int,devinfo> devmap; class Mixer_PULSE : public Mixer_Backend { @@ -76,9 +78,10 @@ QString _id; private: - void addDevice(devinfo& dev, bool = false); + bool addDevice(devinfo& dev, bool isAppStream = false); bool connectToDaemon(); void emitControlsReconfigured(); + void updateRecommendedMaster(devmap* map); protected slots: void pulseControlsReconfigured(QString mixerId); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/backends/mixer_sun.cpp new/kmix-4.13.80/backends/mixer_sun.cpp --- old/kmix-4.13.2/backends/mixer_sun.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/backends/mixer_sun.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -206,7 +206,7 @@ m_mixDevices.append( md->addToPool() ); } - m_mixerName = "SUN Audio Mixer"; + registerCard("SUN Audio Mixer"); m_isOpen = true; return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/core/mixer.cpp new/kmix-4.13.80/core/mixer.cpp --- old/kmix-4.13.2/core/mixer.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/core/mixer.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -91,7 +91,6 @@ Mixer::Mixer( QString& ref_driverName, int device ) : m_balance(0), _mixerBackend(0L), m_dynamic(false) { - _cardInstance = 0; _mixerBackend = 0; int driverCount = numDrivers(); for (int driver=0; driver<driverCount; driver++ ) { @@ -174,7 +173,7 @@ QString primaryKeyOfMixer = QString("%1::%2:%3") .arg(getDriverName()) .arg(mixerName) - .arg(_cardInstance); + .arg(getCardInstance()); // The following 3 replaces are for not messing up the config file primaryKeyOfMixer.replace(']','_'); primaryKeyOfMixer.replace('[','_'); // not strictly necessary, but lets play safe @@ -256,7 +255,7 @@ * * @return true, if Mixer could be opened. */ -bool Mixer::openIfValid(int cardId) +bool Mixer::openIfValid() { if (_mixerBackend == 0 ) { @@ -264,7 +263,6 @@ return false; } - _cardInstance = cardId; bool ok = _mixerBackend->openIfValid(); if ( ok ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/core/mixer.h new/kmix-4.13.80/core/mixer.h --- old/kmix-4.13.2/core/mixer.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/core/mixer.h 2014-06-24 02:41:10.000000000 +0200 @@ -84,7 +84,7 @@ shared_ptr<MixDevice> getMixdeviceById( const QString& deviceID ); /// Open/grab the mixer for further intraction - bool openIfValid(int cardId); + bool openIfValid(); /// Returns whether the card is open/operational bool isOpen() const; @@ -124,7 +124,7 @@ */ QString& id(); - int getCardInstance() const { return _cardInstance; } + int getCardInstance() const { return _mixerBackend->getCardInstance(); } /// Returns an Universal Device Identifaction of the Mixer. This is an ID that relates to the underlying operating system. // For OSS and ALSA this is taken from Solid (actually HAL). For Solaris this is just the device name. @@ -201,7 +201,6 @@ Mixer_Backend *_mixerBackend; QString _id; QString _masterDevicePK; - int _cardInstance; static MasterControl _globalMasterCurrent; static MasterControl _globalMasterPreferred; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/core/mixertoolbox.cpp new/kmix-4.13.80/core/mixertoolbox.cpp --- old/kmix-4.13.2/core/mixertoolbox.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/core/mixertoolbox.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -67,13 +67,14 @@ * 2) Rember UDI's, to match them when unplugging a device * 3) Find out, which Backend to use (plugin events of other Backends are ignored). * + * @deprecated TODO this method has to go away. Migrate to MultiDriverMode enum + * * @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) */ -// TODO this method has to go away. Migrate to MultiDriverMode enum void MixerToolBox::initMixer(bool multiDriverModeBool, QList<QString> backendList, QString& ref_hwInfoString) { MultiDriverMode multiDriverMode = multiDriverModeBool ? MULTI : SINGLE_PLUS_MPRIS2; @@ -308,12 +309,7 @@ */ bool MixerToolBox::possiblyAddMixer(Mixer *mixer) { - // TODO bug327471 This is really wrong here: _mixerBackend->getBaseName() is empty, as it will be filled by - // mixer->openIfValid(). See 3 lines below for the call! - QString mixerBasename = mixer->getBaseName(); - int newCardInstanceNum = 1 + s_mixerNums[mixerBasename]; - kDebug() << "mixerBasename=" << mixerBasename << ", cardNumPlanned=" << newCardInstanceNum; - if ( mixer->openIfValid(newCardInstanceNum) ) + if ( mixer->openIfValid() ) { if ( (!s_ignoreMixerExpression.isEmpty()) && mixer->id().contains(s_ignoreMixerExpression) ) { @@ -325,13 +321,6 @@ } else { - // Count mixer nums for every mixer name to identify mixers with equal names. - // This is for creating persistent (reusable) primary keys, which can safely - // be referenced (especially for config file access, so it is meant to be persistent!). - //s_mixerNums[mixer->getBaseName()]++; - s_mixerNums[mixerBasename] = newCardInstanceNum; - // mixer->setCardInstance(s_mixerNums[mixer->getBaseName()]); // TODO this code must go in mixer->openIfValid() - Mixer::mixers().append( mixer ); kDebug(67100) << "Added card " << mixer->id(); @@ -365,7 +354,6 @@ Mixer *mixer = (Mixer::mixers())[i]; if ( mixer == par_mixer ) { kDebug(67100) << "Removing card " << mixer->id(); - s_mixerNums[mixer->getBaseName()]--; Mixer::mixers().removeAt(i); delete mixer; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/core/mixertoolbox.h new/kmix-4.13.80/core/mixertoolbox.h --- old/kmix-4.13.2/core/mixertoolbox.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/core/mixertoolbox.h 2014-06-24 02:41:10.000000000 +0200 @@ -59,7 +59,6 @@ private: static MixerToolBox* s_instance; - QMap<QString,int> s_mixerNums; static QRegExp s_ignoreMixerExpression; //static KLocale* s_whatsthisLocale; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/core/volume.cpp new/kmix-4.13.80/core/volume.cpp --- old/kmix-4.13.2/core/volume.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/core/volume.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -25,6 +25,7 @@ #include <iostream> #include <kdebug.h> +#include <klocalizedstring.h> float Volume::VOLUME_STEP_DIVISOR = 20; float Volume::VOLUME_PAGESTEP_DIVISOR = 10; @@ -40,11 +41,18 @@ QString Volume::ChannelNameReadable[9] = { - "Left", "Right", - "Center", "Subwoofer", - "Surround Left", "Surround Right", - "Side Left", "Side Right", - "Rear Center" +// "Left", "Right", +// "Center", "Subwoofer", +// "Surround Left", "Surround Right", +// "Side Left", "Side Right", +// "Rear Center" + + i18nc("Channel name", "Left"), i18nc("Channel name", "Right"), + i18nc("Channel name", "Center"), i18nc("Channel name", "Subwoofer"), + i18nc("Channel name", "Surround Left"), i18nc("Channel name", "Surround Right"), + i18nc("Channel name", "Side Left"), i18nc("Channel name", "Side Right"), + i18nc("Channel name", "Rear Center") + }; char Volume::ChannelNameForPersistence[9][30] = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/dialogselectmaster.cpp new/kmix-4.13.80/gui/dialogselectmaster.cpp --- old/kmix-4.13.2/gui/dialogselectmaster.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/dialogselectmaster.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -36,8 +36,8 @@ #include "core/mixdevice.h" #include "core/mixer.h" -DialogSelectMaster::DialogSelectMaster( Mixer *mixer ) - : KDialog( 0 ) +DialogSelectMaster::DialogSelectMaster( Mixer *mixer, QWidget *parent ) + : KDialog( parent ) { setCaption( i18n( "Select Master Channel" ) ); if ( Mixer::mixers().count() > 0 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/dialogselectmaster.h new/kmix-4.13.80/gui/dialogselectmaster.h --- old/kmix-4.13.2/gui/dialogselectmaster.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/dialogselectmaster.h 2014-06-24 02:41:10.000000000 +0200 @@ -36,7 +36,7 @@ { Q_OBJECT public: - DialogSelectMaster(Mixer * = 0); + DialogSelectMaster(Mixer * = 0, QWidget *parent = 0); ~DialogSelectMaster(); public slots: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/kmixdockwidget.cpp new/kmix-4.13.80/gui/kmixdockwidget.cpp --- old/kmix-4.13.2/gui/kmixdockwidget.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/kmixdockwidget.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -35,6 +35,7 @@ #include <QDBusConnectionInterface> #include <QDesktopWidget> #include <QApplication> +#include <QTextDocument> #include "apps/kmix.h" #include "core/ControlManager.h" @@ -148,26 +149,18 @@ QAction *action = actionCollection()->addAction( "select_master" ); action->setText( i18n("Select Master Channel...") ); action->setEnabled(Mixer::getGlobalMasterMixer() != 0); - connect(action, SIGNAL(triggered(bool)), SLOT(selectMaster())); + connect(action, SIGNAL(triggered(bool)), _kmixMainWindow, SLOT(slotSelectMaster())); menu->addAction( action ); //Context menu entry to access phonon settings menu->addAction(_kmixMainWindow->actionCollection()->action("launch_kdesoundsetup")); } -void KMixDockWidget::selectMaster() -{ - DialogSelectMaster* dsm = new DialogSelectMaster(Mixer::getGlobalMasterMixer()); - dsm->setAttribute(Qt::WA_DeleteOnClose, true); - dsm->show(); -} - - void KMixDockWidget::setVolumeTip() { shared_ptr<MixDevice> md = Mixer::getGlobalMasterMD(); - QString tip = ""; + QString tip; int virtualToolTipValue = 0; if ( md.get() == 0 ) @@ -179,10 +172,12 @@ { // Playback volume will be used for the DockIcon if available. // This heuristic is "good enough" for the DockIcon for now. - int val = md->getUserfriendlyVolumeLevel(); - tip = i18n( "Volume at %1%", val ); + int val = md->getUserfriendlyVolumeLevel(); + tip += "<font size=\"+1\">" + i18n( "Volume at %1%", val ) + "</font>"; if ( md->isMuted() ) - tip += i18n( " (Muted)" ); + tip += i18n( " (Muted)" ); + tip += QString( "<br/><font size=\"-1\">%1<br/>%2</font>" ) + .arg( Qt::escape(md->mixer()->readableName()) ).arg( Qt::escape(md->readableName()) ); // create a new "virtual" value. With that we see "volume changes" as well as "muted changes" virtualToolTipValue = val; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/kmixdockwidget.h new/kmix-4.13.80/gui/kmixdockwidget.h --- old/kmix-4.13.2/gui/kmixdockwidget.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/kmixdockwidget.h 2014-06-24 02:41:10.000000000 +0200 @@ -74,7 +74,6 @@ private slots: void dockMute(); void trayWheelEvent(int delta,Qt::Orientation); - void selectMaster(); void contextMenuAboutToShow(); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/mdwslider.cpp new/kmix-4.13.80/gui/mdwslider.cpp --- old/kmix-4.13.2/gui/mdwslider.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/mdwslider.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -63,8 +63,8 @@ * * Due to the many options, this is the most complicated MixDeviceWidget subclass. */ -MDWSlider::MDWSlider(shared_ptr<MixDevice> md, bool showMuteLED, bool showCaptureLED, - bool small, Qt::Orientation orientation, QWidget* parent +MDWSlider::MDWSlider(shared_ptr<MixDevice> md, bool showMuteLED, bool showCaptureLED + , bool includeMixerName, bool small, Qt::Orientation orientation, QWidget* parent , ViewBase* view , ProfControl* par_ctl ) : @@ -78,7 +78,7 @@ m_sliderInWork(0), m_waitForSoundSetComplete(0) { createActions(); - createWidgets( showMuteLED, showCaptureLED ); + createWidgets( showMuteLED, showCaptureLED, includeMixerName ); createShortcutActions(); installEventFilter( this ); // filter for popup update(); @@ -275,19 +275,19 @@ captureSpacer->setFixedSize(QCheckBox().sizeHint()); } -void MDWSlider::guiAddSlidersAndMediacontrols(bool playSliders, bool capSliders, bool mediaControls, QBoxLayout* layout) +void MDWSlider::guiAddSlidersAndMediacontrols(bool playSliders, bool capSliders, bool mediaControls, QBoxLayout* layout, const QString& tooltipText, const QString& captureTooltipText) { if (playSliders) - addSliders(layout, 'p', m_mixdevice->playbackVolume(), m_slidersPlayback); + addSliders(layout, 'p', m_mixdevice->playbackVolume(), m_slidersPlayback, tooltipText); if (capSliders) - addSliders(layout, 'c', m_mixdevice->captureVolume(), m_slidersCapture); + addSliders(layout, 'c', m_mixdevice->captureVolume(), m_slidersCapture, captureTooltipText); if (mediaControls) addMediaControls(layout); } -void MDWSlider::guiAddCaptureCheckbox(bool wantsCaptureLED, const Qt::Alignment& alignmentForCapture, QBoxLayout* layoutForCapture) +void MDWSlider::guiAddCaptureCheckbox(bool wantsCaptureLED, const Qt::Alignment& alignmentForCapture, QBoxLayout* layoutForCapture, const QString& captureTooltipText) { if (wantsCaptureLED && m_mixdevice->captureVolume().hasSwitch()) { @@ -295,12 +295,11 @@ m_captureCheckbox->installEventFilter(this); layoutForCapture->addWidget(m_captureCheckbox, alignmentForCapture); connect(m_captureCheckbox, SIGNAL(toggled(bool)), this, SLOT(setRecsrc(bool))); - QString muteTip(i18n("Capture/Uncapture %1", m_mixdevice->readableName())); - m_captureCheckbox->setToolTip(muteTip); + m_captureCheckbox->setToolTip(captureTooltipText); } } -void MDWSlider::guiAddMuteButton(bool wantsMuteButton, Qt::Alignment alignment, QBoxLayout* layoutForMuteButton) +void MDWSlider::guiAddMuteButton(bool wantsMuteButton, Qt::Alignment alignment, QBoxLayout* layoutForMuteButton, const QString& muteTooltipText) { if (wantsMuteButton && m_mixdevice->hasMuteSwitch()) { @@ -311,8 +310,7 @@ layoutForMuteButton->addWidget(m_qcb, 0, alignment); m_qcb->installEventFilter(this); connect(m_qcb, SIGNAL(clicked(bool)), this, SLOT(toggleMuted())); - QString muteTip(i18n("Mute/Unmute %1", m_mixdevice->readableName())); - m_qcb->setToolTip(muteTip); + m_qcb->setToolTip(muteTooltipText); } // Spacer will be shown, when no mute button is displayed @@ -322,19 +320,19 @@ } -void MDWSlider::guiAddControlIcon(Qt::Alignment alignment, QBoxLayout* layout) +void MDWSlider::guiAddControlIcon(Qt::Alignment alignment, QBoxLayout* layout, const QString& tooltipText) { m_iconLabelSimple = new QLabel(this); installEventFilter(m_iconLabelSimple); setIcon(m_mixdevice->iconName(), m_iconLabelSimple); - m_iconLabelSimple->setToolTip(m_mixdevice->readableName()); + m_iconLabelSimple->setToolTip(tooltipText); layout->addWidget(m_iconLabelSimple, 0, alignment); } /** * Creates all widgets : Icon, Label, Mute-Button, Slider(s) and Capture-Button. */ -void MDWSlider::createWidgets( bool showMuteButton, bool showCaptureLED ) +void MDWSlider::createWidgets( bool showMuteButton, bool showCaptureLED, bool includeMixerName ) { bool includePlayback = _pctl->useSubcontrolPlayback(); bool includeCapture = _pctl->useSubcontrolCapture(); @@ -348,6 +346,15 @@ MediaController* mediaController = m_mixdevice->getMediaController(); bool wantsMediaControls = mediaController->hasControls(); + QString tooltipText = m_mixdevice->readableName(); + QString captureTooltipText( i18n( "Capture/Uncapture %1", m_mixdevice->readableName() ) ); + QString muteTooltipText( i18n( "Mute/Unmute %1", m_mixdevice->readableName() ) ); + if (includeMixerName) { + tooltipText = QString( "%1\n%2" ).arg( m_mixdevice->mixer()->readableName() ).arg( tooltipText ); + captureTooltipText = QString( "%1\n%2" ).arg( m_mixdevice->mixer()->readableName() ).arg( captureTooltipText ); + muteTooltipText = QString( "%1\n%2" ).arg( m_mixdevice->mixer()->readableName() ).arg( muteTooltipText ); + } + // case of vertical sliders: if ( _orientation == Qt::Vertical ) { @@ -356,7 +363,7 @@ setLayout(controlLayout); controlLayout->setContentsMargins(0,0,0,0); - guiAddControlIcon(Qt::AlignHCenter|Qt::AlignTop, controlLayout); + guiAddControlIcon(Qt::AlignHCenter|Qt::AlignTop, controlLayout, tooltipText); Qt::Alignment centerAlign = Qt::AlignHCenter | Qt::AlignBottom; @@ -387,11 +394,11 @@ volLayout->setAlignment(centerAlign); controlLayout->addItem( volLayout ); - guiAddSlidersAndMediacontrols(wantsPlaybackSliders, wantsCaptureSliders, wantsMediaControls, volLayout); + guiAddSlidersAndMediacontrols(wantsPlaybackSliders, wantsCaptureSliders, wantsMediaControls, volLayout, tooltipText, captureTooltipText); if ( !hasVolumeSliders ) controlLayout->addStretch(1); // Not sure why we have this for "vertical sliders" case - guiAddCaptureCheckbox(wantsCaptureLED, centerAlign, controlLayout); + guiAddCaptureCheckbox(wantsCaptureLED, centerAlign, controlLayout, captureTooltipText); // spacer which is shown when no capture button present captureSpacer = new QWidget(this); @@ -400,7 +407,7 @@ //mute button - guiAddMuteButton(wantsMuteButton, centerAlign, controlLayout); + guiAddMuteButton(wantsMuteButton, centerAlign, controlLayout, muteTooltipText); } else { @@ -423,7 +430,7 @@ row1->addStretch(); row1->addWidget(captureSpacer); - guiAddCaptureCheckbox(wantsCaptureLED, Qt::AlignRight, row1); + guiAddCaptureCheckbox(wantsCaptureLED, Qt::AlignRight, row1, captureTooltipText); captureSpacer = new QWidget(this); // create, but do not add to any layout (not used!) @@ -433,7 +440,7 @@ rows->setAlignment(Qt::AlignVCenter|Qt::AlignLeft); rows->addItem( row2 ); - guiAddControlIcon(Qt::AlignVCenter, row2); + guiAddControlIcon(Qt::AlignVCenter, row2, tooltipText); @@ -442,8 +449,8 @@ volLayout->setAlignment(Qt::AlignVCenter|Qt::AlignRight); row2->addItem( volLayout ); - guiAddSlidersAndMediacontrols(wantsPlaybackSliders, wantsCaptureSliders, wantsMediaControls, volLayout); - guiAddMuteButton(wantsMuteButton, Qt::AlignRight, row2); + guiAddSlidersAndMediacontrols(wantsPlaybackSliders, wantsCaptureSliders, wantsMediaControls, volLayout, tooltipText, captureTooltipText); + guiAddMuteButton(wantsMuteButton, Qt::AlignRight, row2, muteTooltipText); } bool stereoLinked = !_pctl->isSplit(); @@ -556,7 +563,8 @@ mixDevice()->mediaPlay(); } -void MDWSlider::addSliders( QBoxLayout *volLayout, char type, Volume& vol, QList<QAbstractSlider *>& ref_sliders) +void MDWSlider::addSliders( QBoxLayout *volLayout, char type, Volume& vol, + QList<QAbstractSlider *>& ref_sliders, QString tooltipText) { const int minSliderSize = fontMetrics().height() * 10; long minvol = vol.minVolume(); @@ -604,10 +612,10 @@ extraData(slider).setChid(vc.chid); slider->installEventFilter( this ); if ( type == 'p' ) { - slider->setToolTip( m_mixdevice->readableName() ); + slider->setToolTip( tooltipText ); } else { - QString captureTip( i18n( "%1 (capture)", m_mixdevice->readableName() ) ); + QString captureTip( i18n( "%1 (capture)", tooltipText ) ); slider->setToolTip( captureTip ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/mdwslider.h new/kmix-4.13.80/gui/mdwslider.h --- old/kmix-4.13.2/gui/mdwslider.h 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/mdwslider.h 2014-06-24 02:41:10.000000000 +0200 @@ -54,7 +54,7 @@ public: MDWSlider( shared_ptr<MixDevice> md, bool includePlayback, bool includeCapture, - bool small, Qt::Orientation, + bool includeMixerName, bool small, Qt::Orientation, QWidget* parent, ViewBase* view, ProfControl *pctl); virtual ~MDWSlider(); @@ -130,8 +130,9 @@ private: KShortcut dummyShortcut; QPixmap loadIcon( QString filename ); - void createWidgets( bool showMuteLED, bool showCaptureLED ); - void addSliders( QBoxLayout *volLayout, char type, Volume& vol, QList<QAbstractSlider *>& ref_sliders); + void createWidgets( bool showMuteLED, bool showCaptureLED, bool includeMixer ); + void addSliders( QBoxLayout *volLayout, char type, Volume& vol, + QList<QAbstractSlider *>& ref_sliders, QString tooltipText ); //void addDefaultLabel(QBoxLayout *layout, Qt::Orientation orientation); // Methods that are called two times from a wrapper. Once for playabck, once for capture @@ -145,11 +146,11 @@ QWidget* createLabel(QWidget* parent, QString& label, QBoxLayout *layout, bool); QString calculatePlaybackIcon(MediaController::PlayState playState); - void guiAddSlidersAndMediacontrols(bool playSliders, bool capSliders, bool mediaControls, QBoxLayout* layout); + void guiAddSlidersAndMediacontrols(bool playSliders, bool capSliders, bool mediaControls, QBoxLayout* layout, const QString& tooltipText, const QString& captureTooltipText); void guiAddCaptureCheckbox(bool wantsCaptureLED, const Qt::Alignment& alignmentForCapture, - QBoxLayout* layoutForCapture); - void guiAddMuteButton(bool wantsMuteButton, Qt::Alignment alignment, QBoxLayout* layoutForMuteButton); - void guiAddControlIcon(Qt::Alignment alignment, QBoxLayout* layout); + QBoxLayout* layoutForCapture, const QString& captureTooltipText); + void guiAddMuteButton(bool wantsMuteButton, Qt::Alignment alignment, QBoxLayout* layoutForMuteButton, const QString& muteTooltipText); + void guiAddControlIcon(Qt::Alignment alignment, QBoxLayout* layout, const QString& tooltipText); void addGlobalShortcut(KAction* action, const QString& label, bool dynamicControl); bool m_linked; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/viewdockareapopup.cpp new/kmix-4.13.80/gui/viewdockareapopup.cpp --- old/kmix-4.13.2/gui/viewdockareapopup.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/viewdockareapopup.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -321,6 +321,7 @@ md, // only 1 device. true, // Show Mute LE true, // Show Record LED + true, // Include Mixer Name false, // Small vertical ? Qt::Vertical : Qt::Horizontal, this, // parent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/gui/viewsliders.cpp new/kmix-4.13.80/gui/viewsliders.cpp --- old/kmix-4.13.2/gui/viewsliders.cpp 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/gui/viewsliders.cpp 2014-06-24 02:41:10.000000000 +0200 @@ -143,6 +143,7 @@ md, // MixDevice (parameter) true, // Show Mute LED true, // Show Record LED + false, // Include Mixer Name false, // Small orientation, // Orientation this, // parent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/kmix.desktop new/kmix-4.13.80/kmix.desktop --- old/kmix-4.13.2/kmix.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/kmix.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -22,6 +22,7 @@ GenericName[gl]=Mesturador de son GenericName[hu]=Hangkeverő GenericName[ia]=Miscitor de sono +GenericName[id]=Mixer Suara GenericName[is]=Hljóðblöndun GenericName[it]=Mixer audio GenericName[ja]=サウンドミキサー @@ -71,6 +72,7 @@ Name[gl]=KMix Name[hu]=KMix Name[ia]=KMix +Name[id]=KMix Name[is]=KMix Name[it]=KMix Name[ja]=KMix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/kmix.notifyrc new/kmix-4.13.80/kmix.notifyrc --- old/kmix-4.13.2/kmix.notifyrc 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/kmix.notifyrc 2014-06-24 02:41:10.000000000 +0200 @@ -17,6 +17,7 @@ Comment[gl]=Mesturador de son Comment[hu]=Hangkeverő Comment[ia]=Mixer de Sono (Miscitor de sono) +Comment[id]=Mixer Suara Comment[is]=Hljóðblandari Comment[it]=Mixer audio Comment[ja]=サウンドミキサー @@ -68,6 +69,7 @@ Name[gl]=Dispositivo de son de reserva Name[hu]=Tartalék hangeszköz Name[ia]=Replica de dispositivo audio +Name[id]=Perangkat Audio Belakang Name[is]=Varahljóðtæki Name[it]=Dispositivo audio di ripiego Name[ja]=音声デバイスのフォールバック @@ -116,6 +118,7 @@ Comment[gl]=Notificación sobre a selección automática dun dispositivo de son alternativo se o dispositivo preferido non está dispoñíbel Comment[hu]=Értesítés az automatikus átállásról, ha az előnyben részesített eszköz nem érhető el Comment[ia]=Notification sur replica automatic si l edispositivo preferite non es disponibile +Comment[id]=Pemberitahuan otomatis diberikan jika perangkat disukai tidak tersedia Comment[is]=Aðvörun um sjálfvirkjun varatækis ef valið tæki er ekki tiltækt Comment[it]=Notifica sul ripiego automatico se il dispositivo preferito non è disponibile Comment[ja]=優先デバイスが利用できないために自動的にフォールバックしたときの通知 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/kmix_autostart.desktop new/kmix-4.13.80/kmix_autostart.desktop --- old/kmix-4.13.2/kmix_autostart.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/kmix_autostart.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -27,6 +27,7 @@ GenericName[gl]=Mesturador de son GenericName[hu]=Hangkeverő GenericName[ia]=Miscitor de sono +GenericName[id]=Mixer Suara GenericName[is]=Hljóðblöndun GenericName[it]=Mixer audio GenericName[ja]=サウンドミキサー @@ -76,6 +77,7 @@ Name[gl]=KMix Name[hu]=KMix Name[ia]=KMix +Name[id]=KMix Name[is]=KMix Name[it]=KMix Name[ja]=KMix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/kmixctrl_restore.desktop new/kmix-4.13.80/kmixctrl_restore.desktop --- old/kmix-4.13.2/kmixctrl_restore.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/kmixctrl_restore.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -17,6 +17,7 @@ Name[gl]=Restaurar os parámetros do mesturador Name[hu]=Keverőbeállítások visszaállítása Name[ia]=Restabili preferentias de Mixer +Name[id]=Kembalikan Pengaturan Mixer Name[is]=Frumstilla hljóðblöndunarstillingar Name[it]=Ripristina le impostazioni del mixer Name[ja]=ミキサーの設定を復元 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/kmixd.desktop new/kmix-4.13.80/kmixd.desktop --- old/kmix-4.13.2/kmixd.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/kmixd.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -18,6 +18,7 @@ Name[gl]=KMixD Name[hu]=KMixD Name[ia]=KMixD +Name[id]=KMixD Name[is]=KMixD Name[it]=KMixD Name[ja]=KMixD @@ -65,6 +66,7 @@ Comment[gl]=Servizo mesturador KMixD Comment[hu]=KMixD keverőszolgáltatás Comment[ia]=Servicio de Miscer de KMixD +Comment[id]=Layanan Mixer KMixD Comment[is]=KMixD hljóðblöndunarþjónusta Comment[it]=Servizio mixer KMixD Comment[kk]=KMixD микшер қызметі diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/plasma/engine/plasma-engine-mixer.desktop new/kmix-4.13.80/plasma/engine/plasma-engine-mixer.desktop --- old/kmix-4.13.2/plasma/engine/plasma-engine-mixer.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/plasma/engine/plasma-engine-mixer.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -16,6 +16,7 @@ Name[gl]=Motor de datos do mesturador Name[hu]=Keverő adatmodul Name[ia]=Motor de datos de Mxer +Name[id]=Mesindata Mixer Name[is]=Hljóðblöndunargagnavél Name[it]=Motore di dati del mixer Name[kk]=Микшер деректер тетігі diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.13.2/restore_kmix_volumes.desktop new/kmix-4.13.80/restore_kmix_volumes.desktop --- old/kmix-4.13.2/restore_kmix_volumes.desktop 2014-05-17 21:24:36.000000000 +0200 +++ new/kmix-4.13.80/restore_kmix_volumes.desktop 2014-06-24 02:41:10.000000000 +0200 @@ -21,6 +21,7 @@ Name[gl]=Restaurar os volumes do mesturador Name[hu]=Hangerők visszaállítása Name[ia]=Restabili volumines de Mixer +Name[id]=Kembalikan Volume Mixer Name[is]=Endurheimta stillingar hljóðrása Name[it]=Ripristina i volumi del Mixer Name[ja]=ミキサーの音量設定を復元する -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
