1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 04:48:06 +01:00

fixed Restart() function, and crashing dialog call to this function

This commit is contained in:
dan
1999-04-17 20:25:07 +00:00
parent afcbe06363
commit 8bdc78fcd1
4 changed files with 18 additions and 28 deletions

View File

@@ -75,7 +75,6 @@ typedef struct {
static void resizeWindow(WMWidget *, unsigned, unsigned); static void resizeWindow(WMWidget *, unsigned, unsigned);
static void moveWindow(WMWidget *, int, int);
struct W_ViewProcedureTable _WindowViewProcedures = { struct W_ViewProcedureTable _WindowViewProcedures = {
NULL, NULL,

View File

@@ -37,7 +37,7 @@ void RestoreDesktop(WScreen *scr);
void Exit(int status); void Exit(int status);
void Restart(char *manager); void Restart(char *manager, Bool abortOnFailure);
void SetupEnvironment(WScreen *scr); void SetupEnvironment(WScreen *scr);

View File

@@ -58,9 +58,6 @@
Display *dpy; Display *dpy;
char **Arguments;
int ArgCount;
char *ProgName; char *ProgName;
unsigned int ValidModMask = 0xff; unsigned int ValidModMask = 0xff;
@@ -152,6 +149,10 @@ int wVisualID = -1;
static char *DisplayName = NULL; static char *DisplayName = NULL;
static char **Arguments;
static int ArgCount;
extern void EventLoop(); extern void EventLoop();
extern void StartUp(); extern void StartUp();
@@ -169,7 +170,7 @@ Exit(int status)
} }
void void
Restart(char *manager) Restart(char *manager, Bool abortOnFailure)
{ {
char *prog=NULL; char *prog=NULL;
char *argv[MAX_RESTART_ARGS]; char *argv[MAX_RESTART_ARGS];
@@ -191,15 +192,14 @@ Restart(char *manager)
XCloseDisplay(dpy); XCloseDisplay(dpy);
dpy = NULL; dpy = NULL;
} }
if (!prog) if (!prog) {
execvp(Arguments[0], Arguments); execvp(Arguments[0], Arguments);
else { wfatal(_("failed to restart Window Maker."));
} else {
execvp(prog, argv); execvp(prog, argv);
/* fallback */ wsyserror(_("could not exec %s"), prog);
execv(Arguments[0], Arguments);
} }
wsyserror(_("could not exec window manager")); if (abortOnFailure)
wfatal(_("Restart failed!!!"));
exit(-1); exit(-1);
} }

View File

@@ -78,8 +78,6 @@ extern const char * const sys_siglist[];
/****** Global Variables ******/ /****** Global Variables ******/
extern char **Arguments;
extern WPreferences wPreferences; extern WPreferences wPreferences;
extern WDDomain *WDWindowMaker; extern WDDomain *WDWindowMaker;
@@ -336,22 +334,15 @@ handleSig(int sig)
if (crashAction == WMRestart) { if (crashAction == WMRestart) {
/* we try to restart Window Maker */ /* we try to restart Window Maker */
wwarning(_("trying to restart Window Maker...")); wwarning(_("trying to restart Window Maker..."));
execvp(Arguments[0], Arguments); Restart(NULL, False);
wwarning(_("we failed to restart Window Maker."));
/* fallback to alternate window manager then */ /* fallback to alternate window manager then */
} }
wwarning(_("trying to start alternate window manager...")); wwarning(_("trying to start alternate window manager..."));
argv[0] = FALLBACK_WINDOWMANAGER; Restart(FALLBACK_WINDOWMANAGER, False);
execvp(FALLBACK_WINDOWMANAGER, argv); Restart("fvwm", False);
Restart("twm", False);
argv[0] = "fvwm";
execvp("fvwm", argv);
argv[0] = "twm";
execvp("twm", argv);
wfatal(_("failed to start alternate window manager. Aborting.")); wfatal(_("failed to start alternate window manager. Aborting."));
#else #else
wfatal(_("a fatal error has occured, probably due to a bug. " wfatal(_("a fatal error has occured, probably due to a bug. "