add base debian openbox

This commit is contained in:
fosslinux 2018-12-29 15:21:53 +11:00 committed by Samuel Tyler
commit 1859bab2da
510 changed files with 138200 additions and 0 deletions

1111
ABOUT-NLS Normal file

File diff suppressed because it is too large Load Diff

24
AUTHORS Normal file
View File

@ -0,0 +1,24 @@
Openbox authors/contributors:
Mikael Magnusson (mikachu@icculus.org)
- Developer
Dana Jansens (danakj@orodu.net)
- Lead developer
Derek Foreman (manmower@openbox.org)
- Rendering code
Tore Anderson (tore@linpro.no)
- Directional focus, edge moving/growing actions
Audun Hove (audun@nlc.no)
- Actions code, move window to edge actions
Marius Nita (marius@cs.pdx.edu)
- Otk prototype code, design ideas.
John McKnight (jmcknight@gmail.com)
- Clearlooks themes
David Barr (david@chalkskeletons.com)
- Bear2 theme
- Clearlooks theme
- Icon
Brandon Cash
- SplitVertical gradient style
Dan Rise
- Natura theme

1267
CHANGELOG Normal file

File diff suppressed because it is too large Load Diff

78
COMPLIANCE Normal file
View File

@ -0,0 +1,78 @@
EWMH Compliance Document:
==========================
Listed below are all the NetWM (or EWM) hints decided upon on freedesktop.org
and Openbox's current level of compliance with the spec. Beside each hint is
the version of the spec which Openbox is compliant up to for the hint.
(
compliance :
- = none,
/ = partial,
+ = complete,
* = Openbox is compliant, but something else needs checking
? = unknown
)
+ _NET_SUPPORTED (1.3)
+ _NET_CLIENT_LIST (1.3)
+ _NET_NUMBER_OF_DESKTOPS (1.3)
+ _NET_DESKTOP_GEOMETRY (1.3)
Openbox doesn't support large desktops so these just match the
screen size.
+ _NET_DESKTOP_VIEWPORT (1.3)
Openbox doesn't support large desktops so these are just (0, 0).
+ _NET_CURRENT_DESKTOP (1.3)
+ _NET_DESKTOP_NAMES (1.3)
+ _NET_ACTIVE_WINDOW (1.3)
+ _NET_WORKAREA (1.3)
+ _NET_SUPPORTING_WM_CHECK (1.3)
+ _NET_VIRTUAL_ROOTS (1.3)
Openbox does not use virtual roots, so this is not needed.
+ _NET_DESKTOP_LAYOUT (1.3)
+ _NET_SHOWING_DESKTOP (1.3)
+ _NET_CLOSE_WINDOW (1.3)
+ _NET_MOVERESIZE_WINDOW (1.3)
+ _NET_WM_MOVERESIZE (1.3)
+ _NET_WM_NAME (1.3)
+ _NET_WM_VISIBLE_NAME (1.3)
+ _NET_WM_ICON_NAME (1.3)
+ _NET_WM_VISIBLE_ICON_NAME (1.3)
+ _NET_WM_DESKTOP (1.3)
+ _NET_WM_WINDOW_TYPE (1.3)
Openbox does not let windows change this hint after mapping.
+ _NET_WM_STATE (1.3)
+ _NET_WM_ALLOWED_ACTIONS (1.3)
+ _NET_WM_STRUT (1.3)
+ _NET_WM_STRUT_PARTIAL (1.3)
Openbox uses these to create per-monitor struts in Xinerama setups.
+ _NET_WM_ICON_GEOMETRY (1.3)
+ _NET_WM_ICON (1.3)
- _NET_WM_PID (1.3)
Openbox does not currently kill processes.
- _NET_WM_HANDLED_ICONS (1.3)
Openbox does not display icons for iconic windows.
+ _NET_WM_USER_TIME (1.3)
- _NET_WM_USER_TIME_WINDOW (1.4)
- _NET_WM_PING (1.3)
Openbox doesn't look for hung processes at this time.
+ _NET_FRAME_EXTENTS (1.3)
+ _NET_WM_STATE_DEMANDS_ATTENTION (1.3)
+ _NET_RESTACK_WINDOW (1.3)
+ _NET_WM_SYNC_REQUEST (1.3)
+ _NET_WM_FULL_PLACEMENT (1.4)
+ _NET_WM_MOVERESIZE_CANCEL (1.4)
+ _NET_REQUEST_FRAME_EXTENTS (1.3)
+ _NET_WM_ACTION_MOVE (1.3)
+ _NET_WM_ACTION_RESIZE (1.3)
+ _NET_WM_ACTION_MINIMIZE (1.3)
+ _NET_WM_ACTION_SHADE (1.3)
- _NET_WM_ACTION_STICK (1.3)
Openbox does not do large desktops, so no sticky state is needed.
+ _NET_WM_ACTION_MAXIMIZE_HORZ (1.3)
+ _NET_WM_ACTION_MAXIMIZE_VERT (1.3)
+ _NET_WM_ACTION_FULLSCREEN (1.3)
+ _NET_WM_ACTION_CHANGE_DESKTOP (1.3)
+ _NET_WM_ACTION_CLOSE (1.3)
+ _NET_WM_ACTION_ABOVE (1.4?)
+ _NET_WM_ACTION_BELOW (1.4?)

340
COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

628
Makefile.am Normal file
View File

@ -0,0 +1,628 @@
SUBDIRS = m4 po
docxbmdir = $(docdir)/xbm
themedir = $(datadir)/themes
localedir = $(datadir)/locale
configdir = $(sysconfdir)/xdg
rcdir = $(configdir)/openbox
xsessionsdir = $(datadir)/xsessions
gnomesessiondir = $(datadir)/gnome-session/sessions
gnomewmfilesdir = $(datadir)/gnome/wm-properties
pkgconfigdir = $(libdir)/pkgconfig
obtpubincludedir= $(includedir)/openbox/@OBT_VERSION@/obt
rrpubincludedir = $(includedir)/openbox/@RR_VERSION@/obrender
pixmapdir = $(datadir)/pixmaps
xsddir = $(datadir)/openbox
appsdir = $(datadir)/applications
theme = Clearlooks
AUTOMAKE_OPTIONS = subdir-objects foreign
ACLOCAL_AMFLAGS = -I m4
INCLUDES = -I.
check_PROGRAMS = \
obrender/rendertest
lib_LTLIBRARIES = \
obt/libobt.la \
obrender/libobrender.la
bin_PROGRAMS = \
openbox/openbox \
tools/gdm-control/gdm-control \
tools/gnome-panel-control/gnome-panel-control \
tools/obxprop/obxprop
noinst_PROGRAMS = \
obt/obt_unittests
nodist_bin_SCRIPTS = \
data/xsession/openbox-session \
data/xsession/openbox-gnome-session \
data/xsession/openbox-kde-session
dist_rc_SCRIPTS = \
data/environment
nodist_rc_SCRIPTS = \
data/autostart/autostart
dist_libexec_SCRIPTS = \
data/autostart/openbox-xdg-autostart
nodist_libexec_SCRIPTS = \
data/autostart/openbox-autostart
## obrender ##
obrender_rendertest_CPPFLAGS = \
$(PANGO_CFLAGS) \
$(GLIB_CFLAGS) \
-DG_LOG_DOMAIN=\"RenderTest\"
obrender_rendertest_LDADD = \
obt/libobt.la \
obrender/libobrender.la \
$(GLIB_LIBS) \
$(PANGO_LIBS) \
$(XML_LIBS) \
$(X_LIBS)
obrender_rendertest_SOURCES = obrender/test.c
obrender_libobrender_la_CPPFLAGS = \
$(X_CFLAGS) \
$(GLIB_CFLAGS) \
$(XML_CFLAGS) \
$(PANGO_CFLAGS) \
$(IMLIB2_CFLAGS) \
$(LIBRSVG_CFLAGS) \
-DG_LOG_DOMAIN=\"ObRender\" \
-DDEFAULT_THEME=\"$(theme)\"
obrender_libobrender_la_LDFLAGS = \
-version-info $(RR_CURRENT):$(RR_REVISION):$(RR_AGE)
obrender_libobrender_la_LIBADD = \
obt/libobt.la \
$(X_LIBS) \
$(PANGO_LIBS) \
$(GLIB_LIBS) \
$(IMLIB2_LIBS) \
$(LIBRSVG_LIBS) \
$(XML_LIBS)
obrender_libobrender_la_SOURCES = \
gettext.h \
obrender/button.c \
obrender/color.h \
obrender/color.c \
obrender/font.h \
obrender/font.c \
obrender/geom.h \
obrender/gradient.h \
obrender/gradient.c \
obrender/icon.h \
obrender/image.h \
obrender/image.c \
obrender/imagecache.h \
obrender/imagecache.c \
obrender/instance.h \
obrender/instance.c \
obrender/mask.h \
obrender/mask.c \
obrender/render.h \
obrender/render.c \
obrender/theme.h \
obrender/theme.c
## obt ##
obt_libobt_la_CPPFLAGS = \
$(X_CFLAGS) \
$(XINERAMA_CFLAGS) \
$(XKB_CFLAGS) \
$(XRANDR_CFLAGS) \
$(XSHAPE_CFLAGS) \
$(XSYNC_CFLAGS) \
$(GLIB_CFLAGS) \
$(XML_CFLAGS) \
-DG_LOG_DOMAIN=\"Obt\" \
-DLOCALEDIR=\"$(localedir)\" \
-DDATADIR=\"$(datadir)\" \
-DCONFIGDIR=\"$(configdir)\"
obt_libobt_la_LDFLAGS = \
-version-info $(OBT_CURRENT):$(OBT_REVISION):$(OBT_AGE)
obt_libobt_la_LIBADD = \
$(X_LIBS) \
$(XINERAMA_LIBS) \
$(XKB_LIBS) \
$(XRANDR_LIBS) \
$(XSHAPE_LIBS) \
$(XSYNC_LIBS) \
$(GLIB_LIBS) \
$(XML_LIBS)
obt_libobt_la_SOURCES = \
obt/bsearch.h \
obt/display.h \
obt/display.c \
obt/internal.h \
obt/keyboard.h \
obt/keyboard.c \
obt/xml.h \
obt/xml.c \
obt/ddparse.h \
obt/ddparse.c \
obt/link.h \
obt/link.c \
obt/paths.h \
obt/paths.c \
obt/prop.h \
obt/prop.c \
obt/signal.h \
obt/signal.c \
obt/util.h \
obt/xqueue.h \
obt/xqueue.c
## openbox ##
openbox_openbox_CPPFLAGS = \
$(SM_CFLAGS) \
$(X_CFLAGS) \
$(XCURSOR_CFLAGS) \
$(SM_CFLAGS) \
$(PANGO_CFLAGS) \
$(GLIB_CFLAGS) \
$(LIBSN_CFLAGS) \
$(XML_CFLAGS) \
-DLOCALEDIR=\"$(localedir)\" \
-DDATADIR=\"$(datadir)\" \
-DCONFIGDIR=\"$(configdir)\" \
-DG_LOG_DOMAIN=\"Openbox\"
openbox_openbox_LDADD = \
$(XINERAMA_LIBS) \
$(XRANDR_LIBS) \
$(SM_LIBS) \
$(GLIB_LIBS) \
$(X_LIBS) \
$(XCURSOR_LIBS) \
$(LIBSN_LIBS) \
$(XML_LIBS) \
$(EFENCE_LIBS) \
$(LIBINTL) \
obrender/libobrender.la \
obt/libobt.la
openbox_openbox_LDFLAGS = -export-dynamic
openbox_openbox_SOURCES = \
gettext.h \
openbox/actions/all.c \
openbox/actions/all.h \
openbox/actions/addremovedesktop.c \
openbox/actions/breakchroot.c \
openbox/actions/close.c \
openbox/actions/cyclewindows.c \
openbox/actions/debug.c \
openbox/actions/decorations.c \
openbox/actions/desktop.c \
openbox/actions/dock.c \
openbox/actions/dockautohide.c \
openbox/actions/directionalwindows.c \
openbox/actions/execute.c \
openbox/actions/exit.c \
openbox/actions/focus.c \
openbox/actions/focustobottom.c \
openbox/actions/fullscreen.c \
openbox/actions/growtoedge.c \
openbox/actions/iconify.c \
openbox/actions/if.c \
openbox/actions/kill.c \
openbox/actions/layer.c \
openbox/actions/lower.c \
openbox/actions/maximize.c \
openbox/actions/move.c \
openbox/actions/moverelative.c \
openbox/actions/moveresizeto.c \
openbox/actions/movetoedge.c \
openbox/actions/omnipresent.c \
openbox/actions/raise.c \
openbox/actions/raiselower.c \
openbox/actions/reconfigure.c \
openbox/actions/resize.c \
openbox/actions/resizerelative.c \
openbox/actions/restart.c \
openbox/actions/shade.c \
openbox/actions/shadelowerraise.c \
openbox/actions/showdesktop.c \
openbox/actions/showmenu.c \
openbox/actions/unfocus.c \
openbox/actions.c \
openbox/actions.h \
openbox/client.c \
openbox/client.h \
openbox/client_list_menu.c \
openbox/client_list_menu.h \
openbox/client_list_combined_menu.c \
openbox/client_list_combined_menu.h \
openbox/client_menu.c \
openbox/client_menu.h \
openbox/config.c \
openbox/config.h \
openbox/debug.c \
openbox/debug.h \
openbox/dock.c \
openbox/dock.h \
openbox/event.c \
openbox/event.h \
openbox/focus.c \
openbox/focus.h \
openbox/focus_cycle.c \
openbox/focus_cycle.h \
openbox/focus_cycle_indicator.c \
openbox/focus_cycle_indicator.h \
openbox/focus_cycle_popup.c \
openbox/focus_cycle_popup.h \
openbox/frame.c \
openbox/frame.h \
openbox/framerender.c \
openbox/framerender.h \
openbox/geom.h \
openbox/grab.c \
openbox/grab.h \
openbox/group.c \
openbox/group.h \
openbox/keyboard.c \
openbox/keyboard.h \
openbox/keytree.c \
openbox/keytree.h \
openbox/menuframe.c \
openbox/menuframe.h \
openbox/menu.c \
openbox/menu.h \
openbox/misc.h \
openbox/mouse.c \
openbox/mouse.h \
openbox/moveresize.c \
openbox/moveresize.h \
openbox/mwm.h \
openbox/openbox.c \
openbox/openbox.h \
openbox/ping.c \
openbox/ping.h \
openbox/place.c \
openbox/place.h \
openbox/place_overlap.c \
openbox/place_overlap.h \
openbox/prompt.c \
openbox/prompt.h \
openbox/popup.c \
openbox/popup.h \
openbox/resist.c \
openbox/resist.h \
openbox/screen.c \
openbox/screen.h \
openbox/session.c \
openbox/session.h \
openbox/stacking.c \
openbox/stacking.h \
openbox/startupnotify.c \
openbox/startupnotify.h \
openbox/translate.c \
openbox/translate.h \
openbox/window.c \
openbox/window.h
## obt_unittests ##
obt_obt_unittests_CPPFLAGS = \
$(GLIB_CFLAGS) \
-DLOCALEDIR=\"$(localedir)\" \
-DDATADIR=\"$(datadir)\" \
-DCONFIGDIR=\"$(configdir)\" \
-DG_LOG_DOMAIN=\"Obt-Unittests\"
obt_obt_unittests_LDADD = \
$(GLIB_LIBS) \
obt/libobt.la
obt_obt_unittests_LDFLAGS = -export-dynamic
obt_obt_unittests_SOURCES = \
obt/unittest_base.h \
obt/unittest_base.c \
obt/bsearch_unittest.c
## gnome-panel-control ##
tools_gnome_panel_control_gnome_panel_control_CPPFLAGS = \
$(X_CFLAGS)
tools_gnome_panel_control_gnome_panel_control_LDADD = \
$(X_LIBS)
tools_gnome_panel_control_gnome_panel_control_SOURCES = \
tools/gnome-panel-control/gnome-panel-control.c
## obxprop ##
tools_obxprop_obxprop_CPPFLAGS = \
$(GLIB_CFLAGS) \
$(X_CFLAGS)
tools_obxprop_obxprop_LDADD = \
$(GLIB_LIBS) \
$(X_LIBS)
tools_obxprop_obxprop_SOURCES = \
tools/obxprop/obxprop.c
## gdm-control ##
tools_gdm_control_gdm_control_CPPFLAGS = \
$(XAUTH_CFLAGS) \
$(X_CFLAGS) \
$(GLIB_CFLAGS)
tools_gdm_control_gdm_control_LDADD = \
$(XAUTH_LIBS) \
$(X_LIBS) \
$(GLIB_LIBS)
tools_gdm_control_gdm_control_SOURCES = \
tools/gdm-control/gdm-control.c
## default button masks ##
dist_docxbm_DATA = \
data/xbm/bullet.xbm \
data/xbm/close.xbm \
data/xbm/desk_toggled.xbm \
data/xbm/desk.xbm \
data/xbm/iconify.xbm \
data/xbm/max_toggled.xbm \
data/xbm/max.xbm \
data/xbm/shade_toggled.xbm \
data/xbm/shade.xbm
## themes ##
clearlooks_themedir = $(themedir)/Clearlooks/openbox-3
dist_clearlooks_theme_DATA= \
themes/Clearlooks/openbox-3/themerc
clearlooks34_themedir = $(themedir)/Clearlooks-3.4/openbox-3
dist_clearlooks34_theme_DATA= \
themes/Clearlooks-3.4/openbox-3/themerc
clearlooksolive_themedir = $(themedir)/Clearlooks-Olive/openbox-3
dist_clearlooksolive_theme_DATA= \
themes/Clearlooks-Olive/openbox-3/themerc
mikachu_themedir = $(themedir)/Mikachu/openbox-3
dist_mikachu_theme_DATA= \
themes/Mikachu/openbox-3/bullet.xbm \
themes/Mikachu/openbox-3/close.xbm \
themes/Mikachu/openbox-3/desk.xbm \
themes/Mikachu/openbox-3/iconify.xbm \
themes/Mikachu/openbox-3/max.xbm \
themes/Mikachu/openbox-3/themerc
natura_themedir = $(themedir)/Natura/openbox-3
dist_natura_theme_DATA= \
themes/Natura/openbox-3/close_hover.xbm \
themes/Natura/openbox-3/close.xbm \
themes/Natura/openbox-3/desk_toggled.xbm \
themes/Natura/openbox-3/desk_hover.xbm \
themes/Natura/openbox-3/desk.xbm \
themes/Natura/openbox-3/iconify_hover.xbm \
themes/Natura/openbox-3/iconify.xbm \
themes/Natura/openbox-3/max_hover.xbm \
themes/Natura/openbox-3/max_toggled.xbm \
themes/Natura/openbox-3/max.xbm \
themes/Natura/openbox-3/shade.xbm \
themes/Natura/openbox-3/shade_hover.xbm \
themes/Natura/openbox-3/themerc
artwizboxed_themedir = $(themedir)/Artwiz-boxed/openbox-3
dist_artwizboxed_theme_DATA= \
themes/Artwiz-boxed/openbox-3/themerc
bear2_themedir = $(themedir)/Bear2/openbox-3
dist_bear2_theme_DATA= \
themes/Bear2/openbox-3/close_pressed.xbm \
themes/Bear2/openbox-3/close.xbm \
themes/Bear2/openbox-3/desk_toggled.xbm \
themes/Bear2/openbox-3/desk.xbm \
themes/Bear2/openbox-3/iconify_pressed.xbm \
themes/Bear2/openbox-3/iconify.xbm \
themes/Bear2/openbox-3/max_pressed.xbm \
themes/Bear2/openbox-3/max_toggled.xbm \
themes/Bear2/openbox-3/max.xbm \
themes/Bear2/openbox-3/shade_pressed.xbm \
themes/Bear2/openbox-3/shade.xbm \
themes/Bear2/openbox-3/themerc
orang_themedir = $(themedir)/Orang/openbox-3
dist_orang_theme_DATA= \
themes/Orang/openbox-3/themerc
onyx_themedir = $(themedir)/Onyx/openbox-3
dist_onyx_theme_DATA= \
themes/Onyx/openbox-3/themerc
onyxcitrus_themedir = $(themedir)/Onyx-Citrus/openbox-3
dist_onyxcitrus_theme_DATA= \
themes/Onyx-Citrus/openbox-3/themerc
syscrash_themedir = $(themedir)/Syscrash/openbox-3
dist_syscrash_theme_DATA= \
themes/Syscrash/openbox-3/max_disabled.xbm \
themes/Syscrash/openbox-3/max_pressed.xbm \
themes/Syscrash/openbox-3/max_toggled.xbm \
themes/Syscrash/openbox-3/max.xbm \
themes/Syscrash/openbox-3/themerc
## public headers ##
rrpubinclude_HEADERS = \
obrender/color.h \
obrender/font.h \
obrender/geom.h \
obrender/gradient.h \
obrender/image.h \
obrender/instance.h \
obrender/mask.h \
obrender/render.h \
obrender/theme.h \
obrender/version.h
obtpubinclude_HEADERS = \
obt/link.h \
obt/display.h \
obt/keyboard.h \
obt/xml.h \
obt/paths.h \
obt/prop.h \
obt/signal.h \
obt/util.h \
obt/version.h \
obt/xqueue.h
nodist_pkgconfig_DATA = \
obrender/obrender-3.5.pc \
obt/obt-3.5.pc
## data ##
dist_apps_DATA = \
data/openbox.desktop
dist_pixmap_DATA = \
data/openbox.png
dist_rc_DATA = \
data/rc.xml \
data/menu.xml
edit = $(SED) \
-e 's!@version\@!$(VERSION)!' \
-e 's!@configdir\@!$(configdir)!' \
-e 's!@rcdir\@!$(rcdir)!' \
-e 's!@libexecdir\@!$(libexecdir)!' \
-e 's!@bindir\@!$(bindir)!'
data/autostart/autostart: $(top_srcdir)/data/autostart/autostart.in Makefile
@echo make: creating $@
@test -d $(shell dirname $(top_builddir)/$@) || \
mkdir $(shell dirname $(top_builddir)/$@)
@$(edit) $< >$(top_builddir)/$@
data/autostart/openbox-autostart: $(top_srcdir)/data/autostart/openbox-autostart.in Makefile
@echo make: creating $@
@test -d $(shell dirname $(top_builddir)/$@) || \
mkdir $(shell dirname $(top_builddir)/$@)
@$(edit) $< >$(top_builddir)/$@
%.desktop: %.desktop.in Makefile
@echo make: creating $@
@$(edit) $< >$@
%-session: %-session.in Makefile
@echo make: creating $@
@$(edit) $< >$@
%.1.in: %.1.sgml
@echo make: creating $@
@docbook-to-man $< >$@
%.1: %.1.in Makefile
@echo make: creating $@
@$(edit) $< >$@
dist_gnomewmfiles_DATA = \
data/gnome-wm-properties/openbox.desktop
nodist_xsessions_DATA = \
data/xsession/openbox.desktop \
data/xsession/openbox-gnome.desktop \
data/xsession/openbox-kde.desktop
dist_gnomesession_DATA = \
data/gnome-session/openbox-gnome.session \
data/gnome-session/openbox-gnome-fallback.session
dist_noinst_DATA = \
data/rc.xsd \
data/menu.xsd \
data/autostart/autostart.in \
data/autostart/openbox-autostart.in \
data/xsession/openbox.desktop.in \
data/xsession/openbox-gnome.desktop.in \
data/xsession/openbox-kde.desktop.in \
data/xsession/openbox-session.in \
data/xsession/openbox-gnome-session.in \
data/xsession/openbox-kde-session.in \
doc/openbox.1.sgml \
doc/openbox.1.in \
doc/openbox-session.1.sgml \
doc/openbox-session.1.in \
doc/openbox-gnome-session.1.sgml \
doc/openbox-gnome-session.1.in \
doc/openbox-kde-session.1.sgml \
doc/openbox-kde-session.1.in \
doc/obxprop.1.sgml \
doc/obxprop.1.in \
obrender/version.h.in \
obrender/obrender-3.5.pc.in \
obt/obt-3.5.pc.in \
obt/version.h.in \
tools/themeupdate/themeupdate.py \
tests/hideshow.py \
tests/Makefile \
tests/aspect.c \
tests/fullscreen.c \
tests/grav.c \
tests/grouptran.c \
tests/icons.c \
tests/modal2.c \
tests/modal3.c \
tests/modal.c \
tests/noresize.c \
tests/override.c \
tests/positioned.c \
tests/strut.c \
tests/title.c \
tests/urgent.c
dist_doc_DATA = \
COMPLIANCE \
README \
AUTHORS \
CHANGELOG \
COPYING \
data/rc.xsd \
data/menu.xsd \
doc/rc-mouse-focus.xml
nodist_man_MANS = \
doc/openbox.1 \
doc/openbox-session.1 \
doc/openbox-gnome-session.1 \
doc/openbox-kde-session.1 \
doc/obxprop.1
EXTRA_DIST = \
config.rpath
# make clean doesn't delete these for some reason, even though they are
# built by make
CLEANFILES = \
$(nodist_man_MANS) \
$(nodist_bin_SCRIPTS) \
$(nodist_xsessions_DATA) \
$(nodist_rc_SCRIPTS) \
$(nodist_libexec_SCRIPTS)
#doc:
# $(MAKE) -$(MAKEFLAGS) -C doc/doxygen doc
distclean-local:
for d in . m4 po obrender parser obt openbox; do \
for p in core core.* gmon.out *\~ *.orig *.rej .\#*; do \
rm -f "$$d/$$p"; \
done \
done
.PHONY: doc

