Small bug fixes for NSKeyValueBinding

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@28367 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2009-06-21 22:21:26 +00:00
parent 0f6d7e890d
commit 8ed4d5e90e
2 changed files with 15 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2009-06-22 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSKeyValueBinding.m (GSKeyValueBinding+initialize):
Correc the setup of the map tables.
* Source/NSKeyValueBinding.m (GSKeyValueBinding+unbindAllForObject):
Use a copy of the keys for the enumerator.
2009-06-05 18:21-EDT Gregory John Casamento <greg.casamento@gmail.com> 2009-06-05 18:21-EDT Gregory John Casamento <greg.casamento@gmail.com>
* Headers/AppKit/NSSpeechSynthesizer.h: * Headers/AppKit/NSSpeechSynthesizer.h:

View file

@ -141,9 +141,9 @@ void GSBindingInvokeAction(NSString *targetKey, NSString *argumentKey,
{ {
bindingLock = [GSLazyRecursiveLock new]; bindingLock = [GSLazyRecursiveLock new];
classTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, classTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSOwnedPointerMapValueCallBacks, 128); NSObjectMapValueCallBacks, 128);
objectTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, objectTable = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks,
NSOwnedPointerMapValueCallBacks, 128); NSObjectMapValueCallBacks, 128);
} }
} }
@ -155,9 +155,9 @@ void GSBindingInvokeAction(NSString *targetKey, NSString *argumentKey,
bindings = (NSMutableArray *)NSMapGet(classTable, (void*)clazz); bindings = (NSMutableArray *)NSMapGet(classTable, (void*)clazz);
if (bindings == nil) if (bindings == nil)
{ {
// Need to retain it ourselves
bindings = [[NSMutableArray alloc] initWithCapacity: 5]; bindings = [[NSMutableArray alloc] initWithCapacity: 5];
NSMapInsert(classTable, (void*)clazz, (void*)bindings); NSMapInsert(classTable, (void*)clazz, (void*)bindings);
RELEASE(bindings);
} }
[bindings addObject: binding]; [bindings addObject: binding];
[bindingLock unlock]; [bindingLock unlock];
@ -249,13 +249,14 @@ void GSBindingInvokeAction(NSString *targetKey, NSString *argumentKey,
list = (NSDictionary *)NSMapGet(objectTable, (void *)anObject); list = (NSDictionary *)NSMapGet(objectTable, (void *)anObject);
if (list != nil) if (list != nil)
{ {
enumerator = [list keyEnumerator]; NSArray *keys = [list allKeys];
enumerator = [keys objectEnumerator];
while ((binding = [enumerator nextObject])) while ((binding = [enumerator nextObject]))
{ {
[anObject unbind: binding]; [anObject unbind: binding];
} }
NSMapRemove(objectTable, (void *)anObject); NSMapRemove(objectTable, (void *)anObject);
RELEASE(list);
} }
[bindingLock unlock]; [bindingLock unlock];
} }
@ -297,6 +298,7 @@ void GSBindingInvokeAction(NSString *targetKey, NSString *argumentKey,
{ {
bindings = [NSMutableDictionary new]; bindings = [NSMutableDictionary new];
NSMapInsert(objectTable, (void*)source, (void*)bindings); NSMapInsert(objectTable, (void*)source, (void*)bindings);
RELEASE(bindings);
} }
[bindings setObject: self forKey: name]; [bindings setObject: self forKey: name];
[bindingLock unlock]; [bindingLock unlock];