summaryrefslogtreecommitdiff
path: root/openbox/openbox.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-02-17 16:11:36 -0500
committerDana Jansens <danakj@orodu.net>2010-02-17 16:11:36 -0500
commitbcc31faf7ecd8b0ad3b66a75fc72145e93e6c35a (patch)
treede901ca02d357392d35e88ce42db60e8adca841f /openbox/openbox.c
parent7d71fb8a77ba9e2ea4938e793410f029265507a8 (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/openbox.c')
-rw-r--r--openbox/openbox.c37
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);