From 7e4915f31df2ca1af4c4c6e60fab3c7af016d05f Mon Sep 17 00:00:00 2001 From: nimbold <11913706+nimbold@users.noreply.github.com> Date: Wed, 3 Jun 2026 05:07:55 +0330 Subject: [PATCH] fix: resolve SwiftUI infinite layout freeze caused by MenuBarExtra isInserted binding to StateObject by using AppStorage --- Sources/Firelink/FirelinkApp.swift | 3 ++- Sources/Firelink/SettingsView.swift | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/Firelink/FirelinkApp.swift b/Sources/Firelink/FirelinkApp.swift index 3d7e985..b04e838 100644 --- a/Sources/Firelink/FirelinkApp.swift +++ b/Sources/Firelink/FirelinkApp.swift @@ -5,6 +5,7 @@ struct FirelinkApp: App { @StateObject private var settings: AppSettings @StateObject private var controller: DownloadController @StateObject private var schedulerController: SchedulerController + @AppStorage("showMenuBarIcon") private var showMenuBarIcon = true init() { let settings = AppSettings() @@ -59,7 +60,7 @@ struct FirelinkApp: App { } } - MenuBarExtra("Firelink", systemImage: "arrow.down.circle", isInserted: $settings.showMenuBarIcon) { + MenuBarExtra("Firelink", systemImage: "arrow.down.circle", isInserted: $showMenuBarIcon) { TrayMenuView() .environmentObject(controller) } diff --git a/Sources/Firelink/SettingsView.swift b/Sources/Firelink/SettingsView.swift index 6d55641..d9c88b6 100644 --- a/Sources/Firelink/SettingsView.swift +++ b/Sources/Firelink/SettingsView.swift @@ -121,6 +121,7 @@ struct SettingsView: View { private struct LookAndFeelSettingsPane: View { @EnvironmentObject private var settings: AppSettings + @AppStorage("showMenuBarIcon") private var showMenuBarIcon = true var body: some View { Form { @@ -153,9 +154,9 @@ private struct LookAndFeelSettingsPane: View { } Section("Menu Bar") { - Toggle("Show menu bar icon", isOn: $settings.showMenuBarIcon) + Toggle("Show menu bar icon", isOn: $showMenuBarIcon) - Text("Provides quick access to downloads and queues from the macOS menu bar.") + Text("Provides quick access to downloads and queues from the macOS menu bar. Restart required if hiding.") .font(.caption) .foregroundStyle(.secondary) }