Adium

Changeset 24495

Show
Ignore:
Timestamp:
07/31/2008 08:18:16 AM (5 months ago)
Author:
evands
Message:

When doing a delayed update on a contact, ensure that it survives until that update is fired. Hopefully this fixes the outline-view-messaging-released-contacts problems created by the contact controller releasing contacts when their account disconnects. Fixes #10548 (hopefully)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Source/AdiumContactPropertiesObserverManager.h

    r24452 r24495  
    1919 
    2020        BOOL                                    updatesAreDelayed; 
     21        NSMutableSet                    *changedObjects; 
    2122         
    2223        BOOL                                    informingObservers; 
     
    4142- (void)_updateAllAttributesOfObject:(AIListObject *)inObject; 
    4243 
    43 - (void)noteContactChanged
     44- (void)noteContactChanged:(AIListObject *)inObject
    4445 
    4546@end 
  • trunk/Source/AdiumContactPropertiesObserverManager.m

    r24150 r24495  
    222222                } 
    223223    } 
     224 
     225        [changedObjects autorelease]; changedObjects = nil; 
    224226} 
    225227 
     
    400402} 
    401403 
    402 - (void)noteContactChanged; 
    403 
     404- (void)noteContactChanged:(AIListObject *)inObject; 
     405
     406        if (!changedObjects) 
     407                changedObjects = [[NSMutableSet alloc] init]; 
     408        [changedObjects addObject:inObject]; 
     409 
    404410        delayedContactChanges++; 
    405411} 
  • trunk/Source/AIContactController.m

    r24332 r24495  
    484484{ 
    485485        if ([contactPropertiesObserverManager updatesAreDelayed]) { 
    486                 [contactPropertiesObserverManager noteContactChanged]; 
     486                [contactPropertiesObserverManager noteContactChanged:object]; 
    487487 
    488488        } else { 
     
    12641264{ 
    12651265        if ([contactPropertiesObserverManager updatesAreDelayed]) { 
    1266                 [contactPropertiesObserverManager noteContactChanged]; 
     1266                [contactPropertiesObserverManager noteContactChanged:inObject]; 
    12671267 
    12681268        } else { 
     
    15511551- (void)account:(AIAccount *)account didStopTrackingContact:(AIListContact *)inContact 
    15521552{ 
    1553         [contactDict removeObjectForKey:[[inContact class] internalUniqueObjectIDForService:[inContact service] 
    1554                                                                                                                                                                 account:account 
    1555                                                                                                                                                                         UID:[inContact UID]]]; 
     1553        [[inContact retain] autorelease]; 
     1554        [contactDict removeObjectForKey:[inContact internalUniqueObjectID]]; 
    15561555} 
    15571556