Retain object names in map

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@8452 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2000-12-27 09:00:32 +00:00
parent 6b13481413
commit 4822b3f236

View file

@ -242,10 +242,13 @@ static NSImage *classesImage = nil;
/* /*
* Remove objects and connections that shouldn't be archived. * Remove objects and connections that shouldn't be archived.
*/ */
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSOwner"]);
[nameTable removeObjectForKey: @"NSOwner"]; [nameTable removeObjectForKey: @"NSOwner"];
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSFirst"]);
[nameTable removeObjectForKey: @"NSFirst"]; [nameTable removeObjectForKey: @"NSFirst"];
if (fontManager != nil) if (fontManager != nil)
{ {
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSFont"]);
[nameTable removeObjectForKey: @"NSFont"]; [nameTable removeObjectForKey: @"NSFont"];
} }
} }
@ -542,11 +545,17 @@ static NSImage *classesImage = nil;
/* /*
* Restore removed objects. * Restore removed objects.
*/ */
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSOwner"]);
[nameTable setObject: filesOwner forKey: @"NSOwner"]; [nameTable setObject: filesOwner forKey: @"NSOwner"];
NSMapInsert(objToName, (void*)filesOwner, (void*)@"NSOwner");
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSFirst"]);
[nameTable setObject: firstResponder forKey: @"NSFirst"]; [nameTable setObject: firstResponder forKey: @"NSFirst"];
NSMapInsert(objToName, (void*)firstResponder, (void*)@"NSFirst");
if (fontManager != nil) if (fontManager != nil)
{ {
NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSFont"]);
[nameTable setObject: fontManager forKey: @"NSFont"]; [nameTable setObject: fontManager forKey: @"NSFont"];
NSMapInsert(objToName, (void*)fontManager, (void*)@"NSFont");
} }
/* /*
@ -711,8 +720,12 @@ static NSImage *classesImage = nil;
NSButtonCell *cell; NSButtonCell *cell;
unsigned style; unsigned style;
/*
* NB. We must retain the map values (object names) as the nameTable
* may not hold identical name objects, but merely equal strings.
*/
objToName = NSCreateMapTableWithZone(NSNonRetainedObjectMapKeyCallBacks, objToName = NSCreateMapTableWithZone(NSNonRetainedObjectMapKeyCallBacks,
NSNonRetainedObjectMapValueCallBacks, 128, [self zone]); NSObjectMapValueCallBacks, 128, [self zone]);
savedEditors = [NSMutableArray new]; savedEditors = [NSMutableArray new];
@ -914,6 +927,7 @@ static NSImage *classesImage = nil;
*/ */
[[c nameTable] setObject: filesOwner forKey: @"NSOwner"]; [[c nameTable] setObject: filesOwner forKey: @"NSOwner"];
[[c nameTable] setObject: firstResponder forKey: @"NSFirst"]; [[c nameTable] setObject: firstResponder forKey: @"NSFirst"];
nt = [c nameTable]; nt = [c nameTable];
enumerator = [[c connections] objectEnumerator]; enumerator = [[c connections] objectEnumerator];
while ((con = [enumerator nextObject]) != nil) while ((con = [enumerator nextObject]) != nil)
@ -1265,8 +1279,10 @@ static NSImage *classesImage = nil;
NSMapRemove(objToName, (void*)object); NSMapRemove(objToName, (void*)object);
} }
} }
aName = [aName copy]; /* Make sure it's immutable */
[nameTable setObject: object forKey: aName]; [nameTable setObject: object forKey: aName];
NSMapInsert(objToName, (void*)object, (void*)aName); NSMapInsert(objToName, (void*)object, (void*)aName);
RELEASE(aName);
if (oldName != nil) if (oldName != nil)
{ {
[nameTable removeObjectForKey: oldName]; [nameTable removeObjectForKey: oldName];