diff --git a/ChangeLog b/ChangeLog index a8fe0ad..93c9eaa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-02-23 David Ayers + + * EOAccess/EOAdaptor.m ([EOAdaptor sharedLoginPanelInstance]): + Maintain instances on a per class basis as reported by Matt Rice. + 2003-02-22 David Ayers * EOAccess/EOAdaptor.h/m: New globals for GDL2 specific diff --git a/EOAccess/EOAdaptor.m b/EOAccess/EOAdaptor.m index 1811549..12b7981 100644 --- a/EOAccess/EOAdaptor.m +++ b/EOAccess/EOAdaptor.m @@ -90,7 +90,7 @@ NSString *EOAdministrativeConnectionDictionaryNeededNotification = @"EOAdministrativeConnectionDictionaryNeededNotification"; NSString *EOAdaptorKey = @"EOAdaptorKey"; NSString *EOModelKey = @"EOModelKey"; -NSString *EOConnectionDictionaryKey = "EOConnectionDictionaryKey"; +NSString *EOConnectionDictionaryKey = @"EOConnectionDictionaryKey"; NSString *EOAdministrativeConnectionDictionaryKey = @"EOAdministrativeConnectionDictionaryKey"; @@ -263,22 +263,36 @@ NSString *EOAdministrativeConnectionDictionaryKey + (EOLoginPanel *)sharedLoginPanelInstance { - static EOLoginPanel *panel = nil; + static NSMutableDictionary *panelDict = nil; + NSString *name; + EOLoginPanel *panel = nil; - if (panel == nil - && NSClassFromString(@"NSApplication") != nil) + if ([self isMemberOfClass: [EOAdaptor class]] == NO) { - NSBundle *adaptorFramework; - NSBundle *loginBundle; - NSString *path; - Class loginClass; + if (panelDict == nil) + { + panelDict = [NSMutableDictionary new]; + } + + name = NSStringFromClass(self); + panel = [panelDict objectForKey: name]; + + if (panel == nil + && NSClassFromString(@"NSApplication") != nil) + { + NSBundle *adaptorFramework; + NSBundle *loginBundle; + NSString *path; + Class loginClass; - adaptorFramework = [NSBundle bundleForClass: self]; - path = [adaptorFramework pathForResource: @"LoginPanel" - ofType: @"bundle"]; - loginBundle = [NSBundle bundleWithPath: path]; - loginClass = [loginBundle principalClass]; - panel = [loginClass new]; + adaptorFramework = [NSBundle bundleForClass: self]; + path = [adaptorFramework pathForResource: @"LoginPanel" + ofType: @"bundle"]; + loginBundle = [NSBundle bundleWithPath: path]; + loginClass = [loginBundle principalClass]; + panel = [loginClass new]; + [panelDict setObject: panel forKey: name]; + } } return panel;