From d82db82448edaa961293998208bc8ecc1fe6a8e1 Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Wed, 15 Feb 2006 20:29:33 +0000 Subject: [PATCH] Allow Auto-Apply Settings and Default Mode for Config Dialogues SVN revision: 20492 --- src/bin/e_config_dialog.c | 51 +++++++++++++++++++++++++++++++++++---- src/bin/e_config_dialog.h | 4 ++- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c index 3b3fd4198..229372724 100644 --- a/src/bin/e_config_dialog.c +++ b/src/bin/e_config_dialog.c @@ -35,11 +35,38 @@ e_config_dialog_new(E_Container *con, char *title, char *icon, int icon_size, E_ cfd->data = data; cfd->hide_buttons = 1; cfd->cfg_changed = 0; - - if ((cfd->view->basic.apply_cfdata) || (cfd->view->advanced.apply_cfdata)) - cfd->hide_buttons = 0; - _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC); + if (cfd->view->override_auto_apply) + { + /* Dialog Requested To Not Auto-Apply */ + if ((cfd->view->basic.apply_cfdata) || (cfd->view->advanced.apply_cfdata)) + cfd->hide_buttons = 0; + } + else + { + /* Ok To Override, Or Not Specified. Use Config Value */ + if (e_config->cfgdlg_auto_apply) + cfd->hide_buttons = 1; + else + { + if ((cfd->view->basic.apply_cfdata) || (cfd->view->advanced.apply_cfdata)) + cfd->hide_buttons = 0; + } + } + + switch (e_config->cfgdlg_default_mode) + { + case E_CONFIG_DIALOG_CFDATA_TYPE_BASIC: + if (cfd->view->basic.create_widgets) + _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC); + break; + case E_CONFIG_DIALOG_CFDATA_TYPE_ADVANCED: + if (cfd->view->advanced.create_widgets) + _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_ADVANCED); + else if (cfd->view->basic.create_widgets) + _e_config_dialog_go(cfd, E_CONFIG_DIALOG_CFDATA_TYPE_BASIC); + break; + } return cfd; } @@ -207,7 +234,7 @@ _e_config_dialog_cb_apply(void *data, E_Dialog *dia) { if (cfd->view->advanced.apply_cfdata) ok = cfd->view->advanced.apply_cfdata(cfd, cfd->cfdata); - } + } if ((ok) && (!cfd->hide_buttons)) { cfd->cfg_changed = 0; @@ -238,6 +265,7 @@ static void _e_config_dialog_cb_changed(void *data, Evas_Object *obj) { E_Config_Dialog *cfd; + int ok = 0; cfd = data; if (!cfd->hide_buttons) @@ -246,6 +274,19 @@ _e_config_dialog_cb_changed(void *data, Evas_Object *obj) e_dialog_button_disable_num_set(cfd->dia, 0, 0); e_dialog_button_disable_num_set(cfd->dia, 1, 0); } + else + { + if (cfd->view_type == E_CONFIG_DIALOG_CFDATA_TYPE_BASIC) + { + if (cfd->view->basic.apply_cfdata) + ok = cfd->view->basic.apply_cfdata(cfd, cfd->cfdata); + } + else + { + if (cfd->view->advanced.apply_cfdata) + ok = cfd->view->advanced.apply_cfdata(cfd, cfd->cfdata); + } + } } static void diff --git a/src/bin/e_config_dialog.h b/src/bin/e_config_dialog.h index b5c71107e..7e7233d91 100644 --- a/src/bin/e_config_dialog.h +++ b/src/bin/e_config_dialog.h @@ -21,13 +21,15 @@ typedef struct _E_Config_Dialog_Data E_Config_Dialog_Data; struct _E_Config_Dialog_View { + int override_auto_apply; + void *(*create_cfdata) (E_Config_Dialog *cfd); void (*free_cfdata) (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); int (*close_cfdata) (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); struct { int (*apply_cfdata) (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); Evas_Object *(*create_widgets) (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); - } basic, advanced; + } basic, advanced; }; struct _E_Config_Dialog