summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-09-12 18:29:39 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-09-13 19:19:52 (GMT)
commitef1052bbdb315aaa1c6254098ea05638d9a25b2f (patch)
tree482277f649f6c0fc00027514ea8986861fe33437 /SwifTools/Notifier/GrowlNotifier.cpp
parent3ae8cccfe9c6bfed5dda5f024a5cb046ccfc9793 (diff)
downloadswift-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.zip
swift-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.tar.bz2
Added presence notifier.
Diffstat (limited to 'SwifTools/Notifier/GrowlNotifier.cpp')
-rw-r--r--SwifTools/Notifier/GrowlNotifier.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/SwifTools/Notifier/GrowlNotifier.cpp b/SwifTools/Notifier/GrowlNotifier.cpp
index 4c671ac..7ea7193 100644
--- a/SwifTools/Notifier/GrowlNotifier.cpp
+++ b/SwifTools/Notifier/GrowlNotifier.cpp
@@ -17,22 +17,30 @@
namespace {
struct Context {
Context() {}
- Context(const boost::function<void()>& callback) : callback(callback) {}
+ Context(const boost::function<void()>& callback) : callback(new boost::function<void()>(callback)) {}
- boost::function<void()> callback;
+ boost::function<void()>* callback;
};
- void notificationClicked(CFPropertyListRef growlContext) {
+ void processNotification(CFPropertyListRef growlContext, bool activateCallback) {
Context context;
CFDataRef growlContextData = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) growlContext, 0);
assert(CFDataGetLength(growlContextData) == sizeof(Context));
CFDataGetBytes(growlContextData, CFRangeMake(0, CFDataGetLength(growlContextData)), (UInt8*) &context);
- context.callback();
+ if (activateCallback) {
+ (*context.callback)();
+ }
+ delete context.callback;
+ }
+
+ void notificationClicked(CFPropertyListRef growlContext) {
+ processNotification(growlContext, true);
}
- void notificationTimedout(CFPropertyListRef) {
+ void notificationTimedout(CFPropertyListRef growlContext) {
+ processNotification(growlContext, false);
}
}