[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/workspace/plasma/applets/systemtray/protocols/dbussystemtray
From: Marco Martin <notmart () gmail ! com>
Date: 2009-04-15 20:08:25
Message-ID: 1239826105.700094.7804.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 954478 by mart:
asincronously fetch all the properties...
at once
M +68 -44 dbussystemtraytask.cpp
M +1 -3 dbussystemtraytask.h
--- trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/dbussystemtray/dbussystemtraytask.cpp \
#954477:954478 @@ -65,16 +65,18 @@
void iconDestroyed(QObject *obj);
void refresh();
- void syncIcon();
- void syncAttentionIcon();
void blinkAttention();
- void syncMovie();
void updateMovieFrame();
void syncToolTip();
void syncStatus(QString status);
+ //callbacks
+ void setCategory(const QString &);
+ void syncToolTip(const ToolTipStruct &);
+ void syncMovie(const ImageVector &);
+ void refreshCallback(QDBusPendingCallWatcher *call);
DBusSystemTrayTask *q;
@@ -108,14 +110,12 @@
d->notificationAreaItemInterface = new org::kde::NotificationAreaItem(service, \
"/NotificationAreaItem",
QDBusConnection::sessionBus());
- d->notificationAreaItemInterface->title();
- d->category = (ItemCategory)metaObject()->enumerator(metaObject()->indexOfEnumera \
tor("ItemCategory")).keyToValue(d->notificationAreaItemInterface->category().toLatin1());
+ d->refresh();
-
- connect(d->notificationAreaItemInterface, SIGNAL(NewIcon()), this, \
SLOT(syncIcon()));
- connect(d->notificationAreaItemInterface, SIGNAL(NewAttentionIcon()), this, \
SLOT(syncAttentionIcon()));
- connect(d->notificationAreaItemInterface, SIGNAL(NewToolTip()), this, \
SLOT(syncToolTip())); + connect(d->notificationAreaItemInterface, \
SIGNAL(NewIcon()), this, SLOT(refresh())); + \
connect(d->notificationAreaItemInterface, SIGNAL(NewAttentionIcon()), this, \
SLOT(refresh())); + connect(d->notificationAreaItemInterface, \
SIGNAL(NewToolTip()), this, SLOT(refresh()));
connect(d->notificationAreaItemInterface, SIGNAL(NewStatus(QString)), this, \
SLOT(syncStatus(QString))); }
@@ -219,49 +219,68 @@
void DBusSystemTrayTaskPrivate::refresh()
{
- syncIcon();
- syncAttentionIcon();
- syncMovie();
- syncToolTip();
- syncStatus(notificationAreaItemInterface->status());
+ QDBusMessage message = \
QDBusMessage::createMethodCall(notificationAreaItemInterface->service(), + \
notificationAreaItemInterface->path(), "org.freedesktop.DBus.Properties", "GetAll"); \
+ + message << notificationAreaItemInterface->interface();
+ QDBusPendingCall call = \
notificationAreaItemInterface->connection().asyncCall(message); + \
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, q); + \
q->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), q, \
SLOT(refreshCallback(QDBusPendingCallWatcher *))); }
-QPixmap DBusSystemTrayTaskPrivate::iconDataToPixmap(const ImageStruct &icon) const
+
+void DBusSystemTrayTaskPrivate::refreshCallback(QDBusPendingCallWatcher *call)
{
- QImage iconImage( icon.width, icon.height, QImage::Format_ARGB32 );
- memcpy(iconImage.bits(), (uchar*)icon.data.data(), iconImage.numBytes());
+ QDBusPendingReply<QVariantMap> reply = *call;
+ QVariantMap properties = reply.argumentAt<0>();
+ if (!reply.isError()) {
+ setCategory(properties["Category"].toString());
- return QPixmap::fromImage(iconImage);
-}
+ syncStatus(properties["Status"].toString());
-//normal icon
-void DBusSystemTrayTaskPrivate::syncIcon()
-{
- if (notificationAreaItemInterface->icon().length() > 0) {
- icon = KIcon(notificationAreaItemInterface->icon());
- } else {
- icon = iconDataToPixmap(notificationAreaItemInterface->image());
- }
+ //Icon
+ if (properties["Icon"].toString().length() > 0) {
+ icon = KIcon(properties["Icon"].toString());
+ } else {
+ ImageStruct image;
+ properties["Image"].value<QDBusArgument>()>>image;
+ icon = iconDataToPixmap(image);
+ }
- if (status != DBusSystemTrayTask::NeedsAttention) {
- foreach (Plasma::IconWidget *iconWidget, iconWidgets) {
- iconWidget->setIcon(icon);
+ if (status != DBusSystemTrayTask::NeedsAttention) {
+ foreach (Plasma::IconWidget *iconWidget, iconWidgets) {
+ iconWidget->setIcon(icon);
+ }
}
- }
-}
+ //Attention icon
+ if (properties["AttentionIcon"].toString().length() > 0) {
+ attentionIcon = KIcon(properties["AttentionIcon"].toString());
+ } else {
+ ImageStruct image;
+ properties["AttentionImage"].value<QDBusArgument>()>>image;
+ attentionIcon = iconDataToPixmap(image);
+ }
-//Attention icon and movie
+ ImageVector movie;
+ properties["AttentionMovie"].value<QDBusArgument>()>>movie;
+ syncMovie(movie);
-void DBusSystemTrayTaskPrivate::syncAttentionIcon()
-{
- if (notificationAreaItemInterface->attentionIcon().length() > 0) {
- attentionIcon = KIcon(notificationAreaItemInterface->attentionIcon());
- } else {
- attentionIcon = \
iconDataToPixmap(notificationAreaItemInterface->attentionImage()); + \
ToolTipStruct toolTip; + \
properties["ToolTip"].value<QDBusArgument>()>>toolTip; + syncToolTip(toolTip);
}
+ delete call;
}
+QPixmap DBusSystemTrayTaskPrivate::iconDataToPixmap(const ImageStruct &icon) const
+{
+ QImage iconImage( icon.width, icon.height, QImage::Format_ARGB32 );
+ memcpy(iconImage.bits(), (uchar*)icon.data.data(), iconImage.numBytes());
+
+ return QPixmap::fromImage(iconImage);
+}
+
void DBusSystemTrayTaskPrivate::blinkAttention()
{
if (blink) {
@@ -276,9 +295,8 @@
blink = !blink;
}
-void DBusSystemTrayTaskPrivate::syncMovie()
+void DBusSystemTrayTaskPrivate::syncMovie(const ImageVector &movieData)
{
- ImageVector movieData = notificationAreaItemInterface->attentionMovie();
movie = QVector<QPixmap>(movieData.size());
if (!movieData.isEmpty()) {
@@ -288,6 +306,8 @@
}
}
+
+
void DBusSystemTrayTaskPrivate::updateMovieFrame()
{
foreach (Plasma::IconWidget *iconWidget, iconWidgets) {
@@ -299,10 +319,8 @@
//toolTip
-void DBusSystemTrayTaskPrivate::syncToolTip()
+void DBusSystemTrayTaskPrivate::syncToolTip(const ToolTipStruct &tipStruct)
{
- ToolTipStruct tipStruct = notificationAreaItemInterface->toolTip();
-
if (tipStruct.title.isEmpty()) {
foreach (Plasma::IconWidget *iconWidget, iconWidgets) {
Plasma::ToolTipManager::self()->clearContent(iconWidget);
@@ -378,6 +396,12 @@
emit q->changed(q);
}
+
+void DBusSystemTrayTaskPrivate::setCategory(const QString &cat)
+{
+ category = (DBusSystemTrayTask::ItemCategory)q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ItemCategory")).keyToValue(cat.toLatin1());
}
+}
+
#include "dbussystemtraytask.moc"
--- trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/dbussystemtray/dbussystemtraytask.h \
#954477:954478 @@ -71,10 +71,8 @@
Q_PRIVATE_SLOT(d, void iconDestroyed(QObject *obj))
Q_PRIVATE_SLOT(d, void refresh())
- Q_PRIVATE_SLOT(d, void syncIcon())
- Q_PRIVATE_SLOT(d, void syncAttentionIcon())
- Q_PRIVATE_SLOT(d, void syncToolTip())
Q_PRIVATE_SLOT(d, void syncStatus(QString status))
+ Q_PRIVATE_SLOT(d, void refreshCallback(QDBusPendingCallWatcher *))
Q_PRIVATE_SLOT(d, void updateMovieFrame())
Q_PRIVATE_SLOT(d, void blinkAttention())
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic