From c0bb8ae2a015f2ee8bd87fa30cfef994cf6f9928 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 3 Feb 2026 21:08:55 +0530 Subject: [PATCH] desktop-ui kitten: Re-read config on every file chooser invocation via portal Allows easily changing the config without needing to restart the kitten which is difficult to do given its lifetime is managed by the xdg portals service. --- kittens/desktop_ui/main.go | 2 +- kittens/desktop_ui/portal.go | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/kittens/desktop_ui/main.go b/kittens/desktop_ui/main.go index 168e55ccb..89b60977c 100644 --- a/kittens/desktop_ui/main.go +++ b/kittens/desktop_ui/main.go @@ -30,7 +30,7 @@ func load_server_config(opts *ServerOptions) (ans *Config, err error) { func run_server(opts *ServerOptions) (err error) { config, err := load_server_config(opts) if err == nil { - portal, err := NewPortal(config) + portal, err := NewPortal(config, opts) if err == nil { err = portal.Start() if err == nil { diff --git a/kittens/desktop_ui/portal.go b/kittens/desktop_ui/portal.go index c0595c0e4..604bd30db 100644 --- a/kittens/desktop_ui/portal.go +++ b/kittens/desktop_ui/portal.go @@ -65,6 +65,7 @@ type Portal struct { settings SettingsMap lock sync.Mutex opts *Config + server_options *ServerOptions file_chooser_first_instance *exec.Cmd } @@ -75,8 +76,8 @@ func to_color(spec string) (v dbus.Variant, err error) { return } -func NewPortal(opts *Config) (p *Portal, err error) { - ans := Portal{opts: opts} +func NewPortal(opts *Config, server_options *ServerOptions) (p *Portal, err error) { + ans := Portal{opts: opts, server_options: server_options} ans.settings = SettingsMap{ SETTINGS_CANARY_NAMESPACE: map[string]dbus.Variant{ SETTINGS_CANARY_KEY: dbus.MakeVariant("running"), @@ -641,6 +642,14 @@ func (self *Portal) ReadAll(namespaces []string) (ReadAllType, *dbus.Error) { return values, nil } +func (self *Portal) reload_portal_settings() { + self.lock.Lock() + defer self.lock.Unlock() + if config, err := load_server_config(self.server_options); err == nil { + self.opts = config + } +} + type vmap map[string]dbus.Variant type Filter_expression struct { Ftype uint32 @@ -726,6 +735,7 @@ type ChooserResponse struct { } func (self *Portal) run_file_chooser(cfd ChooseFilesData) (response uint32, result_dict vmap) { + self.reload_portal_settings() response = RESPONSE_ENDED tdir, err := os.MkdirTemp("", "kitty-cfd") if err != nil {