summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am20
-rw-r--r--data/gnome-wm-properties/Makefile4
-rw-r--r--data/gnome-wm-properties/openbox-gnome.desktop9
-rw-r--r--data/gnome-wm-properties/openbox-kde.desktop10
-rw-r--r--data/gnome-wm-properties/openbox.desktop (renamed from data/openbox.desktop)4
-rw-r--r--data/xsession/Makefile4
-rwxr-xr-xdata/xsession/openbox-gnome5
-rwxr-xr-xdata/xsession/openbox-gnome-session5
-rw-r--r--data/xsession/openbox-gnome.desktop8
-rwxr-xr-xdata/xsession/openbox-kde5
-rwxr-xr-xdata/xsession/openbox-kde-session5
-rw-r--r--data/xsession/openbox-kde.desktop8
-rw-r--r--data/xsession/openbox.desktop8
-rw-r--r--openbox/openbox.c25
-rw-r--r--openbox/screen.c4
-rw-r--r--openbox/screen.h2
16 files changed, 112 insertions, 14 deletions
diff --git a/Makefile.am b/Makefile.am
index b879c017..af283aac 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,7 +4,8 @@ themedir = $(datadir)/themes
localedir = $(datadir)/locale
configdir = $(sysconfdir)/xdg
rcdir = $(configdir)/openbox
-desktopfilesdir = $(datadir)/gnome/wm-properties
+xsessionsdir = $(datadir)/xsessions
+gnomewmfilesdir = $(datadir)/gnome/wm-properties
pkgconfigdir = $(libdir)/pkgconfig
pubincludedir = $(includedir)/openbox/@OB_VERSION@/openbox
pixmapdir = $(datadir)/pixmaps
@@ -29,6 +30,12 @@ bin_PROGRAMS = \
openbox/openbox \
tools/gnome-panel-control/gnome-panel-control
+bin_SCRIPTS = \
+ data/xsession/openbox-gnome-session \
+ data/xsession/openbox-kde-session \
+ data/xsession/openbox-gnome \
+ data/xsession/openbox-kde
+
noinst_PROGRAMS = \
tools/themetoxml/themetoxml
@@ -386,8 +393,15 @@ data/menu.xml: Makefile $(srcdir)/data/menu.xml.in data
@mkdir data 2>/dev/null || true
@$(edit) $(srcdir)/data/menu.xml.in >$@
-dist_desktopfiles_DATA = \
- data/openbox.desktop
+dist_gnomewmfiles_DATA = \
+ data/gnome-wm-properties/openbox.desktop \
+ data/gnome-wm-properties/openbox-gnome.desktop \
+ data/gnome-wm-properties/openbox-kde.desktop
+
+dist_xsessions_DATA = \
+ data/xsession/openbox.desktop \
+ data/xsession/openbox-gnome.desktop \
+ data/xsession/openbox-kde.desktop
dist_noinst_DATA = \
version.h.in \
diff --git a/data/gnome-wm-properties/Makefile b/data/gnome-wm-properties/Makefile
new file mode 100644
index 00000000..b90edacf
--- /dev/null
+++ b/data/gnome-wm-properties/Makefile
@@ -0,0 +1,4 @@
+all clean install:
+ $(MAKE) -C .. -$(MAKEFLAGS) $@
+
+.PHONY: all clean install
diff --git a/data/gnome-wm-properties/openbox-gnome.desktop b/data/gnome-wm-properties/openbox-gnome.desktop
new file mode 100644
index 00000000..be8ff35f
--- /dev/null
+++ b/data/gnome-wm-properties/openbox-gnome.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Openbox/GNOME
+Exec=openbox-gnome
+
+# name we put on the WM spec check window
+X-GNOME-WMName=openbox-gnome
+
+# our config tool
+ConfigExec=obconf
diff --git a/data/gnome-wm-properties/openbox-kde.desktop b/data/gnome-wm-properties/openbox-kde.desktop
new file mode 100644
index 00000000..0208c328
--- /dev/null
+++ b/data/gnome-wm-properties/openbox-kde.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Openbox/GNOME
+Exec=openbox-kde
+
+# name we put on the WM spec check window
+X-GNOME-WMName=openbox-kde
+
+# our config tool
+ConfigExec=obconf
+
diff --git a/data/openbox.desktop b/data/gnome-wm-properties/openbox.desktop
index 559a1a00..96418613 100644
--- a/data/openbox.desktop
+++ b/data/gnome-wm-properties/openbox.desktop
@@ -3,7 +3,7 @@ Name=Openbox
Exec=openbox
# name we put on the WM spec check window
-X-GNOME-WMName=Openbox
+X-GNOME-WMName=openbox
# our config tool
-ConfigExec=obconf2
+ConfigExec=obconf
diff --git a/data/xsession/Makefile b/data/xsession/Makefile
new file mode 100644
index 00000000..b90edacf
--- /dev/null
+++ b/data/xsession/Makefile
@@ -0,0 +1,4 @@
+all clean install:
+ $(MAKE) -C .. -$(MAKEFLAGS) $@
+
+.PHONY: all clean install
diff --git a/data/xsession/openbox-gnome b/data/xsession/openbox-gnome
new file mode 100755
index 00000000..03a22d3f
--- /dev/null
+++ b/data/xsession/openbox-gnome
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# A temporary script to be replaced by a real program..
+export OPENBOX_RESTART_BINARY=openbox-gnome
+exec openbox "$@"
diff --git a/data/xsession/openbox-gnome-session b/data/xsession/openbox-gnome-session
new file mode 100755
index 00000000..d2b77014
--- /dev/null
+++ b/data/xsession/openbox-gnome-session
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Run GNOME with Openbox as its window manager
+export WINDOW_MANAGER=openbox-gnome
+exec gnome-session "$@"
diff --git a/data/xsession/openbox-gnome.desktop b/data/xsession/openbox-gnome.desktop
new file mode 100644
index 00000000..a7ac098f
--- /dev/null
+++ b/data/xsession/openbox-gnome.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Openbox/GNOME
+Comment=Use the Openbox window manager inside of the GNOME desktop environment
+Exec=openbox-gnome-session
+TryExec=gnome-session
+Icon=openbox.png
+Type=XSession
diff --git a/data/xsession/openbox-kde b/data/xsession/openbox-kde
new file mode 100755
index 00000000..a3b603ac
--- /dev/null
+++ b/data/xsession/openbox-kde
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# A temporary script to be replaced by a real program..
+export OPENBOX_RESTART_BINARY=openbox-kde
+exec openbox "$@"
diff --git a/data/xsession/openbox-kde-session b/data/xsession/openbox-kde-session
new file mode 100755
index 00000000..589a2c56
--- /dev/null
+++ b/data/xsession/openbox-kde-session
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Run KDE with Openbox as its window manager
+export KDEWM=openbox-kde
+exec startkde "$@"
diff --git a/data/xsession/openbox-kde.desktop b/data/xsession/openbox-kde.desktop
new file mode 100644
index 00000000..456b0df9
--- /dev/null
+++ b/data/xsession/openbox-kde.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Openbox/KDE
+Comment=Use the Openbox window manager inside of the K Desktop Environment
+Exec=openbox-kde-session
+TryExec=startkde
+Icon=openbox.png
+Type=XSession
diff --git a/data/xsession/openbox.desktop b/data/xsession/openbox.desktop
new file mode 100644
index 00000000..3b4d998e
--- /dev/null
+++ b/data/xsession/openbox.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Openbox
+Comment=Use this session to run Openbox as your desktop environment
+Exec=openbox
+TryExec=openbox-shell
+Icon=openbox.png
+Type=XSession
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);