Revision: 16670
http://sourceforge.net/p/skim-app/code/16670
Author: hofman
Date: 2026-10-18 15:46:46 +0000 (Sun, 18 Oct 2026)
Log Message:
-----------
implement search for screen for presentation window in fullscreen category
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-17 21:31:49 UTC (rev 16669)
+++ trunk/NSScreen_SKExtensions.h 2026-10-18 15:46:46 UTC (rev 16670)
@@ -48,11 +48,6 @@
@property (nonatomic, readonly) NSScreen *primaryScreen;
-@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-17 21:31:49 UTC (rev 16669)
+++ trunk/NSScreen_SKExtensions.m 2026-10-18 15:46:46 UTC (rev 16670)
@@ -102,59 +102,6 @@
return self;
}
-- (NSArray *)alternateScreens {
- NSMutableDictionary *screens = [NSMutableDictionary dictionary];
- NSMutableArray *screenNumbers = [NSMutableArray array];
- NSNumber *screenNumber = nil;
- for (NSScreen *aScreen in [NSScreen screens]) {
- NSDictionary *deviceDescription = [aScreen deviceDescription];
- if ([deviceDescription objectForKey:NSDeviceIsScreen] == nil)
- continue;
- NSNumber *aScreenNumber = [deviceDescription
objectForKey:@"NSScreenNumber"];
- CGDirectDisplayID displayID = (CGDirectDisplayID)[aScreenNumber
unsignedIntValue];
- displayID = CGDisplayMirrorsDisplay(displayID);
- if (displayID == kCGNullDirectDisplay) {
- [screenNumbers addObject:aScreenNumber];
- [screens setObject:aScreen forKey:aScreenNumber];
- }
- if ([aScreen isEqual:self])
- screenNumber = displayID == kCGNullDirectDisplay ? aScreenNumber :
[NSNumber numberWithUnsignedInt:displayID];
- }
- NSMutableArray *alternateScreens = [NSMutableArray array];
- for (NSNumber *aScreenNumber in screenNumbers) {
- if ([aScreenNumber isEqual:screenNumber] == NO)
- [alternateScreens addObject:[screens objectForKey:aScreenNumber]];
- }
- return alternateScreens;
-}
-
-+ (NSArray *)alternateScreens {
- NSMutableDictionary *screens = [NSMutableDictionary dictionary];
- NSMutableArray *screenNumbers = [NSMutableArray array];
- NSNumber *builtinScreenNumber = nil;
- for (NSScreen *aScreen in [self screens]) {
- NSDictionary *deviceDescription = [aScreen deviceDescription];
- if ([deviceDescription objectForKey:NSDeviceIsScreen] == nil)
- continue;
- NSNumber *aScreenNumber = [deviceDescription
objectForKey:@"NSScreenNumber"];
- CGDirectDisplayID displayID = (CGDirectDisplayID)[aScreenNumber
unsignedIntValue];
- BOOL isBuiltin = builtinScreenNumber == nil &&
CGDisplayIsBuiltin(displayID);
- displayID = CGDisplayMirrorsDisplay(displayID);
- if (displayID == kCGNullDirectDisplay) {
- [screenNumbers addObject:aScreenNumber];
- [screens setObject:aScreen forKey: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 [self screens]) {
Modified: trunk/SKMainWindowController_FullScreen.m
===================================================================
--- trunk/SKMainWindowController_FullScreen.m 2026-10-17 21:31:49 UTC (rev
16669)
+++ trunk/SKMainWindowController_FullScreen.m 2026-10-18 15:46:46 UTC (rev
16670)
@@ -139,6 +139,39 @@
#pragma mark Presentation Support Methods
+- (NSScreen *)screenForPresentationWindowAvoidingScreen:(NSScreen
*)screenToAvoid {
+ NSScreen *mainScreen = [savedNormalWindow screen];
+ NSArray *allScreens = [NSScreen screens];
+ if ([allScreens count] > 1) {
+ NSMutableDictionary *screens = [NSMutableDictionary dictionary];
+ NSMutableArray *screenNumbers = [NSMutableArray array];
+ NSNumber *avoidScreenNumber = nil;
+ NSNumber *mainScreenNumber = nil;
+ for (NSScreen *aScreen in allScreens) {
+ NSDictionary *deviceDescription = [aScreen deviceDescription];
+ if ([deviceDescription objectForKey:NSDeviceIsScreen] == nil)
+ continue;
+ NSNumber *aScreenNumber = [deviceDescription
objectForKey:@"NSScreenNumber"];
+ CGDirectDisplayID displayID = (CGDirectDisplayID)[aScreenNumber
unsignedIntValue];
+ BOOL isBuiltin = screenToAvoid == nil && avoidScreenNumber == nil
&& CGDisplayIsBuiltin(displayID);
+ displayID = CGDisplayMirrorsDisplay(displayID);
+ if (displayID == kCGNullDirectDisplay) {
+ [screenNumbers addObject:aScreenNumber];
+ [screens setObject:aScreen forKey:aScreenNumber];
+ }
+ if (avoidScreenNumber == nil && (isBuiltin || [aScreen
isEqual:screenToAvoid]))
+ avoidScreenNumber = displayID == kCGNullDirectDisplay ?
aScreenNumber : [NSNumber numberWithUnsignedInt:displayID];
+ if ([aScreen isEqual:mainScreen])
+ mainScreenNumber = displayID == kCGNullDirectDisplay ?
aScreenNumber : [NSNumber numberWithUnsignedInt:displayID];
+ }
+ if (avoidScreenNumber)
+ [screenNumbers removeObject:avoidScreenNumber];
+ if ([screenNumbers count] > 0 && [screenNumbers
containsObject:mainScreenNumber] == NO)
+ return [screens objectForKey:[screenNumbers firstObject]];
+ }
+ return mainScreen;
+}
+
- (void)showNotesForPresentationWindow:(NSWindow *)window {
NSDocument *notesDocument = [self presentationNotesDocument];
if (notesDocument == nil)
@@ -158,11 +191,7 @@
[preview setDelegate:self];
- NSScreen *screen = [savedNormalWindow screen];
- NSArray *screens = [[window screen] alternateScreens];
- if ([screens count] > 0 && [screens containsObject:[screen
primaryScreen]] == NO)
- screen = [[screen alternateScreens] firstObject];
-
+ NSScreen *screen = [self
screenForPresentationWindowAvoidingScreen:[window screen]];
[preview setPdfDocument:[pdfView document] previewPageNumber:pageIndex
displayOnScreen:screen];
[[self document] addWindowController:preview];
@@ -246,15 +275,13 @@
interactionMode = SKPresentationMode;
- NSScreen *screen = [normalWindow screen];
+ NSScreen *screen = nil;
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];
+ if ([self presentationNotesDocument] != [self document])
+ screen = [[[self presentationNotesDocument] primaryWindow] screen];
+ screen = [self screenForPresentationWindowAvoidingScreen:screen];
+ } else {
+ screen = [normalWindow screen];
}
NSWindow *presentationWindow = [[SKFullScreenWindow alloc]
initWithContentRect:[screen frame]];
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