diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-09-12 18:29:39 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-09-13 19:19:52 (GMT) |
commit | ef1052bbdb315aaa1c6254098ea05638d9a25b2f (patch) | |
tree | 482277f649f6c0fc00027514ea8986861fe33437 /SwifTools/Notifier/GrowlNotifier.cpp | |
parent | 3ae8cccfe9c6bfed5dda5f024a5cb046ccfc9793 (diff) | |
download | swift-contrib-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.zip swift-contrib-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.tar.bz2 |
Added presence notifier.
Diffstat (limited to 'SwifTools/Notifier/GrowlNotifier.cpp')
-rw-r--r-- | SwifTools/Notifier/GrowlNotifier.cpp | 18 |
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); } } |