diff --git a/src/launcher_actions.go b/src/launcher_actions.go index 29714f1..b71f5f1 100644 --- a/src/launcher_actions.go +++ b/src/launcher_actions.go @@ -48,7 +48,7 @@ func setupLauncherActions(win *adw.Window, app *adw.Application, browsers []*Bro settingsAction := gio.NewSimpleAction("settings", nil) settingsAction.ConnectActivate(func(p *glib.Variant) { - showSettingsWindow(app, loadConfig()) + showSettingsWindow(app, browsers, loadConfig()) }) actionGroup.AddAction(settingsAction) diff --git a/src/main.go b/src/main.go index 68db718..e83d247 100644 --- a/src/main.go +++ b/src/main.go @@ -27,15 +27,17 @@ func main() { app.ConnectActivate(func() { cfg := loadConfig() setupApp(cfg) - showSettingsWindow(app, cfg) + browsers := detectBrowsers() + showSettingsWindow(app, browsers, cfg) }) app.ConnectOpen(func(files []gio.Filer, hint string) { cfg := loadConfig() setupApp(cfg) + browsers := detectBrowsers() if len(files) == 0 { - showSettingsWindow(app, cfg) + showSettingsWindow(app, browsers, cfg) return } @@ -43,7 +45,7 @@ func main() { // Check if this is a switchyard:// URL if u, err := url.Parse(rawURL); err == nil && u.Scheme == "switchyard" { - handleSwitchyardURL(app, rawURL) + handleSwitchyardURL(app, browsers, cfg, rawURL) return } @@ -54,7 +56,7 @@ func main() { cmd.Start() return } - handleURL(app, cfg, sanitized) + handleURL(app, browsers, cfg, sanitized) }) if code := app.Run(os.Args); code > 0 { @@ -83,9 +85,7 @@ func setupApp(cfg *Config) { } // handleSwitchyardURL processes switchyard:// URLs with browser preferences -func handleSwitchyardURL(app *adw.Application, rawURL string) { - cfg := loadConfig() - +func handleSwitchyardURL(app *adw.Application, browsers []*Browser, cfg *Config, rawURL string) { targetURL, browserPrefs, err := parseSwitchyardURL(rawURL) if err != nil { // Invalid switchyard URL - ignore @@ -101,8 +101,6 @@ func handleSwitchyardURL(app *adw.Application, rawURL string) { return } - browsers := detectBrowsers() - // If browser preferences specified, try each in order if len(browserPrefs) > 0 { for _, pref := range browserPrefs { @@ -123,13 +121,11 @@ func handleSwitchyardURL(app *adw.Application, rawURL string) { } // No browser specified - use standard routing - handleURL(app, cfg, sanitized) + handleURL(app, browsers, cfg, sanitized) } // handleURL routes a URL to the appropriate browser based on rules -func handleURL(app *adw.Application, cfg *Config, urlStr string) { - browsers := detectBrowsers() - +func handleURL(app *adw.Application, browsers []*Browser, cfg *Config, urlStr string) { // Try to match a rule browserID, alwaysAsk, matched := cfg.matchRule(urlStr) if matched { diff --git a/src/settings_appearance.go b/src/settings_appearance.go index cb8b138..b713af9 100644 --- a/src/settings_appearance.go +++ b/src/settings_appearance.go @@ -7,8 +7,7 @@ import ( "github.com/diamondburned/gotk4/pkg/gtk/v4" ) -func createAppearancePage(win *adw.Window, cfg *Config) gtk.Widgetter { - browsers := detectBrowsers() +func createAppearancePage(win *adw.Window, browsers []*Browser, cfg *Config) gtk.Widgetter { toolbarView, content, _ := settingsPageLayout("Appearance") // General section diff --git a/src/settings_behavior.go b/src/settings_behavior.go index 59cea8c..a7ad2f7 100644 --- a/src/settings_behavior.go +++ b/src/settings_behavior.go @@ -7,7 +7,7 @@ import ( "github.com/diamondburned/gotk4/pkg/gtk/v4" ) -func createBehaviorPage(win *adw.Window, cfg *Config, browsers []*Browser) gtk.Widgetter { +func createBehaviorPage(win *adw.Window, browsers []*Browser, cfg *Config) gtk.Widgetter { toolbarView, content, _ := settingsPageLayout("Behavior") // General Behavior section diff --git a/src/settings_rules.go b/src/settings_rules.go index 7330968..09b70a0 100644 --- a/src/settings_rules.go +++ b/src/settings_rules.go @@ -59,7 +59,7 @@ func getTypeLabel(patternType string) string { } } -func createRulesPage(win *adw.Window, cfg *Config, browsers []*Browser) gtk.Widgetter { +func createRulesPage(win *adw.Window, browsers []*Browser, cfg *Config) gtk.Widgetter { toolbarView := adw.NewToolbarView() header := adw.NewHeaderBar() diff --git a/src/window_settings.go b/src/window_settings.go index 13030f0..448fece 100644 --- a/src/window_settings.go +++ b/src/window_settings.go @@ -11,7 +11,7 @@ import ( "github.com/diamondburned/gotk4/pkg/gtk/v4" ) -func showSettingsWindow(app *adw.Application, cfg *Config) { +func showSettingsWindow(app *adw.Application, browsers []*Browser, cfg *Config) { win := adw.NewWindow() win.SetTitle("Switchyard") win.SetApplication(&app.Application) @@ -19,8 +19,6 @@ func showSettingsWindow(app *adw.Application, cfg *Config) { win.SetResizable(true) win.SetSizeRequest(700, 500) - browsers := detectBrowsers() - setupAppActions(app, win) // Navigation split view @@ -34,7 +32,7 @@ func showSettingsWindow(app *adw.Application, cfg *Config) { splitView.SetSidebar(sidebarPage) // Initial content - contentPage := adw.NewNavigationPage(createAppearancePage(win, cfg), "Appearance") + contentPage := adw.NewNavigationPage(createAppearancePage(win, browsers, cfg), "Appearance") splitView.SetContent(contentPage) win.SetContent(splitView) @@ -141,13 +139,13 @@ func createSidebar(win *adw.Window, cfg *Config, browsers []*Browser, splitView switch index { case 0: - page = createAppearancePage(win, cfg) + page = createAppearancePage(win, browsers, cfg) title = "Appearance" case 1: - page = createBehaviorPage(win, cfg, browsers) + page = createBehaviorPage(win, browsers, cfg) title = "Behavior" case 2: - page = createRulesPage(win, cfg, browsers) + page = createRulesPage(win, browsers, cfg) title = "Rules" case 3: page = createAdvancedPage(win, cfg)