Revision: 16749
http://sourceforge.net/p/skim-app/code/16749
Author: hofman
Date: 2026-10-30 15:49:37 +0000 (Fri, 30 Oct 2026)
Log Message:
-----------
make sure hasFileURL: is used only with an existing fileURL
Modified Paths:
--------------
trunk/NSDocument_SKExtensions.m
trunk/SKBookmarkController.h
trunk/SKBookmarkController.m
trunk/SKMainDocument.m
Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m 2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/NSDocument_SKExtensions.m 2026-10-30 15:49:37 UTC (rev 16749)
@@ -105,7 +105,8 @@
#pragma mark Document Setup
- (void)saveRecentDocumentInfo {
- if ([[SKBookmarkController sharedBookmarkController]
addRecentDocumentForURL:[self fileURL] pageIndex:NSNotFound snapshots:nil])
+ NSURL *fileURL = [self fileURL];
+ if ([fileURL checkResourceIsReachableAndReturnError:NULL] &&
[[SKBookmarkController sharedBookmarkController]
addRecentDocumentForURL:fileURL pageIndex:NSNotFound snapshots:nil])
[self setRecentInfoNeedsUpdate:NO];
}
Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h 2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKBookmarkController.h 2026-10-30 15:49:37 UTC (rev 16749)
@@ -96,6 +96,7 @@
- (void)removeBookmarkAtIndex:(NSUInteger)anIndex ofBookmark:(SKBookmark
*)parent animate:(BOOL)animate;
- (void)replaceBookmarkAtIndex:(NSUInteger)anIndex ofBookmark:(SKBookmark
*)parent withBookmark:(SKBookmark *)bookmark animate:(BOOL)animate;
+// fileURL is assumed to exist in the next two methods
- (BOOL)addRecentDocumentForURL:(NSURL *)fileURL
pageIndex:(NSUInteger)pageIndex snapshots:(nullable
NSArray<NSDictionary<NSString *, id> *> *)snapshots;
- (nullable SKBookmark *)recentDocumentAtURL:(NSURL *)fileURL;
Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m 2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKBookmarkController.m 2026-10-30 15:49:37 UTC (rev 16749)
@@ -265,24 +265,23 @@
}
- (BOOL)addRecentDocumentForURL:(NSURL *)fileURL
pageIndex:(NSUInteger)pageIndex snapshots:(NSArray *)snapshots {
+ // fileURL must exist when this is called
if (maxRecentDocumentsCount <= 0 || appIsTerminating)
return YES;
- if (fileURL) {
- SKBookmark *info = [[SKBookmark alloc] initWithURL:fileURL
pageIndex:pageIndex snapshots:snapshots];
- if (info) {
- SKBookmark *oldInfo = [self recentDocumentAtURL:fileURL];
- if (oldInfo)
- [recentDocuments removeObjectIdenticalTo:oldInfo];
- [recentDocuments insertObject:info atIndex:0];
- NSUInteger maxCount = maxRecentDocumentsCount +
[[[NSDocumentController sharedDocumentController] documents] count];
- while ([recentDocuments count] > maxCount)
- [recentDocuments removeLastObject];
-
- [self performSelectorOnce:@selector(saveBookmarksData)
afterDelay:SAVE_DELAY];
-
- return YES;
- }
+ SKBookmark *info = [[SKBookmark alloc] initWithURL:fileURL
pageIndex:pageIndex snapshots:snapshots];
+ if (info) {
+ SKBookmark *oldInfo = [self recentDocumentAtURL:fileURL];
+ if (oldInfo)
+ [recentDocuments removeObjectIdenticalTo:oldInfo];
+ [recentDocuments insertObject:info atIndex:0];
+ NSUInteger maxCount = maxRecentDocumentsCount +
[[[NSDocumentController sharedDocumentController] documents] count];
+ while ([recentDocuments count] > maxCount)
+ [recentDocuments removeLastObject];
+
+ [self performSelectorOnce:@selector(saveBookmarksData)
afterDelay:SAVE_DELAY];
+
+ return YES;
}
return NO;
@@ -636,7 +635,7 @@
static inline BOOL bookmarkHasFileURL(SKBookmark *bm, NSArray *fileURLs) {
for (NSURL *fileURL in fileURLs) {
- if ([fileURL isEqual:[NSNull null]] == NO && [bm hasFileURL:fileURL])
+ if ([bm hasFileURL:fileURL])
return YES;
}
return NO;
@@ -643,7 +642,12 @@
}
- (NSArray *)closedDocumentBookmarks {
- NSArray *openFileURLs = [[[NSDocumentController sharedDocumentController]
documents] valueForKey:@"fileURL"];
+ NSMutableArray *openFileURLs = [NSMutableArray array];
+ for (NSDocument *document in [[NSDocumentController
sharedDocumentController] documents]) {
+ NSURL *fileURL = [document fileURL];
+ if ([fileURL checkResourceIsReachableAndReturnError:NULL])
+ [openFileURLs addObject:fileURL];
+ }
NSMutableArray *closedBms = [NSMutableArray array];
for (SKBookmark *aBm in recentDocuments) {
if (([closedBms count] > 0 || bookmarkHasFileURL(aBm, openFileURLs) ==
NO) && [aBm fileURL])
@@ -654,7 +658,7 @@
- (SKBookmark *)currentDocumentBookmark {
NSURL *fileURL = [[[[NSApp mainWindow] windowController] document]
fileURL];
- if (fileURL) {
+ if ([fileURL checkResourceIsReachableAndReturnError:NULL]) {
NSArray *currentBookmarks = [[[self bookmarkRoot] entireContents]
filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(SKBookmark *bm,
NSDictionary *bindings){ return [bm hasFileURL:fileURL]; }]];
if ([currentBookmarks count] > 1) {
return [[SKBookmark alloc] initFolderWithChildren:[[NSArray alloc]
initWithArray:currentBookmarks copyItems:YES] label:NSLocalizedString(@"Current
Document", @"Menu item title")];
Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m 2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKMainDocument.m 2026-10-30 15:49:37 UTC (rev 16749)
@@ -237,6 +237,8 @@
if ([[primaryWindowController window] delegate] == nil)
return;
NSURL *fileURL = [self fileURL];
+ if ([fileURL checkResourceIsReachableAndReturnError:NULL] == NO)
+ return;
NSUInteger pageIndex = [[[self pdfView] currentPage] pageIndex];
NSArray *snapshots = [[[self primaryWindowController] snapshots]
valueForKey:SKSnapshotCurrentSetupKey];
if ([[SKBookmarkController sharedBookmarkController]
addRecentDocumentForURL:fileURL pageIndex:pageIndex snapshots:[snapshots count]
> 0 ? snapshots : 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