all repos — openbox @ 740c8af41e77a0cf5a748a7530d19405ad6739c0

openbox fork - make it a bit more like ryudo

add .desktops for running Openbox, KDE/Openbox and GNOME/Openbox
add more .desktops for gnome and update it
add scripts to run an KDE/Openbox and GNOME/Openbox session
also add scripts for openbox-gnome and openbox-kde which are placeholders and will be replaced by real programs.
also set the name on the wm_support_win to be how we were called (which is passed in the environment) rather than just "Openbox"
add an envionment variable for wanting to be notified (SIGUSR2) when openbox reconfigures. this would be used by openbox-shell to update the root window.. if i make such a thing.. i dunno.
Dana Jansens danakj@orodu.net
commit

740c8af41e77a0cf5a748a7530d19405ad6739c0

parent

f506cbceae9e3d41f1e6e09d7c5e83ab3935adf9

M Makefile.amMakefile.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

@@ -28,6 +29,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 @@ @rm -f $@

@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 \
A data/gnome-wm-properties/Makefile

@@ -0,0 +1,4 @@

+all clean install: + $(MAKE) -C .. -$(MAKEFLAGS) $@ + +.PHONY: all clean install
A 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
A 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 +
M data/openbox.desktopdata/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
A data/xsession/Makefile

@@ -0,0 +1,4 @@

+all clean install: + $(MAKE) -C .. -$(MAKEFLAGS) $@ + +.PHONY: all clean install
A 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 "$@"
A 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 "$@"
A 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
A 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 "$@"
A 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 "$@"
A 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
A 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
M openbox/openbox.copenbox/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 @@ bindtextdomain(PACKAGE_NAME, LOCALEDIR);

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 @@

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 @@ }

/* 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 @@ /* pretend we are this other application */

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_reconfigure() { + if (reconfigure_notify) + kill(reconfigure_notify, SIGUSR2); + reconfigure = TRUE; ob_exit(0); }
M openbox/screen.copenbox/screen.c

@@ -153,7 +153,7 @@

return TRUE; } -gboolean screen_annex() +gboolean screen_annex(const gchar *program_name) { XSetWindowAttributes attrib; pid_t pid;

@@ -203,7 +203,7 @@ PROP_SET32(RootWindow(ob_display, ob_screen),

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);
M openbox/screen.hopenbox/screen.h

@@ -53,7 +53,7 @@ /*! An array of gchar*'s which are desktop names in UTF-8 format */

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);