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