Make methodSignatureForSelector: mirror forwardInvocation:

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@22422 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2006-02-03 14:34:45 +00:00
parent 761341f576
commit b7093abdff

View file

@ -277,7 +277,9 @@ NSRegisterServicesProvider(id provider, NSString *name)
/** /**
* Selectively forwards those messages which are thought to be safe, * Selectively forwards those messages which are thought to be safe,
* and perform any special operations we need for workspace management * and perform any special operations we need for workspace management
* etc. * etc.<br />
* The logic in this method <strong>must</strong> match that in
* methodSignatureForSelector:
*/ */
- (void) forwardInvocation: (NSInvocation*)anInvocation - (void) forwardInvocation: (NSInvocation*)anInvocation
{ {
@ -403,54 +405,51 @@ NSRegisterServicesProvider(id provider, NSString *name)
* to see if it's a standard service message or standard application * to see if it's a standard service message or standard application
* message.<br /> * message.<br />
* If the message is non-standard, it can be checked against a list * 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.<br />
* The logic in this method <strong>must</strong> match that in
* forwardInvocation:
*/ */
- (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector - (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector
{ {
NSMethodSignature *sig = nil; NSMethodSignature *sig = nil;
NSString *selName = NSStringFromSelector(aSelector); 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];
delegate = [[NSApplication sharedApplication] delegate];
if ([selName hasPrefix: @"application:"] == YES) if ([selName hasPrefix: @"application:"] == YES)
{ {
if ([delegate respondsToSelector: aSelector] == YES) if ([delegate respondsToSelector: aSelector] == YES)
{ {
sig = [delegate methodSignatureForSelector: aSelector]; sig = [delegate methodSignatureForSelector: aSelector];
} }
else else if ([manager respondsToSelector: aSelector] == YES)
{ {
sig = [manager methodSignatureForSelector: aSelector]; sig = [manager methodSignatureForSelector: aSelector];
} }
} }
else
if (sig == nil)
{ {
NSArray *messages; NSArray *messages;
messages = [[NSUserDefaults standardUserDefaults] arrayForKey: messages = [[NSUserDefaults standardUserDefaults] arrayForKey:
@"GSPermittedMessages"]; @"GSPermittedMessages"];
if (messages != nil && [messages containsObject: selName] == NO)
if (messages != nil)
{ {
if ([messages containsObject: selName] == YES) return nil;
}
if ([delegate respondsToSelector: aSelector] == YES)
{ {
sig = [delegate methodSignatureForSelector: aSelector]; sig = [delegate methodSignatureForSelector: aSelector];
} }
} else if ([NSApp respondsToSelector: aSelector] == YES)
else
{ {
sig = [delegate methodSignatureForSelector: aSelector]; sig = [NSApp methodSignatureForSelector: aSelector];
}
} }
} }
return sig; return sig;