diff options
| author | Dana Jansens <danakj@orodu.net> | 2010-02-17 16:11:36 -0500 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2010-02-17 16:11:36 -0500 |
| commit | bcc31faf7ecd8b0ad3b66a75fc72145e93e6c35a (patch) | |
| tree | de901ca02d357392d35e88ce42db60e8adca841f /openbox | |
| parent | 7d71fb8a77ba9e2ea4938e793410f029265507a8 (diff) | |
revamp the autostart functionality, so autostart apps launch after openbox.
add /usr/libexec/openbox-autostart which runs the global/user scripts and
launches /usr/libexec/openbox-xdg-autostart (which runs .desktop autostart
stuff)
make openbox-session call openbox with --startup option, to make openbox launch
/usr/libexec/openbox-autostart *after* it is initialized.
add /etc/xdg/openbox/environment and ~/.config/openbox/environment files to let
user change environment variables (locale) for their Openbox session, which
openbox-session loads before running openbox.
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/openbox.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/openbox/openbox.c b/openbox/openbox.c index 0f9fb179..1b39b404 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -102,6 +102,7 @@ static gint exitcode = 0; static guint remote_control = 0; static gboolean being_replaced = FALSE; static gchar *config_file = NULL; +static gchar *startup_cmd = NULL; static void signal_handler(gint signal, gpointer data); static void remove_args(gint *argc, gchar **argv, gint index, gint num); @@ -342,6 +343,29 @@ gint main(gint argc, gchar **argv) ob_set_state(OB_STATE_RUNNING); + if (startup_cmd) { + gchar **argv = NULL; + GError *e = NULL; + gboolean ok; + + if (!g_shell_parse_argv(startup_cmd, NULL, &argv, &e)) { + g_message("Error parsing startup command: %s", + e->message); + g_error_free(e); + e = NULL; + } + ok = g_spawn_async(NULL, argv, NULL, + G_SPAWN_SEARCH_PATH | + G_SPAWN_DO_NOT_REAP_CHILD, + NULL, NULL, NULL, &e); + if (!g_shell_parse_argv(startup_cmd, NULL, &argv, &e)) { + g_message("Error launching startup command: %s", + e->message); + g_error_free(e); + e = NULL; + } + } + /* look for parsing errors */ { xmlErrorPtr e = xmlGetLastError(); @@ -519,6 +543,7 @@ static void print_help(void) g_print(_(" --exit Exit Openbox\n")); g_print(_("\nDebugging options:\n")); g_print(_(" --sync Run in synchronous mode\n")); + g_print(_(" --startup CMD Run CMD after starting\n")); g_print(_(" --debug Display debugging output\n")); g_print(_(" --debug-focus Display debugging output for focus handling\n")); g_print(_(" --debug-session Display debugging output for session management\n")); @@ -580,6 +605,18 @@ static void parse_args(gint *argc, gchar **argv) else if (!strcmp(argv[i], "--sync")) { xsync = TRUE; } + else if (!strcmp(argv[i], "--startup")) { + if (i == *argc - 1) /* no args left */ + g_printerr(_("--startup requires an argument\n")); + else { + /* this will be in the current locale encoding, which is + what we want */ + startup_cmd = argv[i+1]; + remove_args(argc, argv, i, 2); + --i; /* this arg was removed so go back */ + ob_debug("--startup %s", startup_cmd); + } + } else if (!strcmp(argv[i], "--debug")) { ob_debug_enable(OB_DEBUG_NORMAL, TRUE); ob_debug_enable(OB_DEBUG_APP_BUGS, TRUE); |
