diff options
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/openbox.c | 25 | ||||
| -rw-r--r-- | openbox/screen.c | 4 | ||||
| -rw-r--r-- | openbox/screen.h | 2 |
3 files changed, 22 insertions, 9 deletions
diff --git a/openbox/openbox.c b/openbox/openbox.c index 53299873..198d0735 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -96,6 +96,7 @@ static gint exitcode = 0; static guint remote_control = 0; static gboolean being_replaced = FALSE; static gchar *config_type = NULL; +static pid_t reconfigure_notify = 0; static void signal_handler(gint signal, gpointer data); static void parse_env(char **argv0); @@ -105,6 +106,8 @@ static Cursor load_cursor(const gchar *name, guint fontval); gint main(gint argc, gchar **argv) { + gchar *program_name; + state = OB_STATE_STARTING; /* initialize the locale */ @@ -114,14 +117,17 @@ gint main(gint argc, gchar **argv) bind_textdomain_codeset(PACKAGE_NAME, "UTF-8"); textdomain(PACKAGE_NAME); - g_set_prgname(argv[0]); - if (chdir(g_get_home_dir()) == -1) g_message(_("Unable to change to home directory '%s': %s"), g_get_home_dir(), g_strerror(errno)); - /* parse out environment and command line args */ + /* parse the environment first, it can change the argv[0] */ parse_env(&argv[0]); + + program_name = g_path_get_basename(argv[0]); + g_set_prgname(program_name); + + /* parse the command line args */ parse_args(&argc, argv); if (!remote_control) { @@ -216,7 +222,7 @@ gint main(gint argc, gchar **argv) prop_startup(); /* get atoms values for the display */ extensions_query_all(); /* find which extensions are present */ - if (screen_annex()) { /* it will be ours! */ + if (screen_annex(program_name)) { /* it will be ours! */ do { { ObParseInst *i; @@ -404,14 +410,14 @@ gint main(gint argc, gchar **argv) /* re-run me */ execvp(argv[0], argv); /* try how we were run */ - execlp(argv[0], g_path_get_basename(argv[0]), - (char *)NULL); /* last resort */ + execlp(argv[0], program_name, (gchar*)NULL); /* last resort */ } /* free stuff passed in from the command line or environment */ g_free(ob_sm_save_file); g_free(ob_sm_id); g_free(config_type); + g_free(program_name); return exitcode; } @@ -481,6 +487,10 @@ static void parse_env(gchar **argv0) if ((c = getenv("OPENBOX_RESTART_BINARY"))) *argv0 = g_strdup(c); unsetenv("OPENBOX_RESTART_BINARY"); + + /* notify this application when openbox reconfigures */ + if ((c = getenv("OPENBOX_RECONFIGURE_NOTIFY_PID"))) + reconfigure_notify = (pid_t) atol(c); } static void remove_args(gint *argc, gchar **argv, gint index, gint num) @@ -597,6 +607,9 @@ void ob_restart() void ob_reconfigure() { + if (reconfigure_notify) + kill(reconfigure_notify, SIGUSR2); + reconfigure = TRUE; ob_exit(0); } diff --git a/openbox/screen.c b/openbox/screen.c index 3c35395a..b0c3286a 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -153,7 +153,7 @@ static gboolean replace_wm() return TRUE; } -gboolean screen_annex() +gboolean screen_annex(const gchar *program_name) { XSetWindowAttributes attrib; pid_t pid; @@ -203,7 +203,7 @@ gboolean screen_annex() net_supporting_wm_check, window, screen_support_win); /* set properties on the supporting window */ - PROP_SETS(screen_support_win, net_wm_name, "Openbox"); + PROP_SETS(screen_support_win, net_wm_name, program_name); PROP_SET32(screen_support_win, net_supporting_wm_check, window, screen_support_win); diff --git a/openbox/screen.h b/openbox/screen.h index b4c510a7..ccaa4f57 100644 --- a/openbox/screen.h +++ b/openbox/screen.h @@ -53,7 +53,7 @@ extern DesktopLayout screen_desktop_layout; extern gchar **screen_desktop_names; /*! Take over the screen, set the basic hints on it claming it as ours */ -gboolean screen_annex(); +gboolean screen_annex(const gchar *program_name); /*! Once the screen is ours, set up its initial state */ void screen_startup(gboolean reconfig); |
