From af37d2e30a8fb69cecc314de789cfa43b2cc7a98 Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Mon, 11 Feb 2013 14:21:22 +0100 Subject: [PATCH] Skip group cells when selecting item after delete (file browser) Presently this is only relevant for the SCM Status view, as no other data source use group cells. --- Frameworks/OakFileBrowser/src/OakFileBrowser.mm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Frameworks/OakFileBrowser/src/OakFileBrowser.mm b/Frameworks/OakFileBrowser/src/OakFileBrowser.mm index 1fe016b2..d06ed1cf 100644 --- a/Frameworks/OakFileBrowser/src/OakFileBrowser.mm +++ b/Frameworks/OakFileBrowser/src/OakFileBrowser.mm @@ -620,6 +620,11 @@ static NSMutableSet* SymmetricDifference (NSMutableSet* aSet, NSMutableSet* anot } } +- (BOOL)canSelectRow:(NSUInteger)row +{ + return ![[_outlineView delegate] respondsToSelector:@selector(outlineView:isGroupItem:)] || ![[_outlineView delegate] outlineView:_outlineView isGroupItem:[_outlineView itemAtRow:row]]; +} + - (void)delete:(id)anArgument { NSIndexSet* indexSet = [_outlineView selectedRowIndexes]; @@ -627,11 +632,11 @@ static NSMutableSet* SymmetricDifference (NSMutableSet* aSet, NSMutableSet* anot return; NSUInteger rowToSelect = [indexSet lastIndex]; - while(rowToSelect < [_outlineView numberOfRows] && [indexSet containsIndex:rowToSelect]) + while(rowToSelect < [_outlineView numberOfRows] && ([indexSet containsIndex:rowToSelect] || ![self canSelectRow:rowToSelect])) ++rowToSelect; if(rowToSelect == [_outlineView numberOfRows]) - do { --rowToSelect; } while(rowToSelect > 0 && [indexSet containsIndex:rowToSelect]); + do { --rowToSelect; } while(rowToSelect > 0 && [indexSet containsIndex:rowToSelect] && ![self canSelectRow:rowToSelect]); FSItem* itemToSelect = [indexSet containsIndex:rowToSelect] ? nil : [_outlineView itemAtRow:rowToSelect];