Revision: 14757
          http://sourceforge.net/p/skim-app/code/14757
Author:   hofman
Date:     2024-11-27 23:48:33 +0000 (Wed, 27 Nov 2024)
Log Message:
-----------
Allow writing and svaing PDF data when printing is not allowed on newer system. 
For now allow on 12.0+ as I know it works there, not sure whether it can work 
on 10.13+ for earlier versions.

Modified Paths:
--------------
    trunk/PDFDocument_SKExtensions.h
    trunk/PDFDocument_SKExtensions.m
    trunk/PDFPage_SKExtensions.m
    trunk/SKMainDocument.m
    trunk/SKMainWindowController.m
    trunk/SKPDFView.m

Modified: trunk/PDFDocument_SKExtensions.h
===================================================================
--- trunk/PDFDocument_SKExtensions.h    2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/PDFDocument_SKExtensions.h    2024-11-27 23:48:33 UTC (rev 14757)
@@ -61,6 +61,7 @@
 @property (nonatomic, nullable, readonly) NSArray<NSString *> *fileIDStrings;
 @property (nonatomic, nullable, readonly) NSDictionary<NSString *, id> 
*initialSettings;
 @property (nonatomic, readonly) SKLanguageDirectionAngles 
languageDirectionAngles;
+@property (nonatomic, readonly) BOOL allowsSaving;
 @property (nonatomic, readonly) BOOL allowsNotes;
 @property (nonatomic, readonly) BOOL realAllowsCommenting;
 @property (nonatomic, nullable, readonly) NSArray<PDFAnnotation *> 
*detectedWidgets;

Modified: trunk/PDFDocument_SKExtensions.m
===================================================================
--- trunk/PDFDocument_SKExtensions.m    2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/PDFDocument_SKExtensions.m    2024-11-27 23:48:33 UTC (rev 14757)
@@ -269,6 +269,13 @@
     return angles;
 }
 
+- (BOOL)allowsSaving {
+    if (@available(macOS 12.0, *))
+        return [self isLocked] == NO;
+    else
+        return [self allowsPrinting];
+}
+
 - (BOOL)allowsNotes {
     return [self isLocked] == NO && [self allowsCommenting];
 }

Modified: trunk/PDFPage_SKExtensions.m
===================================================================
--- trunk/PDFPage_SKExtensions.m        2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/PDFPage_SKExtensions.m        2024-11-27 23:48:33 UTC (rev 14757)
@@ -317,7 +317,7 @@
 - (NSString *)filePromiseProvider:(NSFilePromiseProvider *)filePromiseProvider 