4444
Makefile.in Normal file

File diff suppressed because it is too large Load Diff

23
README Normal file
View File

@ -0,0 +1,23 @@
Openbox
Copyright (C) 2004 Mikael Magnusson
Copyright (C) 2002 Dana Jansens
----
This software is OSI Certified Open Source Software.
OSI Certified is a certification mark of the Open Source Initiative.
----
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.
See the COPYING file for a copy of the GNU General Public License.

1293
aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

343
compile Executable file
View File

@ -0,0 +1,343 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2012-03-05.13; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
# Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# 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, 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

1545
config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

614
config.rpath Executable file
View File

@ -0,0 +1,614 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2006 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# Known limitations:
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
# than 256 bytes, otherwise the compiler driver will dump core. The only
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
shrext=.so
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# Code taken from libtool.m4's _LT_CC_BASENAME.
for cc_temp in $CC""; do
case $cc_temp in
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
\-*) ;;
*) break;;
esac
done
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix*)
wl='-Wl,'
;;
darwin*)
case $cc_basename in
xlc*)
wl='-Wl,'
;;
esac
;;
mingw* | pw32* | os2*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6* | nonstopux*)
wl='-Wl,'
;;
newsos6)
;;
linux*)
case $cc_basename in
icc* | ecc*)
wl='-Wl,'
;;
pgcc | pgf77 | pgf90)
wl='-Wl,'
;;
ccc*)
wl='-Wl,'
;;
como)
wl='-lopt='
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
wl='-Wl,'
;;
esac
;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
sco3.2v5*)
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
wl='-Wl,'
;;
sysv4*MP*)
;;
unicos*)
wl='-Wl,'
;;
uts4*)
;;
esac
fi
# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
# Set some defaults for GNU ld with shared library support. These
# are reset later if shared libraries are not supported. Putting them
# here allows them to be overridden if necessary.
# Unlike libtool, we use -rpath here, not --rpath, since the documented
# option of GNU ld is called -rpath, not --rpath.
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
case "$host_os" in
aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we cannot use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
interix3*)
hardcode_direct=no
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
linux*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
netbsd*)
;;
solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
case `$LD -v 2>&1` in
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
ld_shlibs=no
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
else
ld_shlibs=no
fi
;;
esac
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = no; then
hardcode_libdir_flag_spec=
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
;;
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
;;
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
echo 'int main () { return 0; }' > conftest.c
${CC} ${LDFLAGS} conftest.c -o conftest
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
fi
if test -z "$aix_libpath"; then
aix_libpath="/usr/lib:/lib"
fi
rm -f conftest.c conftest
# End _LT_AC_SYS_LIBPATH_AIX.
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
bsdi[45]*)
;;
cygwin* | mingw* | pw32*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
hardcode_direct=no
if test "$GCC" = yes ; then
:
else
case $cc_basename in
xlc*)
;;
*)
ld_shlibs=no
;;
esac
fi
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd* | kfreebsd*-gnu | dragonfly*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
hpux10*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
fi
;;
hpux11*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
case $host_cpu in
hppa*64*|ia64*)
hardcode_direct=no
;;
*)
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
case $host_vendor in
sni)
hardcode_direct=yes # is this really true???
;;
siemens)
hardcode_direct=no
;;
motorola)
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
;;
esac
;;
sysv4.3*)
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
;;
sysv5* | sco3.2v5* | sco5v6*)
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
hardcode_libdir_separator=':'
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
libname_spec='lib$name'
case "$host_os" in
aix3*)
;;
aix4* | aix5*)
;;
amigaos*)
;;
beos*)
;;
bsdi[45]*)
;;
cygwin* | mingw* | pw32*)
shrext=.dll
;;
darwin* | rhapsody*)
shrext=.dylib
;;
dgux*)
;;
freebsd1*)
;;
kfreebsd*-gnu)
;;
freebsd* | dragonfly*)
;;
gnu*)
;;
hpux9* | hpux10* | hpux11*)
case $host_cpu in
ia64*)
shrext=.so
;;
hppa*64*)
shrext=.sl
;;
*)
shrext=.sl
;;
esac
;;
interix3*)
;;
irix5* | irix6* | nonstopux*)
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
linux*)
;;
knetbsd*-gnu)
;;
netbsd*)
;;
newsos6)
;;
nto-qnx*)
;;
openbsd*)
;;
os2*)
libname_spec='$name'
shrext=.dll
;;
osf3* | osf4* | osf5*)
;;
solaris*)
;;
sunos4*)
;;
sysv4 | sysv4.3*)
;;
sysv4*MP*)
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
;;
uts4*)
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
EOF

1676
config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

18880
configure vendored Executable file

File diff suppressed because it is too large Load Diff

279
configure.ac Normal file
View File

