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

Reply via email to