MAJOR=$(echo $VER | cut -d . -f 1)
MINOR=$(echo $VER | cut -d . -f 2)
-# Run GNOME with Openbox as its window manager
-export WINDOW_MANAGER="@bindir@/openbox"
+# run GNOME with Openbox as its window manager
if test $MAJOR -lt 2 || (test $MAJOR = 2 && test $MINOR -le 22); then
- # old gnome-session allows multiple sessions to be saved
+ # old gnome-session was easy to work with
+ export WINDOW_MANAGER="@bindir@/openbox"
exec gnome-session --choose-session=openbox-session "$@"
else
- # make sure the gnome-wm script is being used
- gconftool-2 -t string \
- -s /desktop/gnome/session/required_components/windowmanager "gnome-wm" \
- 2> /dev/null
-
- # new gnome-session does not allow multiple sessions
- exec gnome-session "$@"
+ # new gnome-session requires openbox to be set in gconf and an
+ # openbox.desktop to be installed in the applications directory
+
+ SPATH=/desktop/gnome/session
+
+ # get the current default session
+ SESSION=$(gconftool-2 -g $SPATH/default_session 2> /dev/null)
+
+ # make sure openbox is going to be run
+ if test -z "$SESSION"; then
+ # if its empty then just run openbox
+ SESSION="[openbox]"
+ elif test -z $(echo "$SESSION" | grep -q openbox); then
+ # if openbox isn't in the session then append it
+ SESSION="${SESSION%]},openbox]"
+ fi
+
+ # get the current GNOME/Openbox session
+ OB_SESSION=$(gconftool-2 -g $SPATH/openbox_session 2> /dev/null)
+
+ # update the GNOME/Openbox session if needed
+ if x$OB_SESSION != x$SESSION; then
+ # the default session changed or we didn't run GNOME/Openbox before
+ gconftool-2 -t list --list-type=strings -s $SPATH/openbox_session \
+ "$SESSION" 2> /dev/null
+ fi
+
+ # run GNOME/Openbox
+ exec gnome-session --default-session-key $SPATH/openbox_session "$@"
fi