summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/openbox.c25
-rw-r--r--openbox/screen.c4
-rw-r--r--openbox/screen.h2
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);