@ -0,0 +1,279 @@
AC_PREREQ([2.54])
AC_INIT([openbox], [3.6.1], [http://bugzilla.icculus.org])
AC_CONFIG_SRCDIR([openbox/openbox.c])
AM_INIT_AUTOMAKE([foreign])
AM_SILENT_RULES([yes])
OB_VERSION=$PACKAGE_VERSION
AC_SUBST(OB_VERSION)
dnl Making releases:
dnl RR_ is for obrender, OBT_ is for obt, keep major/minor in sync,
dnl treat the rest separately.
dnl
dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match.
dnl the other variables aren't related to the user visible versions, but are used
dnl to version the .so files.
dnl if no backward compat is broken, it's just a preference if you want to bump
dnl the AC_INIT micro version or minor version. if the AC_INIT micro version is
dnl 0, don't write it out.
dnl
dnl How to process .so versioning,
dnl RR_MICRO_VERSION += 1;
dnl RR_INTERFACE_AGE += 1;
dnl RR_BINARY_AGE += 1;
dnl if any functions have been added, set RR_INTERFACE_AGE to 0.
dnl if backwards compatibility has been broken,
dnl set RR_BINARY_AGE and RR_INTERFACE_AGE to 0.
dnl if you set anything to 0, you should also bump the MINOR version.
dnl
RR_MAJOR_VERSION=3
RR_MINOR_VERSION=6
RR_MICRO_VERSION=32
RR_INTERFACE_AGE=0
RR_BINARY_AGE=0
RR_VERSION=$RR_MAJOR_VERSION.$RR_MINOR_VERSION
OBT_MAJOR_VERSION=3
OBT_MINOR_VERSION=6
OBT_MICRO_VERSION=4
OBT_INTERFACE_AGE=2
OBT_BINARY_AGE=2
OBT_VERSION=$OBT_MAJOR_VERSION.$OBT_MINOR_VERSION
AC_SUBST(RR_MAJOR_VERSION)
AC_SUBST(RR_MINOR_VERSION)
AC_SUBST(RR_MICRO_VERSION)
AC_SUBST(RR_INTERFACE_AGE)
AC_SUBST(RR_BINARY_AGE)
AC_SUBST(RR_VERSION)
AC_SUBST(OBT_MAJOR_VERSION)
AC_SUBST(OBT_MINOR_VERSION)
AC_SUBST(OBT_MICRO_VERSION)
AC_SUBST(OBT_INTERFACE_AGE)
AC_SUBST(OBT_BINARY_AGE)
AC_SUBST(OBT_VERSION)
dnl Libtool versioning
RR_RELEASE=$RR_MAJOR_VERSION.$RR_MINOR_VERSION
RR_CURRENT=`expr $RR_MICRO_VERSION - $RR_INTERFACE_AGE`
RR_REVISION=$RR_INTERFACE_AGE
RR_AGE=`expr $RR_BINARY_AGE - $RR_INTERFACE_AGE`
RR_CURRENT_MINUS_AGE=`expr $RR_CURRENT - $RR_AGE`
OBT_RELEASE=$OBT_MAJOR_VERSION.$OBT_MINOR_VERSION
OBT_CURRENT=`expr $OBT_MICRO_VERSION - $OBT_INTERFACE_AGE`
OBT_REVISION=$OBT_INTERFACE_AGE
OBT_AGE=`expr $OBT_BINARY_AGE - $OBT_INTERFACE_AGE`
OBT_CURRENT_MINUS_AGE=`expr $OBT_CURRENT - $OBT_AGE`
AC_SUBST(RR_RELEASE)
AC_SUBST(RR_CURRENT)
AC_SUBST(RR_REVISION)
AC_SUBST(RR_AGE)
AC_SUBST(RR_CURRENT_MINUS_AGE)
AC_SUBST(OBT_RELEASE)
AC_SUBST(OBT_CURRENT)
AC_SUBST(OBT_REVISION)
AC_SUBST(OBT_AGE)
AC_SUBST(OBT_CURRENT_MINUS_AGE)
AC_PREFIX_DEFAULT([/usr/local])
test "$prefix" = "NONE" && prefix=$ac_default_prefix
dnl Determine build target
OB_DEBUG
dnl Pick compiler specific/build target flags, and set $CVS
AM_PROG_CC_C_O
OB_COMPILER_FLAGS
AC_C_CONST
AC_C_INLINE
AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
LIBTOOL="$LIBTOOL --silent"
AC_PROG_INSTALL
AM_GNU_GETTEXT_VERSION(0.15)
AM_GNU_GETTEXT([external])
AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h grp.h locale.h pwd.h)
AC_CHECK_HEADERS(signal.h string.h stdio.h stdlib.h unistd.h sys/stat.h)
AC_CHECK_HEADERS(sys/select.h sys/socket.h sys/time.h sys/types.h sys/wait.h)
AC_PATH_PROG([SED], [sed], [no])
if test "$SED" = "no"; then
AC_MSG_ERROR([The program "sed" is not available. This program is required to build Openbox.])
fi
AC_PATH_PROG([DIRNAME], [dirname], [no])
if test "$DIRNAME" = "no"; then
AC_MSG_ERROR([The program "dirname" is not available. This program is required to build Openbox.])
fi
PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.14.0])
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
PKG_CHECK_MODULES(PANGO, [pango >= 1.8.0 pangoxft >= 1.8.0])
AC_SUBST(PANGO_CFLAGS)
AC_SUBST(PANGO_LIBS)
PKG_CHECK_MODULES(XML, [libxml-2.0 >= 2.6.0])
AC_SUBST(XML_CFLAGS)
AC_SUBST(XML_LIBS)
AC_ARG_ENABLE(startup-notification,
AC_HELP_STRING(
[--disable-startup-notification],
[disable the startup notification library. [default=enabled]]
),
[enable_sn=$enableval],
[enable_sn=yes]
)
if test "$enable_sn" = yes; then
PKG_CHECK_MODULES(LIBSN, [libstartup-notification-1.0 >= 0.8],
[
AC_DEFINE(USE_LIBSN, [1], [Use startup-notification])
AC_SUBST(LIBSN_CFLAGS)
AC_SUBST(LIBSN_LIBS)
sn_found=yes
],
[
sn_found=no
]
)
else
sn_found=no
fi
AC_ARG_ENABLE(xcursor,
AC_HELP_STRING(
[--disable-xcursor],
[disable use of the X Cursor library. [default=enabled]]
),
[enable_xcursor=$enableval],
[enable_xcursor=yes]
)
if test "$enable_xcursor" = yes; then
PKG_CHECK_MODULES(XCURSOR, [xcursor],
[
AC_DEFINE(USE_XCURSOR, [1], [Use X Cursor library])
AC_SUBST(XCURSOR_CFLAGS)
AC_SUBST(XCURSOR_LIBS)
xcursor_found=yes
],
[
xcursor_found=no
]
)
else
xcursor_found=no
fi
AC_ARG_ENABLE(imlib2,
AC_HELP_STRING(
[--disable-imlib2],
[disable use of Imlib2 image library for loading icons. [default=enabled]]
),
[enable_imlib2=$enableval],
[enable_imlib2=yes]
)
if test "$enable_imlib2" = yes; then
PKG_CHECK_MODULES(IMLIB2, [imlib2],
[
AC_DEFINE(USE_IMLIB2, [1], [Use Imlib2 image library])
AC_SUBST(IMLIB2_CFLAGS)
AC_SUBST(IMLIB2_LIBS)
# export it for the pkg-config file
PKG_CONFIG_IMLIB=imlib2
AC_SUBST(PKG_CONFIG_IMLIB)
imlib2_found=yes
],
[
imlib2_found=no
]
)
else
imlib2_found=no
fi
AM_CONDITIONAL(USE_IMLIB2, [test $imlib2_found = yes])
AC_ARG_ENABLE(librsvg,
AC_HELP_STRING(
[--disable-librsvg],
[disable use of SVG image files for loading icons. [default=enabled]]
),
[enable_librsvg=$enableval],
[enable_librsvg=yes]
)
if test "$enable_librsvg" = yes; then
PKG_CHECK_MODULES(LIBRSVG, [librsvg-2.0],
[
AC_DEFINE(USE_LIBRSVG, [1], [Use SVG image files])
AC_SUBST(LIBRSVG_CFLAGS)
AC_SUBST(LIBRSVG_LIBS)
# export it for the pkg-config file
PKG_CONFIG_LIBRSVG=librsvg-2.0
AC_SUBST(PKG_CONFIG_LIBRSVG)
librsvg_found=yes
],
[
librsvg_found=no
]
)
else
librsvg_found=no
fi
AM_CONDITIONAL(USE_LIBRSVG, [test $librsvg_found = yes])
dnl Check for session management
X11_SM
#EFENCE_LIBS=-lefence
EFENCE_LIBS=""
AC_SUBST(EFENCE_LIBS)
dnl Check for X11 extensions
X11_EXT_XKB
X11_EXT_XRANDR
X11_EXT_SHAPE
X11_EXT_XINERAMA
X11_EXT_SYNC
X11_EXT_AUTH
AC_CONFIG_FILES([
Makefile
m4/Makefile
po/Makefile.in
obrender/obrender-3.5.pc
obt/obt-3.5.pc
obrender/version.h
obt/version.h
version.h
])
AC_CONFIG_COMMANDS([doc],
[test -d doc || mkdir doc])
AC_CONFIG_COMMANDS([data],
[test -d data || mkdir data])
AC_CONFIG_COMMANDS([data/xsession],
[test -d data/xsession || mkdir data/xsession])
AC_OUTPUT
AC_MSG_RESULT
AC_MSG_RESULT([Compiling with these options:
Startup Notification... $sn_found
X Cursor Library... $xcursor_found
Session Management... $SM
Imlib2 Library... $imlib2_found
SVG Support (librsvg)... $librsvg_found
])
AC_MSG_RESULT([configure complete, now type "make"])

View File

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

View File

@ -0,0 +1,34 @@
#!/bin/sh
# Set a background color
BG=""
if which hsetroot >/dev/null 2>/dev/null; then
BG=hsetroot
elif which esetroot >/dev/null 2>/dev/null; then
BG=esetroot
elif which xsetroot >/dev/null 2>/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 "$@"

View File

@ -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 >>sys.stderr, "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())

10
data/environment Normal file
View File

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

View File

@ -0,0 +1,4 @@
[GNOME Session]
Name=GNOME/Openbox fallback (Safe Mode)
RequiredComponents=openbox;gnome-settings-daemon
DesktopName=GNOME

View File

@ -0,0 +1,4 @@
[GNOME Session]
Name=GNOME/Openbox
RequiredComponents=openbox;gnome-settings-daemon;gnome-panel;nautilus-classic;gnome-flashback-services
DesktopName=GNOME

View File

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

394
data/menu.xml Normal file
View File

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

215
data/menu.xsd Normal file
View File

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

15
data/openbox.desktop Normal file
View File

@ -0,0 +1,15 @@
[Desktop Entry]
Type=Application
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

BIN
data/openbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

743
data/rc.xml Normal file
View File

@ -0,0 +1,743 @@
<?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 -->
<showIcons>yes</showIcons>
<!-- 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)"
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
groupclass="the window's _OB_APP_GROUP_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). use 'default' to specify using value
# provided by the application, or chosen by openbox, instead.
<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>
<size>
# the size to make the window.
<width>20</width>
# a number like 20, or 'default' to use the size given by the application.
# you can use fractions such as 1/2 or percentages such as 75% in which
# case the value is relative to the size of the monitor that the window
# appears on.
<height>30%</height>
</size>
<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>

565
data/rc.xsd Normal file
View File

@ -0,0 +1,565 @@
<?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="primaryMonitor" 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:element minOccurs="0" name="strict" 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="window_size">
<xsd:all>
<xsd:element name="width" type="ob:size_value"/>
<xsd:element name="height" type="ob:size_value"/>
</xsd:all>
</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="size" type="ob:window_size"/>
<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="ActiveOnScreenDisplay"/>
<xsd:enumeration value="InactiveOnScreenDisplay"/>
</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="default|center|-?(0|[1-9][0-9]*)(|%|/[1-9][0-9]*)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="size_value">
<xsd:restriction base="xsd:string">
<xsd:pattern value="default|([1-9][0-9]*)(|%|/[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:pattern 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>

4
data/xbm/bullet.xbm Normal file
View File

@ -0,0 +1,4 @@
#define bullet_width 4
#define bullet_height 7
static unsigned char bullet_bits[] = {
0x01, 0x03, 0x07, 0x0f, 0x07, 0x03, 0x01 };

4
data/xbm/close.xbm Normal file
View File

@ -0,0 +1,4 @@
#define close_width 6
#define close_height 6
static unsigned char close_bits[] = {
0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 };

4
data/xbm/desk.xbm Normal file
View File

@ -0,0 +1,4 @@
#define desk_width 6
#define desk_height 6
static unsigned char desk_bits[] = {
0x33, 0x33, 0x00, 0x00, 0x33, 0x33 };

View File

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

4
data/xbm/iconify.xbm Normal file
View File

@ -0,0 +1,4 @@
#define iconify_width 6
#define iconify_height 6
static unsigned char iconify_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f };

4
data/xbm/max.xbm Normal file
View File

@ -0,0 +1,4 @@
#define max_width 6
#define max_height 6
static unsigned char max_bits[] = {
0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };

4
data/xbm/max_toggled.xbm Normal file
View File

@ -0,0 +1,4 @@
#define max_width 6
#define max_height 6
static unsigned char max_bits[] = {
0x3e, 0x22, 0x2f, 0x29, 0x39, 0x0f };

4
data/xbm/shade.xbm Normal file
View File

@ -0,0 +1,4 @@
#define iconify_width 6
#define iconify_height 6
static unsigned char iconify_bits[] = {
0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };

View File

@ -0,0 +1,4 @@
#define iconify_width 6
#define iconify_height 6
static unsigned char iconify_bits[] = {
0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };

View File

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

View File

@ -0,0 +1,7 @@
[Desktop Entry]
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
Type=Application

View File

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

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Name=KDE/Openbox
Comment=Use the Openbox window manager inside of the K Desktop Environment
Exec=@bindir@/openbox-kde-session
TryExec=startkde
Icon=openbox
Type=Application

View File

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

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Name=Openbox
Comment=Log in using the Openbox window manager (without a session manager)
Exec=@bindir@/openbox-session
TryExec=@bindir@/openbox-session
Icon=openbox
Type=Application

57
debian/NEWS.Debian vendored Normal file
View File

@ -0,0 +1,57 @@
openbox (3.5.2-5) unstable; urgency=low
- Make new binary packages openbox-gnome-session and openbox-kde-session to
separate Gnome and KDE SC sessions from Openbox package
-- Mateusz Łukasik <mati75@linuxmint.pl> Tue, 05 Nov 2013 13:45:12 +0100
openbox (3.5.2-1) unstable; urgency=low
- The 3.5.2 release has SVG icon support and correctly
interfaces with the latest gnome-session for Gnome/Openbox X
sessions.
-- Mateusz Łukasik <mati75@linuxmint.pl> Thu, 15 Aug 2013 22:15:10 +0200
openbox (3.5.0-1) unstable; urgency=low
Be aware of the following changes when upgrading to openbox 3.5
or later:
- There is a new config file called environment that you should
copy from /etc/xdg/openbox to ~/.config/openbox
- The config file previously called autostart.sh is now just called
autostart. You should rename yours to remove the .sh from the end
of the name.
- Some of the configuration grammar in rc.xml has changed. While Openbox
appears to understand the old options, it would be wise to compare
your configuration to the one in /etc/xdg/openbox and look for changes
that affect you.
-- Nico Golde <nion@debian.org> Sun, 31 Oct 2011 23:41:20 +0200
openbox (3.4.2-1) unstable; urgency=low
- The 3.4.x release introduced quite a few changes and improvements
for users. Make sure to read:
http://icculus.org/openbox/index.php/Help:Upgrading_to_3.4
to take advantage of them.
-- Nico Golde <nion@debian.org> Sun, 15 Jul 2007 23:17:28 +0200
openbox (3.0-1) unstable; urgency=low
- Openbox 3 is rewritten from scratch in C, and is now licenced under the
GNU General Public Licence. Prior versions of Openbox was written in
C++, and based on Blackbox 0.65.0 codebase.
The format for configuration files, menu files, and theme files has
been changed, so if you're upgrading from Openbox 2, you will have to
convert your existing setup to the new formats. The included script
/usr/share/openbox/themeupdate.py may be helpful when converting themes,
while configuration and menu files must be done manually.
You might want to postpone upgrading this package (or downgrade it
if you already have), if you do not want to do the conversion now.
-- Tore Anderson <tore@debian.org> Tue, 18 Nov 2003 19:46:48 +0100

1103
debian/changelog vendored Normal file

File diff suppressed because it is too large Load Diff

1
debian/compat vendored Normal file
View File

@ -0,0 +1 @@
10

153
debian/control vendored Normal file
View File

@ -0,0 +1,153 @@
Source: openbox
Section: x11
Priority: optional
Maintainer: Mateusz Łukasik <mati75@linuxmint.pl>
Build-Depends: debhelper (>= 10), gettext, libstartup-notification0-dev,
libxrender-dev, pkg-config, libglib2.0-dev, libxml2-dev (>= 2.6.0), perl,
libxt-dev, libxinerama-dev, libxrandr-dev, libpango1.0-dev, libx11-dev,
autoconf, automake (>= 1:1.11), libimlib2-dev, libxcursor-dev,
autopoint, librsvg2-dev, libxi-dev
Standards-Version: 3.9.8
Homepage: http://www.openbox.org
Vcs-Browser: https://github.com/mati75/openbox-debian
Vcs-Git: https://github.com/mati75/openbox-debian.git
Package: openbox
Architecture: any
Provides: x-window-manager, x-session-manager
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: obconf, python-xdg | obsession, scrot
Suggests: menu, fonts-dejavu, python, libxml2-dev, tint2, openbox-menu,
openbox-gnome-session (= ${binary:Version}), openbox-kde-session (= ${binary:Version})
Breaks: menu (<< 2.1.12)
Description: standards-compliant, fast, light-weight and extensible window manager
Openbox works with your applications, and makes your desktop easier to manage.
This is because the approach to its development was the opposite of what seems
to be the general case for window managers. Openbox was written first to
comply with standards and to work properly. Only when that was in place did
the team turn to the visual interface.
.
Openbox is fully functional as a stand-alone working environment, or can be
used as a drop-in replacement for the default window manager in the GNOME or
KDE desktop environments.
.
Openbox 3 is a completely new breed of window manager. It is not based upon
any existing code base, although the visual appearance has been based upon
that of Blackbox. Openbox 2 was based on the Blackbox 0.65.0 codebase.
.
Some of the things to look for in Openbox are:
.
* ICCCM and EWMH compliance!
* Very fast
* Chainable key bindings
* Customizable mouse actions
* Window resistance
* Multi-head Xinerama support!
* Pipe menus
Package: libobt2v5
Section: libs
Architecture: any
Conflicts: libobparser15, libobparser16, libobt2
Replaces: libobparser15, libobparser16, libobt2
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: parsing library for openbox
Openbox works with your applications, and makes your desktop easier to manage.
This is because the approach to its development was the opposite of what seems
to be the general case for window managers. Openbox was written first to
comply with standards and to work properly. Only when that was in place did
the team turn to the visual interface.
.
Openbox is fully functional as a stand-alone working environment, or can be
used as a drop-in replacement for the default window manager in the GNOME or
KDE desktop environments.
.
Openbox 3 is a completely new breed of window manager. It is not based upon
any existing code base, although the visual appearance has been based upon
that of Blackbox. Openbox 2 was based on the Blackbox 0.65.0 codebase.
.
This package contains the libobt library files used by openbox
to load and parse configuration and theme files of openbox.
Package: libobrender32v5
Section: libs
Architecture: any
Conflicts: libobrender15, libobrender16, libobrender32
Replaces: libobrender15, libobrender16, libobrender32
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: rendering library for openbox themes
Openbox works with your applications, and makes your desktop easier to manage.
This is because the approach to its development was the opposite of what seems
to be the general case for window managers. Openbox was written first to
comply with standards and to work properly. Only when that was in place did
the team turn to the visual interface.
.
Openbox is fully functional as a stand-alone working environment, or can be
used as a drop-in replacement for the default window manager in the GNOME or
KDE desktop environments.
.
Openbox 3 is a completely new breed of window manager. It is not based upon
any existing code base, although the visual appearance has been based upon
that of Blackbox. Openbox 2 was based on the Blackbox 0.65.0 codebase.
.
This package contains the libobrender library files used by openbox
for theme rendering.
Package: openbox-dev
Section: libdevel
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libobrender32v5 (= ${binary:Version}),
libobt2v5 (= ${binary:Version}), libxml2-dev, libglib2.0-dev, libpango1.0-dev,
libimlib2-dev, librsvg2-dev, libxcursor-dev
Description: development files for the openbox window manager
Openbox works with your applications, and makes your desktop easier to manage.
This is because the approach to its development was the opposite of what seems
to be the general case for window managers. Openbox was written first to
comply with standards and to work properly. Only when that was in place did
the team turn to the visual interface.
.
Openbox is fully functional as a stand-alone working environment, or can be
used as a drop-in replacement for the default window manager in the GNOME or
KDE desktop environments.
.
Openbox 3 is a completely new breed of window manager. It is not based upon
any existing code base, although the visual appearance has been based upon
that of Blackbox. Openbox 2 was based on the Blackbox 0.65.0 codebase.
.
This package contains the development headers for building openbox stuff.
Package: gnome-panel-control
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Replaces: openbox (<< 3.4.11.2)
Breaks: openbox (<< 3.4.11.2)
Description: command line utility to invoke GNOME panel run dialog/menu
gnome-panel-control can be used to invoke the GNOME panel run or main
menu from the command line. This is originally a helper utility of openbox
since gnome-panel is no longer managing its own key bindings.
Package: openbox-gnome-session
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, openbox (>= ${source:Version}),
gnome-session-bin, gconf2, x11-utils
Enhances: gnome-session
Replaces: openbox (<< 3.5.2-5)
Breaks: openbox (<< 3.5.2-5)
Description: command line utility to run Openbox as GNOME session
openbox-gnome-session can provide GNOME session with openbox as
a default window manager. It can replace the original window manager
in GNOME Shell and GNOME Fallback sessions.
Package: openbox-kde-session
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, openbox (>= ${source:Version}),
x11-utils, plasma-workspace
Enhances: kde-workspace
Replaces: openbox (<< 3.5.2-5)
Breaks: openbox (<< 3.5.2-5)
Description: command line utility to run Openbox as KDE SC session
openbox-kde-session can provide KDE SC session with openbox as
a default window manager. Can replace the original window manager
called KWin.

