native macOS codings agent orchestrator
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf(sidebar): disable key forwarding in shelf

+53 -23
+53 -23
supacode/Features/Repositories/Views/SidebarListView.swift
··· 78 78 return 79 79 } 80 80 sidebarSelections = Set(worktreeIDs.map(SidebarSelection.worktree)) 81 - if let selectedWorktreeID = state.selectedWorktreeID, worktreeIDs.contains(selectedWorktreeID) { 81 + if let selectedWorktreeID = state.selectedWorktreeID, 82 + worktreeIDs.contains(selectedWorktreeID) 83 + { 82 84 return 83 85 } 84 86 let nextPrimarySelection = ··· 210 212 store.send(.repositoryManagement(.openRepositories(fileURLs))) 211 213 return true 212 214 } 213 - .onKeyPress { keyPress in 214 - guard !keyPress.characters.isEmpty else { return .ignored } 215 - let isNavigationKey = 216 - keyPress.key == .upArrow 217 - || keyPress.key == .downArrow 218 - || keyPress.key == .leftArrow 219 - || keyPress.key == .rightArrow 220 - || keyPress.key == .home 221 - || keyPress.key == .end 222 - || keyPress.key == .pageUp 223 - || keyPress.key == .pageDown 224 - if isNavigationKey { return .ignored } 225 - let hasCommandModifier = keyPress.modifiers.contains(.command) 226 - if hasCommandModifier { return .ignored } 227 - guard let worktreeID = store.selectedWorktreeID, 228 - state.sidebarSelectedWorktreeIDs.count == 1, 229 - state.sidebarSelectedWorktreeIDs.contains(worktreeID), 230 - let terminalState = terminalManager.stateIfExists(for: worktreeID) 231 - else { return .ignored } 232 - terminalState.focusAndInsertText(keyPress.characters) 233 - return .handled 234 - } 215 + .modifier( 216 + SidebarKeyForwardingModifier( 217 + isEnabled: !state.isShelfActive, 218 + selectedWorktreeID: state.selectedWorktreeID, 219 + sidebarSelectedWorktreeIDs: state.sidebarSelectedWorktreeIDs, 220 + terminalManager: terminalManager 221 + ) 222 + ) 235 223 .focused($isSidebarFocused) 236 224 .task(id: pendingSidebarReveal?.id) { 237 225 await revealPendingSidebarWorktree(pendingSidebarReveal, with: scrollProxy) ··· 253 241 scrollProxy.scrollTo(pendingSidebarReveal.worktreeID, anchor: .center) 254 242 } 255 243 store.send(.consumePendingSidebarReveal(pendingSidebarReveal.id)) 244 + } 245 + } 246 + 247 + private struct SidebarKeyForwardingModifier: ViewModifier { 248 + let isEnabled: Bool 249 + let selectedWorktreeID: Worktree.ID? 250 + let sidebarSelectedWorktreeIDs: Set<Worktree.ID> 251 + let terminalManager: WorktreeTerminalManager 252 + 253 + @ViewBuilder 254 + func body(content: Content) -> some View { 255 + if isEnabled { 256 + content 257 + .onKeyPress { keyPress in 258 + handleKeyPress(keyPress) 259 + } 260 + } else { 261 + content 262 + } 263 + } 264 + 265 + private func handleKeyPress(_ keyPress: KeyPress) -> KeyPress.Result { 266 + guard !keyPress.characters.isEmpty else { return .ignored } 267 + let isNavigationKey = 268 + keyPress.key == .upArrow 269 + || keyPress.key == .downArrow 270 + || keyPress.key == .leftArrow 271 + || keyPress.key == .rightArrow 272 + || keyPress.key == .home 273 + || keyPress.key == .end 274 + || keyPress.key == .pageUp 275 + || keyPress.key == .pageDown 276 + if isNavigationKey { return .ignored } 277 + let hasCommandModifier = keyPress.modifiers.contains(.command) 278 + if hasCommandModifier { return .ignored } 279 + guard let worktreeID = selectedWorktreeID, 280 + sidebarSelectedWorktreeIDs.count == 1, 281 + sidebarSelectedWorktreeIDs.contains(worktreeID), 282 + let terminalState = terminalManager.stateIfExists(for: worktreeID) 283 + else { return .ignored } 284 + terminalState.focusAndInsertText(keyPress.characters) 285 + return .handled 256 286 } 257 287 } 258 288