summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/Makefile4
-rw-r--r--data/autostart/Makefile4
-rw-r--r--data/autostart/autostart.in17
-rwxr-xr-xdata/autostart/openbox-autostart.in34
-rwxr-xr-xdata/autostart/openbox-xdg-autostart198
-rw-r--r--data/environment10
-rw-r--r--data/gnome-session/Makefile4
-rw-r--r--data/gnome-session/openbox-gnome-fallback.session6
-rw-r--r--data/gnome-session/openbox-gnome.session9
-rw-r--r--data/gnome-wm-properties/Makefile4
-rw-r--r--data/gnome-wm-properties/openbox.desktop13
-rw-r--r--data/menu.xml394
-rw-r--r--data/menu.xsd215
-rw-r--r--data/openbox.desktop16
-rw-r--r--data/openbox.pngbin0 -> 1528 bytes
-rw-r--r--data/rc.xml730
-rw-r--r--data/rc.xsd551
-rw-r--r--data/xbm/bullet.xbm4
-rw-r--r--data/xbm/close.xbm4
-rw-r--r--data/xbm/desk.xbm4
-rw-r--r--data/xbm/desk_toggled.xbm4
-rw-r--r--data/xbm/iconify.xbm4
-rw-r--r--data/xbm/max.xbm4
-rw-r--r--data/xbm/max_toggled.xbm4
-rw-r--r--data/xbm/shade.xbm4
-rw-r--r--data/xbm/shade_toggled.xbm4
-rw-r--r--data/xsession/Makefile4
-rw-r--r--data/xsession/openbox-gnome-session.in66
-rw-r--r--data/xsession/openbox-gnome.desktop.in8
-rw-r--r--data/xsession/openbox-kde-session.in20
-rw-r--r--data/xsession/openbox-kde.desktop.in8
-rw-r--r--data/xsession/openbox-session.in22
-rw-r--r--data/xsession/openbox.desktop.in8
33 files changed, 2381 insertions, 0 deletions
diff --git a/data/Makefile b/data/Makefile
new file mode 100644
index 0000000..b90edac
--- /dev/null
+++ b/data/Makefile
@@ -0,0 +1,4 @@
+all clean install:
+ $(MAKE) -C .. -$(MAKEFLAGS) $@
+
+.PHONY: all clean install
diff --git a/data/autostart/Makefile b/data/autostart/Makefile
new file mode 100644
index 0000000..b90edac
--- /dev/null
+++ b/data/autostart/Makefile
@@ -0,0 +1,4 @@
+all clean install:
+ $(MAKE) -C .. -$(MAKEFLAGS) $@
+
+.PHONY: all clean install
diff --git a/data/autostart/autostart.in b/data/autostart/autostart.in
new file mode 100644
index 0000000..1c261a0
--- /dev/null
+++ b/data/autostart/autostart.in
@@ -0,0 +1,17 @@
+#
+# These things are run when an Openbox X Session is started.
+# You may place a similar script in $HOME/.config/openbox/autostart
+# to run user-specific things.
+#
+
+# If you want to use GNOME config tools...
+#
+#if test -x @libexecdir@/gnome-settings-daemon >/dev/null; then
+# @libexecdir@/gnome-settings-daemon &
+#elif which gnome-settings-daemon >/dev/null; then
+# gnome-settings-daemon &
+#fi
+
+# If you want to use XFCE config tools...
+#
+#xfce-mcs-manager &
diff --git a/data/autostart/openbox-autostart.in b/data/autostart/openbox-autostart.in
new file mode 100755
index 0000000..063c635
--- /dev/null
+++ b/data/autostart/openbox-autostart.in
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Set a background color
+BG=""
+if which hsetroot >/dev/null; then
+ BG=hsetroot
+elif which esetroot >/dev/null; then
+ BG=esetroot
+elif which xsetroot >/dev/null; then
+ BG=xsetroot
+fi
+test -z $BG || $BG -solid "#303030"
+
+GLOBALAUTOSTART="@rcdir@/autostart"
+AUTOSTART="${XDG_CONFIG_HOME:-"$HOME/.config"}/openbox/autostart"
+
+# Run the global openbox autostart script
+if test -f $GLOBALAUTOSTART; then
+ sh $GLOBALAUTOSTART
+elif test -f $GLOBALAUTOSTART.sh; then
+ sh $GLOBALAUTOSTART.sh
+fi
+
+# Run the user openbox autostart script
+if test -f $AUTOSTART; then
+ sh $AUTOSTART
+elif test -f $AUTOSTART.sh; then
+ sh $AUTOSTART.sh
+fi
+
+# Run the XDG autostart stuff. These are found in /etc/xdg/autostart and
+# in $HOME/.config/autostart. This requires PyXDG to be installed.
+# See openbox-xdg-autostart --help for more details.
+@libexecdir@/openbox-xdg-autostart "$@"
diff --git a/data/autostart/openbox-xdg-autostart b/data/autostart/openbox-xdg-autostart
new file mode 100755
index 0000000..ea76028
--- /dev/null
+++ b/data/autostart/openbox-xdg-autostart
@@ -0,0 +1,198 @@
+#!/usr/bin/env python
+
+# openbox-xdg-autostart runs things based on the XDG autostart specification
+# Copyright (C) 2008 Dana Jansens
+#
+# XDG autostart specification can be found here:
+# http://standards.freedesktop.org/autostart-spec/
+#
+#
+#
+# LICENSE:
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+ME="openbox-xdg-autostart"
+VERSION="1.1"
+
+import os, glob, sys
+try:
+ from xdg import BaseDirectory
+ from xdg.DesktopEntry import DesktopEntry
+ from xdg.Exceptions import ParsingError
+except ImportError:
+ print
+ print "ERROR:", ME, "requires PyXDG to be installed"
+ print
+ sys.exit(1)
+
+def main(argv=sys.argv):
+ if "--help" in argv[1:]:
+ show_help()
+ return 0
+ if "--version" in argv[1:]:
+ show_version()
+ return 0
+
+ # get the autostart directories
+ autodirs = BaseDirectory.load_config_paths("autostart")
+
+ # find all the autostart files
+ files = []
+ for dir in autodirs:
+ for path in glob.glob(os.path.join(dir, '*.desktop')):
+ try:
+ autofile = AutostartFile(path)
+ except ParsingError:
+ print "Invalid .desktop file: " + path
+ else:
+ if not autofile in files:
+ files.append(autofile)
+
+ list = False
+ if "--list" in argv[1:]:
+ list = True
+ argv.remove("--list")
+
+ # run them !
+ environments = argv[1:]
+ for autofile in files:
+ if list: autofile.display(environments)
+ else: autofile.run(environments)
+
+class AutostartFile:
+ def __init__(self, path):
+ self.path = path
+ self.filename = os.path.basename(path)
+ self.dirname = os.path.dirname(path)
+ self.de = DesktopEntry(path)
+
+ def __eq__(self, other):
+ return self.filename == other.filename
+
+ def __str__(self):
+ return self.path + " : " + self.de.getName()
+
+ def _isexecfile(self, path):
+ return os.access(path, os.X_OK)
+
+ def _findFile(self, path, search, match_func):
+ # check empty path
+ if not path: return None
+ # check absolute path
+ if path[0] == '/':
+ if match_func(path): return path
+ else: return None
+ else:
+ # check relative path
+ for dirname in search.split(os.pathsep):
+ if dirname != "":
+ candidate = os.path.join(dirname, path)
+ if (match_func(candidate)): return candidate
+
+ def _alert(self, str, info=False):
+ if info:
+ print "\t ", str
+ else:
+ print "\t*", str
+
+ def _showInEnvironment(self, envs, verbose=False):
+ default = not self.de.getOnlyShowIn()
+ noshow = False
+ force = False
+ for i in self.de.getOnlyShowIn():
+ if i in envs: force = True
+ for i in self.de.getNotShowIn():
+ if i in envs: noshow = True
+
+ if verbose:
+ if not default and not force:
+ s = ""
+ for i in self.de.getOnlyShowIn():
+ if s: s += ", "
+ s += i
+ self._alert("Excluded by: OnlyShowIn (" + s + ")")
+ if default and noshow and not force:
+ s = ""
+ for i in self.de.getNotShowIn():
+ if s: s += ", "
+ s += i
+ self._alert("Excluded by: NotShowIn (" + s + ")")
+ return (default and not noshow) or force
+
+ def _shouldRun(self, envs, verbose=False):
+ if not self.de.getExec():
+ if verbose: self._alert("Excluded by: Missing Exec field")
+ return False
+ if self.de.getHidden():
+ if verbose: self._alert("Excluded by: Hidden")
+ return False
+ if self.de.getTryExec():
+ if not self._findFile(self.de.getTryExec(), os.getenv("PATH"),
+ self._isexecfile):
+ if verbose: self._alert("Excluded by: TryExec (" +
+ self.de.getTryExec() + ")")
+ return False
+ if not self._showInEnvironment(envs, verbose):
+ return False
+ return True
+
+ def display(self, envs):
+ if self._shouldRun(envs):
+ print "[*] " + self.de.getName()
+ else:
+ print "[ ] " + self.de.getName()
+ self._alert("File: " + self.path, info=True)
+ if self.de.getExec():
+ self._alert("Executes: " + self.de.getExec(), info=True)
+ self._shouldRun(envs, True)
+ print
+
+ def run(self, envs):
+ here = os.getcwd()
+ if self.de.getPath():
+ os.chdir(self.de.getPath())
+ if self._shouldRun(envs):
+ args = ["/bin/sh", "-c", "exec " + self.de.getExec()]
+ os.spawnv(os.P_NOWAIT, args[0], args);
+ os.chdir(here)
+
+def show_help():
+ print "Usage:", ME, "[OPTION]... [ENVIRONMENT]..."
+ print
+ print "This tool will run xdg autostart .desktop files"
+ print
+ print "OPTIONS"
+ print " --list Show a list of the files which would be run"
+ print " Files which would be run are marked with an asterix"
+ print " symbol [*]. For files which would not be run,"
+ print " information is given for why they are excluded"
+ print " --help Show this help and exit"
+ print " --version Show version and copyright information"
+ print
+ print "ENVIRONMENT specifies a list of environments for which to run autostart"
+ print "applications. If none are specified, only applications which do not "
+ print "limit themselves to certain environments will be run."
+ print
+ print "ENVIRONMENT can be one or more of:"
+ print " GNOME Gnome Desktop"
+ print " KDE KDE Desktop"
+ print " ROX ROX Desktop"
+ print " XFCE XFCE Desktop"
+ print " Old Legacy systems"
+ print
+
+def show_version():
+ print ME, VERSION
+ print "Copyright (c) 2008 Dana Jansens"
+ print
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/data/environment b/data/environment
new file mode 100644
index 0000000..3311bd6
--- /dev/null
+++ b/data/environment
@@ -0,0 +1,10 @@
+#
+# Set system-wide environment variables here for Openbox
+# User-specific variables should be placed in $HOME/.config/openbox/environment
+#
+
+# To set your language for displaying messages and time/date formats, use the following:
+#LANG=en_CA.UTF8
+
+# To set your keyboard layout, you need to modify your X config:
+# http://www.google.com/search?q=how+to+set+keyboard+layout+xorg
diff --git a/data/gnome-session/Makefile b/data/gnome-session/Makefile
new file mode 100644
index 0000000..b90edac
--- /dev/null
+++ b/data/gnome-session/Makefile
@@ -0,0 +1,4 @@
+all clean install:
+ $(MAKE) -C .. -$(MAKEFLAGS) $@
+
+.PHONY: all clean install
diff --git a/data/gnome-session/openbox-gnome-fallback.session b/data/gnome-session/openbox-gnome-fallback.session
new file mode 100644
index 0000000..156f2c3
--- /dev/null
+++ b/data/gnome-session/openbox-gnome-fallback.session
@@ -0,0 +1,6 @@
+[GNOME Session]
+Name=GNOME/Openbox fallback (Safe Mode)
+RequiredComponents=gnome-settings-daemon;
+RequiredProviders=windowmanager;
+DefaultProvider-windowmanager=openbox
+DesktopName=GNOME
diff --git a/data/gnome-session/openbox-gnome.session b/data/gnome-session/openbox-gnome.session
new file mode 100644
index 0000000..3399c2c
--- /dev/null
+++ b/data/gnome-session/openbox-gnome.session
@@ -0,0 +1,9 @@
+[GNOME Session]
+Name=GNOME/Openbox
+RequiredComponents=gnome-settings-daemon;
+# Try load with the gnome-panel and use the fallback if we can't load a panel
+RequiredProviders=windowmanager;panel
+DefaultProvider-windowmanager=openbox
+DefaultProvider-panel=gnome-panel
+FallbackSession=openbox-gnome-fallback
+DesktopName=GNOME
diff --git a/data/gnome-wm-properties/Makefile b/data/gnome-wm-properties/Makefile
new file mode 100644
index 0000000..b90edac
--- /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.desktop b/data/gnome-wm-properties/openbox.desktop
new file mode 100644
index 0000000..67e49e4
--- /dev/null
+++ b/data/gnome-wm-properties/openbox.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Name=Openbox
+Exec=openbox
+
+# name we put on the WM spec check window
+X-GNOME-WMName=Openbox
+
+# our config tool
+ConfigExec=obconf
+
+[Window Manager]
+SessionManaged=true
diff --git a/data/menu.xml b/data/menu.xml
new file mode 100644
index 0000000..39da04d
--- /dev/null
+++ b/data/menu.xml
@@ -0,0 +1,394 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<openbox_menu xmlns="http://openbox.org/3.4/menu">
+
+<menu id="apps-accessories-menu" label="Accessories">
+ <item label="Calculator">
+ <action name="Execute">
+ <command>gnome-calculator</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Character Map">
+ <action name="Execute">
+ <command>gnome-character-map</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Ark File Archiver">
+ <action name="Execute">
+ <command>ark</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-editors-menu" label="Editors">
+ <item label="GVim">
+ <action name="Execute">
+ <command>gvim</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>GVim</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Emacs">
+ <action name="Execute">
+ <command>emacs</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>Emacs</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="GEdit">
+ <action name="Execute">
+ <command>gedit</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Kate">
+ <action name="Execute">
+ <command>kate</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Kwrite">
+ <action name="Execute">
+ <command>kwrite</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-term-menu" label="Terminals">
+ <item label="Rxvt Unicode">
+ <action name="Execute">
+ <command>urxvt</command>
+ </action>
+ </item>
+ <item label="Gnome Terminal">
+ <action name="Execute">
+ <command>gnome-terminal</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Xfce Terminal">
+ <action name="Execute">
+ <command>xfce4-terminal</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Konsole">
+ <action name="Execute">
+ <command>konsole</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Xterm">
+ <action name="Execute"><command>xterm</command></action>
+ </item>
+</menu>
+
+<menu id="apps-net-menu" label="Internet">
+ <item label="Firefox">
+ <action name="Execute">
+ <command>firefox</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>Firefox</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Opera">
+ <action name="Execute">
+ <command>opera</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>Opera</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Konqueror">
+ <action name="Execute">
+ <command>konqueror</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Epiphany">
+ <action name="Execute">
+ <command>epiphany</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Pidgin Instant Messenger">
+ <action name="Execute">
+ <command>pidgin</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Kopete Instant Messenger">
+ <action name="Execute">
+ <command>kopete</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="XChat">
+ <action name="Execute">
+ <command>xchat</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-office-menu" label="Office">
+ <item label="OpenOffice Base">
+ <action name="Execute">
+ <command>ooffice -base</command>
+ </action>
+ </item>
+ <item label="OpenOffice Calc">
+ <action name="Execute">
+ <command>ooffice -calc</command>
+ </action>
+ </item>
+ <item label="OpenOffice Draw">
+ <action name="Execute">
+ <command>ooffice -draw</command>
+ </action>
+ </item>
+ <item label="OpenOffice Impress">
+ <action name="Execute">
+ <command>ooffice -impress</command>
+ </action>
+ </item>
+ <item label="OpenOffice Math">
+ <action name="Execute">
+ <command>ooffice -math</command>
+ </action>
+ </item>
+ <item label="OpenOffice Printer Administration">
+ <action name="Execute">
+ <command>ooffice-printeradmin</command>
+ </action>
+ </item>
+ <item label="OpenOffice Writer">
+ <action name="Execute">
+ <command>ooffice -writer</command>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-multimedia-menu" label="Multimedia">
+ <item label="Amarok">
+ <action name="Execute">
+ <command>amarok</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Rhythmbox">
+ <action name="Execute">
+ <command>rhythmbox</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="K3b">
+ <action name="Execute">
+ <command>k3b</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="MPlayer">
+ <action name="Execute">
+ <command>gmplayer</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>MPlayer</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Totem">
+ <action name="Execute">
+ <command>totem</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-fileman-menu" label="File Managers">
+ <item label="Nautilus">
+ <action name="Execute">
+ <command>nautilus --no-desktop --browser</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Thunar">
+ <action name="Execute">
+ <command>Thunar</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="KDE File Manager">
+ <action name="Execute">
+ <command>kfmclient openURL ~</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Rox">
+ <action name="Execute">
+ <command>rox</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ <wmclass>ROX-Filer</wmclass>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="PCMan File Manager">
+ <action name="Execute">
+ <command>pcmanfm</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="apps-graphics-menu" label="Graphics">
+ <item label="Gimp">
+ <action name="Execute">
+ <command>gimp</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Gwenview">
+ <action name="Execute">
+ <command>gwenview</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Dia Diagram Editor">
+ <action name="Execute">
+ <command>dia</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+ <item label="Inkscape">
+ <action name="Execute">
+ <command>inkscape</command>
+ <startupnotify>
+ <enabled>yes</enabled>
+ </startupnotify>
+ </action>
+ </item>
+</menu>
+
+<menu id="system-menu" label="System">
+ <item label="Openbox Configuration Manager">
+ <action name="Execute">
+ <command>obconf</command>
+ <startupnotify><enabled>yes</enabled></startupnotify>
+ </action>
+ </item>
+ <item label="Gnome Control Center">
+ <action name="Execute">
+ <command>gnome-control-center</command>
+ <startupnotify><enabled>yes</enabled></startupnotify>
+ </action>
+ </item>
+ <item label="KDE Control Center">
+ <action name="Execute">
+ <command>kcontrol</command>
+ <startupnotify><enabled>yes</enabled></startupnotify>
+ </action>
+ </item>
+ <item label="Xfce Settings">
+ <action name="Execute">
+ <command>xfce-setting-show</command>
+ <startupnotify><enabled>yes</enabled></startupnotify>
+ </action>
+ </item>
+ <item label="Manage Cups Printers">
+ <action name="Execute">
+ <command>xdg-open http://localhost:631/</command>
+ <startupnotify>
+ <enabled>no</enabled>
+ <icon>cups</icon>
+ </startupnotify>
+ </action>
+ </item>
+ <separator />
+ <item label="Reconfigure Openbox">
+ <action name="Reconfigure" />
+ </item>
+</menu>
+
+<menu id="root-menu" label="Openbox 3">
+ <separator label="Applications" />
+ <menu id="apps-accessories-menu"/>
+ <menu id="apps-editors-menu"/>
+ <menu id="apps-graphics-menu"/>
+ <menu id="apps-net-menu"/>
+ <menu id="apps-office-menu"/>
+ <menu id="apps-multimedia-menu"/>
+ <menu id="apps-term-menu"/>
+ <menu id="apps-fileman-menu"/>
+ <separator label="System" />
+ <menu id="system-menu"/>
+ <separator />
+ <item label="Log Out">
+ <action name="Exit">
+ <prompt>yes</prompt>
+ </action>
+ </item>
+</menu>
+
+</openbox_menu>
diff --git a/data/menu.xsd b/data/menu.xsd
new file mode 100644
index 0000000..2ff76b7
--- /dev/null
+++ b/data/menu.xsd
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- XML Schema for the Openbox window manager menu file -->
+
+<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN"
+ "http://www.w3.org/2001/XMLSchema.dtd" [
+<!ATTLIST schema xmlns:ob CDATA #IMPLIED>
+<!ENTITY % p "xsd:">
+<!ENTITY % s ":xsd">
+]>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://openbox.org/3.4/menu"
+ xmlns:ob="http://openbox.org/3.4/menu"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
+ <!--
+ root node
+ -->
+ <xsd:element name="openbox_menu">
+ <xsd:complexType mixed="false">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="1">
+ <xsd:element name="menu" type="ob:menu"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <!--
+ complex types
+ -->
+ <!-- menu -->
+ <xsd:complexType name="menu">
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element name="menu" type="ob:menu"/>
+ <xsd:element name="item" type="ob:item"/>
+ <xsd:element name="separator" type="ob:separator"/>
+ </xsd:choice>
+ <xsd:attribute name="label" type="xsd:string" use="optional"/>
+ <xsd:attribute name="execute" type="xsd:string" use="optional"/>
+ <xsd:attribute name="id" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <!-- separator -->
+ <xsd:complexType name="separator">
+ <xsd:attribute name="label" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+
+ <!-- empty -->
+ <xsd:complexType name="empty">
+ <xsd:complexContent>
+ <xsd:restriction base="xsd:anyType"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <!-- item -->
+ <xsd:complexType name="item">
+ <xsd:sequence>
+ <xsd:element name="action">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="execute" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="startupnotify" type="ob:notify"/>
+ <xsd:element minOccurs="0" name="command" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="allDesktops" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="menu" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="delta" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="x" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="y" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="up" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="down" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="desktop">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:integer ob:bool"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="edge" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wrap" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="follow" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="dialog" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="panels" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="here" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="linear" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="group" type="ob:bool"/>
+ </xsd:all>
+ <xsd:attribute name="name" type="ob:actionname" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="label" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <!-- startupnotify -->
+ <xsd:complexType name="startupnotify">
+ <xsd:all>
+ <xsd:element minOccurs="1" name="enabled" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wmclass" type="xsd:string"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:simpleType name="bool">
+ <!-- this is copied to maximization. Keep that in sync. -->
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="yes"/>
+ <xsd:enumeration value="no"/>
+ <xsd:enumeration value="true"/>
+ <xsd:enumeration value="false"/>
+ <xsd:enumeration value="on"/>
+ <xsd:enumeration value="off"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:complexType name="notify">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="enabled" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ </xsd:all>
+ </xsd:complexType>
+ <!--
+ simple types / restrictions
+ -->
+ <xsd:simpleType name="actionname">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[Aa][Cc][Tt][Ii][Vv][Aa][Tt][Ee]"/>
+ <xsd:pattern value="[Bb][Rr][Ee][Aa][Kk][Cc][Hh][Rr][Oo][Oo][Tt]"/>
+ <xsd:pattern value="[Cc][Ll][Oo][Ss][Ee]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ee][Xx][Ee][Cc][Uu][Tt][Ee]"/>
+ <xsd:pattern value="[Ee][Xx][Ii][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Ss][Ss][Ii][Oo][Nn][Ll][Oo][Gg][Oo][Uu][Tt]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ii][Cc][Oo][Nn][Ii][Ff][Yy]"/>
+ <xsd:pattern value="[Kk][Ii][Ll][Ll]"/>
+ <xsd:pattern value="[Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Cc][Ee][Nn][Tt][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Nn][Ee][Xx][Tt][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Rr][Ee][Cc][Oo][Nn][Ff][Ii][Gg][Uu][Rr][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Tt][Aa][Rr][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Nn][Oo][Rr][Mm][Aa][Ll][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Tt][Oo][Pp][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Mm][Ee][Nn][Uu]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Ee][Cc][Oo][Rr][Aa][Tt][Ii][Oo][Nn][Ss]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Oo][Cc][Kk][Aa][Uu][Tt][Oo][Hh][Ii][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ff][Uu][Ll][Ll][Ss][Cc][Rr][Ee][Ee][Nn]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Oo][Mm][Nn][Ii][Pp][Rr][Ee][Ss][Ee][Nn][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Uu][Nn][Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee][Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
diff --git a/data/openbox.desktop b/data/openbox.desktop
new file mode 100644
index 0000000..d49ae22
--- /dev/null
+++ b/data/openbox.desktop
@@ -0,0 +1,16 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=Openbox
+Exec=openbox
+Icon=openbox
+NoDisplay=true
+# name we put on the WM spec check window
+X-GNOME-WMName=Openbox
+# gnome-session autostart
+X-GNOME-Autostart-Phase=WindowManager
+X-GNOME-Provides=windowmanager
+# Ubuntu stuff
+X-Ubuntu-Gettext-Domain=openbox
+# back compat
+X-GNOME-Autostart-Notify=true
diff --git a/data/openbox.png b/data/openbox.png
new file mode 100644
index 0000000..70d1f07
--- /dev/null
+++ b/data/openbox.png
Binary files differ
diff --git a/data/rc.xml b/data/rc.xml
new file mode 100644
index 0000000..209cc2d
--- /dev/null
+++ b/data/rc.xml
@@ -0,0 +1,730 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Do not edit this file, it will be overwritten on install.
+ Copy the file to $HOME/.config/openbox/ instead. -->
+
+<openbox_config xmlns="http://openbox.org/3.4/rc"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
+
+<resistance>
+ <strength>10</strength>
+ <screen_edge_strength>20</screen_edge_strength>
+</resistance>
+
+<focus>
+ <focusNew>yes</focusNew>
+ <!-- always try to focus new windows when they appear. other rules do
+ apply -->
+ <followMouse>no</followMouse>
+ <!-- move focus to a window when you move the mouse into it -->
+ <focusLast>yes</focusLast>
+ <!-- focus the last used window when changing desktops, instead of the one
+ under the mouse pointer. when followMouse is enabled -->
+ <underMouse>no</underMouse>
+ <!-- move focus under the mouse, even when the mouse is not moving -->
+ <focusDelay>200</focusDelay>
+ <!-- when followMouse is enabled, the mouse must be inside the window for
+ this many milliseconds (1000 = 1 sec) before moving focus to it -->
+ <raiseOnFocus>no</raiseOnFocus>
+ <!-- when followMouse is enabled, and a window is given focus by moving the
+ mouse into it, also raise the window -->
+</focus>
+
+<placement>
+ <policy>Smart</policy>
+ <!-- 'Smart' or 'UnderMouse' -->
+ <center>yes</center>
+ <!-- whether to place windows in the center of the free area found or
+ the top left corner -->
+ <monitor>Primary</monitor>
+ <!-- with Smart placement on a multi-monitor system, try to place new windows
+ on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
+ the active window is, 'Primary' - only on the primary monitor -->
+ <primaryMonitor>1</primaryMonitor>
+ <!-- The monitor where Openbox should place popup dialogs such as the
+ focus cycling popup, or the desktop switch popup. It can be an index
+ from 1, specifying a particular monitor. Or it can be one of the
+ following: 'Mouse' - where the mouse is, or
+ 'Active' - where the active window is -->
+</placement>
+
+<theme>
+ <name>Clearlooks</name>
+ <titleLayout>NLIMC</titleLayout>
+ <!--
+ available characters are NDSLIMC, each can occur at most once.
+ N: window icon
+ L: window label (AKA title).
+ I: iconify
+ M: maximize
+ C: close
+ S: shade (roll up/down)
+ D: omnipresent (on all desktops).
+ -->
+ <keepBorder>yes</keepBorder>
+ <animateIconify>yes</animateIconify>
+ <font place="ActiveWindow">
+ <name>sans</name>
+ <size>8</size>
+ <!-- font size in points -->
+ <weight>bold</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+ <font place="InactiveWindow">
+ <name>sans</name>
+ <size>8</size>
+ <!-- font size in points -->
+ <weight>bold</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+ <font place="MenuHeader">
+ <name>sans</name>
+ <size>9</size>
+ <!-- font size in points -->
+ <weight>normal</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+ <font place="MenuItem">
+ <name>sans</name>
+ <size>9</size>
+ <!-- font size in points -->
+ <weight>normal</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+ <font place="ActiveOnScreenDisplay">
+ <name>sans</name>
+ <size>9</size>
+ <!-- font size in points -->
+ <weight>bold</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+ <font place="InactiveOnScreenDisplay">
+ <name>sans</name>
+ <size>9</size>
+ <!-- font size in points -->
+ <weight>bold</weight>
+ <!-- 'bold' or 'normal' -->
+ <slant>normal</slant>
+ <!-- 'italic' or 'normal' -->
+ </font>
+</theme>
+
+<desktops>
+ <!-- this stuff is only used at startup, pagers allow you to change them
+ during a session
+
+ these are default values to use when other ones are not already set
+ by other applications, or saved in your session
+
+ use obconf if you want to change these without having to log out
+ and back in -->
+ <number>4</number>
+ <firstdesk>1</firstdesk>
+ <names>
+ <!-- set names up here if you want to, like this:
+ <name>desktop 1</name>
+ <name>desktop 2</name>
+ -->
+ </names>
+ <popupTime>875</popupTime>
+ <!-- The number of milliseconds to show the popup for when switching
+ desktops. Set this to 0 to disable the popup. -->
+</desktops>
+
+<resize>
+ <drawContents>yes</drawContents>
+ <popupShow>Nonpixel</popupShow>
+ <!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
+ <popupPosition>Center</popupPosition>
+ <!-- 'Center', 'Top', or 'Fixed' -->
+ <popupFixedPosition>
+ <!-- these are used if popupPosition is set to 'Fixed' -->
+
+ <x>10</x>
+ <!-- positive number for distance from left edge, negative number for
+ distance from right edge, or 'Center' -->
+ <y>10</y>
+ <!-- positive number for distance from top edge, negative number for
+ distance from bottom edge, or 'Center' -->
+ </popupFixedPosition>
+</resize>
+
+<!-- You can reserve a portion of your screen where windows will not cover when
+ they are maximized, or when they are initially placed.
+ Many programs reserve space automatically, but you can use this in other
+ cases. -->
+<margins>
+ <top>0</top>
+ <bottom>0</bottom>
+ <left>0</left>
+ <right>0</right>
+</margins>
+
+<dock>
+ <position>TopLeft</position>
+ <!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
+ <floatingX>0</floatingX>
+ <floatingY>0</floatingY>
+ <noStrut>no</noStrut>
+ <stacking>Above</stacking>
+ <!-- 'Above', 'Normal', or 'Below' -->
+ <direction>Vertical</direction>
+ <!-- 'Vertical' or 'Horizontal' -->
+ <autoHide>no</autoHide>
+ <hideDelay>300</hideDelay>
+ <!-- in milliseconds (1000 = 1 second) -->
+ <showDelay>300</showDelay>
+ <!-- in milliseconds (1000 = 1 second) -->
+ <moveButton>Middle</moveButton>
+ <!-- 'Left', 'Middle', 'Right' -->
+</dock>
+
+<keyboard>
+ <chainQuitKey>C-g</chainQuitKey>
+
+ <!-- Keybindings for desktop switching -->
+ <keybind key="C-A-Left">
+ <action name="GoToDesktop"><to>left</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="C-A-Right">
+ <action name="GoToDesktop"><to>right</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="C-A-Up">
+ <action name="GoToDesktop"><to>up</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="C-A-Down">
+ <action name="GoToDesktop"><to>down</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="S-A-Left">
+ <action name="SendToDesktop"><to>left</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="S-A-Right">
+ <action name="SendToDesktop"><to>right</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="S-A-Up">
+ <action name="SendToDesktop"><to>up</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="S-A-Down">
+ <action name="SendToDesktop"><to>down</to><wrap>no</wrap></action>
+ </keybind>
+ <keybind key="W-F1">
+ <action name="GoToDesktop"><to>1</to></action>
+ </keybind>
+ <keybind key="W-F2">
+ <action name="GoToDesktop"><to>2</to></action>
+ </keybind>
+ <keybind key="W-F3">
+ <action name="GoToDesktop"><to>3</to></action>
+ </keybind>
+ <keybind key="W-F4">
+ <action name="GoToDesktop"><to>4</to></action>
+ </keybind>
+ <keybind key="W-d">
+ <action name="ToggleShowDesktop"/>
+ </keybind>
+
+ <!-- Keybindings for windows -->
+ <keybind key="A-F4">
+ <action name="Close"/>
+ </keybind>
+ <keybind key="A-Escape">
+ <action name="Lower"/>
+ <action name="FocusToBottom"/>
+ <action name="Unfocus"/>
+ </keybind>
+ <keybind key="A-space">
+ <action name="ShowMenu"><menu>client-menu</menu></action>
+ </keybind>
+
+ <!-- Keybindings for window switching -->
+ <keybind key="A-Tab">
+ <action name="NextWindow">
+ <finalactions>
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </finalactions>
+ </action>
+ </keybind>
+ <keybind key="A-S-Tab">
+ <action name="PreviousWindow">
+ <finalactions>
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </finalactions>
+ </action>
+ </keybind>
+ <keybind key="C-A-Tab">
+ <action name="NextWindow">
+ <panels>yes</panels><desktop>yes</desktop>
+ <finalactions>
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </finalactions>
+ </action>
+ </keybind>
+
+ <!-- Keybindings for window switching with the arrow keys -->
+ <keybind key="W-S-Right">
+ <action name="DirectionalCycleWindows">
+ <direction>right</direction>
+ </action>
+ </keybind>
+ <keybind key="W-S-Left">
+ <action name="DirectionalCycleWindows">
+ <direction>left</direction>
+ </action>
+ </keybind>
+ <keybind key="W-S-Up">
+ <action name="DirectionalCycleWindows">
+ <direction>up</direction>
+ </action>
+ </keybind>
+ <keybind key="W-S-Down">
+ <action name="DirectionalCycleWindows">
+ <direction>down</direction>
+ </action>
+ </keybind>
+
+ <!-- Keybindings for running applications -->
+ <keybind key="W-e">
+ <action name="Execute">
+ <startupnotify>
+ <enabled>true</enabled>
+ <name>Konqueror</name>
+ </startupnotify>
+ <command>kfmclient openProfile filemanagement</command>
+ </action>
+ </keybind>
+</keyboard>
+
+<mouse>
+ <dragThreshold>1</dragThreshold>
+ <!-- number of pixels the mouse must move before a drag begins -->
+ <doubleClickTime>500</doubleClickTime>
+ <!-- in milliseconds (1000 = 1 second) -->
+ <screenEdgeWarpTime>400</screenEdgeWarpTime>
+ <!-- Time before changing desktops when the pointer touches the edge of the
+ screen while moving a window, in milliseconds (1000 = 1 second).
+ Set this to 0 to disable warping -->
+ <screenEdgeWarpMouse>false</screenEdgeWarpMouse>
+ <!-- Set this to TRUE to move the mouse pointer across the desktop when
+ switching due to hitting the edge of the screen -->
+
+ <context name="Frame">
+ <mousebind button="A-Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="A-Left" action="Click">
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="A-Left" action="Drag">
+ <action name="Move"/>
+ </mousebind>
+
+ <mousebind button="A-Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="A-Right" action="Drag">
+ <action name="Resize"/>
+ </mousebind>
+
+ <mousebind button="A-Middle" action="Press">
+ <action name="Lower"/>
+ <action name="FocusToBottom"/>
+ <action name="Unfocus"/>
+ </mousebind>
+
+ <mousebind button="A-Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="A-Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+ <mousebind button="C-A-Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="C-A-Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+ <mousebind button="A-S-Up" action="Click">
+ <action name="SendToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="A-S-Down" action="Click">
+ <action name="SendToDesktop"><to>next</to></action>
+ </mousebind>
+ </context>
+
+ <context name="Titlebar">
+ <mousebind button="Left" action="Drag">
+ <action name="Move"/>
+ </mousebind>
+ <mousebind button="Left" action="DoubleClick">
+ <action name="ToggleMaximize"/>
+ </mousebind>
+
+ <mousebind button="Up" action="Click">
+ <action name="if">
+ <shaded>no</shaded>
+ <then>
+ <action name="Shade"/>
+ <action name="FocusToBottom"/>
+ <action name="Unfocus"/>
+ <action name="Lower"/>
+ </then>
+ </action>
+ </mousebind>
+ <mousebind button="Down" action="Click">
+ <action name="if">
+ <shaded>yes</shaded>
+ <then>
+ <action name="Unshade"/>
+ <action name="Raise"/>
+ </then>
+ </action>
+ </mousebind>
+ </context>
+
+ <context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+
+ <mousebind button="Middle" action="Press">
+ <action name="Lower"/>
+ <action name="FocusToBottom"/>
+ <action name="Unfocus"/>
+ </mousebind>
+
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="ShowMenu"><menu>client-menu</menu></action>
+ </mousebind>
+ </context>
+
+ <context name="Top">
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>top</edge></action>
+ </mousebind>
+ </context>
+
+ <context name="Left">
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>left</edge></action>
+ </mousebind>
+ </context>
+
+ <context name="Right">
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>right</edge></action>
+ </mousebind>
+ </context>
+
+ <context name="Bottom">
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>bottom</edge></action>
+ </mousebind>
+
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="ShowMenu"><menu>client-menu</menu></action>
+ </mousebind>
+ </context>
+
+ <context name="TRCorner BRCorner TLCorner BLCorner">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"/>
+ </mousebind>
+ </context>
+
+ <context name="Client">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="Middle" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ </context>
+
+ <context name="Icon">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ <action name="ShowMenu"><menu>client-menu</menu></action>
+ </mousebind>
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="ShowMenu"><menu>client-menu</menu></action>
+ </mousebind>
+ </context>
+
+ <context name="AllDesktops">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Left" action="Click">
+ <action name="ToggleOmnipresent"/>
+ </mousebind>
+ </context>
+
+ <context name="Shade">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="Left" action="Click">
+ <action name="ToggleShade"/>
+ </mousebind>
+ </context>
+
+ <context name="Iconify">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="Left" action="Click">
+ <action name="Iconify"/>
+ </mousebind>
+ </context>
+
+ <context name="Maximize">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Middle" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Left" action="Click">
+ <action name="ToggleMaximize"/>
+ </mousebind>
+ <mousebind button="Middle" action="Click">
+ <action name="ToggleMaximize"><direction>vertical</direction></action>
+ </mousebind>
+ <mousebind button="Right" action="Click">
+ <action name="ToggleMaximize"><direction>horizontal</direction></action>
+ </mousebind>
+ </context>
+
+ <context name="Close">
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ <action name="Unshade"/>
+ </mousebind>
+ <mousebind button="Left" action="Click">
+ <action name="Close"/>
+ </mousebind>
+ </context>
+
+ <context name="Desktop">
+ <mousebind button="Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+
+ <mousebind button="A-Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="A-Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+ <mousebind button="C-A-Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="C-A-Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+
+ <mousebind button="Left" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ <mousebind button="Right" action="Press">
+ <action name="Focus"/>
+ <action name="Raise"/>
+ </mousebind>
+ </context>
+
+ <context name="Root">
+ <!-- Menus -->
+ <mousebind button="Middle" action="Press">
+ <action name="ShowMenu"><menu>client-list-combined-menu</menu></action>
+ </mousebind>
+ <mousebind button="Right" action="Press">
+ <action name="ShowMenu"><menu>root-menu</menu></action>
+ </mousebind>
+ </context>
+
+ <context name="MoveResize">
+ <mousebind button="Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+ <mousebind button="A-Up" action="Click">
+ <action name="GoToDesktop"><to>previous</to></action>
+ </mousebind>
+ <mousebind button="A-Down" action="Click">
+ <action name="GoToDesktop"><to>next</to></action>
+ </mousebind>
+ </context>
+</mouse>
+
+<menu>
+ <!-- You can specify more than one menu file in here and they are all loaded,
+ just don't make menu ids clash or, well, it'll be kind of pointless -->
+
+ <!-- default menu file (or custom one in $HOME/.config/openbox/) -->
+ <file>menu.xml</file>
+ <hideDelay>200</hideDelay>
+ <!-- if a press-release lasts longer than this setting (in milliseconds), the
+ menu is hidden again -->
+ <middle>no</middle>
+ <!-- center submenus vertically about the parent entry -->
+ <submenuShowDelay>100</submenuShowDelay>
+ <!-- time to delay before showing a submenu after hovering over the parent
+ entry.
+ if this is a negative value, then the delay is infinite and the
+ submenu will not be shown until it is clicked on -->
+ <submenuHideDelay>400</submenuHideDelay>
+ <!-- time to delay before hiding a submenu when selecting another
+ entry in parent menu -->
+ if this is a negative value, then the delay is infinite and the
+ submenu will not be hidden until a different submenu is opened -->
+ <applicationIcons>yes</applicationIcons>
+ <!-- controls if icons appear in the client-list-(combined-)menu -->
+ <manageDesktops>yes</manageDesktops>
+ <!-- show the manage desktops section in the client-list-(combined-)menu -->
+</menu>
+
+<applications>
+<!--
+ # this is an example with comments through out. use these to make your
+ # own rules, but without the comments of course.
+ # you may use one or more of the name/class/role/title/type rules to specify
+ # windows to match
+
+ <application name="the window's _OB_APP_NAME property (see obxprop)"
+ class="the window's _OB_APP_CLASS property (see obxprop)"
+ role="the window's _OB_APP_ROLE property (see obxprop)"
+ title="the window's _OB_APP_TITLE property (see obxprop)"
+ type="the window's _OB_APP_TYPE property (see obxprob)..
+ (if unspecified, then it is 'dialog' for child windows)">
+ # you may set only one of name/class/role/title/type, or you may use more
+ # than one together to restrict your matches.
+
+ # the name, class, role, and title use simple wildcard matching such as those
+ # used by a shell. you can use * to match any characters and ? to match
+ # any single character.
+
+ # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
+ # or desktop
+
+ # when multiple rules match a window, they will all be applied, in the
+ # order that they appear in this list
+
+
+ # each rule element can be left out or set to 'default' to specify to not
+ # change that attribute of the window
+
+ <decor>yes</decor>
+ # enable or disable window decorations
+
+ <shade>no</shade>
+ # make the window shaded when it appears, or not
+
+ <position force="no">
+ # the position is only used if both an x and y coordinate are provided
+ # (and not set to 'default')
+ # when force is "yes", then the window will be placed here even if it
+ # says you want it placed elsewhere. this is to override buggy
+ # applications who refuse to behave
+ <x>center</x>
+ # a number like 50, or 'center' to center on screen. use a negative number
+ # to start from the right (or bottom for <y>), ie -50 is 50 pixels from the
+ # right edge (or bottom).
+ <y>200</y>
+ <monitor>1</monitor>
+ # specifies the monitor in a xinerama setup.
+ # 1 is the first head, or 'mouse' for wherever the mouse is
+ </position>
+
+ <focus>yes</focus>
+ # if the window should try be given focus when it appears. if this is set
+ # to yes it doesn't guarantee the window will be given focus. some
+ # restrictions may apply, but Openbox will try to
+
+ <desktop>1</desktop>
+ # 1 is the first desktop, 'all' for all desktops
+
+ <layer>normal</layer>
+ # 'above', 'normal', or 'below'
+
+ <iconic>no</iconic>
+ # make the window iconified when it appears, or not
+
+ <skip_pager>no</skip_pager>
+ # asks to not be shown in pagers
+
+ <skip_taskbar>no</skip_taskbar>
+ # asks to not be shown in taskbars. window cycling actions will also
+ # skip past such windows
+
+ <fullscreen>yes</fullscreen>
+ # make the window in fullscreen mode when it appears
+
+ <maximized>true</maximized>
+ # 'Horizontal', 'Vertical' or boolean (yes/no)
+ </application>
+
+ # end of the example
+-->
+</applications>
+
+</openbox_config>
diff --git a/data/rc.xsd b/data/rc.xsd
new file mode 100644
index 0000000..ad96994
--- /dev/null
+++ b/data/rc.xsd
@@ -0,0 +1,551 @@
+<?xml version="1.0" encoding="UTF-8"?> <!-- -*- nxml -*- -->
+
+<!-- XML Schema for the Openbox window manager configuration file -->
+
+<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN"
+ "http://www.w3.org/2001/XMLSchema.dtd" [
+<!ATTLIST schema xmlns:ob CDATA #IMPLIED>
+<!ENTITY % p "xsd:">
+<!ENTITY % s ":xsd">
+]>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://openbox.org/4.0/rc"
+ xmlns:ob="http://openbox.org/4.0/rc"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
+ <!--
+ root node
+ -->
+ <xsd:element name="openbox_config">
+ <xsd:annotation>
+ <xsd:documentation>all these elements are expected in a openbox config file</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element name="resistance" type="ob:resistance"/>
+ <xsd:element name="focus" type="ob:focus"/>
+ <xsd:element name="placement" type="ob:placement"/>
+ <xsd:element name="theme" type="ob:theme"/>
+ <xsd:element name="desktops" type="ob:desktops"/>
+ <xsd:element name="resize" type="ob:resize"/>
+ <xsd:element minOccurs="0" name="margins" type="ob:margins"/>
+ <xsd:element name="dock" type="ob:dock"/>
+ <xsd:element name="keyboard" type="ob:keyboard"/>
+ <xsd:element name="mouse" type="ob:mouse"/>
+ <xsd:element name="menu" type="ob:menu"/>
+ <xsd:element name="applications" type="ob:applications"/>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+ <!--
+ complex types
+ -->
+ <xsd:complexType name="resistance">
+ <xsd:annotation>
+ <xsd:documentation>defines behaviour of windows when close to each other or the screen edge</xsd:documentation>
+ </xsd:annotation>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="strength" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="screen_edge_strength" type="xsd:integer"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="focus">
+ <xsd:annotation>
+ <xsd:documentation>defines aspects of window focus</xsd:documentation>
+ </xsd:annotation>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="focusNew" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="focusLast" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="followMouse" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="underMouse" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="focusDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="raiseOnFocus" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="unfocusOnLeave" type="ob:bool"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="placement">
+ <xsd:annotation>
+ <xsd:documentation>defines how new windows are placed</xsd:documentation>
+ </xsd:annotation>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="policy" type="ob:placementpolicy"/>
+ <xsd:element minOccurs="0" name="center" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="monitor" type="ob:placementmonitor"/>
+ <xsd:element minOccurs="0" name="monitor" type="ob:primarymonitor"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="margins">
+ <xsd:annotation>
+ <xsd:documentation>defines desktop margins</xsd:documentation>
+ </xsd:annotation>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="top" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="bottom" type="xsd:integer"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="theme">
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="titleLayout" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="keepBorder" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="animateIconify" type="ob:bool"/>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="font" type="ob:font"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="font">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="size" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="weight" type="ob:fontweight"/>
+ <xsd:element minOccurs="0" name="slant" type="ob:fontslant"/>
+ </xsd:all>
+ <xsd:attribute name="place" type="ob:fontplace" use="required"/>
+ </xsd:complexType>
+ <xsd:complexType name="desktops">
+ <xsd:annotation>
+ <xsd:documentation>defines the number and names of desktops</xsd:documentation>
+ </xsd:annotation>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="number" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="firstdesk" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="names">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="popupTime" type="xsd:integer"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="resize">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="drawContents" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="popupShow" type="ob:popupshow"/>
+ <xsd:element minOccurs="0" name="popupPosition" type="ob:popupposition"/>
+ <xsd:element minOccurs="0" name="popupFixedPosition" type="ob:popupfixedposition"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="popupfixedposition">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="x" type="ob:center_or_int"/>
+ <xsd:element minOccurs="0" name="y" type="ob:center_or_int"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="dock">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="position" type="ob:dock_position"/>
+ <xsd:element minOccurs="0" name="floatingX" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="floatingY" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="noStrut" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="stacking" type="ob:layer"/>
+ <xsd:element minOccurs="0" name="direction" type="ob:direction"/>
+ <xsd:element minOccurs="0" name="autoHide" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="showDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="moveButton" type="ob:button"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:complexType name="action">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="execute" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="startupnotify" type="ob:notify"/>
+ <xsd:element minOccurs="0" name="command" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="allDesktops" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="menu" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="delta" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="x" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="y" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="up" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="down" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="desktop">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:integer ob:bool"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="edge" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wrap" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="follow" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="dialog" type="ob:dialogtype"/>
+ <xsd:element minOccurs="0" name="panels" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="here" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="linear" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="group" type="ob:bool"/>
+ </xsd:all>
+ <xsd:attribute name="name" type="ob:actionname" use="required"/>
+ </xsd:complexType>
+ <xsd:complexType name="keybind">
+ <xsd:choice>
+ <xsd:element maxOccurs="unbounded" name="action" type="ob:action"/>
+ <xsd:element maxOccurs="unbounded" name="keybind" type="ob:keybind"/>
+ </xsd:choice>
+ <xsd:attribute name="chroot" type="ob:bool"/>
+ <xsd:attribute name="key" type="ob:keyname" use="required"/>
+ </xsd:complexType>
+ <xsd:complexType name="keyboard">
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="chainQuitKey" type="ob:keyname"/>
+ <xsd:element maxOccurs="unbounded" name="keybind" type="ob:keybind"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="mousebind">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="action" type="ob:action"/>
+ </xsd:sequence>
+ <xsd:attribute name="action" type="ob:mouseaction" use="required"/>
+ <xsd:attribute name="button" type="ob:button" use="required"/>
+ </xsd:complexType>
+ <xsd:complexType name="context">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="mousebind" type="ob:mousebind"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="ob:contextname" use="required"/>
+ </xsd:complexType>
+ <xsd:complexType name="mouse">
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="dragThreshold" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="doubleClickTime" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="screenEdgeWarpTime" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="screenEdgeWarpMouse" type="ob:bool"/>
+ <xsd:element maxOccurs="unbounded" name="context" type="ob:context"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="menu">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="file" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="middle" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="submenuShowDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="showIcons" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="manageDesktops" type="ob:bool"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="window_position">
+ <xsd:all>
+ <xsd:element name="x" type="ob:center_or_int"/>
+ <xsd:element name="y" type="ob:center_or_int"/>
+ <xsd:element minOccurs="0" name="monitor" type="ob:mouse_or_int"/>
+ <xsd:element minOccurs="0" name="head" type="xsd:string"/>
+ </xsd:all>
+ <xsd:attribute name="force" type="ob:bool"/>
+ </xsd:complexType>
+ <xsd:complexType name="application">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="decor" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="shade" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="position" type="ob:window_position"/>
+ <xsd:element minOccurs="0" name="focus" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="desktop" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="layer" type="ob:layer"/>
+ <xsd:element minOccurs="0" name="iconic" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="skip_pager" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="skip_taskbar" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="fullscreen" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="maximized" type="ob:maximization"/>
+ </xsd:all>
+ <!-- at least one of these must be present -->
+ <xsd:attribute name="role" type="xsd:string"/>
+ <xsd:attribute name="title" type="xsd:string"/>
+ <xsd:attribute name="type" type="ob:clienttype"/>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="class" type="xsd:string"/>
+ </xsd:complexType>
+ <xsd:complexType name="applications">
+ <xsd:sequence>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="application" type="ob:application"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="notify">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="enabled" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ </xsd:all>
+ </xsd:complexType>
+ <!--
+ simple types / restrictions
+ -->
+ <xsd:simpleType name="actionname">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[Ii][Ff]"/>
+ <xsd:pattern value="[Aa][Cc][Tt][Ii][Vv][Aa][Tt][Ee]"/>
+ <xsd:pattern value="[Bb][Rr][Ee][Aa][Kk][Cc][Hh][Rr][Oo][Oo][Tt]"/>
+ <xsd:pattern value="[Cc][Ll][Oo][Ss][Ee]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ee][Xx][Ee][Cc][Uu][Tt][Ee]"/>
+ <xsd:pattern value="[Ee][Xx][Ii][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Ss][Ss][Ii][Oo][Nn][Ll][Oo][Gg][Oo][Uu][Tt]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ii][Cc][Oo][Nn][Ii][Ff][Yy]"/>
+ <xsd:pattern value="[Kk][Ii][Ll][Ll]"/>
+ <xsd:pattern value="[Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Cc][Ee][Nn][Tt][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Nn][Ee][Xx][Tt][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Rr][Ee][Cc][Oo][Nn][Ff][Ii][Gg][Uu][Rr][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Tt][Aa][Rr][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Nn][Oo][Rr][Mm][Aa][Ll][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Tt][Oo][Pp][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Mm][Ee][Nn][Uu]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Ee][Cc][Oo][Rr][Aa][Tt][Ii][Oo][Nn][Ss]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Oo][Cc][Kk][Aa][Uu][Tt][Oo][Hh][Ii][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ff][Uu][Ll][Ll][Ss][Cc][Rr][Ee][Ee][Nn]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Oo][Mm][Nn][Ii][Pp][Rr][Ee][Ss][Ee][Nn][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Uu][Nn][Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee][Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="clienttype">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="desktop"/>
+ <xsd:enumeration value="dock"/>
+ <xsd:enumeration value="toolbar"/>
+ <xsd:enumeration value="menu"/>
+ <xsd:enumeration value="splash"/>
+ <xsd:enumeration value="utility"/>
+ <xsd:enumeration value="dialog"/>
+ <xsd:enumeration value="normal"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="bool">
+ <!-- this is copied to maximization. Keep that in sync. -->
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="yes"/>
+ <xsd:enumeration value="no"/>
+ <xsd:enumeration value="true"/>
+ <xsd:enumeration value="false"/>
+ <xsd:enumeration value="on"/>
+ <xsd:enumeration value="off"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="fontplace">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ActiveWindow"/>
+ <xsd:enumeration value="InactiveWindow"/>
+ <xsd:enumeration value="MenuHeader"/>
+ <xsd:enumeration value="MenuItem"/>
+ <xsd:enumeration value="OnScreenDisplay"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="fontweight">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="normal"/>
+ <xsd:enumeration value="bold"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="fontslant">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="normal"/>
+ <xsd:enumeration value="italic"/>
+ <xsd:enumeration value="opaque"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="button">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="(([ACMSW]|Mod[1-5])-){,5}(Left|Middle|Right|Up|Down|Button[0-9]+)"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="center_or_int">
+ <xsd:restriction base="xsd:string">
+ <!-- ob: atoi($_) unless $_ eq 'center'; -->
+ <!-- I think the regexp DTRT WRT atoi. -->
+ <xsd:pattern value="center|-?(0|[1-9][0-9]*)"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="mouse_or_int">
+ <xsd:restriction base="xsd:string">
+ <!-- ob: atoi($_) unless $_ eq 'center'; -->
+ <!-- I think the regexp DTRT WRT atoi. -->
+ <xsd:pattern value="mouse|0|[1-9][0-9]*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="contextname">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Desktop"/>
+ <xsd:enumeration value="Root"/>
+ <xsd:enumeration value="Client"/>
+ <xsd:enumeration value="Titlebar"/>
+ <xsd:enumeration value="Frame"/>
+ <xsd:enumeration value="TLCorner"/>
+ <xsd:enumeration value="TRCorner"/>
+ <xsd:enumeration value="BLCorner"/>
+ <xsd:enumeration value="BRCorner"/>
+ <xsd:enumeration value="Top"/>
+ <xsd:enumeration value="Left"/>
+ <xsd:enumeration value="Right"/>
+ <xsd:enumeration value="Bottom"/>
+ <xsd:enumeration value="Maximize"/>
+ <xsd:enumeration value="AllDesktops"/>
+ <xsd:enumeration value="Shade"/>
+ <xsd:enumeration value="Iconify"/>
+ <xsd:enumeration value="Icon"/>
+ <xsd:enumeration value="Close"/>
+ <xsd:enumeration value="MoveResize"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="direction">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Horizontal"/>
+ <xsd:enumeration value="Vertical"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="dock_position">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="TopLeft"/>
+ <xsd:enumeration value="Top"/>
+ <xsd:enumeration value="TopRight"/>
+ <xsd:enumeration value="Right"/>
+ <xsd:enumeration value="BottomRight"/>
+ <xsd:enumeration value="Bottom"/>
+ <xsd:enumeration value="BottomLeft"/>
+ <xsd:enumeration value="Left"/>
+ <xsd:enumeration value="Floating"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="keyname">
+ <xsd:restriction base="xsd:string">
+ <!-- FIXME: M, Mod2, Mod5 in addition to S, A, C -->
+ <!-- how do we do all substrings and permutations? -->
+ <xsd:pattern value="(([ACMSW]|Mod[1-5])-){,5}[a-zA-Z0-9]*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="layer">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[Aa][Bb][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Nn][Oo][Rr][Mm][Aa][Ll]"/>
+ <xsd:pattern value="[Bb][Ee][Ll][Oo][Ww]"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="maximization">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Horizontal"/>
+ <xsd:enumeration value="Vertical"/>
+ <!-- this is a copy of ob:bool. Keep it in sync. -->
+ <xsd:enumeration value="yes"/>
+ <xsd:enumeration value="no"/>
+ <xsd:enumeration value="true"/>
+ <xsd:enumeration value="false"/>
+ <xsd:enumeration value="on"/>
+ <xsd:enumeration value="off"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="mouseaction">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Click"/>
+ <xsd:enumeration value="DoubleClick"/>
+ <xsd:enumeration value="Drag"/>
+ <xsd:enumeration value="Press"/>
+ <xsd:enumeration value="Release"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="placementpolicy">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Smart"/>
+ <xsd:enumeration value="UnderMouse"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="placementmonitor">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Any"/>
+ <xsd:enumeration value="Mouse"/>
+ <xsd:enumeration value="Active"/>
+ <xsd:enumeration value="Primary"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="primarymonitor">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Mouse"/>
+ <xsd:enumeration value="Active"/>
+ <xsd:enumeration value="[0-9][0-9][0-9][0-9][0-9]"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="popupposition">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Top"/>
+ <xsd:enumeration value="Center"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="popupshow">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Always"/>
+ <xsd:enumeration value="Never"/>
+ <xsd:enumeration value="Nonpixel"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="dialogtype">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="Icons"/>
+ <xsd:enumeration value="List"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
diff --git a/data/xbm/bullet.xbm b/data/xbm/bullet.xbm
new file mode 100644
index 0000000..88481ec
--- /dev/null
+++ b/data/xbm/bullet.xbm
@@ -0,0 +1,4 @@
+#define bullet_width 4
+#define bullet_height 7
+static unsigned char bullet_bits[] = {
+ 0x01, 0x03, 0x07, 0x0f, 0x07, 0x03, 0x01 };
diff --git a/data/xbm/close.xbm b/data/xbm/close.xbm
new file mode 100644
index 0000000..4a88cff
--- /dev/null
+++ b/data/xbm/close.xbm
@@ -0,0 +1,4 @@
+#define close_width 6
+#define close_height 6
+static unsigned char close_bits[] = {
+ 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 };
diff --git a/data/xbm/desk.xbm b/data/xbm/desk.xbm
new file mode 100644
index 0000000..3e327e3
--- /dev/null
+++ b/data/xbm/desk.xbm
@@ -0,0 +1,4 @@
+#define desk_width 6
+#define desk_height 6
+static unsigned char desk_bits[] = {
+ 0x33, 0x33, 0x00, 0x00, 0x33, 0x33 };
diff --git a/data/xbm/desk_toggled.xbm b/data/xbm/desk_toggled.xbm
new file mode 100644
index 0000000..d7e045e
--- /dev/null
+++ b/data/xbm/desk_toggled.xbm
@@ -0,0 +1,4 @@
+#define desk_toggle_width 6
+#define desk_toggle_height 6
+static unsigned char desk_toggle_bits[] = {
+ 0x00, 0x1e, 0x1a, 0x16, 0x1e, 0x00 };
diff --git a/data/xbm/iconify.xbm b/data/xbm/iconify.xbm
new file mode 100644
index 0000000..2304866
--- /dev/null
+++ b/data/xbm/iconify.xbm
@@ -0,0 +1,4 @@
+#define iconify_width 6
+#define iconify_height 6
+static unsigned char iconify_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f };
diff --git a/data/xbm/max.xbm b/data/xbm/max.xbm
new file mode 100644
index 0000000..6d030af
--- /dev/null
+++ b/data/xbm/max.xbm
@@ -0,0 +1,4 @@
+#define max_width 6
+#define max_height 6
+static unsigned char max_bits[] = {
+ 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
diff --git a/data/xbm/max_toggled.xbm b/data/xbm/max_toggled.xbm
new file mode 100644
index 0000000..44c7cef
--- /dev/null
+++ b/data/xbm/max_toggled.xbm
@@ -0,0 +1,4 @@
+#define max_width 6
+#define max_height 6
+static unsigned char max_bits[] = {
+ 0x3e, 0x22, 0x2f, 0x29, 0x39, 0x0f };
diff --git a/data/xbm/shade.xbm b/data/xbm/shade.xbm
new file mode 100644
index 0000000..edb3b17
--- /dev/null
+++ b/data/xbm/shade.xbm
@@ -0,0 +1,4 @@
+#define iconify_width 6
+#define iconify_height 6
+static unsigned char iconify_bits[] = {
+ 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };
diff --git a/data/xbm/shade_toggled.xbm b/data/xbm/shade_toggled.xbm
new file mode 100644
index 0000000..edb3b17
--- /dev/null
+++ b/data/xbm/shade_toggled.xbm
@@ -0,0 +1,4 @@
+#define iconify_width 6
+#define iconify_height 6
+static unsigned char iconify_bits[] = {
+ 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };
diff --git a/data/xsession/Makefile b/data/xsession/Makefile
new file mode 100644
index 0000000..b90edac
--- /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-session.in b/data/xsession/openbox-gnome-session.in
new file mode 100644
index 0000000..f31c9ad
--- /dev/null
+++ b/data/xsession/openbox-gnome-session.in
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+if test -n "$1"; then
+ echo "Syntax: openbox-gnome-session"
+ echo
+ echo "See the openbox-gnome-session(1) manpage for help."
+ exit
+fi
+
+# Clean up after GDM
+xprop -root -remove _NET_NUMBER_OF_DESKTOPS \
+ -remove _NET_DESKTOP_NAMES \
+ -remove _NET_CURRENT_DESKTOP 2> /dev/null
+
+VER=$(gnome-session --version 2>/dev/null | \
+ sed -e 's/[^0-9.]*\([0-9.]\+\)/\1/')
+
+MAJOR=$(echo $VER | cut -d . -f 1)
+MINOR=$(echo $VER | cut -d . -f 2)
+
+# run GNOME with Openbox as its window manager
+
+if test $MAJOR -lt 2 || (test $MAJOR = 2 && test $MINOR -le 22); then
+ # older gnome-session was easy to work with
+ export WINDOW_MANAGER="@bindir@/openbox"
+ exec gnome-session --choose-session=openbox-session "$@"
+elif test $MAJOR -lt 3; then
+ # old 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 ! 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 test 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 "$@"
+else
+ # new gnome-session requires session file installed in
+ # /usr/share/gnome-session/sessions as well as openbox.desktop to be
+ # installed in the applications directory
+
+ exec gnome-session --session=openbox-gnome
+fi
+
+
+
diff --git a/data/xsession/openbox-gnome.desktop.in b/data/xsession/openbox-gnome.desktop.in
new file mode 100644
index 0000000..19ae82e
--- /dev/null
+++ b/data/xsession/openbox-gnome.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=GNOME/Openbox
+Comment=Use the Openbox window manager inside of the GNOME desktop environment
+Exec=@bindir@/openbox-gnome-session
+TryExec=gnome-session
+Icon=openbox.png
+Type=XSession
diff --git a/data/xsession/openbox-kde-session.in b/data/xsession/openbox-kde-session.in
new file mode 100644
index 0000000..3572279
--- /dev/null
+++ b/data/xsession/openbox-kde-session.in
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+if test -n "$1"; then
+ echo "Syntax: openbox-kde-session"
+ echo
+ echo "See the openbox-kde-session(1) manpage for help."
+ exit
+fi
+
+# Set the prefix for the menu layout to use
+export XDG_MENU_PREFIX="kde-4-"
+
+# Clean up after GDM
+xprop -root -remove _NET_NUMBER_OF_DESKTOPS \
+ -remove _NET_DESKTOP_NAMES \
+ -remove _NET_CURRENT_DESKTOP 2> /dev/null
+
+# Run KDE with Openbox as its window manager
+export KDEWM="@bindir@/openbox"
+exec startkde "$@"
diff --git a/data/xsession/openbox-kde.desktop.in b/data/xsession/openbox-kde.desktop.in
new file mode 100644
index 0000000..ddfc72d
--- /dev/null
+++ b/data/xsession/openbox-kde.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=KDE/Openbox
+Comment=Use the Openbox window manager inside of the K Desktop Environment
+Exec=@bindir@/openbox-kde-session
+TryExec=startkde
+Icon=openbox.png
+Type=XSession
diff --git a/data/xsession/openbox-session.in b/data/xsession/openbox-session.in
new file mode 100644
index 0000000..3cf3571
--- /dev/null
+++ b/data/xsession/openbox-session.in
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+if test -n "$1"; then
+ echo "Syntax: openbox-session"
+ echo
+ echo "See the openbox-session(1) manpage for help."
+ exit
+fi
+
+# Clean up after GDM
+xprop -root -remove _NET_NUMBER_OF_DESKTOPS \
+ -remove _NET_DESKTOP_NAMES \
+ -remove _NET_CURRENT_DESKTOP 2> /dev/null
+
+# Set up the environment
+A="@configdir@/openbox/environment"
+test -r $A && . $A
+A="${XDG_CONFIG_HOME:-"$HOME/.config"}/openbox/environment"
+test -r $A && . $A
+
+# Run Openbox, and have it run the autostart stuff
+exec @bindir@/openbox --startup "@libexecdir@/openbox-autostart OPENBOX" "$@"
diff --git a/data/xsession/openbox.desktop.in b/data/xsession/openbox.desktop.in
new file mode 100644
index 0000000..0914e5b
--- /dev/null
+++ b/data/xsession/openbox.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Openbox
+Comment=Log in using the Openbox window manager (without a session manager)
+Exec=@bindir@/openbox-session
+TryExec=@bindir@/openbox-session
+Icon=openbox.png
+Type=XSession