Sidebar double-click appends workspace to end
This commit is contained in:
parent
79034540f9
commit
aa222dbc0d
3 changed files with 62 additions and 5 deletions
|
|
@ -5903,7 +5903,7 @@ private struct SidebarEmptyArea: View {
|
|||
.contentShape(Rectangle())
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.onTapGesture(count: 2) {
|
||||
tabManager.addTab()
|
||||
tabManager.addWorkspace(placementOverride: .end)
|
||||
if let selectedId = tabManager.selectedTabId {
|
||||
selectedTabIds = [selectedId]
|
||||
lastSidebarSelectionIndex = tabManager.tabs.firstIndex { $0.id == selectedId }
|
||||
|
|
|
|||
|
|
@ -758,7 +758,11 @@ class TabManager: ObservableObject {
|
|||
}
|
||||
|
||||
@discardableResult
|
||||
func addWorkspace(workingDirectory overrideWorkingDirectory: String? = nil, select: Bool = true) -> Workspace {
|
||||
func addWorkspace(
|
||||
workingDirectory overrideWorkingDirectory: String? = nil,
|
||||
select: Bool = true,
|
||||
placementOverride: NewWorkspacePlacement? = nil
|
||||
) -> Workspace {
|
||||
sentryBreadcrumb("workspace.create", data: ["tabCount": tabs.count + 1])
|
||||
let workingDirectory = normalizedWorkingDirectory(overrideWorkingDirectory) ?? preferredWorkingDirectoryForNewTab()
|
||||
let inheritedConfig = inheritedTerminalConfigForNewWorkspace()
|
||||
|
|
@ -771,7 +775,7 @@ class TabManager: ObservableObject {
|
|||
configTemplate: inheritedConfig
|
||||
)
|
||||
wireClosedBrowserTracking(for: newWorkspace)
|
||||
let insertIndex = newTabInsertIndex()
|
||||
let insertIndex = newTabInsertIndex(placementOverride: placementOverride)
|
||||
if insertIndex >= 0 && insertIndex <= tabs.count {
|
||||
tabs.insert(newWorkspace, at: insertIndex)
|
||||
} else {
|
||||
|
|
@ -836,8 +840,8 @@ class TabManager: ObservableObject {
|
|||
return trimmed.isEmpty ? nil : normalized
|
||||
}
|
||||
|
||||
private func newTabInsertIndex() -> Int {
|
||||
let placement = WorkspacePlacementSettings.current()
|
||||
private func newTabInsertIndex(placementOverride: NewWorkspacePlacement? = nil) -> Int {
|
||||
let placement = placementOverride ?? WorkspacePlacementSettings.current()
|
||||
let pinnedCount = tabs.filter { $0.isPinned }.count
|
||||
let selectedIndex = selectedTabId.flatMap { tabId in
|
||||
tabs.firstIndex(where: { $0.id == tabId })
|
||||
|
|
|
|||
|
|
@ -2214,6 +2214,59 @@ final class WorkspacePlacementSettingsTests: XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
final class WorkspaceCreationPlacementTests: XCTestCase {
|
||||
func testAddWorkspaceDefaultPlacementMatchesCurrentSetting() {
|
||||
let currentPlacement = WorkspacePlacementSettings.current()
|
||||
|
||||
let defaultManager = makeManagerWithThreeWorkspaces()
|
||||
let defaultBaselineOrder = defaultManager.tabs.map(\.id)
|
||||
let defaultInserted = defaultManager.addWorkspace()
|
||||
guard let defaultInsertedIndex = defaultManager.tabs.firstIndex(where: { $0.id == defaultInserted.id }) else {
|
||||
XCTFail("Expected inserted workspace in tab list")
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(defaultManager.tabs.map(\.id).filter { $0 != defaultInserted.id }, defaultBaselineOrder)
|
||||
|
||||
let explicitManager = makeManagerWithThreeWorkspaces()
|
||||
let explicitBaselineOrder = explicitManager.tabs.map(\.id)
|
||||
let explicitInserted = explicitManager.addWorkspace(placementOverride: currentPlacement)
|
||||
guard let explicitInsertedIndex = explicitManager.tabs.firstIndex(where: { $0.id == explicitInserted.id }) else {
|
||||
XCTFail("Expected inserted workspace in tab list")
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(explicitManager.tabs.map(\.id).filter { $0 != explicitInserted.id }, explicitBaselineOrder)
|
||||
XCTAssertEqual(defaultInsertedIndex, explicitInsertedIndex)
|
||||
}
|
||||
|
||||
func testAddWorkspaceEndOverrideAlwaysAppends() {
|
||||
let manager = makeManagerWithThreeWorkspaces()
|
||||
let baselineCount = manager.tabs.count
|
||||
guard baselineCount >= 3 else {
|
||||
XCTFail("Expected at least three workspaces for placement regression test")
|
||||
return
|
||||
}
|
||||
|
||||
let inserted = manager.addWorkspace(placementOverride: .end)
|
||||
guard let insertedIndex = manager.tabs.firstIndex(where: { $0.id == inserted.id }) else {
|
||||
XCTFail("Expected inserted workspace in tab list")
|
||||
return
|
||||
}
|
||||
|
||||
XCTAssertEqual(insertedIndex, baselineCount)
|
||||
}
|
||||
|
||||
private func makeManagerWithThreeWorkspaces() -> TabManager {
|
||||
let manager = TabManager()
|
||||
_ = manager.addWorkspace()
|
||||
_ = manager.addWorkspace()
|
||||
if let first = manager.tabs.first {
|
||||
manager.selectWorkspace(first)
|
||||
}
|
||||
return manager
|
||||
}
|
||||
}
|
||||
|
||||
final class WorkspaceTabColorSettingsTests: XCTestCase {
|
||||
func testNormalizedHexAcceptsAndNormalizesValidInput() {
|
||||
XCTAssertEqual(WorkspaceTabColorSettings.normalizedHex("#abc123"), "#ABC123")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue