[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/system-monitor
From:       Petri Damstén <petri.damsten () kdemail ! net>
Date:       2009-09-09 12:09:11
Message-ID: 1252498151.205678.31157.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1021503 by pdamsten:

Parse temperatures correctly
BUG:200876

 M  +22 -19    temperature.cpp  
 M  +6 -2      temperature.h  


--- trunk/KDE/kdebase/workspace/plasma/applets/system-monitor/temperature.cpp #1021502:1021503
@@ -33,12 +33,16 @@
 using namespace KUnitConversion;
 
 Temperature::Temperature(QObject *parent, const QVariantList &args)
-    : SM::Applet(parent, args), m_tempModel(0)
+    : SM::Applet(parent, args)
+    , m_tempModel(0)
+    , m_rx(".*temp.*", Qt::CaseInsensitive)
 {
     setHasConfigurationInterface(true);
     resize(215 + 20 + 23, 109 + 20 + 25);
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
     connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SLOT(themeChanged()));
+    m_sourceTimer.setSingleShot(true);
+    connect(&m_sourceTimer, SIGNAL(timeout()), this, SLOT(sourcesAdded()));
 }
 
 Temperature::~Temperature()
@@ -53,28 +57,29 @@
     setInterval(cg.readEntry("interval", 2) * 1000);
     setTitle(i18n("Temperature"));
 
-    if (engine()->sources().count() == 0) {
-        connect(engine(), SIGNAL(sourceAdded(QString)), this, SLOT(initLater(const QString)));
-    } else {
-        parseSources();
+    /* At the time this method is running, not all source may be connected. */
+    connect(engine(), SIGNAL(sourceAdded(QString)), this, SLOT(sourceAdded(const QString)));
+    foreach (const QString& source, engine()->sources()) {
+        sourceAdded(source);
     }
 }
 
-void Temperature::parseSources()
+void Temperature::sourceAdded(const QString& name)
 {
-    KConfigGroup cg = config();
-    QStringList temperatures = engine()->sources()
-            .filter(QRegExp(".*temp.*", Qt::CaseInsensitive)).mid(0, 5);
-    setItems(cg.readEntry("temps", temperatures));
-    connectToEngine();
+    if (m_rx.indexIn(name) != -1) {
+        //kDebug() << m_rx.cap(1);
+        m_sources << name;
+        if (!m_sourceTimer.isActive()) {
+            m_sourceTimer.start(0);
+        }
+    }
 }
 
-void Temperature::initLater(const QString &name)
+void Temperature::sourcesAdded()
 {
-    // How we know all (cpu) sources are ready???
-    if (name == "system/uptime") {
-        QTimer::singleShot(0, this, SLOT(parseSources()));
-    }
+    KConfigGroup cg = config();
+    setItems(cg.readEntry("temps", m_sources.mid(0, 5)));
+    connectToEngine();
 }
 
 void Temperature::createConfigurationInterface(KConfigDialog *parent)
@@ -84,11 +89,9 @@
     m_tempModel.clear();
     m_tempModel.setHorizontalHeaderLabels(QStringList() << i18n("Sensor")
                                                         << i18n("Name"));
-    Plasma::DataEngine *engine = dataEngine("systemmonitor");
-    QStringList temps = engine->sources().filter(QRegExp(".*temp.*", Qt::CaseInsensitive));
 
     QStandardItem *parentItem = m_tempModel.invisibleRootItem();
-    foreach (const QString& temp, temps) {
+    foreach (const QString& temp, m_sources) {
         QStandardItem *item1 = new QStandardItem(temp);
         item1->setEditable(false);
         item1->setCheckable(true);
--- trunk/KDE/kdebase/workspace/plasma/applets/system-monitor/temperature.h #1021502:1021503
@@ -23,6 +23,7 @@
 #include "ui_temperature-config.h"
 #include <Plasma/DataEngine>
 #include <QStandardItemModel>
+#include <QTimer>
 
 namespace Plasma {
     class Meter;
@@ -38,19 +39,22 @@
         virtual void init();
 
     public slots:
-        void initLater(const QString &name);
         void dataUpdated(const QString &name, const Plasma::DataEngine::Data &data);
         void createConfigurationInterface(KConfigDialog *parent);
 
     private slots:
         void configAccepted();
-        void parseSources();
+        void sourceAdded(const QString& name);
+        void sourcesAdded();
         void themeChanged();
 
     private:
         Ui::config ui;
         QStandardItemModel m_tempModel;
         QHash<QString, QString> m_html;
+        QStringList m_sources;
+        QTimer m_sourceTimer;
+        QRegExp m_rx;
 
         QString temperatureTitle(const QString& source);
         bool addMeter(const QString& source);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic