Revision: 14983 http://sourceforge.net/p/skim-app/code/14983 Author: hofman Date: 2025-03-17 22:33:21 +0000 (Mon, 17 Mar 2025) Log Message: ----------- Move title bar accessory view controller to titlebar only for tab bar controller
Modified Paths: -------------- trunk/SKMainWindow.m Modified: trunk/SKMainWindow.m =================================================================== --- trunk/SKMainWindow.m 2025-03-17 17:55:47 UTC (rev 14982) +++ trunk/SKMainWindow.m 2025-03-17 22:33:21 UTC (rev 14983) @@ -42,6 +42,10 @@ #import "NSEvent_SKExtensions.h" +@interface NSWindow (SKPrivateDeclarations) +- (NSTitlebarAccessoryViewController *)_tabBarAccessoryViewController; +@end + @implementation SKMainWindow @synthesize disableConstrainedFrame, autoTitleVisibility; @@ -121,14 +125,23 @@ [super setDelegate:newDelegate]; } +- (NSTitlebarAccessoryViewController *)safeTabBarAccessoryController { + if ([self respondsToSelector:@selector(_tabBarAccessoryViewController)]) + return [self _tabBarAccessoryViewController]; + return nil; +} + - (void)updateForToolbarVisibility:(BOOL)toolbarIsVisible { if (autoTitleVisibility == SKWindowTitleHiddenForTabBar) { NSLayoutAttribute layoutAttribute = toolbarIsVisible ? NSLayoutAttributeBottom : NSLayoutAttributeTop; - NSTitlebarAccessoryViewController *tabBarController = [[self titlebarAccessoryViewControllers] firstObject]; + NSTitlebarAccessoryViewController *tabBarController = [self safeTabBarAccessoryController]; if (tabBarController && [tabBarController layoutAttribute] != layoutAttribute) { - [super removeTitlebarAccessoryViewControllerAtIndex:0]; - [tabBarController setLayoutAttribute:layoutAttribute]; - [super addTitlebarAccessoryViewController:tabBarController]; + NSUInteger i = [[self titlebarAccessoryViewControllers] indexOfObject:tabBarController]; + if (i != NSNotFound) { + [super removeTitlebarAccessoryViewControllerAtIndex:i]; + [tabBarController setLayoutAttribute:layoutAttribute]; + [super addTitlebarAccessoryViewController:tabBarController]; + } } } else if (autoTitleVisibility == SKWindowTitleHiddenForToolbar) { [self setTitleVisibility:toolbarIsVisible ? NSWindowTitleHidden : NSWindowTitleVisible]; @@ -140,7 +153,7 @@ autoTitleVisibility = visibility; if (autoTitleVisibility) [self updateForToolbarVisibility:[[self toolbar] isVisible]]; - if (autoTitleVisibility == SKWindowTitleHiddenForTabBar && [[self titlebarAccessoryViewControllers] count]) + if (autoTitleVisibility == SKWindowTitleHiddenForTabBar && [self safeTabBarAccessoryController] && [[self titlebarAccessoryViewControllers] containsObject:[self safeTabBarAccessoryController]]) [self setTitleVisibility:NSWindowTitleHidden]; } } @@ -158,7 +171,7 @@ } - (void)addTitlebarAccessoryViewController:(NSTitlebarAccessoryViewController *)childViewController { - if ([self autoTitleVisibility] == SKWindowTitleHiddenForTabBar) { + if ([self autoTitleVisibility] == SKWindowTitleHiddenForTabBar && [self safeTabBarAccessoryController] == childViewController) { [self setTitleVisibility:NSWindowTitleHidden]; if ([[self toolbar] isVisible] == NO) { [childViewController setLayoutAttribute:NSLayoutAttributeTop]; @@ -174,7 +187,7 @@ - (void)removeTitlebarAccessoryViewControllerAtIndex:(NSInteger)index { [super removeTitlebarAccessoryViewControllerAtIndex:index]; - if ([self autoTitleVisibility] == SKWindowTitleHiddenForTabBar) { + if ([self autoTitleVisibility] == SKWindowTitleHiddenForTabBar && [self safeTabBarAccessoryController] == [[self titlebarAccessoryViewControllers] objectAtIndex:index]) { [self setTitleVisibility:NSWindowTitleVisible]; if ([[self toolbar] isVisible] == NO) { NSURL *url = [self representedURL]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit