diff --git a/ChangeLog b/ChangeLog index 5f9683c08..5e96819e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-07-04 Richard Frith-Macdonald + + * Source/NSDistributedNotificationCenter.m: Use -setProtocolForProxy: + and implement dummy class to work around bug in old compilers. + * Tools/gdnc.m: ditto + 2003-07-04 Richard Frith-Macdonald * Source/Source/GSFFCallInvocation.m: Modify to use local type diff --git a/Source/NSDistributedNotificationCenter.m b/Source/NSDistributedNotificationCenter.m index 83500669a..2c1ac8fd4 100644 --- a/Source/NSDistributedNotificationCenter.m +++ b/Source/NSDistributedNotificationCenter.m @@ -1,5 +1,5 @@ -/** Implementation of NSDistributedNotificationCenter class - Copyright (C) 1998 Free Software Foundation, Inc. +/** + Copyright (C) 1998-2003 Free Software Foundation, Inc. Written by: Richard Frith-Macdonald Created: October 1998 @@ -482,6 +482,67 @@ static NSDistributedNotificationCenter *netCenter = nil; @end +/* + * The following dummy class is here solely as a workaround for pre 3.3 + * versions of gcc where protocols didn't work properly unless implemented + * in the source where the '@protocol()' directiver is used. + */ +@interface NSDistributedNotificationCenterDummy : NSObject +- (void) addObserver: (unsigned long)anObserver + selector: (NSString*)aSelector + name: (NSString*)notificationname + object: (NSString*)anObject + suspensionBehavior: (NSNotificationSuspensionBehavior)suspensionBehavior + for: (id)client; +- (oneway void) postNotificationName: (NSString*)notificationName + object: (NSString*)anObject + userInfo: (NSData*)d + deliverImmediately: (BOOL)deliverImmediately + for: (id)client; +- (void) registerClient: (id)client; +- (void) removeObserver: (unsigned long)anObserver + name: (NSString*)notificationname + object: (NSString*)anObject + for: (id)client; +- (void) setSuspended: (BOOL)flag + for: (id)client; +- (void) unregisterClient: (id)client; +@end + +@implementation NSDistributedNotificationCenterDummy +- (void) addObserver: (unsigned long)anObserver + selector: (NSString*)aSelector + name: (NSString*)notificationname + object: (NSString*)anObject + suspensionBehavior: (NSNotificationSuspensionBehavior)suspensionBehavior + for: (id)client +{ +} +- (oneway void) postNotificationName: (NSString*)notificationName + object: (NSString*)anObject + userInfo: (NSData*)d + deliverImmediately: (BOOL)deliverImmediately + for: (id)client +{ +} +- (void) registerClient: (id)client +{ +} +- (void) removeObserver: (unsigned long)anObserver + name: (NSString*)notificationname + object: (NSString*)anObject + for: (id)client +{ +} +- (void) setSuspended: (BOOL)flag + for: (id)client +{ +} +- (void) unregisterClient: (id)client +{ +} +@end + @implementation NSDistributedNotificationCenter (Private) /** @@ -575,11 +636,9 @@ static NSDistributedNotificationCenter *netCenter = nil; if (_remote != nil) { NSConnection *c = [_remote connectionForProxy]; -#if 0 // When all compilers support this Protocol *p = @protocol(GDNCProtocol); [_remote setProtocolForProxy: p]; -#endif /* * Ensure that this center can be used safely from different diff --git a/Tools/gdnc.m b/Tools/gdnc.m index 1e227a1eb..b7e3a5be6 100644 --- a/Tools/gdnc.m +++ b/Tools/gdnc.m @@ -90,6 +90,29 @@ ihandler(int sig) #include "gdnc.h" +/* + * The following dummy class is here solely as a workaround for pre 3.3 + * versions of gcc where protocols didn't work properly unless implemented + * in the source where the '@protocol()' directiver is used. + */ +@interface NSDistributedNotificationCenterDummy : NSObject +- (oneway void) postNotificationName: (NSString*)name + object: (NSString*)object + userInfo: (NSData*)info + selector: (NSString*)aSelector + to: (unsigned long)observer; +@end +@implementation NSDistributedNotificationCenterDummy +- (oneway void) postNotificationName: (NSString*)name + object: (NSString*)object + userInfo: (NSData*)info + selector: (NSString*)aSelector + to: (unsigned long)observer +{ +} +@end + + @interface GDNCNotification : NSObject { @public @@ -517,6 +540,12 @@ ihandler(int sig) format: @"registration with registered client"]; } info = [GDNCClient new]; + if ([(id)client isProxy] == YES) + { + Protocol *p = @protocol(GDNCClient); + + [(id)client setProtocolForProxy: p]; + } info->client = client; NSMapInsert(table, client, info); RELEASE(info);