From c0bb100a15a6739267d542b4f34c6dc00192cec9 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 25 Nov 2004 04:07:48 +0000 Subject: [PATCH] e17 can restart (from the menu) i NEED this now i'm using it... :) SVN revision: 12248 --- src/bin/e.h | 1 + src/bin/e_int_menus.c | 13 +++++++++++++ src/bin/e_main.c | 12 +++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/bin/e.h b/src/bin/e.h index 299fc3b81..ca89d9281 100644 --- a/src/bin/e.h +++ b/src/bin/e.h @@ -59,6 +59,7 @@ extern E_Path *path_images; extern E_Path *path_fonts; extern E_Path *path_themes; extern E_Path *path_init; +extern int restart; /* convenience macro to compress code and avoid typos */ #define E_FN_DEL(_fn, _h) \ diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index bc2e18a5d..6fe0b61b1 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -11,6 +11,7 @@ struct _About_Data /* local subsystem functions */ static void _e_int_menus_about_end (void *data, E_Menu *m); static void _e_int_menus_about_about (void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_int_menus_about_restart (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_about_exit (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_apps_scan (E_Menu *m); static void _e_int_menus_apps_start (void *data, E_Menu *m); @@ -46,6 +47,10 @@ e_int_menus_about_new(void) mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, "Restart Enlightement"); + e_menu_item_callback_set(mi, _e_int_menus_about_restart, NULL); + mi = e_menu_item_new(m); e_menu_item_label_set(mi, "Exit Enlightement"); e_menu_item_callback_set(mi, _e_int_menus_about_exit, NULL); @@ -95,6 +100,14 @@ _e_int_menus_about_about(void *data, E_Menu *m, E_Menu_Item *mi) ); } +static void +_e_int_menus_about_restart(void *data, E_Menu *m, E_Menu_Item *mi) +{ + printf("RESTART ON!\n"); + restart = 1; + ecore_main_loop_quit(); +} + static void _e_int_menus_about_exit(void *data, E_Menu *m, E_Menu_Item *mi) { diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 0bae3c87a..6b6cb57d8 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -35,6 +35,7 @@ E_Path *path_images = NULL; E_Path *path_fonts = NULL; E_Path *path_themes = NULL; E_Path *path_init = NULL; +int restart = 0; /* local subsystem functions */ #define MAX_LEVEL 32 @@ -273,6 +274,15 @@ main(int argc, char **argv) /* unroll our stack of shutdown functions with exit code of 0 */ _e_main_shutdown(0); + + /* if we were flagged to restart, then restart. */ + if (restart) + { + printf("Restart...\n"); + ecore_app_restart(); + printf("eh? restart failed!\n"); + } + /* just return 0 to keep the compiler quiet */ return 0; } @@ -334,7 +344,7 @@ _e_main_shutdown(int errorcode) } for (i = _e_main_level - 1; i >= 0; i--) (*_e_main_shutdown_func[i])(); - exit(errorcode); + if (errorcode < 0) exit(errorcode); } static int