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

List:       kde-commits
Subject:    branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray
From:       Marco Martin <notmart () gmail ! com>
Date:       2010-04-23 16:22:04
Message-ID: 20100423162204.66F07AC8A0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1117980 by mart:

backport r1117944:
manage plasmoid tasks in a correct way
CCBUG: 235066


 M  +1 -1      core/manager.cpp  
 M  +2 -2      protocols/plasmoid/plasmoidtask.cpp  
 M  +1 -1      protocols/plasmoid/plasmoidtask.h  
 M  +38 -19    protocols/plasmoid/plasmoidtaskprotocol.cpp  
 M  +4 -5      protocols/plasmoid/plasmoidtaskprotocol.h  


--- branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray/core/manager.cpp \
#1117979:1117980 @@ -256,7 +256,7 @@
 
 void Manager::addApplet(const QString appletName, Plasma::Applet *parent)
 {
-    d->plasmoidProtocol->addApplet(appletName, parent);
+    d->plasmoidProtocol->addApplet(appletName, 0, parent);
 }
 
 void Manager::removeApplet(const QString appletName, Plasma::Applet *parent)
--- branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray/protocols/plasmoid/plasmoidtask.cpp \
#1117979:1117980 @@ -74,7 +74,7 @@
 
 PlasmoidTask::~PlasmoidTask()
 {
-    emit taskDeleted(d->typeId);
+    emit taskDeleted(d->host, d->typeId);
     delete d;
 }
 
@@ -175,7 +175,7 @@
 void PlasmoidTask::appletDestroyed(QObject *object)
 {
     if (object == d->applet) {
-        emit taskDeleted(d->typeId);
+        d->applet = 0;
         deleteLater();
     }
 }
--- branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray/protocols/plasmoid/plasmoidtask.h \
#1117979:1117980 @@ -53,7 +53,7 @@
     void newAppletStatus(Plasma::ItemStatus status);
 
 Q_SIGNALS:
-    void taskDeleted(QString typeId);
+    void taskDeleted(Plasma::Applet *host, const QString &typeId);
 
 protected:
     virtual QGraphicsWidget* createWidget(Plasma::Applet *applet);
--- branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray/protocols/plasmoid/plasmoidtaskprotocol.cpp \
#1117979:1117980 @@ -48,32 +48,38 @@
 
 void PlasmoidProtocol::forwardConstraintsEvent(Plasma::Constraints constraints)
 {
-    foreach (PlasmoidTask *task, m_tasks) {
-        task->forwardConstraintsEvent(constraints);
+    typedef QHash<QString, PlasmoidTask*> TfoType;
+    foreach (TfoType tasksForHost, m_tasks) {
+        foreach (PlasmoidTask *task, tasksForHost) {
+            task->forwardConstraintsEvent(constraints);
+        }
     }
 }
 
 void PlasmoidProtocol::loadFromConfig(const KConfigGroup &cg, Plasma::Applet \
*parent)  {
-    QHash<QString, PlasmoidTask*> existingTasks = m_tasks;
-    m_tasks.clear();
+    QHash<QString, PlasmoidTask*> existingTasks = m_tasks.value(parent);
 
+    if (m_tasks.contains(parent)) {
+        m_tasks[parent].clear();
+    }
+
     KConfigGroup appletGroup(&cg, "Applets");
     foreach (const QString &groupName, appletGroup.groupList()) {
         KConfigGroup childGroup(&appletGroup, groupName);
         QString appletName = childGroup.readEntry("plugin", QString());
 
-        if (m_tasks.contains(appletName)) {
+        if (m_tasks.contains(parent) && m_tasks.value(parent).contains(appletName)) \
{  continue;
         }
 
         if (existingTasks.contains(appletName)) {
-            m_tasks.insert(appletName, existingTasks.value(appletName));
+            m_tasks[parent].insert(appletName, existingTasks.value(appletName));
             existingTasks.remove(appletName);
             continue;
         }
 
-        addApplet(appletName, parent);
+        addApplet(appletName, groupName.toInt(), parent);
 
         existingTasks.remove(appletName);
     }
@@ -88,11 +94,11 @@
     }
 }
 
-void PlasmoidProtocol::addApplet(const QString appletName, Plasma::Applet *parent)
+void PlasmoidProtocol::addApplet(const QString appletName, const int id, \
Plasma::Applet *parent)  {
     kDebug() << "Registering task with the manager" << appletName;
 
-    PlasmoidTask *task = new PlasmoidTask(appletName, 0, this, parent);
+    PlasmoidTask *task = new PlasmoidTask(appletName, id, this, parent);
 
     if (!task->isValid()) {
         // we failed to load our applet *sob*
@@ -100,36 +106,49 @@
         return;
     }
 
-    m_tasks[appletName] = task;
-    connect(task, SIGNAL(taskDeleted(QString)), this, SLOT(cleanupTask(QString)));
+    m_tasks[parent].insert(appletName, task);
+
+    connect(task, SIGNAL(taskDeleted(Plasma::Applet *, const QString &)), this, \
SLOT(cleanupTask(plasma::Applet *, const QString &)));  emit taskCreated(task);
 }
 
 void PlasmoidProtocol::removeApplet(const QString appletName, Plasma::Applet \
*parent)  {
-    Plasma::Applet *applet = qobject_cast<Plasma::Applet \
*>(m_tasks[appletName]->widget(parent, true)); +    if (!m_tasks.contains(parent) || \
!m_tasks.value(parent).contains(appletName)) { +        return;
+    }
 
+    Plasma::Applet *applet = qobject_cast<Plasma::Applet \
*>(m_tasks.value(parent).value(appletName)->widget(parent, true)); +
     if (applet) {
         applet->destroy();
     }
 }
 
-void PlasmoidProtocol::cleanupTask(QString typeId)
+void PlasmoidProtocol::cleanupTask(Plasma::Applet *host, const QString &typeId)
 {
     kDebug() << "task with typeId" << typeId << "removed";
-    m_tasks.remove(typeId);
+    if (m_tasks.contains(host)) {
+        m_tasks[host].remove(typeId);
+        if (m_tasks.value(host).isEmpty()) {
+            m_tasks.remove(host);
+        }
+    }
 }
 
-QStringList PlasmoidProtocol::applets(const Plasma::Applet *host) const
+QStringList PlasmoidProtocol::applets(Plasma::Applet *host) const
 {
     QStringList list;
-    QHashIterator<QString, PlasmoidTask *> i(m_tasks);
+    if (!m_tasks.contains(host)) {
+        return list;
+    }
 
+    QHashIterator<QString, PlasmoidTask *> i(m_tasks.value(host));
+
+
     while (i.hasNext()) {
         i.next();
-        if (i.value()->host() == host) {
-            list << i.key();
-        }
+        list << i.key();
     }
 
     return list;
--- branches/KDE/4.4/kdebase/workspace/plasma/generic/applets/systemtray/protocols/plasmoid/plasmoidtaskprotocol.h \
#1117979:1117980 @@ -48,16 +48,15 @@
 
     void forwardConstraintsEvent(Plasma::Constraints constraints);
     void loadFromConfig(const KConfigGroup &cg, Plasma::Applet *parent);
-    void addApplet(const QString appletName, Plasma::Applet *parent);
+    void addApplet(const QString appletName, const int id, Plasma::Applet *parent);
     void removeApplet(const QString appletName, Plasma::Applet *parent);
-    QStringList applets(const Plasma::Applet *parent) const;
+    QStringList applets(Plasma::Applet *parent) const;
 
 private slots:
-    void cleanupTask(QString typeId);
+    void cleanupTask(Plasma::Applet *host, const QString &typeId);
 
 private:
-    //FIXME: applets must be indicized by name -and- parent
-    QHash<QString, PlasmoidTask*> m_tasks;
+    QHash<Plasma::Applet *, QHash<QString, PlasmoidTask*> > m_tasks;
 };
 
 }


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

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