diff --git a/src/bin/e_int_config_general.c b/src/bin/e_int_config_general.c index 3315b2abb..cdbb5fc43 100644 --- a/src/bin/e_int_config_general.c +++ b/src/bin/e_int_config_general.c @@ -11,6 +11,9 @@ static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata); static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata); */ +static void _dialog_cb_ok(void *data, E_Dialog *dia); +static void _dialog_cb_cancel(void *data, E_Dialog *dia); + struct _CFData { int show_splash; @@ -87,6 +90,12 @@ _free_data(E_Config_Dialog *cfd, CFData *cfdata) static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata) { + E_Action *a; + int restart = 0; + + if (e_config->use_e_cursor != cfdata->use_e_cursor) restart = 1; + if (e_config->cursor_size != cfdata->cursor_size) restart = 1; + e_border_button_bindings_ungrab_all(); e_config->show_splash = cfdata->show_splash; if (cfdata->framerate <= 0.0) cfdata->framerate = 1.0; @@ -97,6 +106,22 @@ _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata) e_config->cursor_size = cfdata->cursor_size; e_border_button_bindings_grab_all(); e_config_save_queue(); + + if (restart) + { + E_Dialog *dia; + + dia = e_dialog_new(cfd->con); + if (!dia) return 1; + e_dialog_title_set(dia, _("Are you sure you want to restart ?")); + e_dialog_text_set(dia, _("Your changes require Enlightenment to be restarted
before they can take effect.

Would you like to restart now ?")); + e_dialog_icon_set(dia, "enlightenment/reset", 64); + e_dialog_button_add(dia, _("Yes"), NULL, _dialog_cb_ok, NULL); + e_dialog_button_add(dia, _("No"), NULL, _dialog_cb_cancel, NULL); + e_dialog_button_focus_num(dia, 1); + e_win_centered_set(dia->win, 1); + e_dialog_show(dia); + } return 1; } @@ -154,3 +179,19 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) return o; } */ + +static void +_dialog_cb_ok(void *data, E_Dialog *dia) +{ + E_Action *a; + + e_object_del(E_OBJECT(dia)); + a = e_action_find("restart"); + if ((a) && (a->func.go)) a->func.go(NULL, NULL); +} + +static void +_dialog_cb_cancel(void *data, E_Dialog *dia) +{ + e_object_del(E_OBJECT(dia)); +}