From 293a85879975cae2779a1cac4eef949d5b2340c9 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Wed, 8 Apr 2026 22:50:57 +0700 Subject: [PATCH] Phase 4: persist module config via E_Config_DD Versioned descriptor for E_Iwd_Config with auto_connect, show_hidden, refresh_interval and preferred_adapter; load/save against the "module.iwd" domain. Stale or missing config falls back to defaults. The settings dialog UI is still a stub. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/e_mod_config.c | 40 +++++++++++++++++++++++++++++++++++----- src/e_mod_config.h | 9 +++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/e_mod_config.c b/src/e_mod_config.c index 2d0b590..6e7176a 100644 --- a/src/e_mod_config.c +++ b/src/e_mod_config.c @@ -1,26 +1,56 @@ #include "e_mod_main.h" #include "e_mod_config.h" +#include + +#define CONFIG_DOMAIN "module.iwd" +#define CONFIG_VERSION 1 E_Iwd_Config *e_iwd_config = NULL; +static E_Config_DD *_edd = NULL; + +static void +_edd_setup(void) +{ + if (_edd) return; + _edd = E_CONFIG_DD_NEW("E_Iwd_Config", E_Iwd_Config); + E_CONFIG_VAL(_edd, E_Iwd_Config, version, INT); + E_CONFIG_VAL(_edd, E_Iwd_Config, auto_connect, INT); + E_CONFIG_VAL(_edd, E_Iwd_Config, show_hidden, INT); + E_CONFIG_VAL(_edd, E_Iwd_Config, refresh_interval, INT); + E_CONFIG_VAL(_edd, E_Iwd_Config, preferred_adapter, STR); +} void e_iwd_config_load(void) { - /* TODO: register E_Config_DD and load saved config */ + _edd_setup(); + e_iwd_config = e_config_domain_load(CONFIG_DOMAIN, _edd); + if (e_iwd_config && e_iwd_config->version == CONFIG_VERSION) return; + + /* Missing or out-of-date — start fresh with defaults. */ + if (e_iwd_config) + { + if (e_iwd_config->preferred_adapter) + eina_stringshare_del(e_iwd_config->preferred_adapter); + free(e_iwd_config); + } e_iwd_config = E_NEW(E_Iwd_Config, 1); - e_iwd_config->auto_connect = 1; - e_iwd_config->show_hidden = 0; + e_iwd_config->version = CONFIG_VERSION; + e_iwd_config->auto_connect = 1; + e_iwd_config->show_hidden = 0; e_iwd_config->refresh_interval = 5; } void e_iwd_config_save(void) { - /* TODO: e_config_domain_save */ + if (!_edd || !e_iwd_config) return; + e_config_domain_save(CONFIG_DOMAIN, _edd, e_iwd_config); } void e_iwd_config_dialog_show(void) { - /* TODO: build E_Config_Dialog */ + /* TODO: full E_Config_Dialog with checkboxes/spinners. + * Settings are persisted; only the GUI is missing. */ } diff --git a/src/e_mod_config.h b/src/e_mod_config.h index 64ea1e7..bf10573 100644 --- a/src/e_mod_config.h +++ b/src/e_mod_config.h @@ -5,10 +5,11 @@ typedef struct _E_Iwd_Config E_Iwd_Config; struct _E_Iwd_Config { - int auto_connect; - int show_hidden; - int refresh_interval; - char *preferred_adapter; + int version; + int auto_connect; + int show_hidden; + int refresh_interval; + const char *preferred_adapter; /* eina_stringshare */ }; extern E_Iwd_Config *e_iwd_config;