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

Reply via email to