aboutsummaryrefslogtreecommitdiffstats
path: root/Source/NSNotificationCenterThreadingAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/NSNotificationCenterThreadingAdditions.m')
-rw-r--r--Source/NSNotificationCenterThreadingAdditions.m52
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/NSNotificationCenterThreadingAdditions.m b/Source/NSNotificationCenterThreadingAdditions.m
new file mode 100644
index 00000000..395275e4
--- /dev/null
+++ b/Source/NSNotificationCenterThreadingAdditions.m
@@ -0,0 +1,52 @@
+//
+// $Id$
+//
+// NSNotificationCenterThreadingAdditions.m
+// Enable NSNotification being sent from threads
+//
+// Copied from the TCMPortMapper project; original code available on
+// Google Code at <http://code.google.com/p/tcmportmapper/source/browse/TCMPortMapper/framework/NSNotificationCenterThreadingAdditions.m>
+//
+// Copyright (c) 2007-2008 TheCodingMonkeys:
+// Martin Pittenauer, Dominik Wagner, <http://codingmonkeys.de>
+// Some rights reserved: <http://opensource.org/licenses/mit-license.php>
+//
+
+#import "NSNotificationCenterThreadingAdditions.h"
+#import <pthread.h>
+
+@implementation NSNotificationCenter (NSNotificationCenterThreadingAdditions)
+
++ (void)_postNotification:(NSNotification *)aNotification {
+ [[self defaultCenter] postNotification:aNotification];
+}
+
++ (void)_postNotificationViaDictionary:(NSDictionary *)anInfoDictionary {
+ NSString *name = [anInfoDictionary objectForKey:@"name"];
+ id object = [anInfoDictionary objectForKey:@"object"];
+ [[self defaultCenter] postNotificationName:name
+ object:object
+ userInfo:nil];
+ [anInfoDictionary release];
+}
+
+
+- (void)postNotificationOnMainThread:(NSNotification *)aNotification {
+ if( pthread_main_np() ) return [self postNotification:aNotification];
+ [[self class] performSelectorOnMainThread:@selector( _postNotification: ) withObject:aNotification waitUntilDone:NO];
+}
+
+- (void) postNotificationOnMainThreadWithName:(NSString *)aName object:(id)anObject {
+ if( pthread_main_np() ) return [self postNotificationName:aName object:anObject userInfo:nil];
+ NSMutableDictionary *info = [[NSMutableDictionary allocWithZone:nil] initWithCapacity:2];
+ if (aName) {
+ [info setObject:aName forKey:@"name"];
+ }
+ if (anObject) {
+ [info setObject:anObject forKey:@"object"];
+ }
+ [[self class] performSelectorOnMainThread:@selector(_postNotificationViaDictionary:)
+ withObject:info
+ waitUntilDone:NO];
+}
+@end