Revision: 16132
http://sourceforge.net/p/skim-app/code/16132
Author: hofman
Date: 2026-03-31 17:41:00 +0000 (Tue, 31 Mar 2026)
Log Message:
-----------
Revert to using replaceSubbview:with: for overview. Fix auto-uncollapsing side
panes in full screen by resetting using private NSSplitViewController method.
Modified Paths:
--------------
trunk/SKMainWindowController.m
trunk/SKMainWindowController_Actions.m
Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m 2026-03-30 16:11:50 UTC (rev 16131)
+++ trunk/SKMainWindowController.m 2026-03-31 17:41:00 UTC (rev 16132)
@@ -196,6 +196,10 @@
@property (nonatomic) BOOL revealsOnEdgeHoverInFullscreen;
@end
+@interface NSSplitViewController (SKPrivateDeclarations)
+- (void)_setHasItemToRevealOnEdgeHover:(BOOL)flag;
+@end
+
@interface SKMainWindowController ()
- (void)cleanup;
@@ -1672,11 +1676,13 @@
BOOL isPresentation = [self interactionMode] == SKPresentationMode;
NSView *oldView = isPresentation ? presentationView : [splitViewController
view];
NSView *contentView = [oldView superview];
+ BOOL useContentTop = mwcFlags.fullSizeContent || isPresentation;
+ BOOL hasStatus = isPresentation == NO && [statusBar isVisible];
NSArray *constraints = @[
- [[overviewContentView leadingAnchor] constraintEqualToAnchor:[oldView
leadingAnchor]],
- [[oldView trailingAnchor] constraintEqualToAnchor:[overviewContentView
trailingAnchor]],
- [[overviewContentView topAnchor] constraintEqualToAnchor:[oldView
topAnchor]],
- [[oldView bottomAnchor] constraintEqualToAnchor:[overviewContentView
bottomAnchor]]];
+ [[overviewContentView leadingAnchor]
constraintEqualToAnchor:[contentView leadingAnchor]],
+ [[contentView trailingAnchor]
constraintEqualToAnchor:[overviewContentView trailingAnchor]],
+ [[overviewContentView topAnchor]
constraintEqualToAnchor:[(useContentTop ? contentView : [[self window]
contentLayoutGuide]) topAnchor]],
+ [(hasStatus ? [statusBar topAnchor] : [contentView bottomAnchor])
constraintEqualToAnchor:[overviewContentView bottomAnchor]]];
[overviewContentView setFrame:[oldView frame]];
[overviewView scrollRectToVisible:[overviewView
frameForItemAtIndex:[[pdfView currentPage] pageIndex]]];
@@ -1706,25 +1712,22 @@
if (animate) {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
- [[contentView animator] addSubview:overviewContentView];
+ [context setDuration:0.5];
+ [[contentView animator] replaceSubview:oldView
with:overviewContentView];
[NSLayoutConstraint activateConstraints:constraints];
}
completionHandler:^{
- [[self window] makeFirstResponder:overviewView];
- [oldView setHidden:YES];
[overviewView scrollRectToVisible:[overviewView
frameForItemAtIndex:[[pdfView currentPage] pageIndex]]];
- [[self window] recalculateKeyViewLoop];
}];
} else {
- [contentView addSubview:overviewContentView];
+ [contentView replaceSubview:oldView with:overviewContentView];
[NSLayoutConstraint activateConstraints:constraints];
- [[self window] makeFirstResponder:overviewView];
- [oldView setHidden:YES];
[overviewView scrollRectToVisible:[overviewView
frameForItemAtIndex:[[pdfView currentPage] pageIndex]]];
- [[self window] recalculateKeyViewLoop];
}
if (isPresentation)
[NSCursor setHiddenUntilMouseMoves:NO];
+ [[self window] makeFirstResponder:overviewView];
+ [[self window] recalculateKeyViewLoop];
[touchBarController overviewChanged];
[noteToolbarController validateButtons];
}
@@ -1741,29 +1744,37 @@
// don't check interactionMode as this can be called from enterPresentation
BOOL isPresentation = 0 == ([[overviewContentView window] styleMask] &
NSWindowStyleMaskTitled);
+ NSView *newView = isPresentation ? presentationView : [splitViewController
view];
+ NSView *contentView = [overviewContentView superview];
+ BOOL useContentTop = mwcFlags.fullSizeContent || isPresentation;
+ BOOL hasStatus = isPresentation == NO && [statusBar isVisible];
+ NSArray *constraints = @[
+ [[newView leadingAnchor] constraintEqualToAnchor:[contentView
leadingAnchor]],
+ [[contentView trailingAnchor] constraintEqualToAnchor:[newView
trailingAnchor]],
+ [[newView topAnchor] constraintEqualToAnchor:[(useContentTop ?
contentView : [[self window] contentLayoutGuide]) topAnchor]],
+ [(hasStatus ? [statusBar topAnchor] : [contentView bottomAnchor])
constraintEqualToAnchor:[newView bottomAnchor]]];
- [isPresentation ? presentationView : [splitViewController view]
setHidden:NO];
- [[self window] makeFirstResponder:isPresentation ? presentationView :
pdfView];
-
if (animate) {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
- [[overviewContentView animator] removeFromSuperview];
+ [context setDuration:0.5];
+ [[contentView animator] replaceSubview:overviewContentView
with:newView];
+ [NSLayoutConstraint activateConstraints:constraints];
}
- completionHandler:^{
- [[self window] recalculateKeyViewLoop];
- [touchBarController overviewChanged];
- [noteToolbarController validateButtons];
- if (handler)
- handler();
- }];
+ completionHandler:handler];
} else {
- [overviewContentView removeFromSuperview];
- [[self window] recalculateKeyViewLoop];
- [touchBarController overviewChanged];
- [noteToolbarController validateButtons];
+ [contentView replaceSubview:overviewContentView with:newView];
+ [NSLayoutConstraint activateConstraints:constraints];
if (handler)
handler();
}
+ [[self window] makeFirstResponder:isPresentation ? presentationView :
pdfView];
+ [[self window] recalculateKeyViewLoop];
+ [touchBarController overviewChanged];
+ [noteToolbarController validateButtons];
+ if ([splitViewController
respondsToSelector:@selector(_setHasItemToRevealOnEdgeHover:)]) {
+ [splitViewController _setHasItemToRevealOnEdgeHover:NO];
+ [splitViewController _setHasItemToRevealOnEdgeHover:YES];
+ }
}
Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m 2026-03-30 16:11:50 UTC (rev
16131)
+++ trunk/SKMainWindowController_Actions.m 2026-03-31 17:41:00 UTC (rev
16132)
@@ -781,7 +781,8 @@
- (IBAction)toggleStatusBar:(id)sender {
[[NSUserDefaults standardUserDefaults] setBool:(NO == [statusBar
isVisible]) forKey:SKShowStatusBarKey];
- [statusBar toggleBelowView:[splitViewController view] animate:sender !=
nil];
+ NSView *view = [self hasOverview] ? overviewContentView :
[splitViewController view];
+ [statusBar toggleBelowView:view animate:sender != nil];
}
- (void)selectSearchFieldForSideViewController:(SKSideViewController
*)sideViewController {
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