Revision: 13088 http://sourceforge.net/p/skim-app/code/13088 Author: hofman Date: 2022-10-17 10:06:55 +0000 (Mon, 17 Oct 2022) Log Message: ----------- convenience method to write URLs with names to pasteboard
Modified Paths: -------------- trunk/NSDocument_SKExtensions.m trunk/NSPasteboard_SKExtensions.h trunk/NSPasteboard_SKExtensions.m trunk/SKBookmarkController.m trunk/SKMainDocument.m trunk/SKMainWindowController_UI.m trunk/SKThumbnailView.m Modified: trunk/NSDocument_SKExtensions.m =================================================================== --- trunk/NSDocument_SKExtensions.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/NSDocument_SKExtensions.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -55,6 +55,7 @@ #import "NSWindow_SKExtensions.h" #import "SKStringConstants.h" #import <SkimNotes/SkimNotes.h> +#import "NSPasteboard_SKExtensions.h" #define SKDisableExportAttributesKey @"SKDisableExportAttributes" @@ -84,15 +85,11 @@ if (fileURL) { NSURLComponents *components = [[NSURLComponents alloc] initWithURL:fileURL resolvingAgainstBaseURL:NO]; [components setScheme:@"skim"]; - NSString *skimURL = [[components URL] absoluteString]; + NSURL *skimURL = [components URL]; [components release]; - NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; - [item setString:skimURL forType:(NSString *)kUTTypeURL]; - [item setString:skimURL forType:NSPasteboardTypeString]; - [item setString:[self displayName] forType:@"public.url-name"]; NSPasteboard *pboard = [NSPasteboard generalPasteboard]; [pboard clearContents]; - [pboard writeObjects:[NSArray arrayWithObjects:item, nil]]; + [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] names:[NSArray arrayWithObjects:[self displayName], nil]]; } else { NSBeep(); } Modified: trunk/NSPasteboard_SKExtensions.h =================================================================== --- trunk/NSPasteboard_SKExtensions.h 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/NSPasteboard_SKExtensions.h 2022-10-17 10:06:55 UTC (rev 13088) @@ -43,4 +43,6 @@ - (NSURL *)pasteLocationURL; +- (BOOL)writeURLs:(NSArray *)URLs names:(NSArray *)names; + @end Modified: trunk/NSPasteboard_SKExtensions.m =================================================================== --- trunk/NSPasteboard_SKExtensions.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/NSPasteboard_SKExtensions.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -38,6 +38,8 @@ #import "NSPasteboard_SKExtensions.h" +#define SKPasteboardTypeURLName @"public.url-name" + @implementation NSPasteboard (SKExtensions) - (NSURL *)pasteLocationURL; { @@ -58,4 +60,27 @@ return pasteLocationURL; } +- (BOOL)writeURLs:(NSArray *)URLs names:(NSArray *)names { + NSMutableArray *items = [NSMutableArray array]; + NSUInteger i, urlCount = [URLs count], namesCount = [names count]; + + for (i = 0; i < urlCount; i++) { + + NSURL *theURL = [URLs objectAtIndex:i]; + NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; + + [item setString:[theURL absoluteString] forType:(NSString *)([theURL isFileURL] ? kUTTypeFileURL : kUTTypeURL)]; + [item setString:[theURL absoluteString] forType:NSPasteboardTypeString]; + if (i < namesCount) + [item setString:[names objectAtIndex:i] forType:SKPasteboardTypeURLName]; + + [items addObject:item]; + } + + if ([items count]) + return [self writeObjects:items]; + else + return NO; +} + @end Modified: trunk/SKBookmarkController.m =================================================================== --- trunk/SKBookmarkController.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/SKBookmarkController.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -53,6 +53,7 @@ #import "NSError_SKExtensions.h" #import "SKDocumentController.h" #import "SKRecentDocumentInfo.h" +#import "NSPasteboard_SKExtensions.h" #define SKPasteboardTypeBookmarkRow @"net.sourceforge.skim-app.pasteboard.bookmarkrow" @@ -571,20 +572,18 @@ - (IBAction)copyURL:(id)sender { NSArray *selectedBookmarks = minimumCoverForBookmarks([outlineView selectedItems]); NSMutableArray *skimURLs = [NSMutableArray array]; + NSMutableArray *labels = [NSMutableArray array]; for (SKBookmark *bookmark in selectedBookmarks) { - NSString *skimURL = [[bookmark skimURL] absoluteString]; + NSURL *skimURL = [bookmark skimURL]; if (skimURL) { - NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; - [item setString:skimURL forType:(NSString *)kUTTypeURL]; - [item setString:skimURL forType:NSPasteboardTypeString]; - [item setString:[bookmark label] forType:@"public.url-name"]; - [skimURLs addObject:item]; + [skimURLs addObject:skimURL]; + [labels addObject:[bookmark label]]; } } if ([skimURLs count]) { NSPasteboard *pboard = [NSPasteboard generalPasteboard]; [pboard clearContents]; - [pboard writeObjects:skimURLs]; + [pboard writeURLs:skimURLs names:labels]; } else { NSBeep(); } Modified: trunk/SKMainDocument.m =================================================================== --- trunk/SKMainDocument.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/SKMainDocument.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -92,6 +92,7 @@ #import "PDFOutline_SKExtensions.h" #import "PDFView_SKExtensions.h" #import "SKLine.h" +#import "NSPasteboard_SKExtensions.h" #define BUNDLE_DATA_FILENAME @"data" #define PRESENTATION_OPTIONS_KEY @"net_sourceforge_skim-app_presentation_options" @@ -1035,14 +1036,9 @@ skimURL = [components URL]; [components release]; } - NSString *string = [skimURL absoluteString]; - NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; - [item setString:string forType:(NSString *)kUTTypeURL]; - [item setString:string forType:NSPasteboardTypeString]; - [item setString:[self displayName] forType:@"public.url-name"]; NSPasteboard *pboard = [NSPasteboard generalPasteboard]; [pboard clearContents]; - [pboard writeObjects:[NSArray arrayWithObjects:item, nil]]; + [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] names:[NSArray arrayWithObject:[self displayName]]]; } else { NSBeep(); } Modified: trunk/SKMainWindowController_UI.m =================================================================== --- trunk/SKMainWindowController_UI.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/SKMainWindowController_UI.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -90,6 +90,7 @@ #import "NSView_SKExtensions.h" #import "NSImage_SKExtensions.h" #import "NSObject_SKExtensions.h" +#import "NSPasteboard_SKExtensions.h" #define NOTES_KEY @"notes" #define SNAPSHOTS_KEY @"snapshots" @@ -1004,15 +1005,11 @@ NSUInteger idx = [[sender representedObject] firstIndex]; if (idx != NSNotFound) { PDFPage *page = [[pdfView document] pageAtIndex:idx]; - NSString *skimURL = [[page skimURL] absoluteString]; + NSURL *skimURL = [page skimURL]; if (skimURL != nil) { - NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; - [item setString:skimURL forType:(NSString *)kUTTypeURL]; - [item setString:skimURL forType:NSPasteboardTypeString]; - [item setString:[[self document] displayName] forType:@"public.url-name"]; NSPasteboard *pboard = [NSPasteboard generalPasteboard]; [pboard clearContents]; - [pboard writeObjects:[NSArray arrayWithObjects:item, nil]]; + [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] names:[NSArray arrayWithObjects:[[self document] displayName], nil]]; } } } Modified: trunk/SKThumbnailView.m =================================================================== --- trunk/SKThumbnailView.m 2022-10-16 08:19:49 UTC (rev 13087) +++ trunk/SKThumbnailView.m 2022-10-17 10:06:55 UTC (rev 13088) @@ -48,6 +48,7 @@ #import "PDFPage_SKExtensions.h" #import "NSColor_SKExtensions.h" #import "SKThumbnailImageView.h" +#import "NSPasteboard_SKExtensions.h" #define MARGIN 8.0 #define TEXT_MARGIN 4.0 @@ -435,15 +436,11 @@ - (void)copyPageURL:(id)sender { PDFPage *page = [[self thumbnail] page]; - NSString *skimURL = [[page skimURL] absoluteString]; + NSURL *skimURL = [page skimURL]; if (skimURL != nil) { - NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease]; - [item setString:skimURL forType:(NSString *)kUTTypeURL]; - [item setString:skimURL forType:NSPasteboardTypeString]; - [item setString:[[[[self window] windowController] document] displayName] forType:@"public.url-name"]; NSPasteboard *pboard = [NSPasteboard generalPasteboard]; [pboard clearContents]; - [pboard writeObjects:[NSArray arrayWithObjects:item, nil]]; + [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] names:[NSArray arrayWithObjects:[[[[self window] windowController] document] displayName], 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