Revision: 9115 http://sourceforge.net/p/skim-app/code/9115 Author: hofman Date: 2016-09-20 16:51:01 +0000 (Tue, 20 Sep 2016) Log Message: ----------- do search pdf synchronously on 10.12 as the async find does not send its delegate methods
Modified Paths: -------------- trunk/SKLeftSideViewController.h trunk/SKLeftSideViewController.m trunk/SKMainWindowController.m trunk/SKMainWindowController_Actions.m Modified: trunk/SKLeftSideViewController.h =================================================================== --- trunk/SKLeftSideViewController.h 2016-09-19 14:37:02 UTC (rev 9114) +++ trunk/SKLeftSideViewController.h 2016-09-20 16:51:01 UTC (rev 9115) @@ -60,4 +60,6 @@ @property (nonatomic, retain) IBOutlet SKTableView *findTableView; @property (nonatomic, retain) IBOutlet SKTableView *groupedFindTableView; +- (void)applySearchTableHeader:(NSString *)message; + @end Modified: trunk/SKLeftSideViewController.m =================================================================== --- trunk/SKLeftSideViewController.m 2016-09-19 14:37:02 UTC (rev 9114) +++ trunk/SKLeftSideViewController.m 2016-09-20 16:51:01 UTC (rev 9115) @@ -51,6 +51,7 @@ #define PAGE_COLUMNID @"page" #define LABEL_COLUMNID @"label" #define RELEVANCE_COLUMNID @"relevance" +#define RESULTS_COLUMNID @"results" #define SKDisableTableToolTipsKey @"SKDisableTableToolTips" @@ -145,4 +146,11 @@ return [findTableView isDescendantOf:aView] || [groupedFindTableView isDescendantOf:aView]; } +- (void)applySearchTableHeader:(NSString *)message { + [[[findTableView tableColumnWithIdentifier:RESULTS_COLUMNID] headerCell] setStringValue:message]; + [[findTableView headerView] setNeedsDisplay:YES]; + [[[groupedFindTableView tableColumnWithIdentifier:RELEVANCE_COLUMNID] headerCell] setStringValue:message]; + [[groupedFindTableView headerView] setNeedsDisplay:YES]; +} + @end Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2016-09-19 14:37:02 UTC (rev 9114) +++ trunk/SKMainWindowController.m 2016-09-20 16:51:01 UTC (rev 9115) @@ -1936,9 +1936,7 @@ #pragma mark PDFDocument delegate -- (void)documentDidFindMatch:(NSNotification *)note { - PDFSelection *instance = [[note userInfo] objectForKey:@"PDFDocumentFoundSelection"]; - +- (void)didMatchString:(PDFSelection *)instance { if (mwcFlags.wholeWordSearch) { PDFSelection *copy = [[instance copy] autorelease]; NSString *string = [instance string]; @@ -1959,21 +1957,33 @@ if (page == nil) return; + NSUInteger pageIndex = [page pageIndex]; CGFloat order = [instance boundsOrderForPage:page]; NSInteger i = [searchResults count]; while (i-- > 0) { PDFSelection *prevResult = [searchResults objectAtIndex:i]; PDFPage *prevPage = [prevResult safeFirstPage]; - if ([page isEqual:prevPage] == NO || order >= [prevResult boundsOrderForPage:prevPage]) + NSUInteger prevIndex = [prevPage pageIndex]; + if (pageIndex > prevIndex || (pageIndex == prevIndex && order >= [prevResult boundsOrderForPage:prevPage])) break; } [searchResults insertObject:instance atIndex:i + 1]; - SKGroupedSearchResult *result = [groupedSearchResults lastObject]; - NSUInteger maxCount = [result maxCount]; - if ([[result page] isEqual:page] == NO) { + SKGroupedSearchResult *result = nil; + NSUInteger maxCount = [[groupedSearchResults lastObject] maxCount]; + i = [groupedSearchResults count]; + while (i-- > 0) { + SKGroupedSearchResult *prevResult = [groupedSearchResults objectAtIndex:i]; + NSUInteger prevIndex = [prevResult pageIndex]; + if (pageIndex >= prevIndex) { + if (pageIndex >= prevIndex) + result = prevResult; + break; + } + } + if (result == nil) { result = [SKGroupedSearchResult groupedSearchResultWithPage:page maxCount:maxCount]; - [groupedSearchResults addObject:result]; + [groupedSearchResults insertObject:result atIndex:i + 1]; } [result addMatch:instance]; @@ -1985,12 +1995,8 @@ } - (void)documentDidBeginDocumentFind:(NSNotification *)note { - NSString *message = [NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]; + [leftSideController applySearchTableHeader:[NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]]; [self setSearchResults:nil]; - [[[leftSideController.findTableView tableColumnWithIdentifier:RESULTS_COLUMNID] headerCell] setStringValue:message]; - [[leftSideController.findTableView headerView] setNeedsDisplay:YES]; - [[[leftSideController.groupedFindTableView tableColumnWithIdentifier:RELEVANCE_COLUMNID] headerCell] setStringValue:message]; - [[leftSideController.groupedFindTableView headerView] setNeedsDisplay:YES]; [self setGroupedSearchResults:nil]; [statusBar setProgressIndicatorStyle:SKProgressIndicatorBarStyle]; [[statusBar progressIndicator] setMaxValue:[[note object] pageCount]]; @@ -2001,13 +2007,9 @@ } - (void)documentDidEndDocumentFind:(NSNotification *)note { - NSString *message = [NSString stringWithFormat:NSLocalizedString(@"%ld Results", @"Message in search table header"), (long)[searchResults count]]; + [leftSideController applySearchTableHeader:[NSString stringWithFormat:NSLocalizedString(@"%ld Results", @"Message in search table header"), (long)[searchResults count]]]; [self didChangeValueForKey:GROUPEDSEARCHRESULTS_KEY]; [self didChangeValueForKey:SEARCHRESULTS_KEY]; - [[[leftSideController.findTableView tableColumnWithIdentifier:RESULTS_COLUMNID] headerCell] setStringValue:message]; - [[leftSideController.findTableView headerView] setNeedsDisplay:YES]; - [[[leftSideController.groupedFindTableView tableColumnWithIdentifier:RELEVANCE_COLUMNID] headerCell] setStringValue:message]; - [[leftSideController.groupedFindTableView headerView] setNeedsDisplay:YES]; [statusBar stopAnimation:self]; [statusBar setProgressIndicatorStyle:SKProgressIndicatorNone]; } Modified: trunk/SKMainWindowController_Actions.m =================================================================== --- trunk/SKMainWindowController_Actions.m 2016-09-19 14:37:02 UTC (rev 9114) +++ trunk/SKMainWindowController_Actions.m 2016-09-20 16:51:01 UTC (rev 9115) @@ -722,6 +722,7 @@ [self displayTocViewAnimating:YES]; } else { NSInteger options = mwcFlags.caseInsensitiveSearch ? NSCaseInsensitiveSearch : 0; + NSArray *searchStrings = nil; if (mwcFlags.wholeWordSearch) { NSScanner *scanner = [NSScanner scannerWithString:[sender stringValue]]; NSMutableArray *words = [NSMutableArray array]; @@ -739,15 +740,37 @@ } [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL]; } - [[pdfView document] beginFindStrings:words withOptions:options]; + if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_11) + searchStrings = words; + else + [[pdfView document] beginFindStrings:words withOptions:options]; } else { - [[pdfView document] beginFindString:[sender stringValue] withOptions:options]; + if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_11) + searchStrings = [NSArray arrayWithObject:[sender stringValue]]; + else + [[pdfView document] beginFindString:[sender stringValue] withOptions:options]; } if (mwcFlags.findPaneState == SKSingularFindPaneState) [self displayFindViewAnimating:YES]; else [self displayGroupedFindViewAnimating:YES]; + if (searchStrings) { + [leftSideController applySearchTableHeader:[NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]]; + [self setSearchResults:nil]; + [self setGroupedSearchResults:nil]; + [self willChangeValueForKey:@"searchResults"]; + [self willChangeValueForKey:@"groupedSearchResults"]; + for (NSString *searchString in searchStrings) { + NSArray *results = [[pdfView document] findString:searchString withOptions:options]; + for (PDFSelection *result in results) + [self didMatchString:result]; + } + [self didChangeValueForKey:@"groupedSearchResults"]; + [self didChangeValueForKey:@"searchResults"]; + [leftSideController applySearchTableHeader:[NSString stringWithFormat:NSLocalizedString(@"%ld Results", @"Message in search table header"), (long)[searchResults count]]]; + } + NSPasteboard *findPboard = [NSPasteboard pasteboardWithName:NSFindPboard]; [findPboard clearContents]; [findPboard writeObjects:[NSArray arrayWithObjects:[sender stringValue], nil]]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit