Enable running scripts on startup/restart.
SVN revision: 13234
This commit is contained in:
parent
1a95e3596e
commit
d625bd3372
|
@ -21,6 +21,7 @@ New features:
|
|||
- Built-in composite manager.
|
||||
- An iconbox can be configured to act as System Tray
|
||||
(middle mouse->Desktop->Create Systray).
|
||||
- Possibility to run programs on initial startup and on restart.
|
||||
|
||||
Notes:
|
||||
|
||||
|
@ -52,6 +53,14 @@ by editing /usr/share/e16/config/bindings.cfg.
|
|||
|
||||
e16menuedit will no longer work. e16menuedit2 will.
|
||||
|
||||
It is now possible to execute scripts on startup and/or restart. Use
|
||||
$ eesh set misc.session.cmd_init <script>
|
||||
to set the "init" script, and
|
||||
$ eesh set misc.session.cmd_start <script>
|
||||
to set the "start" script.
|
||||
The "init" script is executed only the first time e16 is started on the
|
||||
display, and the "start" script is run every time e16 (re)starts.
|
||||
|
||||
|
||||
Configuration files
|
||||
-------------------
|
||||
|
|
3
src/E.h
3
src/E.h
|
@ -891,6 +891,8 @@ typedef struct
|
|||
{
|
||||
char enable_logout_dialog;
|
||||
char enable_reboot_halt;
|
||||
char *cmd_init;
|
||||
char *cmd_start;
|
||||
char *cmd_reboot;
|
||||
char *cmd_halt;
|
||||
} session;
|
||||
|
@ -1012,6 +1014,7 @@ typedef struct
|
|||
char window; /* Running in virtual root window */
|
||||
pid_t master_pid;
|
||||
int master_screen;
|
||||
char session_start;
|
||||
char startup;
|
||||
char restart;
|
||||
char xselect;
|
||||
|
|
|
@ -494,6 +494,11 @@ EHintsGetMainInfo(void)
|
|||
DesksSetCurrent(*c);
|
||||
XFree(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Used to test if we should run cmd_init */
|
||||
Mode.wm.session_start = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
58
src/main.c
58
src/main.c
|
@ -56,6 +56,7 @@ static void ECheckEprog(const char *name);
|
|||
static void EDirUserSet(const char *dir);
|
||||
static void EDirUserCacheSet(const char *dir);
|
||||
static void EDirsSetup(void);
|
||||
static void RunInitPrograms(void);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
|
@ -280,6 +281,7 @@ main(int argc, char **argv)
|
|||
|
||||
ModulesSignal(ESIGNAL_START, NULL);
|
||||
|
||||
RunInitPrograms();
|
||||
SpawnSnappedCmds();
|
||||
|
||||
Conf.startup.firsttime = 0;
|
||||
|
@ -296,6 +298,62 @@ main(int argc, char **argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
RunDocBrowser(void)
|
||||
{
|
||||
char file[FILEPATH_LEN_MAX];
|
||||
|
||||
Esnprintf(file, sizeof(file), "%s/edox", EDirBin());
|
||||
if (!canexec(file))
|
||||
return;
|
||||
Esnprintf(file, sizeof(file), "%s/E-docs", EDirRoot());
|
||||
if (!canread(file))
|
||||
return;
|
||||
|
||||
if (fork())
|
||||
return;
|
||||
|
||||
Esnprintf(file, sizeof(file), "exec %s/edox %s/E-docs",
|
||||
EDirBin(), EDirRoot());
|
||||
|
||||
execl(usershell(getuid()), usershell(getuid()), "-c", (char *)file, NULL);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
RunMenuGen(void)
|
||||
{
|
||||
|
||||
char file[FILEPATH_LEN_MAX];
|
||||
|
||||
if (fork())
|
||||
return;
|
||||
|
||||
Esnprintf(file, sizeof(file), "exec %s/scripts/e_gen_menu", EDirRoot());
|
||||
execl(usershell(getuid()), usershell(getuid()), "-c", (char *)file, NULL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
RunInitPrograms(void)
|
||||
{
|
||||
if (Mode.wm.session_start)
|
||||
{
|
||||
if (Conf.session.cmd_init && canexec(Conf.session.cmd_init))
|
||||
system(Conf.session.cmd_init);
|
||||
}
|
||||
|
||||
if (Conf.session.cmd_start && canexec(Conf.session.cmd_start))
|
||||
system(Conf.session.cmd_start);
|
||||
|
||||
if (Conf.startup.firsttime && Mode.wm.master)
|
||||
{
|
||||
RunMenuGen();
|
||||
RunDocBrowser();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EExit(int exitcode)
|
||||
{
|
||||
|
|
|
@ -83,66 +83,19 @@ const EModule *p_modules[] = {
|
|||
};
|
||||
int n_modules = sizeof(p_modules) / sizeof(EModule *);
|
||||
|
||||
static void
|
||||
runDocBrowser(void)
|
||||
{
|
||||
char file[FILEPATH_LEN_MAX];
|
||||
|
||||
Esnprintf(file, sizeof(file), "%s/edox", EDirBin());
|
||||
if (!canexec(file))
|
||||
return;
|
||||
Esnprintf(file, sizeof(file), "%s/E-docs", EDirRoot());
|
||||
if (!canread(file))
|
||||
return;
|
||||
|
||||
if (fork())
|
||||
return;
|
||||
|
||||
Esnprintf(file, sizeof(file), "exec %s/edox %s/E-docs",
|
||||
EDirBin(), EDirRoot());
|
||||
|
||||
execl(usershell(getuid()), usershell(getuid()), "-c", (char *)file, NULL);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
SetupUserInitialization(void)
|
||||
{
|
||||
|
||||
char file[FILEPATH_LEN_MAX];
|
||||
|
||||
if (!Conf.startup.firsttime)
|
||||
return;
|
||||
if (!Mode.wm.master)
|
||||
return;
|
||||
|
||||
if (fork() == 0)
|
||||
{
|
||||
Esnprintf(file, sizeof(file), "exec %s/scripts/e_gen_menu", EDirRoot());
|
||||
execl(usershell(getuid()), usershell(getuid()), "-c", (char *)file,
|
||||
NULL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* Run edox */
|
||||
runDocBrowser();
|
||||
|
||||
autosave();
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
MiscSighan(int sig, void *prm __UNUSED__)
|
||||
{
|
||||
switch (sig)
|
||||
{
|
||||
case ESIGNAL_START:
|
||||
SetupUserInitialization();
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static const CfgItem cfg_items[] = {
|
||||
static const CfgItem MiscCfgItems[] = {
|
||||
CFG_ITEM_INT(Conf, backgrounds.hiquality, 1),
|
||||
CFG_ITEM_INT(Conf, backgrounds.timeout, 240),
|
||||
CFG_ITEM_BOOL(Conf, backgrounds.user, 1),
|
||||
|
@ -179,6 +132,8 @@ static const CfgItem cfg_items[] = {
|
|||
|
||||
CFG_ITEM_BOOL(Conf, session.enable_logout_dialog, 1),
|
||||
CFG_ITEM_BOOL(Conf, session.enable_reboot_halt, 0),
|
||||
CFG_ITEM_STR(Conf, session.cmd_init),
|
||||
CFG_ITEM_STR(Conf, session.cmd_start),
|
||||
CFG_ITEM_STR(Conf, session.cmd_reboot),
|
||||
CFG_ITEM_STR(Conf, session.cmd_halt),
|
||||
|
||||
|
@ -203,7 +158,7 @@ static const CfgItem cfg_items[] = {
|
|||
CFG_ITEM_BOOL(Conf, save_under, 0),
|
||||
CFG_ITEM_INT(Conf, edge_flip_resistance, 25),
|
||||
};
|
||||
#define N_CFG_ITEMS ((int)(sizeof(cfg_items)/sizeof(CfgItem)))
|
||||
#define N_CFG_ITEMS ((int)(sizeof(MiscCfgItems)/sizeof(CfgItem)))
|
||||
|
||||
static void
|
||||
MiscIpcExec(const char *params, Client * c __UNUSED__)
|
||||
|
@ -270,8 +225,8 @@ IpcItem MiscIpcArray[] = {
|
|||
/* Stuff not elsewhere */
|
||||
EModule ModMisc = {
|
||||
"misc", NULL,
|
||||
MiscSighan,
|
||||
NULL,
|
||||
{N_IPC_FUNCS, MiscIpcArray}
|
||||
,
|
||||
{N_CFG_ITEMS, cfg_items}
|
||||
{N_CFG_ITEMS, MiscCfgItems}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue