From b0659bacf9d3ab250a07f11b94f33df325bb832f Mon Sep 17 00:00:00 2001 From: Mitchell Livingston <livings124@transmissionbt.com> Date: Sat, 30 Jul 2011 00:11:29 +0000 Subject: [PATCH] slightly better locking in the file table --- macosx/FileOutlineController.h | 2 +- macosx/FileOutlineController.m | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/macosx/FileOutlineController.h b/macosx/FileOutlineController.h index 0f61988b6..473e5d9b3 100644 --- a/macosx/FileOutlineController.h +++ b/macosx/FileOutlineController.h @@ -36,7 +36,7 @@ NSString * fFilterText; - NSLock * fLock; + NSRecursiveLock * fLock; } - (FileOutlineView *) outlineView; diff --git a/macosx/FileOutlineController.m b/macosx/FileOutlineController.m index 0078e6a18..e00ac5e6f 100644 --- a/macosx/FileOutlineController.m +++ b/macosx/FileOutlineController.m @@ -70,7 +70,7 @@ typedef enum [fOutline setMenu: [self menu]]; #warning needed? - fLock = [[NSLock alloc] init]; + fLock = [[NSRecursiveLock alloc] init]; [self setTorrent: nil]; } @@ -109,21 +109,25 @@ typedef enum - (void) setFilterText: (NSString *) text { - [fLock lock]; - if ([text isEqualToString: @""]) text = nil; if ((!text && !fFilterText) || (text && fFilterText && [text isEqualToString: fFilterText])) { - [fLock unlock]; return; } const BOOL onLion = [NSApp isOnLionOrBetter]; + [fLock lock]; + if (onLion) + { + [[NSAnimationContext currentContext] setCompletionHandler: ^{ [fLock unlock]; NSLog(@"called"); }]; + [NSAnimationContext beginGrouping]; + [fOutline beginUpdates]; + } NSUInteger currentIndex = 0, totalCount = 0; NSMutableArray * itemsToAdd = [NSMutableArray array]; @@ -200,14 +204,20 @@ typedef enum [fOutline insertItemsAtIndexes: itemsToAddIndexes inParent: nil withAnimation: NSTableViewAnimationSlideUp]; if (onLion) + { [fOutline endUpdates]; + + [NSAnimationContext endGrouping]; + } else + { [fOutline reloadData]; + [fLock unlock]; + } + [fFilterText release]; fFilterText = [text retain]; - - [fLock unlock]; } - (void) reloadData -- 2.40.0