fileNameForType:(NSString *)fileType {
     NSString *label = [self displayLabel];
     NSIndexSet *pageIndexes = [filePromiseProvider userInfo];
-    if (pageIndexes && [[self document] allowsPrinting]) {
+    if (pageIndexes && [[self document] allowsSaving]) {
         NSMutableArray *labels = [NSMutableArray array];
         [pageIndexes enumerateIndexesUsingBlock:^(NSUInteger i, BOOL *stop){
             [labels addObject:[[[self document] pageAtIndex:i] displayLabel]];
@@ -325,7 +325,7 @@
         label = [labels componentsJoinedByString:@", "];
     }
     NSString *filename = [([[[self containingDocument] displayName] 
stringByDeletingPathExtension] ?: @"PDF") 
stringByAppendingDashAndString:[NSString 
stringWithFormat:NSLocalizedString(@"Page %@", @""), label]];
-    NSString *pathExt = [[self document] allowsPrinting] ? @"pdf" : @"tiff";
+    NSString *pathExt = [[self document] allowsSaving] ? @"pdf" : @"tiff";
     return [filename stringByAppendingPathExtension:pathExt];
 }
 
@@ -332,7 +332,7 @@
 - (void)filePromiseProvider:(NSFilePromiseProvider *)filePromiseProvider 
writePromiseToURL:(NSURL *)fileURL completionHandler:(void (^)(NSError 
*))completionHandler {
     NSData *data = nil;
     NSError *error = nil;
-    if ([[self document] allowsPrinting]) {
+    if ([[self document] allowsSaving]) {
         NSIndexSet *pageIndexes = [filePromiseProvider userInfo];
         data = [self dataRepresentationForPageIndexes:pageIndexes];
     } else
@@ -343,7 +343,7 @@
 
 - (id<NSPasteboardWriting>)filePromiseForPageIndexes:(NSIndexSet *)pageIndexes 
{
     if ([[self document] isLocked] == NO) {
-        NSString *fileUTI = [[self document] allowsPrinting] ? (__bridge 
NSString *)kUTTypePDF : (__bridge NSString *)kUTTypeTIFF;
+        NSString *fileUTI = [[self document] allowsSaving] ? (__bridge 
NSString *)kUTTypePDF : (__bridge NSString *)kUTTypeTIFF;
         NSFilePromiseProvider *item = [[NSFilePromiseProvider alloc] 
initWithFileType:fileUTI delegate:self];
         if (pageIndexes)
             [item setUserInfo:pageIndexes];
@@ -356,7 +356,7 @@
     if ([[self document] isLocked] == NO) {
         NSData *tiffData = [self TIFFDataForRect:[self 
boundsForBox:kPDFDisplayBoxCropBox]];
         NSPasteboardItem *pboardItem = [[NSPasteboardItem alloc] init];
-        if ([[self document] allowsPrinting])
+        if ([[self document] allowsSaving])
             [pboardItem setData:[self 
dataRepresentationForPageIndexes:pageIndexes] forType:NSPasteboardTypePDF];
         [pboardItem setData:tiffData forType:NSPasteboardTypeTIFF];
         NSPasteboard *pboard = [NSPasteboard generalPasteboard];

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/SKMainDocument.m      2024-11-27 23:48:33 UTC (rev 14757)
@@ -190,7 +190,7 @@
 - (void)setDataFromTmpData {
     PDFDocument *pdfDoc = [tmpData pdfDocument];
     
-    mdFlags.needsPasswordToConvert = [pdfDoc allowsPrinting] == NO || [pdfDoc 
allowsNotes] == NO;
+    mdFlags.needsPasswordToConvert = [pdfDoc allowsSaving] == NO || [pdfDoc 
allowsNotes] == NO;
     
     [self tryToUnlockDocument:pdfDoc];
     
@@ -320,7 +320,7 @@
         [exportAccessoryController setHasExportOptions:NO];
     } else {
         [exportAccessoryController setHasExportOptions:YES];
-        if ([[NSWorkspace sharedWorkspace] type:type 
conformsToType:SKDocumentTypePDF] && ([[self pdfDocument] isLocked] == NO && 
[[self pdfDocument] allowsPrinting])) {
+        if ([[NSWorkspace sharedWorkspace] type:type 
conformsToType:SKDocumentTypePDF] && ([[self pdfDocument] isLocked] == NO && 
[[self pdfDocument] allowsSaving])) {
             [exportAccessoryController setAllowsEmbeddedOption:YES];
         } else {
             [exportAccessoryController setAllowsEmbeddedOption:NO];
@@ -1191,8 +1191,8 @@
             if (result == NSModalResponseOK) {
                 [[passwordSheetController window] orderOut:nil];
                 
-                if (pdfDoc && ([pdfDoc allowsNotes] == NO || [pdfDoc 
allowsPrinting] == NO) &&
-                    ([pdfDoc unlockWithPassword:[passwordSheetController 
stringValue]] == NO || [pdfDoc allowsNotes] == NO || [pdfDoc allowsPrinting] == 
NO)) {
+                if (pdfDoc && ([pdfDoc allowsNotes] == NO || [pdfDoc 
allowsSaving] == NO) &&
+                    ([pdfDoc unlockWithPassword:[passwordSheetController 
stringValue]] == NO || [pdfDoc allowsNotes] == NO || [pdfDoc allowsSaving] == 
NO)) {
                     [self beginConvertNotesPasswordSheetForPDFDocument:pdfDoc];
                 } else {
                     [self convertNotesUsingPDFDocument:pdfDoc];
@@ -1211,7 +1211,7 @@
     if (mdFlags.needsPasswordToConvert) {
         pdfDocWithoutNotes = [[PDFDocument alloc] initWithData:pdfData];
         [self tryToUnlockDocument:pdfDocWithoutNotes];
-        if ([pdfDocWithoutNotes allowsNotes] == NO || [pdfDocWithoutNotes 
allowsPrinting] == NO) {
+        if ([pdfDocWithoutNotes allowsNotes] == NO || [pdfDocWithoutNotes 
allowsSaving] == NO) {
             [self 
beginConvertNotesPasswordSheetForPDFDocument:pdfDocWithoutNotes];
             return;
         }

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/SKMainWindowController.m      2024-11-27 23:48:33 UTC (rev 14757)
@@ -1568,7 +1568,7 @@
     [overviewContentView setFrame:[oldView frame]];
     [overviewView scrollRectToVisible:[overviewView 
frameForItemAtIndex:[[pdfView currentPage] pageIndex]]];
     [overviewView setSelectionIndexes:[NSIndexSet indexSetWithIndex:[[pdfView 
currentPage] pageIndex]]];
-    [overviewView setAllowsMultipleSelection:isPresentation == NO && [[self 
pdfDocument] allowsPrinting]];
+    [overviewView setAllowsMultipleSelection:isPresentation == NO && [[self 
pdfDocument] allowsSaving]];
     
     if (@available(macOS 10.14, *)) {
         if (isPresentation) {

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2024-11-27 10:41:44 UTC (rev 14756)
+++ trunk/SKPDFView.m   2024-11-27 23:48:33 UTC (rev 14757)
@@ -1133,7 +1133,7 @@
         
         imageItem = [[NSPasteboardItem alloc] init];
         
-        if ([[self document] allowsPrinting] && (pdfData = [page 
PDFDataForRect:selRect]))
+        if ([[self document] allowsSaving] && (pdfData = [page 
PDFDataForRect:selRect]))
             [imageItem setData:pdfData forType:NSPasteboardTypePDF];
         if ((tiffData = [page TIFFDataForRect:selRect]))
             [imageItem setData:tiffData forType:NSPasteboardTypeTIFF];
@@ -2276,7 +2276,7 @@
         NSRect selRect = NSIntegralRect(selectionRect);
         
         // Unfortunately only old PboardTypes are requested rather than 
preferred UTIs, even if we only validate and the Service only requests UTIs, so 
we need to support both
-        if ([[self document] allowsPrinting] && [[self document] isLocked] == 
NO) {
+        if ([[self document] allowsSaving] && [[self document] isLocked] == 
NO) {
             if ([types containsObject:NSPasteboardTypePDF])
                 pdfType = NSPasteboardTypePDF;
             else if ([types containsObject:NSPDFPboardType])
@@ -2317,7 +2317,7 @@
 
 - (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString 
*)returnType {
     if ([self toolMode] == SKToolModeSelect && NSIsEmptyRect(selectionRect) == 
NO && selectionPageIndex != NSNotFound && returnType == nil && 
-        (([[self document] allowsPrinting] && [[self document] isLocked] == NO 
&& [sendType isEqualToString:NSPasteboardTypePDF]) || [sendType 
isEqualToString:NSPasteboardTypeTIFF])) {
+        (([[self document] allowsSaving] && [[self document] isLocked] == NO 
&& [sendType isEqualToString:NSPasteboardTypePDF]) || [sendType 
isEqualToString:NSPasteboardTypeTIFF])) {
         return self;
     }
     if ([[self currentSelection] hasCharacters] && returnType == nil && 
([sendType isEqualToString:NSPasteboardTypeString] || [sendType 
isEqualToString:NSPasteboardTypeRTF])) {

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