Enable manual set of configuration dialogs as changed.

For some dialogs, it's better to let the dialogs themselves choose if
they're modified or not. Default behavior is backward compatible.



SVN revision: 36152
This commit is contained in:
Gustavo Sverzut Barbieri 2008-09-21 16:21:25 +00:00
parent 56b50ede09
commit c6f9ec6ece
3 changed files with 70 additions and 18 deletions

View File

@ -39,6 +39,7 @@ e_config_dialog_new(E_Container *con, const char *title, const char *name, const
cfd->data = data;
cfd->hide_buttons = 1;
cfd->cfg_changed = 0;
cfd->cfg_changed_auto = 1;
if (cfd->view->override_auto_apply)
{
@ -360,23 +361,31 @@ _e_config_dialog_cb_basic(void *data, void *data2)
_e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC);
}
static void
_e_config_dialog_changed(E_Config_Dialog *cfd)
{
if (!cfd->hide_buttons)
{
cfd->cfg_changed = 1;
e_dialog_button_disable_num_set(cfd->dia, 0, 0);
e_dialog_button_disable_num_set(cfd->dia, 1, 0);
}
else
{
if (cfd->auto_apply_timer)
ecore_timer_del(cfd->auto_apply_timer);
cfd->auto_apply_timer = ecore_timer_add(0.5, _e_config_dialog_cb_auto_apply_timer, cfd);
}
}
static void
_e_config_dialog_cb_changed(void *data, Evas_Object *obj)
{
E_Config_Dialog *cfd;
cfd = data;
if (!cfd->hide_buttons)
{
cfd->cfg_changed = 1;
e_dialog_button_disable_num_set(cfd->dia, 0, 0);
e_dialog_button_disable_num_set(cfd->dia, 1, 0);
}
else
{
if (cfd->auto_apply_timer) ecore_timer_del(cfd->auto_apply_timer);
cfd->auto_apply_timer = ecore_timer_add(0.5, _e_config_dialog_cb_auto_apply_timer, cfd);
}
if (cfd->cfg_changed_auto)
_e_config_dialog_changed(data);
}
static void
@ -393,3 +402,40 @@ _e_config_dialog_cb_close(void *data, E_Dialog *dia)
if (ok)
e_util_defer_object_del(E_OBJECT(cfd));
}
EAPI void
e_config_dialog_changed_auto_set(E_Config_Dialog *cfd, unsigned char value)
{
if (!cfd)
return;
cfd->cfg_changed_auto = !!value;
}
EAPI void
e_config_dialog_changed_set(E_Config_Dialog *cfd, unsigned char value)
{
if (!cfd)
return;
cfd->cfg_changed = !!value;
if (cfd->cfg_changed)
_e_config_dialog_changed(cfd);
else
{
if (!cfd->hide_buttons)
{
e_dialog_button_disable_num_set(cfd->dia, 0, 1);
e_dialog_button_disable_num_set(cfd->dia, 1, 1);
}
else
{
if (cfd->auto_apply_timer)
{
ecore_timer_del(cfd->auto_apply_timer);
cfd->auto_apply_timer = NULL;
}
}
}
}

View File

@ -50,14 +50,18 @@ struct _E_Config_Dialog
int icon_size;
E_Dialog *dia;
void *data;
int cfg_changed;
int hide_buttons;
Ecore_Timer *auto_apply_timer;
unsigned char hide_buttons : 1;
unsigned char cfg_changed : 1;
unsigned char cfg_changed_auto : 1;
};
EAPI E_Config_Dialog *e_config_dialog_new(E_Container *con, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data);
EAPI int e_config_dialog_find(const char *name, const char *class);
EAPI E_Config_Dialog *e_config_dialog_get(const char *name, const char *class);
EAPI void e_config_dialog_changed_auto_set(E_Config_Dialog *cfd, unsigned char value);
EAPI void e_config_dialog_changed_set(E_Config_Dialog *cfd, unsigned char value);
#endif
#endif

View File

@ -54,6 +54,7 @@ e_int_config_profiles(E_Container *con, const char *params __UNUSED__)
_("Profile Selector"),
"E", "_config_profiles_dialog",
"enlightenment/profiles", 0, v, NULL);
e_config_dialog_changed_auto_set(cfd, 0);
return cfd;
}
@ -167,15 +168,16 @@ _ilist_cb_selected(void *data)
{
E_Config_Dialog_Data *cfdata;
const char *cur_profile;
unsigned char v;
cfdata = data;
if (!cfdata) return;
cur_profile = e_config_profile_get();
if (!strcmp (cur_profile, cfdata->sel_profile))
e_widget_disabled_set(cfdata->o_delete, 1);
else
e_widget_disabled_set(cfdata->o_delete, 0);
v = strcmp(cur_profile, cfdata->sel_profile) == 0;
e_widget_disabled_set(cfdata->o_delete, v);
e_config_dialog_changed_set(cfdata->cfd, !v);
}
static void