diff --git a/ChangeLog b/ChangeLog index d0e1b8dd3..c80d69031 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2003-07-10 Benhur Stein + + * Source/NSSavePanel.m: added new private method + _compareFilename:with:. Use it in _selectCellName:. + In [-browser:createRowsForColumn:inMatrix:]: use self as context to + sortedArrayUsingFunction:context: + * Source/NSOpenPanel.m (-_selectCellName:): use new [NSSavePanel + _compareFilename:with:] method. + * This fixes bug #4255 + 2003-07-05 Adam Fedor * configure.ac: Add openbsd flags like freebsd. diff --git a/Source/NSOpenPanel.m b/Source/NSOpenPanel.m index 65a08b348..93860d9f2 100644 --- a/Source/NSOpenPanel.m +++ b/Source/NSOpenPanel.m @@ -60,6 +60,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil; - (void) _selectTextInColumn: (int)column; - (void) _setupForDirectory: (NSString *)path file: (NSString *)filename; - (BOOL) _shouldShowExtension: (NSString *)extension isDir: (BOOL *)isDir; +- (NSComparisonResult) _compareFilename: (NSString *)n1 with: (NSString *)n2; @end @implementation NSOpenPanel (_PrivateMethods) @@ -183,7 +184,8 @@ static NSOpenPanel *_gs_gui_open_panel = nil; if(cellLength < titleLength) continue; - result = [cellString compare:title options:0 range:range]; + result = [self _compareFilename:[cellString substringWithRange:range] + with:title]; if(result == NSOrderedSame) { diff --git a/Source/NSSavePanel.m b/Source/NSSavePanel.m index 09b9e1166..5f5007d5a 100644 --- a/Source/NSSavePanel.m +++ b/Source/NSSavePanel.m @@ -62,6 +62,13 @@ static NSFileManager *_fm = nil; static BOOL _gs_display_reading_progress = NO; +// +// SavePanel filename compare +// +@interface NSString (_gsSavePanel) +- (NSComparisonResult)_gsSavePanelCompare:(NSString *)other; +@end + // // NSSavePanel private methods // @@ -80,6 +87,7 @@ static BOOL _gs_display_reading_progress = NO; - (void) _setupForDirectory: (NSString *)path file: (NSString *)name; - (BOOL) _shouldShowExtension: (NSString *)extension isDir: (BOOL *)isDir; - (void) _windowResized: (NSNotification*)n; +- (NSComparisonResult) _compareFilename: (NSString *)n1 with: (NSString *)n2; @end /* NSSavePanel (PrivateMethods) */ @implementation NSSavePanel (_PrivateMethods) @@ -364,7 +372,6 @@ static BOOL _gs_display_reading_progress = NO; NSArray *cells; NSMatrix *matrix; NSComparisonResult result; - NSRange range; int i, titleLength, cellLength, numberOfCells; matrix = [_browser matrixInColumn:[_browser lastColumn]]; @@ -375,9 +382,6 @@ static BOOL _gs_display_reading_progress = NO; if(!titleLength) return; - range.location = 0; - range.length = titleLength; - cells = [matrix cells]; numberOfCells = [cells count]; @@ -389,7 +393,7 @@ static BOOL _gs_display_reading_progress = NO; if(cellLength != titleLength) continue; - result = [cellString compare:title options:0 range:range]; + result = [self _compareFilename:cellString with:title]; if(result == NSOrderedSame) { @@ -490,6 +494,21 @@ selectCellWithString: (NSString*)title [_browser setMaxVisibleColumns: [_browser frame].size.width / 140]; } +- (NSComparisonResult) _compareFilename: (NSString *)n1 with: (NSString *)n2 +{ + if (_delegateHasCompareFilter) + { + return [_delegate panel: self + compareFilename: n1 + with: n2 + caseSensitive: YES]; + } + else + { + return [n1 _gsSavePanelCompare: n2]; + } +} + @end /* NSSavePanel (PrivateMethods) */ // @@ -1074,10 +1093,6 @@ selectCellWithString: (NSString*)title // // SavePanel filename compare // -@interface NSString (_gsSavePanel) -- (NSComparisonResult)_gsSavePanelCompare:(NSString *)other; -@end - @implementation NSString (_gsSavePanel) - (NSComparisonResult)_gsSavePanelCompare:(NSString *)other { @@ -1301,7 +1316,7 @@ createRowsForColumn: (int)column if (_delegateHasCompareFilter == YES) { files = [files sortedArrayUsingFunction: compareFilenames - context: nil]; + context: self]; } else files = [files sortedArrayUsingSelector: @selector(_gsSavePanelCompare:)];