diff --git a/WINGs/wwindow.c b/WINGs/wwindow.c index 5646f23b..42d84e6f 100644 --- a/WINGs/wwindow.c +++ b/WINGs/wwindow.c @@ -75,7 +75,6 @@ typedef struct { static void resizeWindow(WMWidget *, unsigned, unsigned); -static void moveWindow(WMWidget *, int, int); struct W_ViewProcedureTable _WindowViewProcedures = { NULL, diff --git a/src/funcs.h b/src/funcs.h index 3b79caf5..33669e11 100644 --- a/src/funcs.h +++ b/src/funcs.h @@ -37,7 +37,7 @@ void RestoreDesktop(WScreen *scr); void Exit(int status); -void Restart(char *manager); +void Restart(char *manager, Bool abortOnFailure); void SetupEnvironment(WScreen *scr); diff --git a/src/main.c b/src/main.c index c59cd860..f76915da 100644 --- a/src/main.c +++ b/src/main.c @@ -58,9 +58,6 @@ Display *dpy; -char **Arguments; -int ArgCount; - char *ProgName; unsigned int ValidModMask = 0xff; @@ -152,6 +149,10 @@ int wVisualID = -1; static char *DisplayName = NULL; +static char **Arguments; + +static int ArgCount; + extern void EventLoop(); extern void StartUp(); @@ -169,7 +170,7 @@ Exit(int status) } void -Restart(char *manager) +Restart(char *manager, Bool abortOnFailure) { char *prog=NULL; char *argv[MAX_RESTART_ARGS]; @@ -191,16 +192,15 @@ Restart(char *manager) XCloseDisplay(dpy); dpy = NULL; } - if (!prog) - execvp(Arguments[0], Arguments); - else { - execvp(prog, argv); - /* fallback */ - execv(Arguments[0], Arguments); + if (!prog) { + execvp(Arguments[0], Arguments); + wfatal(_("failed to restart Window Maker.")); + } else { + execvp(prog, argv); + wsyserror(_("could not exec %s"), prog); } - wsyserror(_("could not exec window manager")); - wfatal(_("Restart failed!!!")); - exit(-1); + if (abortOnFailure) + exit(-1); } diff --git a/src/startup.c b/src/startup.c index e583f06f..568d3e8c 100644 --- a/src/startup.c +++ b/src/startup.c @@ -78,8 +78,6 @@ extern const char * const sys_siglist[]; /****** Global Variables ******/ -extern char **Arguments; - extern WPreferences wPreferences; extern WDDomain *WDWindowMaker; @@ -336,22 +334,15 @@ handleSig(int sig) if (crashAction == WMRestart) { /* we try to restart Window Maker */ wwarning(_("trying to restart Window Maker...")); - execvp(Arguments[0], Arguments); - wwarning(_("we failed to restart Window Maker.")); + Restart(NULL, False); /* fallback to alternate window manager then */ } wwarning(_("trying to start alternate window manager...")); - argv[0] = FALLBACK_WINDOWMANAGER; - execvp(FALLBACK_WINDOWMANAGER, argv); - - argv[0] = "fvwm"; - execvp("fvwm", argv); - - argv[0] = "twm"; - execvp("twm", argv); - + Restart(FALLBACK_WINDOWMANAGER, False); + Restart("fvwm", False); + Restart("twm", False); wfatal(_("failed to start alternate window manager. Aborting.")); #else wfatal(_("a fatal error has occured, probably due to a bug. "