diff --git a/Source/GSServicesManager.m b/Source/GSServicesManager.m
index 7968e03e1..ccceb3e53 100644
--- a/Source/GSServicesManager.m
+++ b/Source/GSServicesManager.m
@@ -277,7 +277,9 @@ NSRegisterServicesProvider(id provider, NSString *name)
/**
* Selectively forwards those messages which are thought to be safe,
* and perform any special operations we need for workspace management
- * etc.
+ * etc.
+ * The logic in this method must match that in
+ * methodSignatureForSelector:
*/
- (void) forwardInvocation: (NSInvocation*)anInvocation
{
@@ -293,7 +295,7 @@ NSRegisterServicesProvider(id provider, NSString *name)
if ([selName hasPrefix: @"_"] == YES)
{
[NSException raise: NSGenericException
- format: @"method name '%@' private in '%@'",
+ format: @"method name '%@' private in '%@'",
selName, [manager port]];
}
@@ -403,54 +405,51 @@ NSRegisterServicesProvider(id provider, NSString *name)
* to see if it's a standard service message or standard application
* message.
* If the message is non-standard, it can be checked against a list
- * of messages specified by the GSPermittedMessages user default.
+ * of messages specified by the GSPermittedMessages user default.
+ * The logic in this method must match that in
+ * forwardInvocation:
*/
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector
{
NSMethodSignature *sig = nil;
NSString *selName = NSStringFromSelector(aSelector);
+ id delegate;
- if ([selName isEqualToString: @"terminate:"])
+ if ([selName hasSuffix: @":userData:error:"])
{
- sig = [NSApp methodSignatureForSelector: aSelector];
+ return [servicesProvider methodSignatureForSelector: aSelector];
}
- else if ([selName hasSuffix: @":userData:error:"])
- {
- sig = [servicesProvider methodSignatureForSelector: aSelector];
- }
- else
- {
- id delegate = [[NSApplication sharedApplication] delegate];
- if ([selName hasPrefix: @"application:"] == YES)
+ delegate = [[NSApplication sharedApplication] delegate];
+ if ([selName hasPrefix: @"application:"] == YES)
+ {
+ if ([delegate respondsToSelector: aSelector] == YES)
{
- if ([delegate respondsToSelector: aSelector] == YES)
- {
- sig = [delegate methodSignatureForSelector: aSelector];
- }
- else
- {
- sig = [manager methodSignatureForSelector: aSelector];
- }
+ sig = [delegate methodSignatureForSelector: aSelector];
}
- else
+ else if ([manager respondsToSelector: aSelector] == YES)
{
- NSArray *messages;
+ sig = [manager methodSignatureForSelector: aSelector];
+ }
+ }
- messages = [[NSUserDefaults standardUserDefaults] arrayForKey:
- @"GSPermittedMessages"];
+ if (sig == nil)
+ {
+ NSArray *messages;
- if (messages != nil)
- {
- if ([messages containsObject: selName] == YES)
- {
- sig = [delegate methodSignatureForSelector: aSelector];
- }
- }
- else
- {
- sig = [delegate methodSignatureForSelector: aSelector];
- }
+ messages = [[NSUserDefaults standardUserDefaults] arrayForKey:
+ @"GSPermittedMessages"];
+ if (messages != nil && [messages containsObject: selName] == NO)
+ {
+ return nil;
+ }
+ if ([delegate respondsToSelector: aSelector] == YES)
+ {
+ sig = [delegate methodSignatureForSelector: aSelector];
+ }
+ else if ([NSApp respondsToSelector: aSelector] == YES)
+ {
+ sig = [NSApp methodSignatureForSelector: aSelector];
}
}
return sig;