68
debian/copyright vendored Normal file
View File

@ -0,0 +1,68 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: openbox
Upstream-Contact: Dana Jansens <danakj@orodu.net>
Source: http://openbox.org/wiki/Openbox:Download
Files: *
Copyright: 2003, Ben Jansens
2003, Derek Foreman <manmower@openbox.org>
2006-2011, Mikael Magnusson <mikachu@comhem.se>
2003-2011, Dana Jansens <danakj@orodu.net>
License: GPL-2+
Files: debian/*
Copyright: 2002, Kyle McMartin <kyle@debian.org>
2003-2004, Tore Anderson <tore@debian.org>
2007-2009, Nico Golde <nion@debian.org>, Anibal Avelar (Fixxxer) <aavelar@cofradia.org>
2013-2014, Mateusz Łukasik <mati75@linuxmint.pl>
License: BSD-3-clause
These scripts are placed under the BSD license:
Copyright (c) The Regents of the University of California.
All rights reserved.
.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Files: debian/themes/Nightmare*
Copyright: 2014, maxim2
Source: http://box-look.org/content/show.php/Nightmare+?content=165646
License: GPL-2+
License: GPL-2+
This package 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; version 2 dated June, 1991.
.
This package 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.
.
You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston,
MA 02110-1301, USA.
.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL-2'.

152
debian/docs/build.html vendored Normal file
View File

@ -0,0 +1,152 @@
<a href="toc.html">Table of Contents</a>
<h1>Building Openbox</h1>
<h2><a name="compile"></a>Compiling</h2>
<p>
The following is what you will need to compile Openbox:
</p>
<p>
<ul>
<li>C compiler (such as <a href="http://gcc.gnu.org">GCC</a>).</li>
<li>Xlib headers and libraries (development package), distributed with
<a href="http://xfree86.org">XFree86</a>.</li>
<li><a href="http://fontconfig.org">Fontconfig</a> headers and libraries
(development package).</li>
<li><a href="http://www.gtk.org">Glib 2</a> headers and libraries
(development package)</li>
<li><em>Optional:</em> The FreeDesktop.org
<a href="http://www.freedesktop.org/software/startup-notification/">
Startup-Notification</a> library.</li>
</ul>
</p>
<p>
Once you have the above dependancies installed, you are ready to build
Openbox. Untar the Openbox archive and from inside the source tree, run:
</p>
<p>
<blockquote>
% <b>./configure</b><br>
&nbsp;&nbsp;...configure detects the build evironment...<br>
% <b>make</b><br>
&nbsp;&nbsp;...openbox builds...<br>
% <b>make install</b><br>
&nbsp;&nbsp;...openbox installs...<br>
</blockquote>
</p>
<p>
If the configure command fails and the reason is not obvious, you should
look in the <b>config.log</b> file to discover the cause of the problem.
</p>
<h2><a name="install"></a>Installing</h2>
<p>
You can install Openbox by <a href="#compile">compiling from source</a> or via
binary packages. It is recommended that you get a package from your
distribution if possible.
</p>
<p>
Once you have Openbox on your system, you will need to set things up to use it.
What to set up depends on how you run X.
</p>
<h3><a name="install-gnome"></a>
If you run the GNOME desktop environment:</h3>
<p>
The default window manager for the GNOME environment is <b>metacity</b>. To
switch from metacity to Openbox, do the following:
</p>
<blockquote>
% <b>openbox --replace</b>
</blockquote>
<p>
Choose to save your session the next time you log out so that Openbox will be
started for you when you log in again.
</p>
<p>
<b>Note:</b> As of GNOME 2.4, gnome-panel no longer manages its own key bindings, and requires that the window manager provide its own key bindings for showing the Main Menu and Run dialog. Openbox does this through the bundled <b>gnome-panel-control</b> tool, which can be used in keybindings to access the gnome-panel. Use the <b>--main-menu</b> option to display gnome-panel's menu, and the <b>--run-dialog</b> to display its Run dialog.
</p>
<h3><a name="install-kde"></a>
If you run the K desktop environment:</h3>
<p>
The default window manager for the KDE environment is <b>kwin</b>. To switch
from kwin to Openbox, set the following environment variable in your startup
scripts:
</p>
<blockquote>
% <b>export KDEWM=openbox</b>
</blockquote>
<p>
When the <b>KDEWM</b> environment variable is set, Openbox will be used in
place of kwin.
</p>
<p>
<b>Note:</b> The current release of KDE is still using a non-standard,
deprecated protocol for its system tray. This protocol requires interaction
from the window manager. In place of that, Openbox includes the
<b>kdetrayproxy</b> application. Once you run it, KDE system tray apps will
work with window managers that don't support the legacy protocol, like Openbox.
</p>
<p>
To run <b>kdetrayproxy</b> before running KDE, and if you are using the KDE
login manager, it may be easiest to use the
<a href="#install-xdm">display manager</a> method, and make a startup script
something like:
</p>
<blockquote>
# Startup stuff for X<br />
<br />
# Make openbox the KDE window manager<br />
export KDEWM=openbox<br />
<br />
# Make KDE system tray apps work<br />
kdetrayproxy &<br />
<br />
# Start the KDE environment<br />
startkde
</blockquote>
<h3><a name="install-startx"></a>
If you run X via the <b>startx</b> command:</h3>
<p>
You need to edit your <b>$HOME/.xinitrc</b> file. This file is simply
a shell script, so to lauch Openbox just make a file something like this:
</p>
<blockquote>
# Startup stuff for X<br />
<br />
exec openbox<br />
</blockquote>
<h3><a name="install-xdm"></a>
If you run X via a <b>display manager</b> (xdm, gdm, kdm, ...):</h3>
<p>
You may consult the documentation for your specific display manager regarding
adding entries to it. Alternately, you can edit a <b>$HOME/.xsession</b> file.
The file is a shell script and can be made identical to the <b>.xinitrc</b>
example above. With this method, you would choose <b>default</b> as the login
target in your display manager.
</p>
<a href="toc.html">Table of Contents</a>

161
debian/docs/config.html vendored Normal file
View File

@ -0,0 +1,161 @@
<a href="toc.html">Table of Contents</a>
<h1>Configuring Openbox</h1>
<h2><a name="locations"></a>File locations</h2>
<p>
When looking for its configuration files (<b>rc.xml</b>, <b>menu.xml</b>), Openbox follows the <a href="http://www.freedesktop.org/standards/basedir-spec/">freedesktop.org base-dir specification</a>. You can read the short specification for all the details. However, the end default result will be as follows.
</p>
<p>
First Openbox will try for your config files in <b>$HOME/.config/openbox/</b>. If it is unable to find them there, then it will try the system configuration dir (use <b>./configure --sysconfdir</b> to modify this when configuring the Openbox build. If you installed Openbox from a distribution package, then it will most likely be looking in <b>/etc/xdg/openbox/</b>. If you built Openbox yourself and do not specify --sysconfdir, then it will be looking in <b>/usr/local/etc/xdg/openbox</b>.
</p>
<h2><a name="options"></a>Options</h2>
<p>
Most users will want to use the ObConf tool to configure Openbox. You can
launch the tool by running:
</p>
<blockquote>
% <b>obconf</b>
</blockquote>
<p>
See <a href="http://openbox.org/obconf">the ObConf webpage</a> to get this handy tool.
</p>
<p>
If you don't want/have ObConf, you can edit the configuration by hand. The
recommended procedure for this is to copy the system config to
<b>$HOME/.config/openbox/</b> and edit that to your liking.
</p>
<h2><a name="menus"></a>Menus</h2>
<p>
Menus are searched for in the directories given in the <a href="#locations">File locations</a> section.
</p>
<p>
You can specify the names of the menu files to load in the <b>rc.xml</b>'s <b>menu</b> section. Absolute paths can also be used to look outside of the default search paths. For example:
</p>
<blockquote>
&lt;menu&gt;<br />
&nbsp;&nbsp;&lt;file&gt;mymenu.xml&lt;/file&gt;<br />
&nbsp;&nbsp;&lt;file&gt;myothermenu.xml&lt;/file&gt;<br />
&nbsp;&nbsp;&lt;file&gt;/etc/system/openboxmenu.xml&lt;/file&gt;<br />
&lt;/menu&gt;
</blockquote>
<p>
If no menus are specified in the <b>rc.xml</b>, Openbox will look for <b>menu.xml</b>.
</p>
<h2><a name="themes"></a>Themes</h2>
<p>
First off, the theme format is not backwards compatible with Openbox2/Blackbox/Fluxbox themes. The <b>themeupdate.py</b> script included in the Openbox distribution can be used to aid in porting Openbox2/Blackbox/Fluxbox themes over.
</p>
<h3>Paths</h3>
<p>
Themes are searched for in the data directories specified in the <b>base-dir spec</b> mentioned in the <a href="#locations">File locations</a> section. In addition to these paths, Openbox also looks in <b>$HOME/.themes/</b> for backwards compatibility with existing applications. This means, by default, the following directories will be searched in order: <b>$HOME/.themes/</b>, <b>$HOME/.local/share/themes/</b>, <b>$PREFIX/share/themes/</b>. This means that Openbox themes can now be bundled with other themes (such as GTK+ themes).
</p>
<h3>Structure</h3>
<p>
Each theme is self-contained within its own directory. The theme file itself is a file named <b>themerc</b> inside the theme's <b>openbox-3</b> directory. So for a theme named "Foo", its directory layout might look like this:
</p>
<blockquote>
<b>Foo/openbox-3/themerc</b><br />
Foo/openbox-3/max.xbm<br />
Foo/openbox-3/close.xbm
</blockquote>
<p>
We'll get to the xbms later.
</p>
<h3>Fonts</h3>
<p>
Fonts are each specified through a single .font property. Different fonts can be specified for focused and unfocused windows. The available font properties are:
</p>
<ul>
<li>window.label.focus.font</li>
<li>window.label.unfocus.font</li>
<li>menu.title.font</li>
<li>menu.items.font</li>
</ul>
<p>
This property is an Xft/Fontconfig font string. It is highly recommended that when specifying this, you specify the size of the font by pixelsize, not by pointsize. Some details on building the required font string can be found in this <a href="http://keithp.com/~keithp/render/Xft.tutorial">Xft tutorial</a>.
</p>
<p>
There are a couple extensions to the font string's options for openbox:
</p>
<ul>
<li>shadow [boolean] (defaults to off)</li>
<li>shadowoffset [integer] (defaults to 1)</li>
<li>shadowtint [integer] (defaults to 25%)</li>
</ul>
<p>
Example:
</p>
<blockquote>
window.focus.font: arial,sans:bold:pixelsize=12:shadow=y
</blockquote>
<h3>Titlebar Button Bitmaps</h3>
<p>
A number of X Bitmap (xbm) files are used to specify the look of the titlebar buttons. These buttons are all found
under the <b>Theme/openbox-3/</b> directory. The following names are looked for:
</p>
<ul>
<li>max.xbm - maximized button</li>
<li>max_toggled.xbm - maximized button toggled</li>
<li>max_disabled.xbm - maximized button disabled</li>
<li>max_hover.xbm - maximized button while being hovered over</li>
<li>max_pressed.xbm - maximized button while being pressed</li>
<li>iconify.xbm - iconify button</li>
<li>iconify_disabled.xbm - iconify button disabled</li>
<li>iconify_hover.xbm - iconify button while being hovered over</li>
<li>iconify_pressed.xbm - iconify button while being pressed</li>
<li>desk.xbm - all-desktops button</li>
<li>desk_toggled.xbm - all-desktops button toggled</li>
<li>desk_disabled.xbm - all-desktops button disabled</li>
<li>desk_hover.xbm - all-desktops button while being hovered over</li>
<li>desk_pressed.xbm - all-desktops button while being pressed</li>
<li>shade.xbm - shade button</li>
<li>shade_toggled.xbm - shade button toggled</li>
<li>shade_disabled.xbm - shade button disabled</li>
<li>shade_hover.xbm - shade button while being hovered over</li>
<li>shade_pressed.xbm - shade button while being pressed</li>
<li>close.xbm - close button</li>
<li>close_disabled.xbm - close button disabled</li>
<li>close_hover.xbm - close button while being hovered over</li>
<li>close_pressed.xbm - close button while being pressed</li>
<li>bullet.xbm - submenu bullet in menus</li>
</ul>
<h3>Background</h3>
<p>
Themes do not provide a means for setting the background. There are many tools around for setting the root image (xsetroot, Esetroot, Rox, Gnome, Kde, etc!) so there is no point in rewriting those for Openbox.
</p>
<h3>Etc</h3>
<p>
A more detailed description and list of all the theme elements will be forthcoming. In the meantime, examples found in the distribution can be used for documentation.
</p>
<a href="toc.html">Table of Contents</a>

962
debian/docs/details.html vendored Normal file
View File

@ -0,0 +1,962 @@
<a href="toc.html">Table of Contents</a>
<h1>Details of the Config Files</h1>
<h2><a name="keybindings"></a>Key Bindings</h2>
<h3>Introduction</h3>
<p>
Key bindings are used to bind <a href="#actions">actions</a> to key
combinations. Whenever the combination is pressed, the actions bound to it will
be executed.
</p>
<p>
Key bindings are found in the <b>keyboard</b> section of the <b>rc.xml</b>
file. Any key bindings outside of the keyboard section will be ignored.
</p>
<h3>Syntax</h3>
<p>
Key bindings are specified using the following:
</p>
<blockquote>
&lt;keybind key="KEY COMBO"&gt;<br />
&nbsp;&nbsp;ACTIONS<br />
&lt;/keybind&gt;
</blockquote>
<p>
Any number of <a href="#actions">actions</a> may appear in a keybind.
</p>
<p>
<b>KEY COMBO</b> is the key combination to be bound. The key combo has the
following syntax: <b>Modifier-Modifier-Key</b>. Any number of modifiers can
be specified, following each one with a '-'. The available modifiers are:
</p>
<ul>
<li><b>S</b> - the Shift key</li>
<li><b>C</b> - the Control key</li>
<li><b>A</b> - the Alt key</li>
<li><b>W</b> - the Windows keys</li>
<li><b>M</b> - Mod3, not set by default i think</li>
</ul>
<p>
Mod1 though Mod5 may also be used as modifiers. The xmodmap tool is used to
set these up. The A and W modifiers are merely aliases for Mod1 and Mod4.
</p>
<p>
The Key is the name of the key, such as 'a' or 'F1' or '4'. You can find the
name of a key by running <b>xev</b> in a terminal, pressing the key, and
watching the output from xev in the terminal.
</p>
<p>
<b>ACTIONS</b> is any number of <a href="#actions">actions</a> which will be
executed when the key combination is pressed.
</p>
<h3>Chaining</h3>
<p>
Key-chains, as first seen in Emacs, are possible by simply nesting the key bindings. For example:
</p>
<blockquote>
&lt;keybind key="C-f"&gt;<br />
&nbsp;&nbsp;&lt;keybind key="x"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/keybind&gt;<br />
&lt;/keybind&gt;
</blockquote>
<p>
The actions bound in this example would be fired by first pressing "C-f" (Hold Control - Press f), and then releasing everything and pressing "x".
</p>
<p>
If you begin a key-chain, you will be unable to type in your applications until you complete the chain. After a short wait the chain will time out, and be cancelled. You may also cancel out of a chain by using the "C-g" (Hold Control - Press g) key sequence (the same as is used in Emacs). The cancelling key sequence is configurable if desired.
</p>
<h2><a name="mousebindings"></a>Mouse Bindings</h2>
<h3>Introduction</h3>
<p>
Mouse bindings are used to bind <a href="#actions">actions</a> to mouse interactions. These control most of Openbox's behavior, from what happens when you click the Close button in a window's titlebar to how you drag windows to move them around the screen.
</p>
<p>
Mouse bindings are found in the <b>mouse</b> section of the <b>rc.xml</b> file. Any mouse bindings outside of the mouse section will be ignored.
</p>
<h3>Syntax</h3>
<p>
Mouse bindings are specified using the following:
</p>
<blockquote>
&lt;context name="CONTEXT"&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="BUTTON" action="INTERACTION"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&lt;/context&gt;
</blockquote>
<p>
Any number of mousebinds may appear in a context, and any number of <a href="#actions">actions</a> may appear in a mousebind.
</p>
<p>
First, some definitions:
</p>
<ul>
<li>
<b>Decorations</b> - The decorations drawn by Openbox around your applications. This includes the
<b>Titlebar</b> displayed on the top of each window, with the title, and some buttons in it. It also includes
the <b>Handle</b> displayed on the bottom of each window.
</li>
<li>
<b>Client area</b> - The applications themselves. This is the section of the window inside the
<b>Decorations</b>.
</li>
</ul>
<p>
<b>CONTEXT</b> is the context in which the mouse interaction is taking place. The possible contexts are:
</p>
<ul>
<li>
<b>Frame</b> - Includes the entirety of all windows. This includes on their decorations <i>and</i> in their
<b>Client area</b>. <b>Note:</b> When a button is bound in this context, the clicks <b>will not</b> be
passed through to the application. Use with care.
</li>
<li>
<b>Client</b> - The <b>Client area</b> of all windows. <b>Notes:</b> When a button is bound in this
context, the clicks <b>will</b> be passed through to the application. Because of how these are handled,
<b>Press</b> interactions are the only useful interactions for this context.
</li>
<li>
<b>Desktop</b> - The desktop or background. This works even when you are running a file manager such
as Nautilus.
</li>
<li>
<b>Titlebar</b> - The <b>Decorations</b> on the top of each window, containing the window's title.
</li>
<li>
<b>Handle</b> - The <b>Decorations</b> on the bottom of each window.
</li>
<li>
<b>TLCorner</b> - The top-left corner of the window's titlebar (the mouse cursor changes while over
this). Generally this is only used for resizing windows.
</li>
<li>
<b>TRCorner</b> - The top-right corner of the window's titlebar (the mouse cursor changes while over
this). Generally this is only used for resizing windows.
</li>
<li>
<b>BLCorner</b> - The bottom-left corner of the window's handle (the mouse cursor changes while over
this). Generally this is only used for resizing windows.
</li>
<li>
<b>BRCorner</b> - The bottom-right corner of the window's handle (the mouse cursor changes while over
this). Generally this is only used for resizing windows.
</li>
<li>
<b>Icon</b> - The window's icon in all window's titlebars.
</li>
<li>
<b>AllDesktops</b> - The All-Desktops (Omnipresent) button in all window's titlebars. This button is not
visible in the default settings. It is called the All-Desktop button because its default bindings toggle
omnipresence on the window.
</li>
<li>
<b>Shade</b> - The Shade button in all window's titlebars. This button is not visible in the default settings. It
is called the Shade button because its default bindings toggle shading on the window.
</li>
<li>
<b>Iconify</b> - The Iconify button in all window's titlebars. It is called the Iconify button because its default
bindings iconify the window.
</li>
<li>
<b>Maximize</b> - The Maximize button in all window's titlebars. It is called the Maximize button because its
default bindings maximize the window.
</li>
<li>
<b>Close</b> - The Close button in all window's titlebars. It is called the Close button because its
default bindings close the window.
</li>
<li>
<b>MoveResize</b> - Bindings under this context are available while moving or resizing a window.
</li>
</ul>
<p>
<b>BUTTON</b> is the mouse button and keyboard modifiers being bound. The button has the following syntax: <b>Modifier-Modifier-Button</b>. Any number of modifiers can be specified, following each one with a '-'. The available modifiers are listed <a href=docs.php?page=details.html#keybindings>here</a><!--:
</p>
<ul>
<li><b>S</b> - the Shift key</li>
<li><b>C</b> - the Control key</li>
<li><b>A</b> - the Alt key</li>
<li><b>W</b> - the Windows keys</li>
</ul>
<p>
Mod1 though Mod5 may also be used as modifiers. The xmodmap tool is used to
set these up. The A and W modifiers are merely aliases for Mod1 and Mod4.
-->
</p>
<p>
The Button can be the button's number, such as <b>1</b> or <b>3</b>, or it can be a name. The available names are <b>Left</b>, <b>Middle</b>, <b>Right</b>, <b>Up</b>, and <b>Down</b>.
</p>
<p>
<b>INTERACTION</b> specifies what you are doing with your mouse for the binding. It can be one of the following:
</p>
<ul>
<li><b>Press</b> - A mouse button is pressed.</li>
<li><b>Release</b> - A mouse button is released.</li>
<li><b>Click</b> - A mouse button is pressed and released.</li>
<li>
<b>DoubleClick</b> - A mouse button is pressed and released twice, quickly. The time delay in which
both clicks must occur is configurable.
</li>
<li><b>Drag</b> - A mouse button is pressed, and the mouse is moved while holding the button down.</li>
</ul>
<p>
<b>ACTIONS</b> is any number of <a href="#actions">actions</a> which will be executed when the mouse interaction occurs in the given context.
</p>
<h3>Examples</h3>
<blockquote>
&lt;context name="Close"&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="Left" action="Press"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&lt;/context&gt;<br />
&lt;context name="Titlebar"&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="Left" action="Press"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="Left" action="Click"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="Left" action="Drag"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&nbsp;&nbsp;&lt;mousebind button="Right" action="Press"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/mousebind&gt;<br />
&lt;/context&gt;
</blockquote>
<h2><a name="menus"></a>Menus</h2>
<h3>Introduction</h3>
<p>
Menus are not read out of the <b>rc.xml</b> file, but rather out of files specified in the <b>rc.xml</b>. By default, the <b>menu.xml</b> file is read to build the menus.
</p>
<p>
Each menu is given an <b>ID</b> which is used in the bindings to specify which menu is being shown.
</p>
<p>
Openbox provides a few default menus:
</p>
<ul>
<li><b>client-menu</b> - A menu for controlling a window.</li>
<li><b>client-send-to-menu</b> - A menu for sending windows to desktops.</li>
<li><b>client-layer-menu</b> - A menu for selecting stacking layers for windows (Always on top, etc).</li>
<li><b>client-list-menu</b> - A menu for selecting a window or desktop to use.</li>
</ul>
<h3>Syntax</h3>
<p>
A menu file must be entirely enclosed within:
</p>
<blockquote>
&lt;openbox_menu&gt;<br />
...<br />
&lt;/openbox_menu&gt;<br />
</blockquote>
<p>
Inside these, menus are specified as follows:
</p>
<blockquote>
&lt;menu id="ID" label="TITLE"&gt;<br />
<br />
&nbsp;&nbsp;&lt;item label="LABEL"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/item&gt;<br />
<br />
&nbsp;&nbsp;&lt;separator /&gt;<br />
<br />
&nbsp;&nbsp;&lt;menu id="ID" /&gt;<br />
<br />
&nbsp;&nbsp;&lt;separator /&gt;<br />
<br />
&nbsp;&nbsp;&lt;menu id="ID" label="TITLE" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;item label="LABEL"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;<br />
&nbsp;&nbsp;&lt;/menu&gt;<br />
<br />
&nbsp;&nbsp;&lt;separator /&gt;<br />
<br />
&nbsp;&nbsp;&lt;item label="LABEL"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/item&gt;<br />
<br />
&lt;/menu&gt;<br />
</blockquote>
<p>
The syntax example above shows how to put entries into a menu (items) and two methods to add submenus to a menu. It also shows how to put separators into the menu to group items visibly.
</p>
<p>
Submenus can be simply referenced, and defined outside the parent menu (as the first submenu in the example would be). Submenus can also be nested directly into the containing menu, and still be referenced elsewhere.
</p>
<p>
<b>ID</b> is a unique identifier used to reference the menu. The value of the ID can be used in a <b>ShowMenu</b> <a href="#actions">action</a> to use the menu.
</p>
<p>
<b>TITLE</b> is the title displayed on the menu.
</p>
<p>
<b>LABEL</b> is the text displayed in the menu item
</p>
<p>
<b>ACTIONS</b> is any number of <a href="#actions">actions</a> which will be executed when the menu item is selected.
</p>
<h3>Pipe menus</h3>
<p>
Openbox allows for dynamic menus, built on-the-fly from scripts. These are referred to as "Pipe menus" since the script's output is piped back to Openbox and used for the menu.
</p>
<p>
A Pipe menu can be created by placing the following into a menu file:
</p>
<blockquote>
&lt;menu id="ID" label="TITLE" execute="COMMAND" /&gt;<br />
</blockquote>
<p>
The generated Pipe menu can be referenced just like any other menu.
</p>
<p>
<b>COMMAND</b> is a command which is executed. The output from this command is parsed and turned into the menu. The output from the script should be a menu, something like:
</p>
<blockquote>
&lt;openbox_pipe_menu&gt;<br />
&nbsp;&nbsp;&lt;item label="LABEL"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ACTIONS<br />
&nbsp;&nbsp;&lt;/item&gt;<br />
&lt;/openbox_pipe_menu&gt;<br />
</blockquote>
<h2><a name="actions"></a>Actions</h2>
<h3>Introduction</h3>
<p>
Actions are used to specify the behavior of Openbox. Any place where
you can use actions, you can place more than one in a row to cause them all
to execute one after the other.
</p>
<h3>Syntax</h3>
<h4>Basic Syntax</h4>
<p>
Actions are specified using the following:
</p>
<blockquote>
&lt;action name="NAME"&gt;PARAMETERS&lt;/action&gt;
</blockquote
<p>
<b>NAME</b> is the name of the action, specifying which action to execute.
</p>
<p>
<b>PARAMETERS</b> is any possible inner tags to change how the action
will behave. For example, the <b>Execute</b> action has an inner execute
parameter specifying what will be run:
</p>
<blockquote>
&lt;action name="Execute"&gt;&lt;execute&gt;xterm&lt;/execute&gt;&lt;/action&gt;
</blockquote>
<p>
As another example, the <b>DesktopRight</b> action has an inner wrap parameter
which specifies if the action should wrap around to the beginning when trying
to go past the end:
</p>
<blockquote>
&lt;action name="DesktopRight"&gt;&lt;wrap&gt;no&lt;/wrap&gt;&lt;/action&gt;
</blockquote>
<h4>Syntax of Parameters</h4>
<p>
There are 3 types of parameters:
</p>
<ul>
<li>Strings</li>
<li>Numbers</li>
<li>Booleans (True/False)</li>
</ul>
<p>
The format of Strings and Numbers is pretty obvious. <b>foo</b> would be a valid
String, and <b>23</b> would be a valid Number.
</p>
<p>
Booleans can be specied with one of: <b>true</b>, <b>false</b>, <b>yes</b>,
<b>no</b>, <b>on</b>, or <b>off</b>.
</p>
<h4>Actions on Windows</h4>
<p>
Some actions will be performed globally, but some must be associated with a
window, and cause the action to be applied to that window. When binding
actions to mouse clicks, the window clicked on will have all the bound actions
performed on it as applicable. When binding actions to keys, the actions will
be associated with the currently focused window.
</p>
<h3>Available actions</h3>
<h4>Global Actions</h4>
<table class="docs">
<tr>
<th>Name</th>
<th>Parameters (default value in brackets)</th>
</tr>
<tr>
<td><b>Execute</b> - run an executable</td>
<td><b>command</b> () - specifies the executable to be run along with any
arguments to pass it. The tilde ('~') character will be expanded in this
string to your home directory, but no other shell expansions or
scripting syntax can be used in the command.
</td>
</tr>
<tr>
<td><b>DirectionalFocusNorth</b> - cycles focus to the window north of the
currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusEast</b> - cycles focus to the window east of the
currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusSouth</b> - cycles focus to the window south of the
currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusWest</b> - cycles focus to the window west of the
currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusNorthEast</b> - cycles focus to the window northeast
of the currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusSouthEast</b> - cycles focus to the window southeast
of the currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusSouthWest</b> - cycles focus to the window southwest
of the currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>DirectionalFocusNorthWest</b> - cycles focus to the window northwest
of the currently focused window.</td>
<td><b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>NextWindow</b> - cycles focus to the next window.</td>
<td><b>linear</b> (no) - when true, windows are always cycled in the order
in which they appeared; otherwise, they are cycled in order of
recent use.
<b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>PreviousWindow</b> - cycles focus to the previous window.</td>
<td><b>linear</b> (no) - when true, windows are always cycled in the order
in which they appeared; otherwise, they are cycled in order of
recent use.
<b>dialog</b> (yes) - display the focus cycling dialog while switching focus.</td>
</tr>
<tr>
<td><b>Desktop</b> - changes the currently visible desktop.</td>
<td><b>desktop</b> (1) - the number of the desktop (starting at 1) to make
visible.
<b>dialog</b> (no) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>AddDesktopLast</b> - Adds a new desktop at the end of the list of current desktops.</td>
</tr>
<tr>
<td><b>RemoveDesktopLast</b> - Removes the last of the current desktops.</td>
</tr>
<tr>
<td><b>AddDesktopCurrent</b> - Adds a new desktop at the current location in the list of desktops.</td>
</tr>
<tr>
<td><b>RemoveDesktopCurrent</b> - Removes the current desktop.</td>
</tr>
<tr>
<td><b>DesktopNext</b> - makes the next desktop visible.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>DesktopPrevious</b> - makes the previous desktop visible.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>DesktopRight</b> - makes visible the desktop to the right of the
currrently visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>DesktopLeft</b> - makes visible the desktop to the left of the
currently visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>DesktopDown</b> - makes visible the desktop beneath the currently
visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>DesktopUp</b> - makes visible the desktop above the currently
visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>dialog</b> (yes) - display the desktop dialog (with pager) while switching desktops. This will only
work in keyboard bindings; otherwise, it is disabled.</td>
</tr>
<tr>
<td><b>ToggleShowDesktop</b> - toggles between <a>ShowDesktop</a> and
<a>UnshowDesktop</a>.</td>
</tr>
<tr>
<td><b>DesktopLast</b> - makes the most recently visible desktop visible
again. Only one desktop is remembered, so using this twice will simply
flip between two desktops.</td>
</tr>
<tr>
<td><b>ShowMenu</b> - shows a menu by name</td>
<td><b>menu</b> () - the name of the menu to show. The names of menus are
specified in the <b>id</b> attribute of their <b>menu</b> tag.</td>
</tr>
<tr>
<td><b>Reconfigure</b> - reloads the config file, menu, and theme.</td>
</tr>
<tr>
<td><b>Restart</b> - restarts Openbox. This starts a new copy of Openbox,
and can be used to upgrade to a newly installed version.</td>
<td><b>command</b> () - when this is used, the executable specified within
will be run instead of Openbox. This can be used to switch to another
window manager if desired.</td>
</tr>
<tr>
<td><b>Exit</b> - exits Openbox.</td>
</tr>
</table>
<h4>Actions for Windows</h4>
<table class="docs">
<tr>
<th>Name</th>
<th>Parameters (default value in brackets)</th>
</tr>
<tr>
<td><b>Activate</b> - activates the window. This is the same process that
occurs when focus cycling to a window, or selecting it in the
client-list-menu.</td>
</tr>
<tr>
<td><b>Focus</b> - give focus to the window.</td>
</tr>
<tr>
<td><b>Unfocus</b> - remove focus from the window.</td>
</tr>
<tr>
<td><b>Iconify</b> - iconify the window. This causes the window to
not be shown on screen. The window can be found again with focus cycling
or with the client-list-menu.</td>
</tr>
<tr>
<td><b>RaiseLower</b> - raise the window to the forefront if it is obscured
behind anything; lower it to the back if it is already at the front.</td>
</tr>
<tr>
<td><b>Raise</b> - raise the window to the forefront.</td>
</tr>
<tr>
<td><b>Lower</b> - lower the window to the back.</td>
</tr>
<tr>
<td><b>Close</b> - request the window to close.</td>
</tr>
<tr>
<td><b>Kill</b> - forcibly disconnect the window's application from the
X server.</td>
</tr>
<tr>
<td><b>ShadeLower</b> - <a>Shade</a> the window; if the window is already
shaded, then <a>Lower</a> it.</td>
</tr>
<tr>
<td><b>UnshadeRaise</b> - <a>Unshade</a> the window; if the window is
already unshaded, then <a>Raise</a> it.</td>
</tr>
<tr>
<td><b>Shade</b> - shade the window. This hides everything of the window
except the titlebar. This concept has also been known as "rolling up" the
window into the titlebar.</td>
</tr>
<tr>
<td><b>Unshade</b> - unshade the window. This shows the entire window if it
was previously shaded.</td>
</tr>
<tr>
<td><b>ToggleShade</b> - toggles the shaded state of the window, firing the
<a>Shade</a> and <a>Unshade</a> actions appropriately.</td>
</tr>
<tr>
<td><b>ToggleOmnipresent</b> - toggles between moving the client to all
desktops (omnipresent) and to the currently visible desktop.</td>
</tr>
<tr>
<td><b>MoveRelative</b> - moves the window</td>
<td><b>x</b> (0) - the number of pixels to move the window horizontally. A positive
value moves to the right, a negative value moves to the left.<br/>
<b>y</b> (0) - the number of pixels to move the window vertically. A positive
value moves down, a negative value moves up.</td>
</tr>
<tr>
<td><b>ResizeRelative</b> - resizes the window</td>
<td><b>top</b> or <b>up</b> (0) - the amount to move the top edge of the window. A positive
value makes the window taller, a negative value makes it shorter.<br/>
<b>bottom</b> or <b>down</b> (0) - the amount to move the bottom edge of the window. A positive
value makes the window taller, a negative value makes it shorter.<br/>
<b>left</b> (0) - the amount to move the left edge of the window. A positive
value makes the window wider, a negative value makes it narrower.<br/>
<b>right</b> (0) - the amount to move the right edge of the window. A positive
value makes the window wider, a negative value makes it narrower.</td>
</tr>
<tr>
<td><b>MaximizeFull</b> - maximizes a window to fill the entire screen.</td>
</tr>
<tr>
<td><b>UnmaximizeFull</b> - restores a window to its original size.</td>
</tr>
<tr>
<td><b>ToggleMaximizeFull</b> - toggles between <a>MaximizeFull</a> and
<a>UnmaximizeFull</a>.</td>
</tr>
<tr>
<td><b>MaximizeHorz</b> - maximizes a window to fill the entire screen
horizontally, but not vertically.</td>
</tr>
<tr>
<td><b>UnmaximizeHorz</b> - restores a window to its original size.</td>
</tr>
<tr>
<td><b>ToggleMaximizeHorz</b> - toggles between <a>MaximizeHorz</a> and
<a>UnmaximizeHorz</a>.</td>
</tr>
<tr>
<td><b>MaximizeVert</b> - maximizes a window to fill the entire screen
vertically, but not horizontally.</td>
</tr>
<tr>
<td><b>UnmaximizeVert</b> - restores a window to its original size.</td>
</tr>
<tr>
<td><b>ToggleMaximizeVert</b> - toggles between <a>MaximizeHorz</a> and
<a>UnmaximizeVert</a>.</td>
</tr>
<tr>
<td><b>SendToDesktop</b> - sends the window to the specified desktop</td>
<td><b>desktop</b> (1) - the number of the desktop (starting at 1) to
send the window to.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopNext</b> - sends the window to the next desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopPrevious</b> - sends the window to the previous
desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopRight</b> - sends the window to the desktop to the
right of the currently visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopLeft</b> - sends the window to the desktop to the
left of the currently visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopDown</b> - sends the window to the desktop beneath the
currently visible desktop.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the first desktop when
going past the last.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>SendToDesktopUp</b> - sends the window to the desktop above the
currently visible desktops.</td>
<td><b>wrap</b> (yes) - whether to wrap around to the last desktop when
going past the first.<br />
<b>follow</b> (yes) - whether to change to the desktop while moving
the window.</td>
</tr>
<tr>
<td><b>ToggleDecorations</b> - toggles if the window is given decorations.
Decorations are the the titlebar and handle that are shown around most
windows.</td>
</tr>
<tr>
<td><b>Move</b> - begins an interactive move. The move will complete when the
mouse button is released, if it is bound to one. The Enter key will also
complete the move, and the Escape key will cancel it.</td>
</tr>
<tr>
<td><b>Resize</b> - begins an interactive resize. The resize will complete
when the mouse button is released, if it is bound to one. The Enter
key will also complete the resize, and the Escape key will cancel
it.</td>
</tr>
<tr>
<td><b>SendToTopLayer</b> - makes the window always-on-top.</td>
</tr>
<tr>
<td><b>SendToNormalLayer</b> - make the window not always-on-top or
always-on-bottom.</td>
</tr>
<tr>
<td><b>SendToBottomLayer</b> - makes the window always-on-bottom.</td>
</tr>
<tr>
<td><b>ToggleAlwaysOnTop</b> - toggles between <a>SendToTopLayer</a> and
<a>SendToNormalLayer</a>.</td>
</tr>
<tr>
<td><b>ToggleAlwaysOnBottom</b> - toggles between <a>SendToBottomLayer</a>
and <a>SendToNormalLayer</a>.</td>
</tr>
<tr>
<td><b>MoveToEdgeNorth</b> - moves the window to the nearest edge to
the north of it.</td>
</tr>
<tr>
<td><b>MoveToEdgeSouth</b> - moves the window to the nearest edge to
the south of it.</td>
</tr>
<tr>
<td><b>MoveToEdgeEast</b> - moves the window to the nearest edge to
the east of it.</td>
</tr>
<tr>
<td><b>MoveToEdgeWest</b> - moves the window to the nearest edge to
the west of it.</td>
</tr>
<tr>
<td><b>GrowToEdgeNorth</b> - resizes the window up to the nearest edge to
the north of it.</td>
</tr>
<tr>
<td><b>GrowToEdgeSouth</b> - resizes the window up to the nearest edge to
the south of it.</td>
</tr>
<tr>
<td><b>GrowToEdgeEast</b> - resizes the window up to the nearest edge to
the east of it.</td>
</tr>
<tr>
<td><b>GrowToEdgeWest</b> - resizes the window up to the nearest edge to
the west of it.</td>
</tr>
</table>
<h3>Examples</h3>
<blockquote>
&lt;action name="Raise"/&gt;<br />
&lt;action name="Focus"/&gt;
</blockquote>
<blockquote>
&lt;action name="ShowMenu"&gt;&lt;menu&gt;root-menu&lt;/menu&gt;&lt;/action&gt;
</blockquote>
<blockquote>
&lt;action name="MoveRelativeVert"&gt;&lt;delta&gt;5&lt;/delta&gt;&lt;/action&gt;
</blockquote>
<blockquote>
&lt;action name="SendToDesktopNext"&gt<br />
&nbsp;&nbsp;&lt;wrap&gt;no&lt;/wrap&gt;<br />
&nbsp;&nbsp;&lt;follow&gt;no&lt;/follow&gt;<br />
&lt;/action&gt;
</blockquote>
<a href="toc.html">Table of Contents</a>

38
debian/docs/toc.html vendored Normal file
View File

@ -0,0 +1,38 @@
<h1>Openbox</h1>
<ol class="toc">
<li><a href="build.html">Building Openbox</a></li>
<ol class="toc">
<li><a href="build.html#compile">Compiling</a></li>
<li><a href="build.html#install">Installing</a></li>
<ol class="toc">
<li><a href="build.html#install-gnome">
Using with GNOME</a></li>
<li><a href="build.html#install-kde">
Using with KDE</a></li>
<li><a href="build.html#install-startx">
Using with startx</a></li>
<li><a href="build.html#install-xdm">
Using with xdm/xgm/kdm</a></li>
</ol>
</ol>
<li><a href="config.html">Configuring Openbox</a></li>
<ol class="toc">
<li><a href="config.html#locations">File locations</a></li>
<li><a href="config.html#options">Options</a></li>
<li><a href="config.html#menus">Menus</a></li>
<li><a href="config.html#themes">Themes</a></li>
</ol>
<li><a href="details.html">Details of the Config Files</a></li>
<ol class="toc">
<li><a href="details.html#keybindings">Key Bindings</a></li>
<li><a href="details.html#mousebindings">Mouse Bindings</a></li>
<li><a href="details.html#menus">Menus</a></li>
<li><a href="details.html#actions">Actions</a></li>
</ol>
</ol>

64
debian/gdm-control.pod vendored Normal file
View File

@ -0,0 +1,64 @@
=head1 NAME
Openbox - standards compliant, fast, light-weight, extensible window manager.
=head1 SYNOPSIS
gdm-control <option>
=head1 DESCRIPTION
gdm-control lets you control gdm from within an X session.
It enables you to change GDM's behaviour for when you end the current sesson.
For instance, you can tell GDM to reboot, and then immediately log out
of the current session, and the computer will be rebooted.
=head1 OPTIONS
=over 5
=item B<< --help >>
Display some help and exit.
=item B<< --none >>
Do nothing special when the current session ends.
=item B<< --shutdown >>
Shutdown the computer when the current session ends.
=item B<< --reboot >>
eboot the computer when the current session ends.
=item B<< --suspend >>
Suspend the computer when the current session ends.
=item B<< --switch-user >>
Log in as a new user (this works immediately).
=back
=head1 AUTHORS
Openbox was written by Mikael Magnusson <mangosoft@comhem.se> and Dana Jansens
<danakj@orodu.net>, aided by several contributors; for a full list read the
file AUTHORS.
This manual page was written by Nico Golde <nion@debian.org>
=head1 COPYRIGHT
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, or (at your option) any
later version.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
=cut

1
debian/gnome-panel-control.install vendored Normal file
View File

@ -0,0 +1 @@
usr/bin/gnome-panel-control

1
debian/gnome-panel-control.manpages vendored Normal file
View File

@ -0,0 +1 @@
gnome-panel-control.1

54
debian/gnome-panel-control.pod vendored Normal file
View File

@ -0,0 +1,54 @@
=head1 NAME
Openbox - standards compliant, fast, light-weight, extensible window manager.
=head1 SYNOPSIS
gnome-panel-control <option>
=head1 DESCRIPTION
As of GNOME 2.4, gnome-panel no longer manages its own key bindings, and
requires that the window manager provide its own key bindings for showing the
Main Menu and Run dialog. Openbox does this through the bundled
B<< gnome-panel-control >> tool, which can be used in keybindings to access the
gnome-panel. Use the B<< --main-menu >> option to display gnome-panel's menu,
and the B<< --run-dialog >> to display its Run dialog.
=head1 OPTIONS
=over 5
=item B<< --help >>
Display some help and exit.
=item B<< --main-menu >>
Show the main menu.
=item B<< --run-dialog >>
Show the run dialog.
=back
=head1 AUTHORS
Openbox was written by Mikael Magnusson <mangosoft@comhem.se> and Ben Jansens
<ben@openbox.org>, aided by several contributors; for a full list read the
file AUTHORS.
This manual page was written by Tore Anderson <tore@debian.org>.
=head1 COPYRIGHT
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, or (at your option) any
later version.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
=cut

35
debian/kdetrayproxy.pod vendored Normal file
View File

@ -0,0 +1,35 @@
=head1 NAME
Openbox - standards compliant, fast, light-weight, extensible window manager.
=head1 SYNOPSIS
kdetrayproxy &
=head1 DESCRIPTION
The current release of KDE is still using a non-standard, deprecated protocol
for its system tray. This protocol requires interaction from the window
manager. In place of that, Openbox includes the B<< kdetrayproxy >>
application. Once you run it, KDE system tray apps will work with window
managers that don't support the legacy protocol, like Openbox.
=head1 AUTHORS
Openbox was written by Mikael Magnusson <mangosoft@comhem.se> and Ben Jansens
<ben@openbox.org>, aided by several contributors; for a full list read the
file AUTHORS.
This manual page was written by Tore Anderson <tore@debian.org>.
=head1 COPYRIGHT
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, or (at your option) any
later version.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
=cut

2
debian/libobrender32v5.docs vendored Normal file
View File

@ -0,0 +1,2 @@
AUTHORS
README

2
debian/libobrender32v5.install vendored Normal file
View File

@ -0,0 +1,2 @@
usr/lib/*/libobrender.so.32.0.0
usr/lib/*/libobrender.so.32

82
debian/libobrender32v5.symbols vendored Normal file
View File

@ -0,0 +1,82 @@
libobrender.so.32 libobrender32v5 #MINVER#
DestroyImlibLoader@Base 3.6.0
DestroyRsvgLoader@Base 3.6.0
DrawRGBA@Base 3.6.0
LoadWithImlib@Base 3.6.0
LoadWithRsvg@Base 3.6.0
RrAppearanceAddTextures@Base 3.6.0
RrAppearanceClearTextures@Base 3.6.0
RrAppearanceCopy@Base 3.6.0
RrAppearanceFree@Base 3.6.0
RrAppearanceNew@Base 3.6.0
RrAppearanceRemoveTextures@Base 3.6.0
RrBlueMask@Base 3.6.0
RrBlueOffset@Base 3.6.0
RrBlueShift@Base 3.6.0
RrButtonFree@Base 3.6.0
RrButtonNew@Base 3.6.0
RrColorAllocateGC@Base 3.6.0
RrColorBlue@Base 3.6.0
RrColorCopy@Base 3.6.0
RrColorFree@Base 3.6.0
RrColorGC@Base 3.6.0
RrColorGreen@Base 3.6.0
RrColorHash@Base 3.6.0
RrColorNew@Base 3.6.0
RrColorParse@Base 3.6.0
RrColorPixel@Base 3.6.0
RrColorRed@Base 3.6.0
RrColormap@Base 3.6.0
RrDepth@Base 3.6.0
RrDisplay@Base 3.6.0
RrFontClose@Base 3.6.0
RrFontDraw@Base 3.6.0
RrFontHeight@Base 3.6.0
RrFontMeasureString@Base 3.6.0
RrFontOpen@Base 3.6.0
RrFontOpenDefault@Base 3.6.0
RrFontRef@Base 3.6.0
RrGreenMask@Base 3.6.0
RrGreenOffset@Base 3.6.0
RrGreenShift@Base 3.6.0
RrImageAddFromData@Base 3.6.0
RrImageCacheNew@Base 3.6.0
RrImageCacheRef@Base 3.6.0
RrImageCacheUnref@Base 3.6.0
RrImageDrawImage@Base 3.6.0
RrImageDrawRGBA@Base 3.6.0
RrImageNewFromData@Base 3.6.0
RrImageNewFromName@Base 3.6.0
RrImagePicHash@Base 3.6.0
RrImageRef@Base 3.6.0
RrImageSetDestroyFunc@Base 3.6.0
RrImageSetMergeSets@Base 3.6.0
RrImageUnref@Base 3.6.0
RrIncreaseDepth@Base 3.6.0
RrInstanceFree@Base 3.6.0
RrInstanceNew@Base 3.6.0
RrMargins@Base 3.6.0
RrMinHeight@Base 3.6.0
RrMinSize@Base 3.6.0
RrMinWidth@Base 3.6.0
RrPaint@Base 3.6.0
RrPaintPixmap@Base 3.6.0
RrPickColor@Base 3.6.0
RrPixmapMaskCopy@Base 3.6.0
RrPixmapMaskDraw@Base 3.6.0
RrPixmapMaskFree@Base 3.6.0
RrPixmapMaskNew@Base 3.6.0
RrPixmapToRGBA@Base 3.6.0
RrPseudoBPC@Base 3.6.0
RrPseudoColors@Base 3.6.0
RrRedMask@Base 3.6.0
RrRedOffset@Base 3.6.0
RrRedShift@Base 3.6.0
RrReduceDepth@Base 3.6.0
RrRender@Base 3.6.0
RrRootWindow@Base 3.6.0
RrScreen@Base 3.6.0
RrThemeFree@Base 3.6.0
RrThemeNew@Base 3.6.0
RrVisual@Base 3.6.0
hashword@Base 3.6.0

2
debian/libobt2v5.docs vendored Normal file
View File

@ -0,0 +1,2 @@
AUTHORS
README

2
debian/libobt2v5.install vendored Normal file
View File

@ -0,0 +1,2 @@
usr/lib/*/libobt.so.2.0.2
usr/lib/*/libobt.so.2

117
debian/libobt2v5.symbols vendored Normal file
View File

@ -0,0 +1,117 @@
libobt.so.2 libobt2v5 #MINVER#
callbacks@Base 3.6.0
gid_cmp@Base 3.6.0
obt_ddparse_file@Base 3.6.0
obt_ddparse_group_keys@Base 3.6.0
obt_display@Base 3.6.0
obt_display_close@Base 3.6.0
obt_display_error_occured@Base 3.6.0
obt_display_extension_randr@Base 3.6.0
obt_display_extension_randr_basep@Base 3.6.0
obt_display_extension_shape@Base 3.6.0
obt_display_extension_shape_basep@Base 3.6.0
obt_display_extension_sync@Base 3.6.0
obt_display_extension_sync_basep@Base 3.6.0
obt_display_extension_xinerama@Base 3.6.0
obt_display_extension_xinerama_basep@Base 3.6.0
obt_display_extension_xkb@Base 3.6.0
obt_display_extension_xkb_basep@Base 3.6.0
obt_display_ignore_errors@Base 3.6.0
obt_display_open@Base 3.6.0
obt_keyboard_context_new@Base 3.6.0
obt_keyboard_context_ref@Base 3.6.0
obt_keyboard_context_renew@Base 3.6.0
obt_keyboard_context_unref@Base 3.6.0
obt_keyboard_keyevent_to_modmask@Base 3.6.0
obt_keyboard_keypress_to_keysym@Base 3.6.0
obt_keyboard_keypress_to_unichar@Base 3.6.0
obt_keyboard_keysym_to_keycode@Base 3.6.0
obt_keyboard_modkey_to_modmask@Base 3.6.0
obt_keyboard_only_modmasks@Base 3.6.0
obt_keyboard_reload@Base 3.6.0
obt_keyboard_shutdown@Base 3.6.0
obt_link_app_categories@Base 3.6.0
obt_link_from_ddfile@Base 3.6.0
obt_link_ref@Base 3.6.0
obt_link_unref@Base 3.6.0
obt_paths_autostart_dirs@Base 3.6.0
obt_paths_cache_home@Base 3.6.0
obt_paths_config_dirs@Base 3.6.0
obt_paths_config_home@Base 3.6.0
obt_paths_data_dirs@Base 3.6.0
obt_paths_data_home@Base 3.6.0
obt_paths_expand_tilde@Base 3.6.0
obt_paths_mkdir@Base 3.6.0
obt_paths_mkdir_path@Base 3.6.0
obt_paths_new@Base 3.6.0
obt_paths_ref@Base 3.6.0
obt_paths_try_exec@Base 3.6.0
obt_paths_unref@Base 3.6.0
obt_prop_atom@Base 3.6.0
obt_prop_erase@Base 3.6.0
obt_prop_get32@Base 3.6.0
obt_prop_get_array32@Base 3.6.0
obt_prop_get_array_text@Base 3.6.0
obt_prop_get_text@Base 3.6.0
obt_prop_message@Base 3.6.0
obt_prop_message_to@Base 3.6.0
obt_prop_set32@Base 3.6.0
obt_prop_set_array32@Base 3.6.0
obt_prop_set_array_text@Base 3.6.0
obt_prop_set_text@Base 3.6.0
obt_prop_startup@Base 3.6.0
obt_signal_add_callback@Base 3.6.0
obt_signal_listen@Base 3.6.0
obt_signal_remove_callback@Base 3.6.0
obt_signal_stop@Base 3.6.0
obt_xml_attr_bool@Base 3.6.0
obt_xml_attr_contains@Base 3.6.0
obt_xml_attr_int@Base 3.6.0
obt_xml_attr_string@Base 3.6.0
obt_xml_attr_string_unstripped@Base 3.6.0
obt_xml_close@Base 3.6.0
obt_xml_doc@Base 3.6.0
obt_xml_find_node@Base 3.6.0
obt_xml_instance_new@Base 3.6.0
obt_xml_instance_ref@Base 3.6.0
obt_xml_instance_unref@Base 3.6.0
obt_xml_last_error@Base 3.6.0
obt_xml_last_error_file@Base 3.6.0
obt_xml_last_error_line@Base 3.6.0
obt_xml_last_error_message@Base 3.6.0
obt_xml_load_config_file@Base 3.6.0
obt_xml_load_data_file@Base 3.6.0
obt_xml_load_file@Base 3.6.0
obt_xml_load_mem@Base 3.6.0
obt_xml_load_theme_file@Base 3.6.0
obt_xml_node_bool@Base 3.6.0
obt_xml_node_contains@Base 3.6.0
obt_xml_node_int@Base 3.6.0
obt_xml_node_string@Base 3.6.0
obt_xml_node_string_unstripped@Base 3.6.0
obt_xml_register@Base 3.6.0
obt_xml_root@Base 3.6.0
obt_xml_save_file@Base 3.6.0
obt_xml_tree@Base 3.6.0
obt_xml_tree_from_root@Base 3.6.0
obt_xml_unregister@Base 3.6.0
prop_atoms@Base 3.6.0
prop_started@Base 3.6.0
signals_fired@Base 3.6.0
xqueue_add_callback@Base 3.6.0
xqueue_destroy@Base 3.6.0
xqueue_exists@Base 3.6.0
xqueue_exists_local@Base 3.6.0
xqueue_init@Base 3.6.0
xqueue_listen@Base 3.6.0
xqueue_match_type@Base 3.6.0
xqueue_match_window@Base 3.6.0
xqueue_match_window_message@Base 3.6.0
xqueue_match_window_type@Base 3.6.0
xqueue_next@Base 3.6.0
xqueue_next_local@Base 3.6.0
xqueue_peek@Base 3.6.0
xqueue_peek_local@Base 3.6.0
xqueue_pending_local@Base 3.6.0
xqueue_remove_callback@Base 3.6.0
xqueue_remove_local@Base 3.6.0

35
debian/menu.xml vendored Normal file
View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://openbox.org/
file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<item label="Terminal emulator">
<action name="Execute"><execute>x-terminal-emulator</execute></action>
</item>
<item label="Web browser">
<action name="Execute"><execute>x-www-browser</execute></action>
</item>
<!-- This requires the presence of the 'menu' package to work -->
<menu id="/Debian" />
<separator />
<menu id="client-list-menu" />
<separator />
<item label="ObConf">
<action name="Execute"><execute>obconf</execute></action>
</item>
<item label="Reconfigure">
<action name="Reconfigure" />
</item>
<item label="Restart">
<action name="Restart" />
</item>
<separator />
<item label="Exit">
<action name="Exit" />
</item>
</menu>
</openbox_menu>

1
debian/openbox-dev.dirs vendored Normal file
View File

@ -0,0 +1 @@
usr/include

2
debian/openbox-dev.docs vendored Normal file
View File

@ -0,0 +1,2 @@
AUTHORS
README

7
debian/openbox-dev.install vendored Normal file
View File

@ -0,0 +1,7 @@
usr/lib/*/libobt.a
usr/lib/*/libobrender.a
usr/lib/*/pkgconfig/obrender-3.5.pc
usr/lib/*/pkgconfig/obt-3.5.pc
usr/include/openbox/3.6/*
usr/lib/*/libobt.so
usr/lib/*/libobrender.so

6
debian/openbox-gnome-session.install vendored Normal file
View File

@ -0,0 +1,6 @@
usr/bin/openbox-gnome-session
usr/share/gnome/wm-properties/openbox.desktop
usr/share/gnome-session/sessions/openbox-gnome.session
usr/share/gnome-session/sessions/openbox-gnome-fallback.session
usr/share/man/man1/openbox-gnome-session.1
usr/share/xsessions/openbox-gnome.desktop

View File

@ -0,0 +1 @@
openbox-gnome-session: desktop-entry-lacks-keywords-entry usr/share/xsessions/openbox-gnome.desktop

3
debian/openbox-kde-session.install vendored Normal file
View File

@ -0,0 +1,3 @@
usr/share/man/man1/openbox-kde-session.1
usr/share/xsessions/openbox-kde.desktop
usr/bin/openbox-kde-session

View File

@ -0,0 +1 @@
openbox-kde-session: desktop-entry-lacks-keywords-entry usr/share/xsessions/openbox-kde.desktop

2
debian/openbox.dirs vendored Normal file
View File

@ -0,0 +1,2 @@
usr/share/pixmaps
var/lib/openbox

7
debian/openbox.doc-base vendored Normal file
View File

@ -0,0 +1,7 @@
Document: openbox
Title: Openbox
Section: Window Managers
Format: HTML
Index: /usr/share/doc/openbox/toc.html
Files: /usr/share/doc/openbox/*.html

5
debian/openbox.docs vendored Normal file
View File

@ -0,0 +1,5 @@
AUTHORS
COMPLIANCE
README
debian/NEWS.Debian
debian/docs/*

32
debian/openbox.install vendored Normal file
View File

@ -0,0 +1,32 @@
usr/share/pixmaps/openbox.png
usr/share/locale/
usr/share/themes/
usr/share/doc/openbox/menu.xsd
usr/share/doc/openbox/xbm/bullet.xbm
usr/share/doc/openbox/xbm/close.xbm
usr/share/doc/openbox/xbm/desk_toggled.xbm
usr/share/doc/openbox/xbm/desk.xbm
usr/share/doc/openbox/xbm/iconify.xbm
usr/share/doc/openbox/xbm/max_toggled.xbm
usr/share/doc/openbox/xbm/max.xbm
usr/share/doc/openbox/xbm/shade_toggled.xbm
usr/share/doc/openbox/xbm/shade.xbm
usr/share/doc/openbox/rc.xsd
usr/share/doc/openbox/rc-mouse-focus.xml
usr/share/man/man1/openbox.1
usr/share/man/man1/obxprop.1
usr/share/man/man1/openbox-session.1
usr/share/xsessions/openbox.desktop
usr/bin/openbox
usr/bin/obxprop
usr/bin/openbox-session
usr/bin/gdm-control
etc/xdg/openbox/rc.xml
etc/xdg/openbox/menu.xml
etc/xdg/openbox/autostart
etc/xdg/openbox/environment
usr/lib/*/openbox-xdg-autostart
usr/lib/*/openbox-autostart
debian/menu.xml etc/xdg/openbox
debian/themes/ usr/share

1
debian/openbox.links vendored Normal file
View File

@ -0,0 +1 @@
etc/xdg/openbox etc/X11/openbox

4
debian/openbox.lintian-overrides vendored Normal file
View File

@ -0,0 +1,4 @@
openbox: executable-not-elf-or-script etc/xdg/openbox/autostart
openbox: executable-not-elf-or-script etc/xdg/openbox/environment
openbox: duplicate-files usr/share/doc/openbox/xbm/shade.xbm usr/share/doc/openbox/xbm/shade_toggled.xbm
openbox: desktop-entry-lacks-keywords-entry usr/share/xsessions/openbox.desktop

1
debian/openbox.maintscript vendored Normal file
View File

@ -0,0 +1 @@
rm_conffile /etc/xdg/openbox/autostart.sh 3.5.0-1

2
debian/openbox.manpages vendored Normal file
View File

@ -0,0 +1,2 @@
doc/openbox.1
gdm-control.1

36
debian/openbox.menu-method vendored Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/install-menu
!include menu.h
compat="menu-1"
outputencoding="UTF-8"
genmenu="debian-menu.xml"
rootprefix="/var/lib/openbox/"
userprefix=".config/openbox/"
treewalk="(M)"
function xml_escape($s) = replace(replace(replace(replace(replace($s, \
"&", "&amp;"), \
">", "&gt;"), \
"<", "&lt;"), \
"'", "&apos;"), \
"\"", "&quot;")
supported
x11= nstring(level(), " ") "<item label='" xml_escape(title()) "'" ifnempty(icon(), " icon='" xml_escape(icon()) "'") ">\n" \
nstring(level(), " ") " <action name='Execute'><execute>" xml_escape($command) "</execute></action>\n" \
nstring(level(), " ") "</item>\n"
text= nstring(level(), " ") "<item label='" xml_escape(title()) "'" ifnempty(icon(), " icon='" xml_escape(icon()) "'") ">\n" \
nstring(level(), " ") " <action name='Execute'><execute>" xml_escape(term()) "</execute></action>\n" \
nstring(level(), " ") "</item>\n"
wm= nstring(level(), " ") "<item label='" xml_escape(title()) "'" ifnempty(icon(), " icon='" xml_escape(icon()) "'") ">\n" \
nstring(level(), " ") " <action name='Restart'><execute>" xml_escape($command) "</execute></action>\n" \
nstring(level(), " ") "</item>\n"
endsupported
startmenu= nstring(level(), " ") "<menu id='" xml_escape($section) "' label='" xml_escape(title()) "'>\n"
endmenu= nstring(level(), " ") "</menu>\n"
preoutput= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<!-- Automatically generated file. Do not edit (see /usr/share/doc/menu/html) -->\n\n<openbox_menu xmlns=\"http://openbox.org/\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://openbox.org/\n file:///usr/share/openbox/menu.xsd\">\n\n"
postoutput= "\n</openbox_menu>\n"

22
debian/openbox.postinst vendored Normal file
View File

@ -0,0 +1,22 @@
#!/bin/sh
set -e
case "$1" in
configure)
update-alternatives --install /usr/bin/x-window-manager \
x-window-manager /usr/bin/openbox 90 --slave \
/usr/share/man/man1/x-window-manager.1.gz \
x-window-manager.1.gz /usr/share/man/man1/openbox.1.gz
update-alternatives --install /usr/bin/x-session-manager \
x-session-manager /usr/bin/openbox-session 40 --slave \
/usr/share/man/man1/x-session-manager.1.gz \
x-session-manager.1.gz /usr/share/man/man1/openbox-session.1.gz
if which update-menus >/dev/null 2>&1; then
update-menus;
fi
;;
esac
#DEBHELPER#

24
debian/openbox.postrm vendored Normal file
View File

@ -0,0 +1,24 @@
#!/bin/sh
set -e
# workaround for bug #198522
delete_dir_if_empty() {
if [ ! -d "$1" ]; then
return 0;
fi
rmdir --ignore-fail-on-non-empty $1;
}
case "$1" in
purge)
delete_dir_if_empty /etc/xdg/openbox
delete_dir_if_empty /etc/xdg
;;
esac
if which update-menus >/dev/null 2>&1; then
update-menus ;
fi
#DEBHELPER#

11
debian/openbox.preinst vendored Normal file
View File

@ -0,0 +1,11 @@
#!/bin/sh
set -e
if [ "$1" = upgrade ]; then
update-alternatives --remove x-window-manager /usr/bin/openbox-session
fi
#DEBHELPER#
exit 0

13
debian/openbox.prerm vendored Normal file
View File

@ -0,0 +1,13 @@
#!/bin/sh
set -e
case "$1" in
remove)
update-alternatives --remove x-window-manager /usr/bin/openbox
update-alternatives --remove x-session-manager /usr/bin/openbox-session
rm -f /var/lib/openbox/debian-menu.xml
;;
esac
#DEBHELPER#

40
debian/patches/01_rc.xml.patch vendored Normal file
View File

@ -0,0 +1,40 @@
by Nico Golde <nion@debian.org>
updated for 3.5.0 by Eugenio Paolantonio <me@medesimo.eu>
add screenshot support using gnome-screenshot;
ensure that the Debian system menu is listed in <menu>
Index: openbox-3.4.11.1/data/rc.xml
===================================================================
--- a/data/rc.xml
+++ b/data/rc.xml
@@ -245,6 +245,10 @@
<keybind key="A-space">
<action name="ShowMenu"><menu>client-menu</menu></action>
</keybind>
+ <!-- Take a screenshot of the current window with gnome-screenshot when Alt+Print are pressed -->
+ <keybind key="A-Print">
+ <action name="Execute"><command>gnome-screenshot -w</command></action>
+ </keybind>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
@@ -308,6 +312,10 @@
<command>kfmclient openProfile filemanagement</command>
</action>
</keybind>
+ <!-- Launch gnome-screenshot when Print is pressed -->
+ <keybind key="Print">
+ <action name="Execute"><command>gnome-screenshot</command></action>
+ </keybind>
</keyboard>
<mouse>
@@ -621,6 +629,8 @@
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/) -->
+ <!-- system menu files on Debian systems -->
+ <file>/var/lib/openbox/debian-menu.xml</file>
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the

View File

@ -0,0 +1,23 @@
by Nico Golde <nion@debian.org>
the freedesktop standard requires some additional attributes in the desktop files
which are added here to fix #533126, #531580
Index: openbox-3.4.11.1/data/gnome-wm-properties/openbox.desktop
===================================================================
--- openbox-3.4.11.1.orig/data/gnome-wm-properties/openbox.desktop 2010-04-23 16:47:53.000000000 +0200
+++ openbox-3.4.11.1/data/gnome-wm-properties/openbox.desktop 2010-04-23 16:48:08.000000000 +0200
@@ -2,10 +2,15 @@
Type=Application
Name=Openbox
Exec=openbox
+Type=Application
+Categories=System;
# name we put on the WM spec check window
X-GNOME-WMName=Openbox
+X-GNOME-Provides=windowmanager
+NoDisplay=true
+
# our config tool
ConfigExec=obconf

View File

@ -0,0 +1,111 @@
patch by Marc Brockschmidt to allow placing windows in certain screen
quadrants using key bindings - #544538
Index: openbox-3.4.11.1/data/rc.xsd
===================================================================
--- openbox-3.4.11.1.orig/data/rc.xsd 2010-04-23 16:49:08.000000000 +0200
+++ openbox-3.4.11.1/data/rc.xsd 2010-04-23 16:49:56.000000000 +0200
@@ -171,8 +171,8 @@
<xsd:element minOccurs="0" name="manageDesktops" type="ob:bool"/>
</xsd:complexType>
<xsd:complexType name="window_position">
- <xsd:element name="x" type="ob:center_or_int"/>
- <xsd:element name="y" type="ob:center_or_int"/>
+ <xsd:element name="x" type="ob:horizontal_center_or_int"/>
+ <xsd:element name="y" type="ob:vertical_center_or_int"/>
<xsd:element name="monitor" type="ob:mouse_or_int"/>
<xsd:element minOccurs="0" name="head" type="xsd:string"/>
<xsd:attribute name="force" type="ob:bool"/>
@@ -365,6 +365,20 @@
<xsd:pattern value="center|0|[1-9][0-9]*"/>
</xsd:restriction>
</xsd:simpleType>
+ <xsd:simpleType name="horizontal_center_or_int">
+ <xsd:restriction base="xsd:string">
+ <!-- ob: atoi($_) unless $_ eq 'center'; -->
+ <!-- I think the regexp DTRT WRT atoi. -->
+ <xsd:pattern value="(Below|Above)?center|0|[1-9][0-9]*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="vertical_center_or_int">
+ <xsd:restriction base="xsd:string">
+ <!-- ob: atoi($_) unless $_ eq 'center'; -->
+ <!-- I think the regexp DTRT WRT atoi. -->
+ <xsd:pattern value="(LeftOf|RightOf)?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'; -->
Index: openbox-3.4.11.1/openbox/actions/moveresizeto.c
===================================================================
--- openbox-3.4.11.1.orig/openbox/actions/moveresizeto.c 2010-04-23 16:49:24.000000000 +0200
+++ openbox-3.4.11.1/openbox/actions/moveresizeto.c 2010-04-23 16:49:56.000000000 +0200
@@ -14,6 +14,10 @@
typedef struct {
gboolean xcenter;
gboolean ycenter;
+ gboolean rightofcenter;
+ gboolean leftofcenter;
+ gboolean abovecenter;
+ gboolean belowcenter;
gboolean xopposite;
gboolean yopposite;
gint x;
@@ -44,12 +48,22 @@
}
static void parse_coord(xmlDocPtr doc, xmlNodePtr n, gint *pos,
- gboolean *opposite, gboolean *center)
+ gboolean *opposite, gboolean *rightofcenter,
+ gboolean *leftofcenter, gboolean *abovecenter,
+ gboolean *belowcenter, gboolean *center)
{
gchar *s = parse_string(doc, n);
if (g_ascii_strcasecmp(s, "current") != 0) {
if (!g_ascii_strcasecmp(s, "center"))
*center = TRUE;
+ else if (!g_ascii_strcasecmp(s, "rightofcenter"))
+ *rightofcenter = TRUE;
+ else if (!g_ascii_strcasecmp(s, "leftofcenter"))
+ *leftofcenter = TRUE;
+ else if (!g_ascii_strcasecmp(s, "belowcenter"))
+ *belowcenter = TRUE;
+ else if (!g_ascii_strcasecmp(s, "abovecenter"))
+ *abovecenter = TRUE;
else {
if (s[0] == '-')
*opposite = TRUE;
@@ -75,10 +89,14 @@
o->monitor = CURRENT_MONITOR;
if ((n = parse_find_node("x", node)))
- parse_coord(doc, n, &o->x, &o->xopposite, &o->xcenter);
+ parse_coord(doc, n, &o->x, &o->xopposite,
+ &o->rightofcenter, &o->leftofcenter,
+ &o->abovecenter, &o->belowcenter, &o->xcenter);
if ((n = parse_find_node("y", node)))
- parse_coord(doc, n, &o->y, &o->yopposite, &o->ycenter);
+ parse_coord(doc, n, &o->y, &o->yopposite,
+ &o->rightofcenter, &o->leftofcenter,
+ &o->abovecenter, &o->belowcenter, &o->ycenter);
if ((n = parse_find_node("width", node))) {
gchar *s = parse_string(doc, n);
@@ -182,12 +200,16 @@
x = o->x;
if (o->xcenter) x = (area->width - w) / 2;
+ else if (o->leftofcenter) x = (area->width / 2) - w;
+ else if (o->rightofcenter) x = area->width / 2;
else if (x == G_MININT) x = c->frame->area.x - carea->x;
else if (o->xopposite) x = area->width - w - x;
x += area->x;
y = o->y;
if (o->ycenter) y = (area->height - h) / 2;
+ else if (o->abovecenter) y = (area->height / 2) - h;
+ else if (o->belowcenter) y = area->height / 2;
else if (y == G_MININT) y = c->frame->area.y - carea->y;
else if (o->yopposite) y = area->height - h - y;
y += area->y;

View File

@ -0,0 +1,25 @@
by Nico Golde <nion@debian.org>, slightly modified version
from Eugenio Paolantonio <me@medesimo.eu>
Do not build filename if a working full path is given.
Fixes #644756.
Index: openbox-3.5.0/obt/xml.c
===================================================================
--- openbox-3.5.0.orig/obt/xml.c 2011-10-30 14:13:07.000000000 +0100
+++ openbox-3.5.0/obt/xml.c 2011-10-30 14:13:10.000000000 +0100
@@ -127,10 +127,13 @@
gchar *path;
struct stat s;
- if (!domain && !filename) /* given a full path to the file */
+ if (!domain && !filename){ /* given a full path to the file */
path = g_strdup(it->data);
- else
+ } else if(filename && filename[0] == '/' && stat(filename, &s) >= 0) {
+ path = g_strdup(filename);
+ } else {
path = g_build_filename(it->data, domain, filename, NULL);
+ }
if (stat(path, &s) >= 0) {
/* XML_PARSE_BLANKS is needed apparently, or the tree can end up

View File

@ -0,0 +1,12 @@
Description: Upstream patch to fix title on java applications
--- openbox-3.5.0/openbox/client.c 2011-08-01 22:14:58.000000000 +0200
+++ openbox-3.5.0/openbox/client.c 2011-10-22 14:59:56.000000000 +0200
@@ -883,7 +883,7 @@
!g_pattern_match(app->role,
strlen(self->role), self->role, NULL))
match = FALSE;
- else if (app->title &&
+ else if (app->title && self->title &&
!g_pattern_match(app->title,
strlen(self->title), self->title, NULL))
match = FALSE;

View File

@ -0,0 +1,14 @@
Description: Fixed load gnome 3 applications
Index: openbox-3.5.0/data/autostart/autostart.in
===================================================================
--- openbox-3.5.0.orig/data/autostart/autostart.in 2013-07-17 17:09:45.000000000 +0200
+++ openbox-3.5.0/data/autostart/autostart.in 2013-07-17 18:32:23.000000000 +0200
@@ -8,7 +8,7 @@
#
#if test -x @libexecdir@/gnome-settings-daemon >/dev/null; then
# @libexecdir@/gnome-settings-daemon &
-#elif which gnome-settings-daemon >/dev/null; then
+#elif which gnome-settings-daemon >/dev/null 2>&1; then
# gnome-settings-daemon &
#fi

10
debian/patches/07_update_desktop.patch vendored Normal file
View File

@ -0,0 +1,10 @@
Description: Add keywords to desktop file.
Author: Mateusz Łukasik <mati75@linuxmint.pl>
--- a/data/openbox.desktop
+++ b/data/openbox.desktop
@@ -13,3 +13,4 @@ X-GNOME-Provides=windowmanager
X-Ubuntu-Gettext-Domain=openbox
# back compat
X-GNOME-Autostart-Notify=true
+_Keywords=wm;windowmanager;window;manager;gnome;

16
debian/patches/08_autostart-fix.patch vendored Normal file
View File

@ -0,0 +1,16 @@
Description: Add compatibility to obsession when the pyxdg is not running
Author: Mateusz Łukasik <mati75@linuxmint.pl>
--- a/data/autostart/openbox-autostart.in
+++ b/data/autostart/openbox-autostart.in
@@ -31,4 +31,9 @@ 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 "$@"
+if which xdg-autostart >/dev/null 2>/dev/null; then
+ CMD=xdg-autostart
+else
+ CMD=@libexecdir@/openbox-xdg-autostart
+fi
+exec $CMD "$@"

View File

@ -0,0 +1,51 @@
commit c94992179e99f4088f3a1cb8e304a9fb6035170d
Author: John Vogel <jvogel4@stny.rr.com>
Date: Sat Mar 17 12:33:24 2012 -0400
Update manpage to current version. (Fix bug 5444)
--- a/doc/openbox-session.1.in
+++ b/doc/openbox-session.1.in
@@ -12,8 +12,8 @@ to save your state from one log in to th
arguments.
.PP
On log in, \fBopenbox-session\fR will run the
-~/.config/openbox/autostart.sh script if it exists, and will run the
-system-wide script @configdir@/openbox/autostart.sh otherwise. You may
+~/.config/openbox/autostart script if it exists, and will run the
+system-wide script @configdir@/openbox/autostart otherwise. You may
place anything you want to run automatically in those files, for example:
.PP
@@ -27,7 +27,7 @@ gnome-settings-daemon &
.PP
Make sure that each line is followed by a "&" or else the script will
stop there and further commands will not be executed. You can use the
-@configdir@/openbox/autostart.sh file as an example for creating your
+@configdir@/openbox/autostart file as an example for creating your
own.
.SH "SEE ALSO"
.PP
--- a/doc/openbox-session.1.sgml
+++ b/doc/openbox-session.1.sgml
@@ -44,8 +44,8 @@ manpage.1: manpage.sgml
arguments.</para>
<para>On log in, <command>&dhpackage;</command> will run the
- ~/.config/openbox/autostart.sh script if it exists, and will run the
- system-wide script @configdir@/openbox/autostart.sh otherwise. You may
+ ~/.config/openbox/autostart script if it exists, and will run the
+ system-wide script @configdir@/openbox/autostart otherwise. You may
place anything you want to run automatically in those files, for example:
</para>
@@ -55,7 +55,7 @@ manpage.1: manpage.sgml
<para>Make sure that each line is followed by a "&" or else the script will
stop there and further commands will not be executed. You can use the
- @configdir@/openbox/autostart.sh file as an example for creating your
+ @configdir@/openbox/autostart file as an example for creating your
own.</para>
</refsect1>

View File

@ -0,0 +1,49 @@
Description: Fix showing startup notification
Author: Andrej N. Gritsenko <andrej@rep.kiev.ua>
Bug-Debian: http://bugs.debian.org/719620
diff --git a/configure.ac b/configure.ac
index a183309..5d55c56 100644
--- a/configure.ac
+++ b/configure.ac
@@ -125,7 +125,7 @@ AC_ARG_ENABLE(startup-notification,
)
if test "$enable_sn" = yes; then
-PKG_CHECK_MODULES(LIBSN, [libstartup-notification-1.0 >= 0.8],
+PKG_CHECK_MODULES(LIBSN, [libstartup-notification-1.0 >= 0.8 xi],
[
AC_DEFINE(USE_LIBSN, [1], [Use startup-notification])
AC_SUBST(LIBSN_CFLAGS)
diff --git a/openbox/screen.c b/openbox/screen.c
index 33acb4a..ed57f22 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -40,6 +40,7 @@
#include "obt/prop.h"
#include <X11/Xlib.h>
+#include <X11/extensions/XInput2.h>
#ifdef HAVE_UNISTD_H
# include <sys/types.h>
# include <unistd.h>
@@ -1844,12 +1845,15 @@ const Rect* screen_physical_area_primary(gboolean fixed)
void screen_set_root_cursor(void)
{
+ int pointer_id;
+ if (!XIGetClientPointer(obt_display, None, &pointer_id))
+ return;
if (sn_app_starting())
- XDefineCursor(obt_display, obt_root(ob_screen),
- ob_cursor(OB_CURSOR_BUSYPOINTER));
+ XIDefineCursor(obt_display, pointer_id, obt_root(ob_screen),
+ ob_cursor(OB_CURSOR_BUSYPOINTER));
else
- XDefineCursor(obt_display, obt_root(ob_screen),
- ob_cursor(OB_CURSOR_POINTER));
+ XIDefineCursor(obt_display, pointer_id, obt_root(ob_screen),
+ ob_cursor(OB_CURSOR_POINTER));
}
guint screen_find_monitor_point(guint x, guint y)

30
debian/patches/754207_use-scrot.patch vendored Normal file
View File

@ -0,0 +1,30 @@
Description: Use scrot for taking a screenshots
Author: Mateusz Łukasik <mati75@linuxmint.pl>
Bug-Debian: http://bugs.debian.org/754207
--- a/data/rc.xml
+++ b/data/rc.xml
@@ -245,9 +245,9 @@
<keybind key="A-space">
<action name="ShowMenu"><menu>client-menu</menu></action>
</keybind>
- <!-- Take a screenshot of the current window with gnome-screenshot when Alt+Print are pressed -->
+ <!-- Take a screenshot of the current window with scrot when Alt+Print are pressed -->
<keybind key="A-Print">
- <action name="Execute"><command>gnome-screenshot -w</command></action>
+ <action name="Execute"><command>scrot -s</command></action>
</keybind>
<!-- Keybindings for window switching -->
@@ -312,9 +312,9 @@
<command>kfmclient openProfile filemanagement</command>
</action>
</keybind>
- <!-- Launch gnome-screenshot when Print is pressed -->
+ <!-- Launch scrot when Print is pressed -->
<keybind key="Print">
- <action name="Execute"><command>gnome-screenshot</command></action>
+ <action name="Execute"><command>scrot</command></action>
</keybind>
</keyboard>

View File

@ -0,0 +1,63 @@
>From e0cb404f53c9b21a521ea2f14c8cd66fdfb68ea7 Mon Sep 17 00:00:00 2001
From: Simon <simondobbss@gmail.com>
Date: Tue, 15 Dec 2015 15:46:18 +0100
Subject: [PATCH] Replace getgrent with getgroups. Fixes #5978.
---
obt/paths.c | 34 +++++++++++++++++++++-------------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/obt/paths.c b/obt/paths.c
index 25cb6b0..d526936 100644
--- a/obt/paths.c
+++ b/obt/paths.c
@@ -108,25 +108,33 @@ static void find_uid_gid(uid_t *u, gid_t **g, guint *n)
const gchar *name;
struct group *gr;
+ gid_t gmain;
+ unsigned int maininc;
+ int i;
+
*u = getuid();
pw = getpwuid(*u);
name = pw->pw_name;
- *g = g_new(gid_t, *n=1);
- (*g)[0] = getgid();
-
- while ((gr = getgrent())) {
- if (gr->gr_gid != (*g)[0]) { /* skip the main group */
- gchar **c;
- for (c = gr->gr_mem; *c; ++c)
- if (strcmp(*c, name) == 0) {
- *g = g_renew(gid_t, *g, ++(*n)); /* save the group */
- (*g)[*n-1] = gr->gr_gid;
- break;
- }
+ gmain = getgid();
+
+ *n = getgroups(0, *g);
+ *g = g_new(gid_t, *n);
+ *n = getgroups(*n, *g);
+
+ /* Check if the effective group ID of the calling process is already
+ included in the returned list. Add it otherwise. */
+ maininc = 0;
+ for (i = 0; i < *n; i++) {
+ if ( (*g)[i] == gmain ) {
+ maininc = 1;
+ break;
}
}
- endgrent();
+ if (!maininc) {
+ *g = g_renew(gid_t, *g, ++(*n));
+ (*g)[*n-1] = gmain;
+ }
qsort(*g, *n, sizeof(gid_t), gid_cmp);
}
--
2.1.4

