Add persistent app quit control

This commit is contained in:
diyaa 2026-07-26 21:27:51 +02:00
parent e1e8ff89cd
commit 833a9bfec2
2 changed files with 18 additions and 6 deletions

View File

@ -1,3 +1,4 @@
import AppKit
import SwiftUI import SwiftUI
@main @main
@ -38,6 +39,7 @@ private struct RootView: View {
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
HStack(spacing: 8) {
Picker("Section", selection: $selectedTab) { Picker("Section", selection: $selectedTab) {
ForEach(AppTab.allCases) { tab in ForEach(AppTab.allCases) { tab in
Label(tab.title, systemImage: tab.icon) Label(tab.title, systemImage: tab.icon)
@ -46,6 +48,15 @@ private struct RootView: View {
} }
.pickerStyle(.segmented) .pickerStyle(.segmented)
.labelsHidden() .labelsHidden()
Button {
NSApplication.shared.terminate(nil)
} label: {
Image(systemName: "power")
}
.accessibilityLabel("Quit Fchati")
.help("Quit Fchati")
}
.padding() .padding()
Divider() Divider()

View File

@ -197,6 +197,7 @@
- The relay now defaults to the production Traefik certificate resolver (`myresolver`) and allows a host-specific override through `TRAEFIK_CERT_RESOLVER`. - The relay now defaults to the production Traefik certificate resolver (`myresolver`) and allows a host-specific override through `TRAEFIK_CERT_RESOLVER`.
- Corrected the production hostname to `fchaty.diyaa.de` in the relay route and macOS application HTTP and WebSocket clients. - Corrected the production hostname to `fchaty.diyaa.de` in the relay route and macOS application HTTP and WebSocket clients.
- `relay-server/Dockerfile` initializes all persistent-data paths as the unprivileged `node` user, preventing pairing, queue, and upload write failures on newly created volumes. - `relay-server/Dockerfile` initializes all persistent-data paths as the unprivileged `node` user, preventing pairing, queue, and upload write failures on newly created volumes.
- The macOS app now has an always-visible quit control beside the top-level tabs, in addition to the existing Settings action.
## Bug Fixes — Post-Review ✅ ## Bug Fixes — Post-Review ✅