X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fopenbox.c;h=3f286092cfd70ec9607c66bd21c09d91932e918a;hb=7fb107cd37a09787c5cfa590688944b3bcb2bab8;hp=291b694b90328b574e4a6f5cd7cdfa7ac37482ae;hpb=8bd02bf4b883fa369dd68df2053974407024ddaf;p=chaz%2Fopenbox diff --git a/openbox/openbox.c b/openbox/openbox.c index 291b694b..3f286092 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -42,6 +42,7 @@ #include "config.h" #include "ping.h" #include "prompt.h" +#include "hooks.h" #include "gettext.h" #include "render/render.h" #include "render/theme.h" @@ -117,7 +118,7 @@ gint main(gint argc, gchar **argv) { gchar *program_name; - state = OB_STATE_STARTING; + ob_set_state(OB_STATE_STARTING); ob_debug_startup(); @@ -211,6 +212,8 @@ gint main(gint argc, gchar **argv) if (screen_annex()) { /* it will be ours! */ do { + ObPrompt *xmlprompt = NULL; + if (reconfigure) obt_keyboard_reload(); /* get the keycodes for keys we use */ @@ -232,6 +235,7 @@ gint main(gint argc, gchar **argv) /* register all the available actions */ actions_startup(reconfigure); + hooks_startup(reconfigure); /* start up config which sets up with the parser */ config_startup(i); @@ -306,7 +310,6 @@ gint main(gint argc, gchar **argv) grab_startup(reconfigure); group_startup(reconfigure); ping_startup(reconfigure); - prompt_startup(reconfigure); client_startup(reconfigure); dock_startup(reconfigure); moveresize_startup(reconfigure); @@ -314,6 +317,7 @@ gint main(gint argc, gchar **argv) mouse_startup(reconfigure); menu_frame_startup(reconfigure); menu_startup(reconfigure); + prompt_startup(reconfigure); if (!reconfigure) { guint32 xid; @@ -349,13 +353,35 @@ gint main(gint argc, gchar **argv) reconfigure = FALSE; - state = OB_STATE_RUNNING; + ob_set_state(OB_STATE_RUNNING); + + /* look for parsing errors */ + { + xmlErrorPtr e = xmlGetLastError(); + if (e) { + gchar *m; + + m = g_strdup_printf(_("One or more XML syntax errors were found while parsing the Openbox configuration files. See stdout for more information. The last error seen was in file \"%s\" line %d, with message: %s"), e->file, e->line, e->message); + xmlprompt = + prompt_show_message(m, _("Openbox Syntax Error"), _("Close")); + g_free(m); + xmlResetError(e); + } + } + obt_main_loop_run(ob_main_loop); - state = OB_STATE_EXITING; + ob_set_state(reconfigure ? + OB_STATE_RECONFIGURING : OB_STATE_EXITING); + + if (xmlprompt) { + prompt_unref(xmlprompt); + xmlprompt = NULL; + } if (!reconfigure) window_unmanage_all(); + prompt_shutdown(reconfigure); menu_shutdown(reconfigure); menu_frame_shutdown(reconfigure); mouse_shutdown(reconfigure); @@ -363,7 +389,6 @@ gint main(gint argc, gchar **argv) moveresize_shutdown(reconfigure); dock_shutdown(reconfigure); client_shutdown(reconfigure); - prompt_shutdown(reconfigure); ping_shutdown(reconfigure); group_shutdown(reconfigure); grab_shutdown(reconfigure); @@ -376,6 +401,7 @@ gint main(gint argc, gchar **argv) sn_shutdown(reconfigure); event_shutdown(reconfigure); config_shutdown(); + hooks_shutdown(reconfigure); actions_shutdown(reconfigure); } while (reconfigure); } @@ -490,6 +516,9 @@ static void print_help(void) g_print(_(" --help Display this help and exit\n")); g_print(_(" --version Display the version and exit\n")); g_print(_(" --replace Replace the currently running window manager\n")); + /* TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..." + aligned still, if you have to, make a new line with \n and 22 spaces. It's + fine to leave it as FILE though. */ g_print(_(" --config-file FILE Specify the path to the config file to use\n")); g_print(_(" --sm-disable Disable connection to the session manager\n")); g_print(_("\nPassing messages to a running Openbox instance:\n")); @@ -689,3 +718,8 @@ ObState ob_state(void) { return state; } + +void ob_set_state(ObState s) +{ + state = s; +}