summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--SwifTools/Notifier/GrowlNotifier.mm1
-rw-r--r--SwifTools/Notifier/GrowlNotifierDelegate.h1
-rw-r--r--SwifTools/Notifier/GrowlNotifierDelegate.mm1
3 files changed, 3 insertions, 0 deletions
diff --git a/SwifTools/Notifier/GrowlNotifier.mm b/SwifTools/Notifier/GrowlNotifier.mm
index 31eabd3..b0f26ce 100644
--- a/SwifTools/Notifier/GrowlNotifier.mm
+++ b/SwifTools/Notifier/GrowlNotifier.mm
@@ -3,70 +3,71 @@
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#include <SwifTools/Notifier/GrowlNotifier.h>
#include <boost/smart_ptr/make_shared.hpp>
#include <set>
#include <SwifTools/Notifier/GrowlNotifierDelegate.h>
#include <SwifTools/Cocoa/CocoaUtil.h>
#include <Swiften/Base/foreach.h>
#include <Swiften/Base/ByteArray.h>
#pragma GCC diagnostic ignored "-Wold-style-cast"
namespace {
struct Context {
Context(const boost::function<void()>& callback) : callback(new boost::function<void()>(callback)) {}
boost::function<void()>* callback;
};
}
namespace Swift {
class GrowlNotifier::Private {
public:
std::set<Context*> pendingNotifications;
boost::intrusive_ptr<GrowlNotifierDelegate> delegate;
};
GrowlNotifier::GrowlNotifier(const std::string& name) {
p = boost::make_shared<Private>();
p->delegate = boost::intrusive_ptr<GrowlNotifierDelegate>([[GrowlNotifierDelegate alloc] init], false);
+ p->delegate.get().notifier = this;
p->delegate.get().name = STD2NSSTRING(name);
NSMutableArray* allNotifications = [[NSMutableArray alloc] init];
foreach(Type type, getAllTypes()) {
[allNotifications addObject: STD2NSSTRING(typeToString(type))];
}
NSMutableArray* defaultNotifications = [[NSMutableArray alloc] init];
foreach(Type type, getDefaultTypes()) {
[defaultNotifications addObject: STD2NSSTRING(typeToString(type))];
}
p->delegate.get().registrationDictionary = [[[NSDictionary alloc]
initWithObjects: [NSArray arrayWithObjects: allNotifications, defaultNotifications, nil]
forKeys: [NSArray arrayWithObjects: GROWL_NOTIFICATIONS_ALL, GROWL_NOTIFICATIONS_DEFAULT, nil]] autorelease];
[allNotifications release];
[defaultNotifications release];
[GrowlApplicationBridge setGrowlDelegate: p->delegate.get()];
}
GrowlNotifier::~GrowlNotifier() {
[GrowlApplicationBridge setGrowlDelegate: nil];
foreach (Context* context, p->pendingNotifications) {
delete context;
}
p->pendingNotifications.clear();
}
void GrowlNotifier::showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picturePath, boost::function<void()> callback) {
ByteArray picture;
readByteArrayFromFile(picture, picturePath.string());
Context* context = new Context(callback);
diff --git a/SwifTools/Notifier/GrowlNotifierDelegate.h b/SwifTools/Notifier/GrowlNotifierDelegate.h
index 7a556cc..b7f0968 100644
--- a/SwifTools/Notifier/GrowlNotifierDelegate.h
+++ b/SwifTools/Notifier/GrowlNotifierDelegate.h
@@ -1,28 +1,29 @@
/*
* Copyright (c) 2011 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#import <Growl/Growl.h>
namespace Swift {
class GrowlNotifier;
}
@interface GrowlNotifierDelegate : NSObject<GrowlApplicationBridgeDelegate> {
Swift::GrowlNotifier* notifier;
NSString* name;
NSDictionary* registrationDictionary;
}
@property (nonatomic, retain) NSDictionary* registrationDictionary;
@property (nonatomic, copy) NSString* name;
+@property (nonatomic) Swift::GrowlNotifier* notifier;
- (NSDictionary*) registrationDictionaryForGrowl;
- (NSString *) applicationNameForGrowl;
- (void) growlNotificationWasClicked: (id) clickContext;
- (void) growlNotificationTimedOut: (id) clickContext;
@end
diff --git a/SwifTools/Notifier/GrowlNotifierDelegate.mm b/SwifTools/Notifier/GrowlNotifierDelegate.mm
index c7f725f..6952cab 100644
--- a/SwifTools/Notifier/GrowlNotifierDelegate.mm
+++ b/SwifTools/Notifier/GrowlNotifierDelegate.mm
@@ -1,34 +1,35 @@
/*
* Copyright (c) 2011 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#import "GrowlNotifierDelegate.h"
#include <SwifTools/Notifier/GrowlNotifier.h>
@implementation GrowlNotifierDelegate;
@synthesize registrationDictionary;
@synthesize name;
+@synthesize notifier;
using namespace Swift;
- (NSString *) applicationNameForGrowl {
return name;
}
- (NSDictionary*) registrationDictionaryForGrowl {
return registrationDictionary;
}
- (void) growlNotificationWasClicked: (id) clickContext {
notifier->handleNotificationClicked(clickContext);
}
- (void) growlNotificationTimedOut: (id) clickContext {
notifier->handleNotificationTimedOut(clickContext);
}
@end