Focus surface when switching tabs
This commit is contained in:
parent
00eda7f32b
commit
a2087884c8
1 changed files with 19 additions and 1 deletions
|
|
@ -214,7 +214,15 @@ class Tab: Identifiable, ObservableObject {
|
|||
|
||||
class TabManager: ObservableObject {
|
||||
@Published var tabs: [Tab] = []
|
||||
@Published var selectedTabId: UUID?
|
||||
@Published var selectedTabId: UUID? {
|
||||
didSet {
|
||||
guard selectedTabId != oldValue else { return }
|
||||
let previousTabId = oldValue
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.focusSelectedTabSurface(previousTabId: previousTabId)
|
||||
}
|
||||
}
|
||||
}
|
||||
private var observers: [NSObjectProtocol] = []
|
||||
|
||||
init() {
|
||||
|
|
@ -315,6 +323,16 @@ class TabManager: ObservableObject {
|
|||
surface.applyWindowBackgroundIfActive()
|
||||
}
|
||||
|
||||
private func focusSelectedTabSurface(previousTabId: UUID?) {
|
||||
guard let selectedTabId,
|
||||
let tab = tabs.first(where: { $0.id == selectedTabId }),
|
||||
let surface = tab.focusedSurface else { return }
|
||||
let previousSurface = previousTabId.flatMap { id in
|
||||
tabs.first(where: { $0.id == id })?.focusedSurface
|
||||
}
|
||||
surface.hostedView.moveFocus(from: previousSurface?.hostedView)
|
||||
}
|
||||
|
||||
private func updateTabTitle(tabId: UUID, title: String) {
|
||||
guard !title.isEmpty else { return }
|
||||
guard let index = tabs.firstIndex(where: { $0.id == tabId }) else { return }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue