[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