ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #00260
[Branch ~agateau/plasma-indicatordisplay/trunk] Rev 92: Avoid a dbus round-trip to fetch server type, it's in the serverAdded signal.
------------------------------------------------------------
revno: 92
committer: Aurelien Gateau <aurelien.gateau@xxxxxxxxxxxxx>
branch nick: plasma-indicatordisplay
timestamp: Thu 2009-09-17 14:48:25 +0200
message:
Avoid a dbus round-trip to fetch server type, it's in the serverAdded signal.
modified:
src/listenermodel.cpp
src/listenermodel.h
--
lp:plasma-indicatordisplay
https://code.launchpad.net/~agateau/plasma-indicatordisplay/trunk
Your team ayatana-commits is subscribed to branch lp:plasma-indicatordisplay.
To unsubscribe from this branch go to https://code.launchpad.net/~agateau/plasma-indicatordisplay/trunk/+edit-subscription.
=== modified file 'src/listenermodel.cpp'
--- src/listenermodel.cpp 2009-09-15 15:33:21 +0000
+++ src/listenermodel.cpp 2009-09-17 12:48:25 +0000
@@ -43,10 +43,9 @@
QIndicate::Listener* mListener;
QString mAcceptedServerType;
- // Servers and indicators we have received, but for which server type is
- // either unknown or does not match mAcceptedServerType (we keep them in to
- // avoid asking the server type again and again when indicators change)
- QHash<QIndicate::Listener::Server*, IndicatorSet> mWaitingServers;
+ // Indicators we have received, but for which we haven't received a server
+ // yet
+ QHash<QIndicate::Listener::Server*, IndicatorSet> mWaitingIndicators;
QHash<QIndicate::Listener::Server*, QStandardItem*> mItemForServer;
ItemForIndicatorHash mItemForIndicator;
@@ -86,7 +85,7 @@
d->mAcceptedServerType = acceptedServerType;
connect(d->mListener,
SIGNAL(serverAdded(QIndicate::Listener::Server*, const QString&)),
- SLOT(slotServerAdded(QIndicate::Listener::Server*))
+ SLOT(slotServerAdded(QIndicate::Listener::Server*, const QString&))
);
connect(d->mListener,
SIGNAL(serverRemoved(QIndicate::Listener::Server*, const QString&)),
@@ -122,48 +121,18 @@
delete d;
}
-void ListenerModel::slotServerAdded(QIndicate::Listener::Server* server)
+void ListenerModel::slotServerAdded(QIndicate::Listener::Server* server, const QString& type)
{
+ if (type != d->mAcceptedServerType) {
+ d->mWaitingIndicators.remove(server);
+ return;
+ }
+
if (d->mItemForServer.contains(server)) {
kWarning() << "We already know about server" << server;
return;
}
- if (d->mWaitingServers.contains(server)) {
- kWarning() << "This server is already in the waiting list" << server;
- return;
- }
-
- d->mWaitingServers.insert(server, IndicatorSet());
-
- d->mListener->getServerType(server,
- this,
- SLOT(slotServerTypeReceived(
- QIndicate::Listener::Server*,
- const QByteArray&)
- )
- );
-}
-
-void ListenerModel::slotServerTypeReceived(QIndicate::Listener::Server* server, const QByteArray& _type)
-{
- QString type = QIndicate::Decode::stringFromValue(_type);
- if (d->mItemForServer.contains(server)) {
- kError() << "We already display this server" << server;
- return;
- }
-
- if (type != d->mAcceptedServerType) {
- return;
- }
-
- IndicatorSet set;
- if (d->mWaitingServers.contains(server)) {
- set = d->mWaitingServers.take(server);
- } else {
- kWarning() << "Strange, the server is not in the waiting list" << server;
- }
-
QStandardItem* item = new QStandardItem;
item->setData(QVariant::fromValue(server), ServerRole);
item->setData(type, ServerTypeRole);
@@ -171,6 +140,7 @@
appendRow(item);
// Simulate slotIndicatorAdded for waiting indicators
+ IndicatorSet set = d->mWaitingIndicators.take(server);
Q_FOREACH(QIndicate::Listener::Indicator* indicator, set) {
slotIndicatorAdded(server, indicator);
}
@@ -214,9 +184,8 @@
void ListenerModel::slotServerRemoved(QIndicate::Listener::Server* server)
{
- if (d->mWaitingServers.contains(server)) {
- kDebug() << "Removing server from waiting list" << server;
- d->mWaitingServers.remove(server);
+ if (d->mWaitingIndicators.contains(server)) {
+ d->mWaitingIndicators.remove(server);
return;
}
QStandardItem* item = d->mItemForServer.value(server);
@@ -242,12 +211,9 @@
QStandardItem* serverItem = d->mItemForServer.value(server);
if (!serverItem) {
- if (!d->mWaitingServers.contains(server)) {
- kWarning() << "An indicator has been added for a server we don't know about" << server << indicator;
- slotServerAdded(server);
- }
+ kWarning() << "We received indicatorAdded() signal before serverAdded() signal!";
+ d->mWaitingIndicators[server] << indicator;
// We will be called again when the server is ready
- d->mWaitingServers[server].insert(indicator);
return;
}
@@ -266,8 +232,8 @@
{
QStandardItem* item = d->mItemForIndicator.value(ServerIndicatorPair(server, indicator));
if (!item) {
- if (!d->mWaitingServers.contains(server)) {
- kError() << "No item for indicator" << indicator;
+ if (!d->mWaitingIndicators.contains(server)) {
+ kError() << "Unknown indicator" << indicator;
}
return;
}
@@ -284,8 +250,8 @@
void ListenerModel::slotIndicatorRemoved(QIndicate::Listener::Server* server,
QIndicate::Listener::Indicator* indicator)
{
- if (d->mWaitingServers.contains(server)) {
- d->mWaitingServers[server].remove(indicator);
+ if (d->mWaitingIndicators.contains(server)) {
+ d->mWaitingIndicators[server].remove(indicator);
return;
}
QStandardItem* item = d->mItemForIndicator.value(ServerIndicatorPair(server, indicator));
=== modified file 'src/listenermodel.h'
--- src/listenermodel.h 2009-09-15 15:33:21 +0000
+++ src/listenermodel.h 2009-09-17 12:48:25 +0000
@@ -46,10 +46,9 @@
void drawAttentionChanged(const QModelIndex&);
private Q_SLOTS:
- void slotServerAdded(QIndicate::Listener::Server* server);
+ void slotServerAdded(QIndicate::Listener::Server* server, const QString& type);
void slotServerRemoved(QIndicate::Listener::Server* server);
void slotDesktopFileReceived(QIndicate::Listener::Server* server, const QByteArray&);
- void slotServerTypeReceived(QIndicate::Listener::Server* server, const QByteArray&);
void slotIndicatorAdded(QIndicate::Listener::Server* server,
QIndicate::Listener::Indicator* indicator);