Revision: 14918
http://sourceforge.net/p/skim-app/code/14918
Author: hofman
Date: 2025-02-05 19:13:09 +0000 (Wed, 05 Feb 2025)
Log Message:
-----------
Add completionHandler to convert notes methods. Suspend convert notes script
command when waiting and not returning synchronously
Modified Paths:
--------------
trunk/SKMainDocument.m
Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m 2025-02-05 10:20:59 UTC (rev 14917)
+++ trunk/SKMainDocument.m 2025-02-05 19:13:09 UTC (rev 14918)
@@ -1116,7 +1116,7 @@
}
}
-- (void)convertNotesUsingPDFDocument:(PDFDocument *)pdfDocWithoutNotes {
+- (void)convertNotesUsingPDFDocument:(PDFDocument *)pdfDocWithoutNotes
completionHandler:(void (^)(void))completionHandler {
[[self mainWindowController]
beginProgressSheetWithMessage:[NSLocalizedString(@"Converting notes", @"Message
for progress sheet") stringByAppendingEllipsis] maxValue:0];
NSMapTable *offsets = nil;
@@ -1176,6 +1176,9 @@
[[self mainWindowController] dismissProgressSheet];
mdFlags.convertingNotes = 0;
+
+ if (completionHandler)
+ completionHandler();
});
});
@@ -1184,10 +1187,13 @@
[[self mainWindowController] dismissProgressSheet];
mdFlags.convertingNotes = 0;
+
+ if (completionHandler)
+ completionHandler();
}
}
-- (void)beginConvertNotesPasswordSheetForPDFDocument:(PDFDocument *)pdfDoc {
+- (void)beginConvertNotesPasswordSheetForPDFDocument:(PDFDocument *)pdfDoc
completionHandler:(void (^)(void))completionHandler {
SKTextFieldSheetController *passwordSheetController =
[[SKTextFieldSheetController alloc] initWithWindowNibName:@"PasswordSheet"];
[passwordSheetController setInformativeText:NSLocalizedString(@"The
document requires a password to be converted", @"Informative text")];
@@ -1197,17 +1203,20 @@
if (pdfDoc && ([pdfDoc allowsNotes] == NO || [pdfDoc
allowsSaving] == NO) &&
([pdfDoc unlockWithPassword:[passwordSheetController
stringValue]] == NO || [pdfDoc allowsNotes] == NO || [pdfDoc allowsSaving] ==
NO)) {
- [self beginConvertNotesPasswordSheetForPDFDocument:pdfDoc];
+ [self beginConvertNotesPasswordSheetForPDFDocument:pdfDoc
completionHandler:completionHandler];
} else {
- [self convertNotesUsingPDFDocument:pdfDoc];
+ [self convertNotesUsingPDFDocument:pdfDoc
completionHandler:completionHandler];
}
} else {
mdFlags.convertingNotes = 0;
+
+ if (completionHandler)
+ completionHandler();
}
}];
}
-- (void)convertNotes {
+- (void)convertNotesWithCompletionHandler:(void (^)(void))completionHandler {
mdFlags.convertingNotes = 1;
PDFDocument *pdfDocWithoutNotes = nil;
@@ -1216,11 +1225,11 @@
pdfDocWithoutNotes = [[PDFDocument alloc] initWithData:pdfData];
[self tryToUnlockDocument:pdfDocWithoutNotes];
if ([pdfDocWithoutNotes allowsNotes] == NO || [pdfDocWithoutNotes
allowsSaving] == NO) {
- [self
beginConvertNotesPasswordSheetForPDFDocument:pdfDocWithoutNotes];
+ [self
beginConvertNotesPasswordSheetForPDFDocument:pdfDocWithoutNotes
completionHandler:completionHandler];
return;
}
}
- [self convertNotesUsingPDFDocument:pdfDocWithoutNotes];
+ [self convertNotesUsingPDFDocument:pdfDocWithoutNotes
completionHandler:completionHandler];
}
- (BOOL)hasConvertibleAnnotations {
@@ -1249,7 +1258,7 @@
if (returnCode == NSAlertFirstButtonReturn) {
// remove the sheet, to make place for either the password or
progress sheet
[[alert window] orderOut:nil];
- [self convertNotes];
+ [self convertNotesWithCompletionHandler:nil];
}
}];
}
@@ -2130,9 +2139,21 @@
} else if ([self hasConvertibleAnnotations]) {
NSDictionary *args = [command evaluatedArguments];
NSNumber *wait = [args objectForKey:@"Wait"];
- [self convertNotes];
- if (wait == nil || [wait boolValue])
- while (mdFlags.convertingNotes == 1 && [[NSRunLoop currentRunLoop]
runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
+ if (wait == nil || [wait boolValue]) {
+ __block BOOL finished = NO;
+ __block BOOL suspended = NO;
+ [self convertNotesWithCompletionHandler:^{
+ if (suspended)
+ [command resumeExecutionWithResult:nil];
+ finished = YES;
+ }];
+ if (finished == NO) {
+ [command suspendExecution];
+ suspended = YES;
+ }
+ } else {
+ [self convertNotesWithCompletionHandler:nil];
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit