diff options
Diffstat (limited to 'src/daemon/NotificationsService.cpp')
| -rw-r--r-- | src/daemon/NotificationsService.cpp | 116 |
1 files changed, 63 insertions, 53 deletions
diff --git a/src/daemon/NotificationsService.cpp b/src/daemon/NotificationsService.cpp index 4201643..07cd3bf 100644 --- a/src/daemon/NotificationsService.cpp +++ b/src/daemon/NotificationsService.cpp @@ -42,14 +42,14 @@ NotificationsService::NotificationsService(TQT_DBusConnection &conn) NotificationsService::~NotificationsService() { - notificationMap.clear(); + mNotificationMap.clear(); } void NotificationsService::closeNotifyWidget(TQ_UINT32 id, TQ_UINT32 reason) { - if (notificationMap[id]) { - notificationMap[id]->close(); - notificationMap.remove(id); + if (mNotificationMap[id]) { + mNotificationMap[id]->close(); + mNotificationMap.remove(id); } if ( !emitNotificationClosed(id, reason) ) { @@ -109,103 +109,113 @@ void NotificationsService::NotifyAsync( const TQMap<TQString, TQT_DBusVariant>& hints, TQ_INT32 timeout) { - TQ_UINT32 nId=id; -// if (nId != 0 && !notificationMap.contains(nId)) + TQ_UINT32 nId = id; +// if (nId != 0 && !mNotificationMap.contains(nId)) // tqDebug("Requested id %i is not valid", nId); - bool found = notificationMap.contains(nId); - if (nId == 0 || !notificationMap.contains(nId)) // new notification + if (nId == 0 || !mNotificationMap.contains(nId)) // new notification { nId = ++mNotificationId; - notificationMap[nId] = new NotifyWidget(0, app_name.ascii(), nId); - notificationMap[nId]->setMinimumSize(200, 40); - connect(notificationMap[nId], TQ_SIGNAL(notificationClosed(TQ_UINT32, TQ_UINT32)), + mNotificationMap[nId] = new NotifyWidget(0, app_name.ascii(), nId); + mNotificationMap[nId]->setMinimumSize(200, 40); + + connect(mNotificationMap[nId], TQ_SIGNAL(notificationClosed(TQ_UINT32, TQ_UINT32)), this, TQ_SLOT(closeNotifyWidget(TQ_UINT32, TQ_UINT32))); } + if (!icon.isEmpty()) { + if (!mNotificationMap[nId]->setIcon(icon)) + tqDebug("There was an error setting the icon"); + } + if(!hints.empty()) { TQString errStr; TQMap<TQString, TQT_DBusVariant>::const_iterator it; for ( it = hints.begin(); it != hints.end(); ++it ) { bool ok = true; - if(it.key().latin1()=="category") +// tqDebug("Processing hint %s", it.key().latin1()); + if(it.key()=="category") { - notificationMap[nId]->setCategory(it.data().value.toString(&ok)); + mNotificationMap[nId]->setCategory(it.data().value.toString(&ok)); if(!ok) errStr += " category"; } - else if (it.key().latin1()=="image-path") + else if (it.key()=="image-path" || it.key()=="image_path") { - notificationMap[nId]->setImage(it.data().value.toString(&ok)); + mNotificationMap[nId]->setImage(it.data().value.toString(&ok)); if(!ok) errStr += " image-path"; } - else if (it.key().latin1()=="image-data" || it.key().latin1()=="image_data" || it.key().latin1()=="icon_data") + else if (it.key()=="image-data" || it.key()=="image_data" || it.key()=="icon_data") { - notificationMap[nId]->setImageData(it.data().value.toTQValueList(&ok)); + mNotificationMap[nId]->setImageData(it.data().value.toStruct(&ok)); if(!ok) errStr += " image-data"; } - else if (it.key().latin1()=="sound-file") + else if (it.key()=="sound-file") { - notificationMap[nId]->setSoundFile(it.data().value.toString(&ok)); + mNotificationMap[nId]->setSoundFile(it.data().value.toString(&ok)); if(!ok) errStr += " sound-file"; } - else if (it.key().latin1()=="sound-name") + else if (it.key()=="sound-name") { - notificationMap[nId]->setSoundName(it.data().value.toString(&ok)); + mNotificationMap[nId]->setSoundName(it.data().value.toString(&ok)); if(!ok) errStr += " sound-name"; } - else if (it.key().latin1()=="suppress-sound") + else if (it.key()=="suppress-sound") { - notificationMap[nId]->setSuppressSound(it.data().value.toBool(&ok)); + mNotificationMap[nId]->setSuppressSound(it.data().value.toBool(&ok)); if(!ok) errStr += " suppress-sound"; } - else if (it.key().latin1()=="transient") + else if (it.key()=="resident") + { + mNotificationMap[nId]->setResident(it.data().value.toBool(&ok)); + if(!ok) errStr += " resident"; + } + else if (it.key()=="transient") { - notificationMap[nId]->setTransient(it.data().value.toBool(&ok)); + mNotificationMap[nId]->setTransient(it.data().value.toBool(&ok)); if(!ok) errStr += " transient"; } - else if (it.key().latin1()=="urgency") + else if (it.key()=="urgency") { - notificationMap[nId]->setUrgency(it.data().value.toUInt16(&ok)); + mNotificationMap[nId]->setUrgency(it.data().value.toByte(&ok)); if(!ok) errStr += " urgency"; } - else if (it.key().latin1()=="sender-pid") + else if (it.key()=="sender-pid") { - notificationMap[nId]->setSenderPid(it.data().value.toUInt64(&ok)); + mNotificationMap[nId]->setSenderPid(it.data().value.toInt64(&ok)); if(!ok) errStr += " sender-pid"; } } if(! errStr.isNull() ) - tqDebug("There was an error converting some of the hint values:" + errStr); - } - - notificationMap[nId]->setFrameStyle( TQFrame::NoFrame ); -// notificationMap[nId]->setPaletteBackgroundColor(TQt::black); -// notificationMap[nId]->setPaletteForegroundColor(TQt::white); - - if (icon.isEmpty() || ! notificationMap[nId]->setIcon(icon)) { - notificationMap[nId]->setTextFormat(TQt::RichText); - notificationMap[nId]->setText("<b>" + app_name + ": " + summary + "</b><p>" + body + "</p>"); + tqDebug("There was an error converting some of the hint values: " + errStr); } - notificationMap[nId]->setActions(actions); - notificationMap[nId]->setTimeout(timeout); - notificationMap[nId]->adjustSize(); - notificationMap[nId]->raise(); - notificationMap[nId]->show(); - notificationMap[nId]->setActiveWindow(); + else + tqDebug("hints is empty "); + + mNotificationMap[nId]->setText("<b>" + app_name + ": " + summary + "</b><p>" + body + "</p>"); + mNotificationMap[nId]->setActions(actions); + if(mNotificationMap[nId]->isTransient() && timeout == 0) + timeout = -1; // use server defined timeout (transient bypasses persistence on the server) + if(mNotificationMap[nId]->isResident() && timeout != 0) + timeout = 0; // resident takes advantage of persistence) + mNotificationMap[nId]->setTimeout(timeout); + mNotificationMap[nId]->adjustSize(); + mNotificationMap[nId]->raise(); + mNotificationMap[nId]->show(); + mNotificationMap[nId]->setActiveWindow(); // make sure we display the new notification above the older one // and if we reach the top of the screen we start at the bottom TQDesktopWidget *d = TQApplication::desktop(); - if (notificationMap.contains(nId-1) && notificationMap[nId-1] != 0) { - TQPoint pos = notificationMap[nId-1]->pos(); - if(pos.y()-notificationMap[nId-1]->height() < 0) - pos.setY(d->height()-notificationMap[nId]->height()); - pos.setX(d->width()-notificationMap[nId]->width()); - notificationMap[nId]->move(pos.x(),pos.y()-notificationMap[nId-1]->height()); + if (mNotificationMap.contains(nId-1) && mNotificationMap[nId-1] != 0) { + TQPoint pos = mNotificationMap[nId-1]->pos(); + if(pos.y()-mNotificationMap[nId-1]->height() < 0) + pos.setY(d->height()-mNotificationMap[nId]->height()); + pos.setX(d->width()-mNotificationMap[nId]->width()); + mNotificationMap[nId]->move(pos.x(),pos.y()-mNotificationMap[nId-1]->height()); } else { - notificationMap[nId]->move( d->width()-notificationMap[nId]->width(), - d->height()-notificationMap[nId]->height()); + mNotificationMap[nId]->move( d->width()-mNotificationMap[nId]->width(), + d->height()-mNotificationMap[nId]->height()); } NotifyAsyncReply(asyncCallId, nId); |
