diff options
Diffstat (limited to 'data')
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 Binary files differnew file mode 100644 index 0000000..70d1f07 --- /dev/null +++ b/data/openbox.png 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 |