Revision: 16664
          http://sourceforge.net/p/skim-app/code/16664
Author:   hofman
Date:     2026-10-17 18:03:25 +0000 (Sat, 17 Oct 2026)
Log Message:
-----------
use external screen for presentation when using current/next page as preview 
when available

Modified Paths:
--------------
    trunk/NSScreen_SKExtensions.h
    trunk/NSScreen_SKExtensions.m
    trunk/SKMainWindowController_FullScreen.m

Modified: trunk/NSScreen_SKExtensions.h
===================================================================
--- trunk/NSScreen_SKExtensions.h       2026-10-16 21:37:35 UTC (rev 16663)
+++ trunk/NSScreen_SKExtensions.h       2026-10-17 18:03:25 UTC (rev 16664)
@@ -50,6 +50,9 @@
 
 @property (nonatomic, readonly) NSArray<NSScreen *> *alternateScreens;
 
+// gives the alternate screens for the builtin screen, i.e. external screens
+@property (nonatomic, class, readonly) NSArray<NSScreen *> *alternateScreens;
+
 @property (class, readonly) CGFloat maxBackingScaleFactor;
 
 @end

Modified: trunk/NSScreen_SKExtensions.m
===================================================================
--- trunk/NSScreen_SKExtensions.m       2026-10-16 21:37:35 UTC (rev 16663)
+++ trunk/NSScreen_SKExtensions.m       2026-10-17 18:03:25 UTC (rev 16664)
@@ -123,6 +123,32 @@
     return alternateScreens;
 }
 
++ (NSArray *)alternateScreens {
+    NSMutableDictionary *screens = [NSMutableDictionary dictionary];
+    NSMutableArray *screenNumbers = [NSMutableArray array];
+    NSNumber *builtinScreenNumber = nil;
+    for (NSScreen *aScreen in [NSScreen screens]) {
+        NSDictionary *deviceDescription = [aScreen deviceDescription];
+        if ([deviceDescription objectForKey:NSDeviceIsScreen] == nil)
+            continue;
+        NSNumber *aScreenNumber = [deviceDescription 
objectForKey:@"NSScreenNumber"];
+        [screens setObject:aScreen forKey:aScreenNumber];
+        CGDirectDisplayID displayID = (CGDirectDisplayID)[aScreenNumber 
unsignedIntValue];
+        BOOL isBuiltin = builtinScreenNumber == nil && 
CGDisplayIsBuiltin(displayID);
+        displayID = CGDisplayMirrorsDisplay(displayID);
+        if (displayID == kCGNullDirectDisplay)
+            [screenNumbers addObject:aScreenNumber];
+        if (isBuiltin)
+            builtinScreenNumber = displayID == kCGNullDirectDisplay ? 
aScreenNumber : [NSNumber numberWithUnsignedInt:displayID];
+    }
+    NSMutableArray *alternateScreens = [NSMutableArray array];
+    for (NSNumber *aScreenNumber in screenNumbers) {
+        if ([aScreenNumber isEqual:builtinScreenNumber] == NO)
+            [alternateScreens addObject:[screens objectForKey:aScreenNumber]];
+    }
+    return alternateScreens;
+}
+
 + (CGFloat)maxBackingScaleFactor {
     CGFloat scale = 1.0;
     for (NSScreen *screen in [NSScreen screens]) {

Modified: trunk/SKMainWindowController_FullScreen.m
===================================================================
--- trunk/SKMainWindowController_FullScreen.m   2026-10-16 21:37:35 UTC (rev 
16663)
+++ trunk/SKMainWindowController_FullScreen.m   2026-10-17 18:03:25 UTC (rev 
16664)
@@ -246,8 +246,12 @@
     interactionMode = SKPresentationMode;
     
     NSScreen *screen = [normalWindow screen];
-    if ([self presentationNotesDocument] && [self presentationNotesDocument] 
!= [self document]) {
-        NSArray *screens = [[[[self presentationNotesDocument] primaryWindow] 
screen] alternateScreens];
+    if ([self presentationNotesDocument]) {
+        NSArray *screens = nil;
+        if ([self presentationNotesDocument] == [self document])
+            screens = [NSScreen alternateScreens];
+        else
+            screens = [[[[self presentationNotesDocument] primaryWindow] 
screen] alternateScreens];
         if ([screens count] > 0 && [screens containsObject:[screen 
primaryScreen]] == NO)
             screen = [screens firstObject];
     }

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

Reply via email to