X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fopenbox.c;h=1b39b40478b2a03cc387a4e12966f5e9069aa453;hb=bcc31faf7ecd8b0ad3b66a75fc72145e93e6c35a;hp=d2b66b5b08516e62d41608d42df4443ec16d8b56;hpb=31f0c8c1ad8c9acf369ab8336765f4bf673b8e21;p=chaz%2Fopenbox diff --git a/openbox/openbox.c b/openbox/openbox.c index d2b66b5b..1b39b404 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -80,9 +80,6 @@ #include #endif -#include -#include - RrInstance *ob_rr_inst; RrImageCache *ob_rr_icons; RrTheme *ob_rr_theme; @@ -101,11 +98,11 @@ static gboolean reconfigure = FALSE; static gboolean restart = FALSE; static gchar *restart_path = NULL; static Cursor cursors[OB_NUM_CURSORS]; -static KeyCode *keys[OB_NUM_KEYS]; 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); @@ -217,18 +214,6 @@ gint main(gint argc, gchar **argv) if (reconfigure) obt_keyboard_reload(); - /* get the keycodes for keys we use */ - keys[OB_KEY_RETURN] = obt_keyboard_keysym_to_keycode(XK_Return); - keys[OB_KEY_ESCAPE] = obt_keyboard_keysym_to_keycode(XK_Escape); - keys[OB_KEY_LEFT] = obt_keyboard_keysym_to_keycode(XK_Left); - keys[OB_KEY_RIGHT] = obt_keyboard_keysym_to_keycode(XK_Right); - keys[OB_KEY_UP] = obt_keyboard_keysym_to_keycode(XK_Up); - keys[OB_KEY_DOWN] = obt_keyboard_keysym_to_keycode(XK_Down); - keys[OB_KEY_TAB] = obt_keyboard_keysym_to_keycode(XK_Tab); - keys[OB_KEY_SPACE] = obt_keyboard_keysym_to_keycode(XK_space); - keys[OB_KEY_HOME] = obt_keyboard_keysym_to_keycode(XK_Home); - keys[OB_KEY_END] = obt_keyboard_keysym_to_keycode(XK_End); - { ObtXmlInst *i; @@ -358,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(); @@ -405,18 +413,6 @@ gint main(gint argc, gchar **argv) event_shutdown(reconfigure); config_shutdown(); actions_shutdown(reconfigure); - - /* Free the key codes for built in keys */ - g_free(keys[OB_KEY_RETURN]); - g_free(keys[OB_KEY_ESCAPE]); - g_free(keys[OB_KEY_LEFT]); - g_free(keys[OB_KEY_RIGHT]); - g_free(keys[OB_KEY_UP]); - g_free(keys[OB_KEY_DOWN]); - g_free(keys[OB_KEY_TAB]); - g_free(keys[OB_KEY_SPACE]); - g_free(keys[OB_KEY_HOME]); - g_free(keys[OB_KEY_END]); } while (reconfigure); } @@ -547,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")); @@ -608,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); @@ -737,16 +746,6 @@ Cursor ob_cursor(ObCursor cursor) return cursors[cursor]; } -gboolean ob_keycode_match(KeyCode code, ObKey key) -{ - KeyCode *k; - - g_assert(key < OB_NUM_KEYS); - for (k = keys[key]; *k; ++k) - if (*k == code) return TRUE; - return FALSE; -} - ObState ob_state(void) { return state;