Shuffle around/clean up some master/slave state vars.
SVN revision: 9633
This commit is contained in:
parent
c8288cc89e
commit
cc4a910fa6
15
src/E.h
15
src/E.h
|
@ -1244,6 +1244,17 @@ EConf;
|
|||
/* State parameters */
|
||||
typedef struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
int screens;
|
||||
} display;
|
||||
struct
|
||||
{
|
||||
char master; /* We are the master E */
|
||||
char single; /* No slaves */
|
||||
pid_t master_pid;
|
||||
int master_screen;
|
||||
} wm;
|
||||
int debug;
|
||||
int mode;
|
||||
char place;
|
||||
|
@ -2749,10 +2760,6 @@ char *Estrndup(const char *s, int n);
|
|||
*/
|
||||
extern const char e_wm_name[];
|
||||
extern const char e_wm_version[];
|
||||
extern pid_t master_pid;
|
||||
extern int master_screen;
|
||||
extern int display_screens;
|
||||
extern int single_screen_mode;
|
||||
extern Display *disp;
|
||||
|
||||
#if !USE_IMLIB2
|
||||
|
|
11
src/comms.c
11
src/comms.c
|
@ -156,10 +156,10 @@ CommsSendToMasterWM(const char *s)
|
|||
{
|
||||
EDBUG(5, "CommsSendToMasterWM");
|
||||
|
||||
if (root.scr == master_screen || master_pid == getpid())
|
||||
if (Mode.wm.master)
|
||||
EDBUG_RETURN_;
|
||||
|
||||
CommsDoSend(RootWindow(disp, master_screen), s);
|
||||
CommsDoSend(RootWindow(disp, Mode.wm.master_screen), s);
|
||||
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
@ -175,13 +175,12 @@ CommsBroadcastToSlaveWMs(const char *s)
|
|||
|
||||
EDBUG(5, "CommsBroadcastToSlaveWMs");
|
||||
|
||||
if (root.scr != master_screen || master_pid != getpid()
|
||||
|| display_screens < 2 || single_screen_mode != 0)
|
||||
if (!Mode.wm.master || Mode.wm.single)
|
||||
EDBUG_RETURN_;
|
||||
|
||||
for (screen = 0; screen < display_screens; screen++)
|
||||
for (screen = 0; screen < Mode.display.screens; screen++)
|
||||
{
|
||||
if (screen != master_screen)
|
||||
if (screen != Mode.wm.master_screen)
|
||||
CommsDoSend(RootWindow(disp, screen), s);
|
||||
}
|
||||
|
||||
|
|
|
@ -4230,7 +4230,7 @@ RecoverUserConfig(void)
|
|||
"configuration and try again?\n"));
|
||||
Conf.autosave = 0;
|
||||
MapUnmap(1);
|
||||
if (getpid() == master_pid && init_win_ext)
|
||||
if (Mode.wm.master && init_win_ext)
|
||||
{
|
||||
XKillClient(disp, init_win_ext);
|
||||
init_win_ext = 0;
|
||||
|
|
|
@ -29,10 +29,6 @@ const char e_wm_version[] =
|
|||
#else
|
||||
"enlightenment-" ENLIGHTENMENT_VERSION;
|
||||
#endif
|
||||
pid_t master_pid;
|
||||
int master_screen;
|
||||
int display_screens;
|
||||
int single_screen_mode;
|
||||
Display *disp;
|
||||
|
||||
#if !USE_IMLIB2
|
||||
|
|
|
@ -4214,7 +4214,7 @@ IPC_ForceSave(const char *params, Client * c)
|
|||
c = NULL;
|
||||
params = NULL;
|
||||
|
||||
if (!(master_pid == getpid()))
|
||||
if (Mode.wm.master)
|
||||
return;
|
||||
|
||||
if (Conf.autosave)
|
||||
|
|
10
src/main.c
10
src/main.c
|
@ -67,7 +67,6 @@ main(int argc, char **argv)
|
|||
Mode.mode = MODE_NONE;
|
||||
Mode.startup = 1;
|
||||
|
||||
single_screen_mode = 0;
|
||||
/* unsetenv("LD_PRELOAD"); */
|
||||
|
||||
/* Initialise internationalisation */
|
||||
|
@ -126,7 +125,7 @@ main(int argc, char **argv)
|
|||
}
|
||||
else if (!strcmp("-single", argv[j]))
|
||||
{
|
||||
single_screen_mode = 1;
|
||||
Mode.wm.single = 1;
|
||||
}
|
||||
else if ((!strcmp("-smid", argv[j])) && (argc - j > 1))
|
||||
{
|
||||
|
@ -223,7 +222,7 @@ main(int argc, char **argv)
|
|||
/* run most of the setup */
|
||||
AlertInit(); /* Set up all the text bits that belong on the GSOD */
|
||||
SignalsSetup();
|
||||
SetupX();
|
||||
SetupX(); /* This is where the we fork per screen */
|
||||
BlumFlimFrub();
|
||||
ZoomInit();
|
||||
SetupDirs();
|
||||
|
@ -280,12 +279,13 @@ main(int argc, char **argv)
|
|||
EnableAllPagers();
|
||||
queue_up = DRAW_QUEUE_ENABLE;
|
||||
}
|
||||
if (getpid() == master_pid && init_win_ext)
|
||||
|
||||
/* Kill the E process owning the "init window" */
|
||||
if (Mode.wm.master && init_win_ext)
|
||||
{
|
||||
XKillClient(disp, init_win_ext);
|
||||
init_win_ext = 0;
|
||||
}
|
||||
HintsSetClientList();
|
||||
|
||||
/* sync just to make sure */
|
||||
XSync(disp, False);
|
||||
|
|
|
@ -163,7 +163,7 @@ EExit(void *code)
|
|||
|
||||
SignalsRestore();
|
||||
|
||||
if (master_pid == getpid())
|
||||
if (Mode.wm.master)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -600,7 +600,7 @@ set_save_props(SmcConn smc_conn, int master_flag)
|
|||
n = 0;
|
||||
restartVal[n].length = strlen(command);
|
||||
restartVal[n++].value = command;
|
||||
if (single_screen_mode)
|
||||
if (Mode.wm.single)
|
||||
{
|
||||
restartVal[n].length = strlen(single);
|
||||
restartVal[n++].value = (char *)single;
|
||||
|
@ -660,11 +660,9 @@ set_save_props(SmcConn smc_conn, int master_flag)
|
|||
static void
|
||||
callback_save_yourself2(SmcConn smc_conn, SmPointer client_data)
|
||||
{
|
||||
char master_flag = (master_pid == getpid());
|
||||
|
||||
/* dont need anymore */
|
||||
/* autosave(); */
|
||||
if (!master_flag)
|
||||
if (!Mode.wm.master)
|
||||
{
|
||||
struct timeval tv1, tv2;
|
||||
|
||||
|
@ -683,7 +681,7 @@ callback_save_yourself2(SmcConn smc_conn, SmPointer client_data)
|
|||
}
|
||||
}
|
||||
stale_sm_file = 1;
|
||||
set_save_props(smc_conn, master_flag);
|
||||
set_save_props(smc_conn, Mode.wm.master);
|
||||
SmcSaveYourselfDone(smc_conn, True);
|
||||
if (restarting)
|
||||
EExit(0);
|
||||
|
@ -694,7 +692,7 @@ static void
|
|||
callback_save_yourself(SmcConn smc_conn, SmPointer client_data, int save_style,
|
||||
Bool shutdown, int interact_style, Bool fast)
|
||||
{
|
||||
if (master_pid == getpid())
|
||||
if (Mode.wm.master)
|
||||
{
|
||||
char s[4096];
|
||||
|
||||
|
@ -732,7 +730,7 @@ callback_save_yourself(SmcConn smc_conn, SmPointer client_data, int save_style,
|
|||
static void
|
||||
callback_die(SmcConn smc_conn, SmPointer client_data)
|
||||
{
|
||||
if (master_pid == getpid())
|
||||
if (Mode.wm.master)
|
||||
SoundPlay("SOUND_EXIT");
|
||||
EExit(0);
|
||||
smc_conn = 0;
|
||||
|
@ -973,9 +971,8 @@ static void
|
|||
doSMExit(const void *params)
|
||||
{
|
||||
char s[1024];
|
||||
char master_flag, do_master_kill;
|
||||
char do_master_kill;
|
||||
|
||||
master_flag = (master_pid == getpid())? 1 : 0;
|
||||
do_master_kill = 1;
|
||||
|
||||
restarting = True;
|
||||
|
@ -1127,9 +1124,7 @@ doSMExit(const void *params)
|
|||
char *real_exec;
|
||||
char sss[FILEPATH_LEN_MAX];
|
||||
Window w;
|
||||
char master_flag, do_master_kill;
|
||||
|
||||
master_flag = (master_pid == getpid())? 1 : 0;
|
||||
char do_master_kill;
|
||||
|
||||
do_master_kill = 1;
|
||||
|
||||
|
|
86
src/setup.c
86
src/setup.c
|
@ -107,14 +107,15 @@ MapUnmap(int start)
|
|||
}
|
||||
|
||||
void
|
||||
SetupX()
|
||||
SetupX(void)
|
||||
{
|
||||
/* This function sets up all of our connections to X */
|
||||
|
||||
EDBUG(6, "SetupX");
|
||||
|
||||
/* In case we are going to fork, set up the master pid */
|
||||
master_pid = getpid();
|
||||
Mode.wm.master = 1;
|
||||
Mode.wm.master_pid = getpid();
|
||||
|
||||
/* Open a connection to the diplay nominated by the DISPLAY variable */
|
||||
if (!dstr)
|
||||
|
@ -137,11 +138,14 @@ SetupX()
|
|||
"startx manual pages before proceeding.\n"));
|
||||
EExit((void *)1);
|
||||
}
|
||||
|
||||
root.scr = DefaultScreen(disp);
|
||||
display_screens = ScreenCount(disp);
|
||||
master_screen = root.scr;
|
||||
Mode.display.screens = ScreenCount(disp);
|
||||
|
||||
Mode.wm.master_screen = root.scr;
|
||||
|
||||
/* Start up on multiple heads, if appropriate */
|
||||
if ((display_screens > 1) && (!single_screen_mode))
|
||||
if ((Mode.display.screens > 1) && (!Mode.wm.single))
|
||||
{
|
||||
int i;
|
||||
char subdisplay[255];
|
||||
|
@ -151,41 +155,43 @@ SetupX()
|
|||
|
||||
strcpy(subdisplay, DisplayString(disp));
|
||||
|
||||
for (i = 0; i < display_screens; i++)
|
||||
for (i = 0; i < Mode.display.screens; i++)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
if (i != root.scr)
|
||||
{
|
||||
pid = fork();
|
||||
if (pid)
|
||||
{
|
||||
child_count++;
|
||||
e_children =
|
||||
Erealloc(e_children, sizeof(pid_t) * child_count);
|
||||
e_children[child_count - 1] = pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef SIGSTOP
|
||||
kill(getpid(), SIGSTOP);
|
||||
#endif
|
||||
/* Find the point to concatenate the screen onto */
|
||||
dispstr = strchr(subdisplay, ':');
|
||||
if (NULL != dispstr)
|
||||
{
|
||||
dispstr = strchr(dispstr, '.');
|
||||
if (NULL != dispstr)
|
||||
*dispstr = '\0';
|
||||
}
|
||||
Esnprintf(subdisplay + strlen(subdisplay), 10, ".%d", i);
|
||||
dstr = Estrdup(subdisplay);
|
||||
disp = XOpenDisplay(dstr);
|
||||
if (i == root.scr)
|
||||
continue;
|
||||
|
||||
root.scr = i;
|
||||
/* Terminate the loop as I am the child process... */
|
||||
break;
|
||||
pid = fork();
|
||||
if (pid)
|
||||
{
|
||||
/* We are the master */
|
||||
child_count++;
|
||||
e_children =
|
||||
Erealloc(e_children, sizeof(pid_t) * child_count);
|
||||
e_children[child_count - 1] = pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We are a slave */
|
||||
Mode.wm.master = 0;
|
||||
root.scr = i;
|
||||
#ifdef SIGSTOP
|
||||
kill(getpid(), SIGSTOP);
|
||||
#endif
|
||||
/* Find the point to concatenate the screen onto */
|
||||
dispstr = strchr(subdisplay, ':');
|
||||
if (NULL != dispstr)
|
||||
{
|
||||
dispstr = strchr(dispstr, '.');
|
||||
if (NULL != dispstr)
|
||||
*dispstr = '\0';
|
||||
}
|
||||
Esnprintf(subdisplay + strlen(subdisplay), 10, ".%d", i);
|
||||
dstr = Estrdup(subdisplay);
|
||||
disp = XOpenDisplay(dstr);
|
||||
/* Terminate the loop as I am the child process... */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -197,13 +203,17 @@ SetupX()
|
|||
/* set up a handler for when the X Connection goes down */
|
||||
XSetIOErrorHandler((XIOErrorHandler) HandleXIOError);
|
||||
|
||||
/* initialise imlib */
|
||||
#if USE_IMLIB2
|
||||
/* Root defaults */
|
||||
root.scr = DefaultScreen(disp);
|
||||
root.win = DefaultRootWindow(disp);
|
||||
root.vis = DefaultVisual(disp, root.scr);
|
||||
root.depth = DefaultDepth(disp, root.scr);
|
||||
root.cmap = DefaultColormap(disp, root.scr);
|
||||
root.w = DisplayWidth(disp, root.scr);
|
||||
root.h = DisplayHeight(disp, root.scr);
|
||||
|
||||
/* initialise imlib */
|
||||
#if USE_IMLIB2
|
||||
imlib_set_cache_size(2048 * 1024);
|
||||
imlib_set_font_cache_size(512 * 1024);
|
||||
imlib_set_color_usage(128);
|
||||
|
@ -256,8 +266,6 @@ SetupX()
|
|||
prImlib_Context = NULL;
|
||||
}
|
||||
#endif
|
||||
root.w = DisplayWidth(disp, root.scr);
|
||||
root.h = DisplayHeight(disp, root.scr);
|
||||
|
||||
/* Initialise event handling */
|
||||
EventsInit();
|
||||
|
|
Loading…
Reference in New Issue