Date: Monday, January 2, 2012 @ 06:12:52
  Author: andrea
Revision: 145818

Fix Kmix high cpu (KDEBUG#288675)

Added:
  kdemultimedia/trunk/fix-kmix-high-cpu.patch
Modified:
  kdemultimedia/trunk/PKGBUILD

-------------------------+
 PKGBUILD                |   11 +-
 fix-kmix-high-cpu.patch |  195 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 203 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2012-01-02 10:20:33 UTC (rev 145817)
+++ PKGBUILD    2012-01-02 11:12:52 UTC (rev 145818)
@@ -11,7 +11,7 @@
          'kdemultimedia-kscd'
          'kdemultimedia-mplayerthumbs')
 pkgver=4.7.95
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 url='http://www.kde.org'
 license=('GPL' 'LGPL' 'FDL')
@@ -19,11 +19,16 @@
 makedepends=('cmake' 'automoc4' 'kdelibs' 'tunepimp' 'ffmpeg' 'mplayer'
              'pulseaudio' 'libmusicbrainz3')
 
source=("http://download.kde.org/unstable/${pkgver}/src/${pkgbase}-${pkgver}.tar.bz2";
-        'mplayerthumbs.config')
+        'mplayerthumbs.config'
+        'fix-kmix-high-cpu.patch')
 sha1sums=('8c56f7bcbfd012492f97a3a827f97d07b7b6b390'
-          'ba016fa2563c14ffcba852c62506b66bfc6ee683')
+          'ba016fa2563c14ffcba852c62506b66bfc6ee683'
+          'd993b72004378aee84de3d410e9b25f91aa88138')
 
 build() {
+    cd "${srcdir}"/${pkgbase}-${pkgver}
+    patch -p0 -i "${srcdir}"/fix-kmix-high-cpu.patch
+
     cd ${srcdir}
        mkdir build
        cd build

Added: fix-kmix-high-cpu.patch
===================================================================
--- fix-kmix-high-cpu.patch                             (rev 0)
+++ fix-kmix-high-cpu.patch     2012-01-02 11:12:52 UTC (rev 145818)
@@ -0,0 +1,195 @@
+Index: kmix/gui/mdwslider.h
+===================================================================
+--- kmix/gui/mdwslider.h       (revision 1270927)
++++ kmix/gui/mdwslider.h       (revision 1270928)
+@@ -56,7 +56,7 @@
+              bool includePlayback, bool includeCapture,
+              bool small, Qt::Orientation,
+              QWidget* parent, ViewBase* view, ProfControl *pctl);
+-    ~MDWSlider() { }
++    virtual ~MDWSlider();
+ 
+     enum LabelType { LT_ALL, LT_FIRST_CAPTURE, LT_NONE };
+     void addActionToPopup( KAction *action );
+Index: kmix/gui/viewbase.cpp
+===================================================================
+--- kmix/gui/viewbase.cpp      (revision 1270927)
++++ kmix/gui/viewbase.cpp      (revision 1270928)
+@@ -128,13 +128,14 @@
+     // allow view to "polish" itself
+     constructionFinished();
+ 
+-   kDebug() << "CONNECT ViewBase count " << _mixers.size();
+-  foreach ( Mixer* mixer, _mixers )
+-  {
+-    kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id(); 
+-   connect ( mixer, SIGNAL(controlChanged()), this, 
SLOT(refreshVolumeLevels()) );
+-   connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, 
SLOT(controlsReconfigured(QString)) );
+-  }
++// Moved the following up one Level to KMixerWidget
++//   kDebug() << "CONNECT ViewBase count " << _mixers.size();
++//  foreach ( Mixer* mixer, _mixers )
++//  {
++//    kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id();
++//   connect ( mixer, SIGNAL(controlChanged()), this, 
SLOT(refreshVolumeLevels()) );
++//   connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, 
SLOT(controlsReconfigured(QString)) );
++//  }
+ 
+     
+ }
+@@ -217,10 +218,6 @@
+               setMixSet();
+               kDebug(67100) << "ViewBase::controlsReconfigured() " << 
mixer_ID << ": Recreating widgets (mixset contains: " << _mixSet->count() << 
")";
+               createDeviceWidgets();
+-
+-              // We've done the low level stuff our selves but let elements
+-              // above know what has happened so they can reload config etc.
+-              emit redrawMixer(mixer_ID);
+       }
+ }
+ 
+Index: kmix/gui/kmixerwidget.h
+===================================================================
+--- kmix/gui/kmixerwidget.h    (revision 1270927)
++++ kmix/gui/kmixerwidget.h    (revision 1270928)
+@@ -75,6 +75,10 @@
+    void saveConfig( KConfig *config );
+    void loadConfig( KConfig *config );
+ 
++  private slots:
++    void controlsReconfiguredToplevel(QString mixerId);
++    void refreshVolumeLevelsToplevel();
++
+   private:
+    Mixer *_mixer;
+    QVBoxLayout *m_topLayout; // contains TabWidget
+@@ -82,6 +86,7 @@
+    ProfTab* _tab;
+    std::vector<ViewBase*> _views;
+    KActionCollection* _actionCollection;  // -<- applciations wide action 
collection
++   QWidget* _mainWindow;
+ 
+    
+    void createLayout(ViewBase::ViewFlags vflags);
+Index: kmix/gui/mixdevicewidget.h
+===================================================================
+--- kmix/gui/mixdevicewidget.h (revision 1270927)
++++ kmix/gui/mixdevicewidget.h (revision 1270928)
+@@ -47,7 +47,7 @@
+     MixDeviceWidget( MixDevice* md,
+                      bool small, Qt::Orientation orientation,
+                      QWidget* parent, ViewBase*, ProfControl * );
+-    ~MixDeviceWidget();
++    virtual ~MixDeviceWidget();
+ 
+     void addActionToPopup( KAction *action );
+ 
+Index: kmix/gui/mdwslider.cpp
+===================================================================
+--- kmix/gui/mdwslider.cpp     (revision 1270927)
++++ kmix/gui/mdwslider.cpp     (revision 1270928)
+@@ -81,6 +81,17 @@
+     update();
+ }
+ 
++MDWSlider::~MDWSlider()
++{
++      foreach( QAbstractSlider* slider, m_slidersPlayback)
++      {
++              delete slider;
++      }
++      foreach( QAbstractSlider* slider, m_slidersCapture)
++      {
++              delete slider;
++      }
++}
+ 
+ void MDWSlider::createActions()
+ {
+Index: kmix/gui/kmixerwidget.cpp
+===================================================================
+--- kmix/gui/kmixerwidget.cpp  (revision 1270927)
++++ kmix/gui/kmixerwidget.cpp  (revision 1270928)
+@@ -37,6 +37,7 @@
+ #include <ktabwidget.h>
+ 
+ // KMix
++#include "apps/kmix.h"
+ #include "gui/guiprofile.h"
+ #include "gui/kmixerwidget.h"
+ #include "gui/kmixtoolbox.h"
+@@ -58,6 +59,8 @@
+      m_topLayout(0), _guiprof(guiprof),
+      _actionCollection(actionCollection)
+ {
++      _mainWindow = parent;
++      //kDebug() << "kmixWindow created: parent=" << parent << ", 
parentWidget()=" << parentWidget();
+    if ( _mixer )
+    {
+       createLayout(vflags);
+@@ -169,13 +172,42 @@
+       connect( vbase, SIGNAL(toggleMenuBar()), parentWidget(), 
SLOT(toggleMenuBar()) );
+       // *this will be deleted on rebuildGUI(), so lets queue the signal
+       connect( vbase, SIGNAL(rebuildGUI())   , parentWidget(), 
SLOT(recreateGUIwithSavingView()), Qt::QueuedConnection );
+-      connect( vbase, SIGNAL(redrawMixer(QString)), parentWidget(), 
SLOT(redrawMixer(QString)), Qt::QueuedConnection );
++      //connect( vbase, SIGNAL(redrawMixer(QString)), parentWidget(), 
SLOT(redrawMixer(QString)), Qt::QueuedConnection );
++
++      kDebug() << "CONNECT ViewBase count " << vbase->getMixers().size();
++        foreach ( Mixer* mixer, vbase->getMixers() )
++        {
++          kDebug(67100) << "CONNECT ViewBase controlschanged" << mixer->id();
++         connect ( mixer, SIGNAL(controlChanged()), this, 
SLOT(refreshVolumeLevelsToplevel()) );
++         connect ( mixer, SIGNAL(controlsReconfigured(QString)), this, 
SLOT(controlsReconfiguredToplevel(QString)) );
++        }
+       return true;
+    }
+ }
+ 
++void KMixerWidget::controlsReconfiguredToplevel(QString mixerId)
++{
++      foreach ( ViewBase* vbase, _views)
++      {
++              vbase->controlsReconfigured(mixerId);
++      }
++      KMixWindow* kmixWindow = qobject_cast<KMixWindow*>(_mainWindow);
++      kDebug() << "kmixWindow to redraw: " << kmixWindow << ", not-casted=" 
<< _mainWindow;
++      if (kmixWindow != 0)
++      {
++              kmixWindow->redrawMixer(mixerId);
++      }
++}
+ 
++void KMixerWidget::refreshVolumeLevelsToplevel()
++{
++      foreach ( ViewBase* vbase, _views)
++      {
++              vbase->refreshVolumeLevels();
++      }
++}
+ 
++
+ /**
+  * Returns the current View. Normally we have only one View, so we always 
return the first view.
+  * This method is only here for one reason: We can plug in an action in the 
main menu, so that
+Index: kmix/gui/viewbase.h
+===================================================================
+--- kmix/gui/viewbase.h        (revision 1270927)
++++ kmix/gui/viewbase.h        (revision 1270928)
+@@ -114,6 +114,8 @@
+    GUIProfile* guiProfile() { return _guiprof; };
+    KActionCollection* actionCollection() { return _actions; };
+ 
++   QSet<Mixer*>& getMixers() { return _mixers; };
++
+     /**
+      * Contains the widgets for the _mixSet. There is a 1:1 relationship, 
which means:
+      * _mdws[i] is the Widget for the MixDevice _mixSet[i] - please see 
ViewBase::createDeviceWidgets().
+@@ -124,7 +126,7 @@
+ 
+ signals:
+     void rebuildGUI();
+-    void redrawMixer( const QString& mixer_ID );
++    //void redrawMixer( const QString& mixer_ID );
+ 
+ 
+ protected:

Reply via email to