19 #include "knotificationmanager_p.h"
25 #include <QtDBus/QtDBus>
34 #include "knotify_interface.h"
38 struct KNotificationManager::Private
41 org::kde::KNotify *knotify;
44 KNotificationManager * KNotificationManager::self()
51 KNotificationManager::KNotificationManager()
54 if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(
"org.kde.knotify")) {
59 kError() <<
"Couldn't start knotify from knotify4.desktop: " << error << endl;
63 new org::kde::KNotify(QLatin1String(
"org.kde.knotify"), QLatin1String(
"/Notify"), QDBusConnection::sessionBus(),
this);
64 connect(d->knotify, SIGNAL(notificationClosed(
int)),
65 this, SLOT(notificationClosed(
int)));
66 connect(d->knotify, SIGNAL(notificationActivated(
int,
int)),
67 this, SLOT(notificationActivated(
int,
int)));
71 KNotificationManager::~KNotificationManager()
77 void KNotificationManager::notificationActivated(
int id,
int action )
79 if(d->notifications.contains(
id))
81 kDebug(299) <<
id <<
" " << action;
83 d->notifications.remove(
id);
88 void KNotificationManager::notificationClosed(
int id )
90 if(d->notifications.contains(
id))
94 d->notifications.remove(
id);
102 if(force || d->notifications.contains(
id)) {
103 d->notifications.remove(
id);
105 d->knotify->closeNotification(
id);
109 bool KNotificationManager::notify(
KNotification* n,
const QPixmap &pix,
114 WId winId=n->
widget() ? n->
widget()->topLevelWidget()->winId() : 0;
116 QByteArray pixmapData;
118 QBuffer buffer(&pixmapData);
119 buffer.open(QIODevice::WriteOnly);
120 pix.save(&buffer,
"PNG");
123 QVariantList contextList;
125 foreach (
const Context& ctx, contexts)
128 vl << ctx.first << ctx.second;
137 args << n->
eventId() << (appname.isEmpty() ? KGlobal::mainComponent().componentName() : appname);
139 args << n->
title() << n->
text() << pixmapData <<
QVariant(actions) << timeout << qlonglong(winId) ;
140 return d->knotify->callWithCallback(
"event", args, n, SLOT(slotReceivedId(
int)), SLOT(slotReceivedIdError(QDBusError)));
145 d->notifications.insert(
id, n);
153 QByteArray pixmapData;
156 QBuffer buffer(&pixmapData);
157 buffer.open(QIODevice::WriteOnly);
158 n->
pixmap().save(&buffer,
"PNG");
166 QVariantList contextList;
168 foreach (
const Context& ctx, n->
contexts())
172 vl << ctx.first << ctx.second;
176 d->knotify->reemit(
id, contextList);
180 #include "knotificationmanager_p.moc"