diff options
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);  	}  }  | 
 Swift