Revision: 15540
http://sourceforge.net/p/skim-app/code/15540
Author: hofman
Date: 2025-06-24 14:24:42 +0000 (Tue, 24 Jun 2025)
Log Message:
-----------
Add canExitPresentation property to NSDocument. Delay terminating the app when
a document is busy entering presentation. Delay updating file from disk when
busy entering presentation. Exit presentation when updating from file update
from file update checker.
Modified Paths:
--------------
trunk/NSDocument_SKExtensions.h
trunk/NSDocument_SKExtensions.m
trunk/SKApplicationController.m
trunk/SKFileUpdateChecker.m
trunk/SKMainDocument.m
Modified: trunk/NSDocument_SKExtensions.h
===================================================================
--- trunk/NSDocument_SKExtensions.h 2025-06-24 09:37:26 UTC (rev 15539)
+++ trunk/NSDocument_SKExtensions.h 2025-06-24 14:24:42 UTC (rev 15540)
@@ -62,6 +62,8 @@
@property (nonatomic) SKInteractionMode interactionMode;
+@property (nonatomic, readonly) BOOL canExitPresentation;
+
#pragma mark Document Setup
- (void)saveRecentDocumentInfo;
Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m 2025-06-24 09:37:26 UTC (rev 15539)
+++ trunk/NSDocument_SKExtensions.m 2025-06-24 14:24:42 UTC (rev 15540)
@@ -100,6 +100,8 @@
[[self mainWindow] toggleFullScreen:nil];
}
+- (BOOL)canExitPresentation { return NO; }
+
#pragma mark Document Setup
- (void)saveRecentDocumentInfo {
Modified: trunk/SKApplicationController.m
===================================================================
--- trunk/SKApplicationController.m 2025-06-24 09:37:26 UTC (rev 15539)
+++ trunk/SKApplicationController.m 2025-06-24 14:24:42 UTC (rev 15540)
@@ -315,9 +315,23 @@
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication
*)application {
for (NSDocument *doc in [[NSDocumentController sharedDocumentController]
documents]) {
if ([doc interactionMode] == SKPresentationMode) {
- if (currentDocumentsTimer == nil)
- [self registerForCurrentDocumentsNotifications];
- return NSTerminateCancel;
+ if ([doc canExitPresentation]) {
+ [doc setInteractionMode:SKNormalMode];
+ break;
+ } else {
+ DISPATCH_MAIN_AFTER_SEC(0.51, ^{
+ if ([doc interactionMode] == SKPresentationMode && [doc
canExitPresentation] == NO) {
+ [NSApp replyToApplicationShouldTerminate:NO];
+ if (currentDocumentsTimer == nil)
+ [self registerForCurrentDocumentsNotifications];
+ } else {
+ if ([doc canExitPresentation])
+ [doc setInteractionMode:SKNormalMode];
+ [NSApp replyToApplicationShouldTerminate:YES];
+ }
+ });
+ return NSTerminateLater;
+ }
}
}
return NSTerminateNow;
Modified: trunk/SKFileUpdateChecker.m
===================================================================
--- trunk/SKFileUpdateChecker.m 2025-06-24 09:37:26 UTC (rev 15539)
+++ trunk/SKFileUpdateChecker.m 2025-06-24 14:24:42 UTC (rev 15540)
@@ -168,6 +168,9 @@
if (option == SKFileUpdateOptionAuto)
fucFlags.autoUpdate = YES;
+ if ([document interactionMode] == SKPresentationMode)
+ [document setInteractionMode:SKNormalMode];
+
NSError *error = nil;
BOOL didRevert = [document revertToContentsOfURL:[document fileURL]
ofType:[document fileType] error:&error];
if (didRevert == NO && error != nil && [error isUserCancelledError] ==
NO)
@@ -209,6 +212,8 @@
if ([docWindow attachedSheet]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleWindowDidEndSheetNotification:)
name:NSWindowDidEndSheetNotification object:docWindow];
+ } else if ([document interactionMode] == SKPresentationMode &&
[document canExitPresentation] == NO) {
+ [self performSelector:@selector(fileUpdated) withObject:nil
afterDelay:0.51];
} else if (canUpdateFromURL(fileURL)) {
BOOL documentHasEdits = [document isDocumentEdited] || [document
hasNotes];
if (fucFlags.autoUpdate && documentHasEdits == NO) {
Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m 2025-06-24 09:37:26 UTC (rev 15539)
+++ trunk/SKMainDocument.m 2025-06-24 14:24:42 UTC (rev 15540)
@@ -308,6 +308,25 @@
return [[self mainWindowController] interactionMode];
}
+- (void)setInteractionMode:(SKInteractionMode)mode {
+ if (mode == SKNormalMode) {
+ if ([[self mainWindowController] canExitFullscreen])
+ [[self mainWindowController] exitFullscreen];
+ else if ([[self mainWindowController] canExitPresentation])
+ [[self mainWindowController] exitPresentation];
+ } else if (mode == SKFullScreenMode) {
+ if ([[self mainWindowController] canEnterFullscreen])
+ [[self mainWindowController] enterFullscreen];
+ } else if (mode == SKPresentationMode) {
+ if ([[self mainWindowController] canEnterPresentation])
+ [[self mainWindowController] enterPresentation];
+ }
+}
+
+- (BOOL)canExitPresentation {
+ return [[self mainWindowController] canExitPresentation];
+}
+
#pragma mark Writing
- (NSString *)fileType {
@@ -998,9 +1017,6 @@
NSWindow *modalwindow = nil;
NSModalSession session;
- if ([[self mainWindowController] canExitPresentation])
- [[self mainWindowController] exitPresentation];
-
if ([mainWindow attachedSheet] == nil && [mainWindow isMainWindow]) {
modalwindow = [[SKAnimatedBorderlessWindow alloc]
initWithContentRect:NSZeroRect];
[(SKApplication *)NSApp setUserAttentionDisabled:YES];
@@ -1859,21 +1875,6 @@
[[self pdfView] setToolMode:newToolMode];
}
-- (void)setInteractionMode:(SKInteractionMode)mode {
- if (mode == SKNormalMode) {
- if ([[self mainWindowController] canExitFullscreen])
- [[self mainWindowController] exitFullscreen];
- else if ([[self mainWindowController] canExitPresentation])
- [[self mainWindowController] exitPresentation];
- } else if (mode == SKFullScreenMode) {
- if ([[self mainWindowController] canEnterFullscreen])
- [[self mainWindowController] enterFullscreen];
- } else if (mode == SKPresentationMode) {
- if ([[self mainWindowController] canEnterPresentation])
- [[self mainWindowController] enterPresentation];
- }
-}
-
- (NSDocument *)presentationNotesDocument {
return [[self mainWindowController] presentationNotesDocument];
}
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