keyboard shortcut to cycle servers
This commit is contained in:
@@ -88,6 +88,13 @@ final class Servers {
|
||||
saveRecords()
|
||||
}
|
||||
|
||||
func step(from origin: String?, by step: Int) -> String? {
|
||||
guard let i = origin.flatMap({ origins.firstIndex(of: $0) }) else {
|
||||
return origins.first
|
||||
}
|
||||
return origins[(i + step + origins.count) % origins.count]
|
||||
}
|
||||
|
||||
func openAll() {
|
||||
if origins.isEmpty {
|
||||
openWindow?(nil)
|
||||
@@ -315,6 +322,7 @@ struct FatalView: View {
|
||||
}
|
||||
|
||||
struct ServerFocus {
|
||||
let origin: String?
|
||||
let store: Store?
|
||||
let overlays: Overlays
|
||||
let forget: (() -> Void)?
|
||||
@@ -340,7 +348,7 @@ struct ServerWindow: View {
|
||||
if connection != nil {
|
||||
forgetting = forget
|
||||
}
|
||||
return ServerFocus(store: connection?.store, overlays: overlays, forget: forgetting)
|
||||
return ServerFocus(origin: connection?.origin.absoluteString, store: connection?.store, overlays: overlays, forget: forgetting)
|
||||
}
|
||||
|
||||
private var frameColor: Color {
|
||||
@@ -387,6 +395,9 @@ struct ServerWindow: View {
|
||||
var body: some View {
|
||||
framed
|
||||
.navigationTitle(connection?.origin.host() ?? "byre")
|
||||
.background {
|
||||
WindowReader(found: joinTabs)
|
||||
}
|
||||
.focusedSceneValue(\.serverWindow, focus)
|
||||
.onChange(of: origin, initial: true) { old, new in
|
||||
moved(old, new)
|
||||
@@ -431,6 +442,16 @@ struct ServerWindow: View {
|
||||
Notifier.shared.deliver()
|
||||
}
|
||||
|
||||
private func joinTabs(_ window: NSWindow) {
|
||||
window.tabbingMode = .preferred
|
||||
DispatchQueue.main.async {
|
||||
let host = NSApp.windows.first { $0 !== window && $0.isVisible && $0.tabbingIdentifier == window.tabbingIdentifier }
|
||||
if let host, !(host.tabbedWindows ?? []).contains(window) {
|
||||
host.addTabbedWindow(window, ordered: .above)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func adopt(_ candidates: [String]) {
|
||||
guard origin == nil, form.serverText.isEmpty, !form.connecting, let next = candidates.first(where: { !Servers.shared.shown.contains($0) }) else {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user