diff --git a/CodeEdit/Features/ActivityViewer/ActivityViewer.swift b/CodeEdit/Features/ActivityViewer/ActivityViewer.swift index ecac0f94ac..e5e09b8ffc 100644 --- a/CodeEdit/Features/ActivityViewer/ActivityViewer.swift +++ b/CodeEdit/Features/ActivityViewer/ActivityViewer.swift @@ -45,6 +45,7 @@ struct ActivityViewer: View { TaskNotificationView(taskNotificationHandler: taskNotificationHandler) .fixedSize() } + .frame(minWidth: 0) .fixedSize(horizontal: false, vertical: false) .padding(.horizontal, 5) .padding(.vertical, 1.5) diff --git a/CodeEdit/Features/ActivityViewer/Notifications/TaskNotificationView.swift b/CodeEdit/Features/ActivityViewer/Notifications/TaskNotificationView.swift index d86df90d9b..8196e06072 100644 --- a/CodeEdit/Features/ActivityViewer/Notifications/TaskNotificationView.swift +++ b/CodeEdit/Features/ActivityViewer/Notifications/TaskNotificationView.swift @@ -8,6 +8,9 @@ import SwiftUI struct TaskNotificationView: View { + @Environment(\.controlActiveState) + private var activeState + @ObservedObject var taskNotificationHandler: TaskNotificationHandler @State private var isPresented: Bool = false @State var notification: TaskNotificationModel? @@ -46,6 +49,7 @@ struct TaskNotificationView: View { } } .transition(.opacity.combined(with: .move(edge: .trailing))) + .opacity(activeState == .inactive ? 0.4 : 1.0) .padding(3) .padding(-3) .padding(.trailing, 3) diff --git a/CodeEdit/Features/ActivityViewer/Tasks/SchemeDropDownView.swift b/CodeEdit/Features/ActivityViewer/Tasks/SchemeDropDownView.swift index 29c60a4619..20855e9c1a 100644 --- a/CodeEdit/Features/ActivityViewer/Tasks/SchemeDropDownView.swift +++ b/CodeEdit/Features/ActivityViewer/Tasks/SchemeDropDownView.swift @@ -11,6 +11,9 @@ struct SchemeDropDownView: View { @Environment(\.colorScheme) private var colorScheme + @Environment(\.controlActiveState) + private var activeState + @State var isSchemePopOverPresented: Bool = false @State private var isHoveringScheme: Bool = false @@ -30,7 +33,9 @@ struct SchemeDropDownView: View { ? (workspaceFileManager?.workspaceItem.fileName() ?? "No Project found") : workspaceName ) + .frame(minWidth: 0) } + .opacity(activeState == .inactive ? 0.4 : 1.0) .font(.subheadline) .padding(.trailing, 11.5) .padding(.horizontal, 2.5) diff --git a/CodeEdit/Features/ActivityViewer/Tasks/TaskDropDownView.swift b/CodeEdit/Features/ActivityViewer/Tasks/TaskDropDownView.swift index 72de62545a..4e1eaf7e63 100644 --- a/CodeEdit/Features/ActivityViewer/Tasks/TaskDropDownView.swift +++ b/CodeEdit/Features/ActivityViewer/Tasks/TaskDropDownView.swift @@ -11,6 +11,9 @@ struct TaskDropDownView: View { @Environment(\.colorScheme) private var colorScheme + @Environment(\.controlActiveState) + private var activeState + @ObservedObject var taskManager: TaskManager @State private var isTaskPopOverPresented: Bool = false @@ -28,8 +31,10 @@ struct TaskDropDownView: View { } } else { Text("Create Tasks") + .frame(minWidth: 0) } } + .opacity(activeState == .inactive ? 0.4 : 1.0) .font(.subheadline) .padding(.trailing, 11.5) .padding(.horizontal, 2.5) diff --git a/CodeEdit/Features/ActivityViewer/Tasks/TaskView.swift b/CodeEdit/Features/ActivityViewer/Tasks/TaskView.swift index 92afa07260..26212d3583 100644 --- a/CodeEdit/Features/ActivityViewer/Tasks/TaskView.swift +++ b/CodeEdit/Features/ActivityViewer/Tasks/TaskView.swift @@ -18,6 +18,7 @@ struct TaskView: View { HStack(spacing: 5) { Image(systemName: "gearshape") Text(task.name) + .frame(minWidth: 0) Spacer(minLength: 0) } .padding(.trailing, 7.5) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController+Toolbar.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController+Toolbar.swift index b0d612b3e2..92c4ebdb3f 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController+Toolbar.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController+Toolbar.swift @@ -32,6 +32,7 @@ extension CodeEditWindowController { .flexibleSpace, .activityViewer, .flexibleSpace, +// .showLibrary, .itemListTrackingSeparator, .flexibleSpace, .toggleLastSidebarItem @@ -48,7 +49,8 @@ extension CodeEditWindowController { .branchPicker, .activityViewer, .startTaskSidebarItem, - .stopTaskSidebarItem + .stopTaskSidebarItem, + .showLibrary ] } @@ -110,6 +112,20 @@ extension CodeEditWindowController { accessibilityDescription: nil )?.withSymbolConfiguration(.init(scale: .large)) + return toolbarItem + case .showLibrary: + let toolbarItem = NSToolbarItem(itemIdentifier: NSToolbarItem.Identifier.showLibrary) + toolbarItem.label = "Test" + toolbarItem.paletteLabel = "Test" + toolbarItem.toolTip = "Test" + toolbarItem.isBordered = true + toolbarItem.target = self + toolbarItem.action = #selector(self.toggleLastPanel) + toolbarItem.image = NSImage( + systemSymbolName: "plus", + accessibilityDescription: nil + ) + return toolbarItem case .stopTaskSidebarItem: let toolbarItem = NSToolbarItem(itemIdentifier: NSToolbarItem.Identifier.stopTaskSidebarItem) @@ -138,20 +154,25 @@ extension CodeEditWindowController { return toolbarItem case .branchPicker: let toolbarItem = NSToolbarItem(itemIdentifier: .branchPicker) + let view = NSHostingView( rootView: ToolbarBranchPicker( workspaceFileManager: workspace?.workspaceFileManager ) ) + toolbarItem.view = view + toolbarItem.visibilityPriority = .high return toolbarItem case .activityViewer: let toolbarItem = NSToolbarItem(itemIdentifier: NSToolbarItem.Identifier.activityViewer) - toolbarItem.visibilityPriority = .user + toolbarItem.visibilityPriority = .low + guard let workspaceSettingsManager = workspace?.workspaceSettingsManager, let taskNotificationHandler = workspace?.taskNotificationHandler, - let taskManager = workspace?.taskManager + let taskManager = workspace?.taskManager, + let window = self.window else { return nil } let view = NSHostingView( @@ -163,17 +184,28 @@ extension CodeEditWindowController { ) ) - let weakWidth = view.widthAnchor.constraint(equalToConstant: 650) - weakWidth.priority = .defaultLow - let strongWidth = view.widthAnchor.constraint(greaterThanOrEqualToConstant: 200) - strongWidth.priority = .defaultHigh + let dynamicWidthConstraint = view.widthAnchor.constraint(equalToConstant: window.frame.width * 0.4) + dynamicWidthConstraint.priority = .defaultLow + dynamicWidthConstraint.isActive = true + + let minWidthConstraint = view.widthAnchor.constraint(greaterThanOrEqualToConstant: 0) NSLayoutConstraint.activate([ - weakWidth, - strongWidth + dynamicWidthConstraint, + minWidthConstraint, ]) + NotificationCenter.default.addObserver( + forName: NSWindow.didResizeNotification, + object: window, + queue: .main + ) { [weak view] _ in + guard let window = view?.window else { return } + dynamicWidthConstraint.constant = window.frame.width * 0.4 + } + toolbarItem.view = view + return toolbarItem default: return NSToolbarItem(itemIdentifier: itemIdentifier) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowControllerExtensions.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowControllerExtensions.swift index 6c487cefdb..4a6258ae59 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowControllerExtensions.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowControllerExtensions.swift @@ -139,4 +139,5 @@ extension NSToolbarItem.Identifier { static let itemListTrackingSeparator = NSToolbarItem.Identifier("ItemListTrackingSeparator") static let branchPicker: NSToolbarItem.Identifier = NSToolbarItem.Identifier("BranchPicker") static let activityViewer: NSToolbarItem.Identifier = NSToolbarItem.Identifier("ActivityViewer") + static let showLibrary: NSToolbarItem.Identifier = NSToolbarItem.Identifier("ShowLibrary") }