From c6f9ec6ececc4e3795c81af60cd0865a21489858 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sun, 21 Sep 2008 16:21:25 +0000 Subject: [PATCH] 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 --- src/bin/e_config_dialog.c | 68 +++++++++++++++++++---- src/bin/e_config_dialog.h | 8 ++- src/modules/conf_profiles/e_int_config_profiles.c | 10 ++-- 3 files changed, 69 insertions(+), 17 deletions(-) diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c index 394d312..7b19445 100644 --- a/src/bin/e_config_dialog.c +++ b/src/bin/e_config_dialog.c @@ -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) { @@ -361,22 +362,30 @@ _e_config_dialog_cb_basic(void *data, void *data2) } static void -_e_config_dialog_cb_changed(void *data, Evas_Object *obj) +_e_config_dialog_changed(E_Config_Dialog *cfd) { - 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); - } + { + 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); + 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->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; + } + } + } +} diff --git a/src/bin/e_config_dialog.h b/src/bin/e_config_dialog.h index aeae2e0..214c57e1 100644 --- a/src/bin/e_config_dialog.h +++ b/src/bin/e_config_dialog.h @@ -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 diff --git a/src/modules/conf_profiles/e_int_config_profiles.c b/src/modules/conf_profiles/e_int_config_profiles.c index bf41898..a470b29 100644 --- a/src/modules/conf_profiles/e_int_config_profiles.c +++ b/src/modules/conf_profiles/e_int_config_profiles.c @@ -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 -- 2.7.4