45
debian/patches/d9a405e9.patch vendored Normal file
View File

@ -0,0 +1,45 @@
From d9a405e9b3b0e9bfe5686c6df456138b443d1e35 Mon Sep 17 00:00:00 2001
From: Mikael Magnusson <mikachu@gmail.com>
Date: Mon, 7 Sep 2015 00:24:03 +0200
Subject: [PATCH] Add 'last' as a desktop target for if/foreach
---
openbox/actions/if.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/openbox/actions/if.c b/openbox/actions/if.c
index a9c4094..c76fb71 100644
--- a/openbox/actions/if.c
+++ b/openbox/actions/if.c
@@ -68,6 +68,7 @@ typedef struct {
gboolean omnipresent_off;
gboolean desktop_current;
gboolean desktop_other;
+ gboolean desktop_last;
guint desktop_number;
guint screendesktop_number;
guint client_monitor;
@@ -192,8 +193,10 @@ static void setup_query(Options* o, xmlNodePtr node, QueryTarget target) {
if ((s = obt_xml_node_string(n))) {
if (!g_ascii_strcasecmp(s, "current"))
q->desktop_current = TRUE;
- if (!g_ascii_strcasecmp(s, "other"))
+ else if (!g_ascii_strcasecmp(s, "other"))
q->desktop_other = TRUE;
+ else if (!g_ascii_strcasecmp(s, "last"))
+ q->desktop_last = TRUE;
else
q->desktop_number = atoi(s);
g_free(s);
@@ -392,6 +395,8 @@ static gboolean run_func_if(ObActionsData *data, gpointer options)
is_true &= is_on_current_desktop;
if (q->desktop_other)
is_true &= !is_on_current_desktop;
+ if (q->desktop_last)
+ is_true &= query_target->desktop == screen_last_desktop;
if (q->desktop_number) {
gboolean is_on_desktop =
--
1.9.1

View File

@ -0,0 +1,26 @@
Description: Fix spelling-error-in-binary
Author: Mateusz Łukasik <mati75@linuxmint.pl>
Last-Update: 2016-11-23
--- a/openbox/openbox.c
+++ b/openbox/openbox.c
@@ -602,7 +602,7 @@ static void parse_env(void)
if (ob_sm_id) g_free(ob_sm_id);
ob_sm_id = g_strdup(id);
ob_debug_type(OB_DEBUG_SM,
- "DESKTOP_AUTOSTART_ID %s supercedes --sm-client-id\n",
+ "DESKTOP_AUTOSTART_ID %s supersedes --sm-client-id\n",
ob_sm_id);
}
}
--- a/openbox/session.c
+++ b/openbox/session.c
@@ -442,7 +442,7 @@ static void sm_save_yourself(SmcConn con
free(vendor);
if (!SmcRequestSaveYourselfPhase2(conn, sm_save_yourself_2, savedata)) {
- ob_debug_type(OB_DEBUG_SM, "Requst for phase 2 failed");
+ ob_debug_type(OB_DEBUG_SM, "Request for phase 2 failed");
g_slice_free(ObSMSaveData, savedata);
SmcSaveYourselfDone(conn, FALSE);
}

14
debian/patches/series vendored Normal file
View File

@ -0,0 +1,14 @@
#03_place_windows_in_quadrants.patch ## Needs to be ported on 3.5.2
01_rc.xml.patch
02_fix_freedesktop_compliance.patch
04_fix_xml_load_file.patch
05_openbox-3.5.0-title-matching.patch
06_openbox-3.5.0-which-2.20.patch
07_update_desktop.patch
08_autostart-fix.patch
704724_fix_refers-to-autostart.sh.patch
719620_fix_show_startup_notification.patch
754207_use-scrot.patch
808138_Replace-getgrent-with-getgroups.patch
d9a405e9.patch
fix-spelling-error-in-binary.patch

43
debian/rules vendored Executable file
View File

@ -0,0 +1,43 @@
#!/usr/bin/make -f
export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed -Wl,-O1 -Wl,-z,defs
export DEB_BUILD_MAINT_OPTIONS=hardening=+all
CFLAGS +=-Wall -g -fPIC
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
VERSION=$(shell awk '/^PACKAGE_VERSION/ { print $$2 }' "FS='" configure)
%:
dh $@
override_dh_auto_configure:
dh_auto_configure -- --enable-librsvg --disable-silent-rules
override_dh_auto_build:
#pod2man --section=1 --release=$(VERSION) --center \
# "Openbox documentation" debian/kdetrayproxy.pod > kdetrayproxy.1
pod2man --section=1 --release=$(VERSION) --center \
"Openbox documentation" debian/gnome-panel-control.pod > \
gnome-panel-control.1
pod2man --section=1 --release=$(VERSION) --center \
"Openbox documentation" debian/gdm-control.pod > \
gdm-control.1
dh_auto_build
override_dh_install:
dh_install --list-missing
find debian/tmp/usr/lib*/ -name "*.la" -delete
override_dh_auto_clean:
rm -f openbox.1
#rm -f kdetrayproxy.1
rm -f gnome-panel-control.1
rm -f gdm-control.1
dh_auto_clean

Some files were not shown because too many files have changed in this diff Show More