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]

Reply via email to