From f20aa934fc92057f6bc89b49763e31f968ee5aa6 Mon Sep 17 00:00:00 2001 From: Richard Frith-Macdonald Date: Mon, 11 Feb 2002 16:29:15 +0000 Subject: [PATCH] nib loading fix added. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@12491 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 9 +++- Source/NSBundleAdditions.m | 97 +++++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 40 deletions(-) diff --git a/ChangeLog b/ChangeLog index d73701429..51e3c3746 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,10 @@ -2002-02-10 Michael Hanni +2002-02-11 Richard Frith-Macdonald + + * Source/NSBundleAdditions.m: + ([loadNibFile:externalNameTable:withZone:]) fix so that, if given a + name with a .nib extension, try correctly to use a .gorm or .gmodel. + + 002-02-10 Michael Hanni * Source/NSMenuView.m ([-drawRect:]): make this more efficent, only redraw cells that we clip. @@ -140,6 +146,7 @@ Sun Feb 3 11:53:13 2002 Nicola Pero * Source/GSTextStorage.m: Use new GSI API from latest CVS base * library. +>>>>>>> 1.1333 2002-01-31 Pierre-Yves Rivaille * Source/NSCell.m diff --git a/Source/NSBundleAdditions.m b/Source/NSBundleAdditions.m index 1ecb8deaf..f69fed4ac 100644 --- a/Source/NSBundleAdditions.m +++ b/Source/NSBundleAdditions.m @@ -203,49 +203,62 @@ Class gmodel_class(void) if (gmclass == Nil) { - NSBundle *theBundle; - NSEnumerator *benum; - NSString *path; + NSBundle *theBundle; + NSEnumerator *benum; + NSString *path; - /* Find the bundle */ - benum = [NSStandardLibraryPaths() objectEnumerator]; - while ((path = [benum nextObject])) - { - path = [path stringByAppendingPathComponent: @"Bundles"]; - path = [path stringByAppendingPathComponent: @"libgmodel.bundle"]; - if ([[NSFileManager defaultManager] fileExistsAtPath: path]) - break; - path = nil; - } - NSCAssert(path != nil, @"Unable to load gmodel bundle"); - NSDebugLog(@"Loading gmodel from %@", path); + /* Find the bundle */ + benum = [NSStandardLibraryPaths() objectEnumerator]; + while ((path = [benum nextObject])) + { + path = [path stringByAppendingPathComponent: @"Bundles"]; + path = [path stringByAppendingPathComponent: @"libgmodel.bundle"]; + if ([[NSFileManager defaultManager] fileExistsAtPath: path]) + break; + path = nil; + } + NSCAssert(path != nil, @"Unable to load gmodel bundle"); + NSDebugLog(@"Loading gmodel from %@", path); - theBundle = [NSBundle bundleWithPath: path]; - NSCAssert(theBundle != nil, @"Can't init gmodel bundle"); - gmclass = [theBundle classNamed: @"GMModel"]; - NSCAssert(gmclass, @"Can't load gmodel bundle"); + theBundle = [NSBundle bundleWithPath: path]; + NSCAssert(theBundle != nil, @"Can't init gmodel bundle"); + gmclass = [theBundle classNamed: @"GMModel"]; + NSCAssert(gmclass, @"Can't load gmodel bundle"); } return gmclass; } -+ (BOOL) loadNibFile: (NSString *)fileName - externalNameTable: (NSDictionary *)context - withZone: (NSZone *)zone ++ (BOOL) loadNibFile: (NSString*)fileName + externalNameTable: (NSDictionary*)context + withZone: (NSZone*)zone { BOOL loaded = NO; NSUnarchiver *unarchiver = nil; NSString *ext = [fileName pathExtension]; - if ([[fileName pathExtension] isEqual: @"nib"]) + if ([ext isEqual: @"nib"]) { - /* We can't read nibs, look for an equivalent gmodel file */ - fileName = [fileName stringByDeletingPathExtension]; - fileName = [fileName stringByAppendingPathExtension: @"gmodel"]; + NSFileManager *mgr = [NSFileManager defaultManager]; + NSString *base = [fileName stringByDeletingPathExtension]; + + /* We can't read nibs, look for an equivalent gorm or gmodel file */ + fileName = [base stringByAppendingPathExtension: @"gorm"]; + if ([mgr isReadableFileAtPath: fileName]) + { + ext = @"gorm"; + } + else + { + fileName = [fileName stringByAppendingPathExtension: @"gmodel"]; + ext = @"gmodel"; + } } - // If the file to be read is a gmodel, use the GMModel method to - // read it in and skip the dearchiving below. - if([ext isEqualToString: @"gmodel"]) + /* + * If the file to be read is a gmodel, use the GMModel method to + * read it in and skip the dearchiving below. + */ + if ([ext isEqualToString: @"gmodel"]) { return [gmodel_class() loadIMFile: fileName owner: [context objectForKey: @"NSOwner"]]; @@ -293,9 +306,10 @@ Class gmodel_class(void) } NS_ENDHANDLER - if (!loaded) - NSLog(@"Failed to load Nib\n"); - + if (loaded == NO) + { + NSLog(@"Failed to load Nib\n"); + } return loaded; } @@ -306,8 +320,9 @@ Class gmodel_class(void) NSBundle *bundle; if (owner == nil || aNibName == nil) - return NO; - + { + return NO; + } table = [NSDictionary dictionaryWithObject: owner forKey: @"NSOwner"]; bundle = [self bundleForClass: [owner class]]; if (bundle == nil) @@ -403,11 +418,15 @@ Class gmodel_class(void) NSString *path = [self pathForNibResource: fileName]; if (path != nil) - return [NSBundle loadNibFile: path - externalNameTable: context - withZone: (NSZone*)zone]; + { + return [NSBundle loadNibFile: path + externalNameTable: context + withZone: (NSZone*)zone]; + } else - return NO; + { + return NO; + } } @end @@ -422,7 +441,7 @@ Class gmodel_class(void) active, [win -orderFront:] requests get ignored, so we add the window to the inactive list, so it gets sent an -orderFront when the app becomes active. */ -- (void)_deactivateVisibleWindow: (NSWindow *)win +- (void) _deactivateVisibleWindow: (NSWindow *)win { if (_inactive) [_inactive addObject: win];