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:
@@ -75,7 +75,6 @@ typedef struct {
|
||||
|
||||
|
||||
static void resizeWindow(WMWidget *, unsigned, unsigned);
|
||||
static void moveWindow(WMWidget *, int, int);
|
||||
|
||||
struct W_ViewProcedureTable _WindowViewProcedures = {
|
||||
NULL,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
20
src/main.c
20
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,15 +192,14 @@ Restart(char *manager)
|
||||
XCloseDisplay(dpy);
|
||||
dpy = NULL;
|
||||
}
|
||||
if (!prog)
|
||||
if (!prog) {
|
||||
execvp(Arguments[0], Arguments);
|
||||
else {
|
||||
wfatal(_("failed to restart Window Maker."));
|
||||
} else {
|
||||
execvp(prog, argv);
|
||||
/* fallback */
|
||||
execv(Arguments[0], Arguments);
|
||||
wsyserror(_("could not exec %s"), prog);
|
||||
}
|
||||
wsyserror(_("could not exec window manager"));
|
||||
wfatal(_("Restart failed!!!"));
|
||||
if (abortOnFailure)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -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. "
|
||||
|
||||
Reference in New Issue
Block a user