# include <fcntl.h>
#endif
#ifdef HAVE_SIGNAL_H
-#define __USE_UNIX98
# include <signal.h>
#endif
#ifdef HAVE_STDLIB_H
static char *restart_path;
static Cursor cursors[OB_NUM_CURSORS];
static KeyCode keys[OB_NUM_KEYS];
+static gint exitcode = 0;
static void signal_handler(int signal, gpointer data);
static void parse_args(int argc, char **argv);
int main(int argc, char **argv)
{
- char *path;
-
#ifdef DEBUG
ob_debug_show_output(TRUE);
#endif
bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
textdomain(PACKAGE_NAME);
- /* create the ~/.openbox dir */
- path = g_build_filename(g_get_home_dir(), ".openbox", NULL);
- mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
- S_IROTH | S_IWOTH | S_IXOTH));
- g_free(path);
- /* create the ~/.openbox/themes dir */
- path = g_build_filename(g_get_home_dir(), ".openbox", "themes", NULL);
- mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
- S_IROTH | S_IWOTH | S_IXOTH));
- g_free(path);
- /* create the ~/.openbox/sessions dir */
- path = g_build_filename(g_get_home_dir(), ".openbox", "sessions", NULL);
- mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
- S_IROTH | S_IWOTH | S_IXOTH));
- g_free(path);
-
g_set_prgname(argv[0]);
+ parse_paths_startup();
+
session_startup(&argc, &argv);
/* parse out command line args */
}
}
event_startup(reconfigure);
- grab_startup(reconfigure);
/* focus_backup is used for stacking, so this needs to come before
anything that calls stacking_add */
focus_startup(reconfigure);
window_startup(reconfigure);
sn_startup(reconfigure);
screen_startup(reconfigure);
+ grab_startup(reconfigure);
group_startup(reconfigure);
client_startup(reconfigure);
dock_startup(reconfigure);
dock_shutdown(reconfigure);
client_shutdown(reconfigure);
group_shutdown(reconfigure);
+ grab_shutdown(reconfigure);
screen_shutdown(reconfigure);
focus_shutdown(reconfigure);
sn_shutdown(reconfigure);
window_shutdown(reconfigure);
- grab_shutdown(reconfigure);
event_shutdown(reconfigure);
config_shutdown();
} while (reconfigure);
XCloseDisplay(ob_display);
+ parse_paths_shutdown();
+
if (restart) {
if (restart_path != NULL) {
int argcp;
execlp(argv[0], g_path_get_basename(argv[0])); /* last resort */
}
- return 0;
+ return exitcode;
}
static void signal_handler(int signal, gpointer data)
ob_reconfigure();
} else {
fprintf(stderr, "Caught signal %d. Exiting.\n", signal);
- ob_exit();
+ /* TERM and INT return a 0 code */
+ ob_exit(!(signal == SIGTERM || signal == SIGINT));
}
}
void ob_restart()
{
restart = TRUE;
- ob_exit();
+ ob_exit(0);
}
-void ob_exit()
+void ob_reconfigure()
{
+ reconfigure = TRUE;
+ ob_exit(0);
+}
+
+void ob_exit(gint code)
+{
+ exitcode = code;
ob_main_loop_exit(ob_main_loop);
}
{
return state;
}
-
-gchar *ob_expand_tilde(const gchar *f)
-{
- gchar **spl;
- gchar *ret;
-
- if (!f)
- return NULL;
- spl = g_strsplit(f, "~", 0);
- ret = g_strjoinv(g_get_home_dir(), spl);
- g_strfreev(spl);
- return ret;
-}
-
-void ob_reconfigure()
-{
- reconfigure = TRUE;
- ob_exit();
-}