config: implement settings dialog (E_Config_Dialog)
Adds the basic settings UI: auto-connect / show-hidden checkboxes, signal refresh interval slider, preferred-adapter entry. Apply writes into e_iwd_config and persists via e_iwd_config_save(). Hooked from the gadget right-click menu in the next change. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1cd214a1f5
commit
dcec367acc
1 changed files with 92 additions and 2 deletions
|
|
@ -48,9 +48,99 @@ e_iwd_config_save(void)
|
|||
e_config_domain_save(CONFIG_DOMAIN, _edd, e_iwd_config);
|
||||
}
|
||||
|
||||
/* ----- Settings dialog ------------------------------------------------ */
|
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
{
|
||||
int auto_connect;
|
||||
int show_hidden;
|
||||
int refresh_interval;
|
||||
char *preferred_adapter;
|
||||
};
|
||||
|
||||
static void *
|
||||
_cfd_create(E_Config_Dialog *cfd EINA_UNUSED)
|
||||
{
|
||||
if (!e_iwd_config) return NULL;
|
||||
E_Config_Dialog_Data *c = E_NEW(E_Config_Dialog_Data, 1);
|
||||
c->auto_connect = e_iwd_config->auto_connect;
|
||||
c->show_hidden = e_iwd_config->show_hidden;
|
||||
c->refresh_interval = e_iwd_config->refresh_interval;
|
||||
c->preferred_adapter = e_iwd_config->preferred_adapter
|
||||
? strdup(e_iwd_config->preferred_adapter) : strdup("");
|
||||
return c;
|
||||
}
|
||||
|
||||
static void
|
||||
_cfd_free(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *c)
|
||||
{
|
||||
if (!c) return;
|
||||
free(c->preferred_adapter);
|
||||
E_FREE(c);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_cfd_basic_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data *c)
|
||||
{
|
||||
Evas_Object *o, *of, *ob;
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
||||
of = e_widget_framelist_add(evas, "Connection", 0);
|
||||
ob = e_widget_check_add(evas, "Auto-connect to known networks",
|
||||
&c->auto_connect);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_check_add(evas, "Show hidden networks",
|
||||
&c->show_hidden);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_framelist_add(evas, "Performance", 0);
|
||||
ob = e_widget_label_add(evas, "Signal refresh interval (s):");
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_slider_add(evas, 1, 0, "%1.0f", 1.0, 60.0, 1.0, 0,
|
||||
NULL, &c->refresh_interval, 150);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_framelist_add(evas, "Adapter", 0);
|
||||
ob = e_widget_label_add(evas, "Preferred wireless adapter (blank = auto):");
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_entry_add(evas, &c->preferred_adapter, NULL, NULL, NULL);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
static int
|
||||
_cfd_basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *c)
|
||||
{
|
||||
if (!e_iwd_config || !c) return 0;
|
||||
e_iwd_config->auto_connect = c->auto_connect;
|
||||
e_iwd_config->show_hidden = c->show_hidden;
|
||||
e_iwd_config->refresh_interval = c->refresh_interval;
|
||||
if (e_iwd_config->preferred_adapter)
|
||||
eina_stringshare_del(e_iwd_config->preferred_adapter);
|
||||
e_iwd_config->preferred_adapter =
|
||||
(c->preferred_adapter && *c->preferred_adapter)
|
||||
? eina_stringshare_add(c->preferred_adapter) : NULL;
|
||||
e_iwd_config_save();
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
e_iwd_config_dialog_show(void)
|
||||
{
|
||||
/* TODO: full E_Config_Dialog with checkboxes/spinners.
|
||||
* Settings are persisted; only the GUI is missing. */
|
||||
if (e_config_dialog_find("E_Iwd", "extensions/iwd")) return;
|
||||
|
||||
E_Config_Dialog_View *v = E_NEW(E_Config_Dialog_View, 1);
|
||||
if (!v) return;
|
||||
v->create_cfdata = _cfd_create;
|
||||
v->free_cfdata = _cfd_free;
|
||||
v->basic.create_widgets = _cfd_basic_create;
|
||||
v->basic.apply_cfdata = _cfd_basic_apply;
|
||||
|
||||
E_Config_Dialog *cfd = e_config_dialog_new(NULL,
|
||||
"iwd Wi-Fi Settings", "E_Iwd", "extensions/iwd", NULL, 0, v, NULL);
|
||||
if (!cfd) E_FREE(v);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue