Ian Zimmerman [Sat, 17 Aug 2013 23:08:25 +0000 (16:08 -0700)]
Add the old <center> option for the placement policy. (Bug 5946)
Original commit messages:
. Reformat to move closer to house style
. Add center on top of leat overlap place algo
. Add sentinel value to edge arrays
. Use a Size instead of a Rect for a centering field
. Fix off by one bug
. Need to declare dx and dy
. Pass length of edge array instead of recomputing
. Fix missing open-brace in config.c
. Address the more trivial subset of danakj comments
. Revert "Remove now-unused config_place_center option."
This reverts commit 5e282dae08be3b900e0337efa0fae8f3ffa92cd7.
. Remove reliance on sentinel value when scanning edge arrays
. Avoid need to initialize Size structure by removing it :)
. Clean up field expansion code somewhat
. Compress code further by using a structure for common args
. Fix search for next grid point
. Squeeze it even more by not using Size at all
Dana Jansens [Sun, 18 Aug 2013 23:29:05 +0000 (19:29 -0400)]
Add queries to If actions
This allows the If action to run queries against a client other than
the target of the actions being run, for example to check state on
the focused window while performing actions on another window during
focus cycling.
The above checks the client window that the actions will run on to
verify that its title is "FooBar" and that it is maximized. If that
is true, it also checks that the currently focused client window is
on desktop 3. If that is true also, then it runs the NextDesktop
action.
The target="" option can be set to "default" which uses the client
window that the actions will run on, or it can be "focus" which uses
the client window that is currently focused.
The <query> tag is optional, and the conditions inside the query can
be placed directly inside the If <action> tag, as they were before
this change. In that case, a default <query> tag is assumed with
target="default" which matches the previous behaviour.
Multiple <query> tags can be present, and they must all be true in
order to run the actions in <then>. If any one is false, the actions
in <else> will be run instead.
Dana Jansens [Sun, 11 Aug 2013 20:37:14 +0000 (16:37 -0400)]
Maximized undecored windows have incorrect top border. (Bug 5996)
If the window has no border since the theme has bwidth=0, or because the
window is truly undecorated via MWM hints, then we should not allocate space
for the frame of the window which will just be empty pixels.
Dana Jansens [Sun, 11 Aug 2013 20:12:25 +0000 (16:12 -0400)]
window.inactive.label.text.color should default to white.
Currently it defaults to itself, which is NULL, and causes a crash.
The spec http://openbox.org/wiki/Help:Themes#window.inactive.label.text.color
claims that the default is white.
In 98b02c6b60bbde2a5db026b3ee3e6e6dc44d1a92 we had this property being read
twice, once with the NULL backup and once with white. It seems that we kept
the wrong one, so just switching this to white now.
Dana Jansens [Sun, 11 Aug 2013 20:04:50 +0000 (16:04 -0400)]
Fix a write out of bounds in splitvertical gradients (Bug 3612)
If the gradient has height 1, then y1sz is 0. We don't want to use the
first color and move the data pointer, since this will move it past the
end of the array.
Dana Jansens [Sun, 11 Aug 2013 04:46:48 +0000 (00:46 -0400)]
Remove fuzzy and outdated translations, add plural expressions.
Clean up the .po files for this release. Plural expressions are needed in
all files that have plurals. And replace fuzzy (incorrect) translations
with empty ones instead.
Dana Jansens [Sun, 11 Aug 2013 02:24:08 +0000 (22:24 -0400)]
Change the message about no icons in menus.
The message used to mention Imlib2, but now there are two libraries
that can be used to support icons. So make the message more generic
and show it only when both libraries are not present.
Dana Jansens [Sun, 11 Aug 2013 00:46:27 +0000 (20:46 -0400)]
Add support for loading SVG icons using librsvg.
This adds a configure option --disable-librsvg, but defaults to
using the library if it is present during configure.
When enabled, Openbox will attempt to load svg image files using
the library, similar to how Imlib2 is used for other image
formats.
Since librsvg uses the libXml2 library, their errors end up in
the same global namespace as Openbox config file parsing. To
avoid this, we reset the libXml current error whenever we start
loading a file, and save the last error that occurred when we
are finished, by storing the error in the ObtXmlInst.
A and B can be integer values to specify a size in pixels. They can also be
percentages or fractions to be relative to the size of the monitor the window
is placed on.
Dana Jansens [Mon, 1 Oct 2012 04:32:39 +0000 (00:32 -0400)]
When an undecorated window is maximized give it a 1px border at the top (Fix bug 5506)
We want to keep some way for a user to re-decorate the window with the default
bindings. However with a large border width, the top border is much bigger than
it needs to be! So make it fixed at 1px large in this case.
Dana Jansens [Tue, 2 Oct 2012 02:32:59 +0000 (22:32 -0400)]
Allow non-interactive focus cycling.
Adds an <interactive>bool</interactive> option to the NextWindow and
PreviousWindow actions. When it is false, the action is not interactive and will
immediately switch focus to whatever the next focus target is.
Removing the "interactive" flag from the focus_cycle() method, as it was unused
previously, and the new code does not make use of it either. In order to be
non-interactive it simply starts a focus_cycle then immediately ends it when the
action ends.
The "interactive" flag in focus_cycle() forced a linear cycling order which may
not be what you want, so the new method is preferrable anyhow.
Dana Jansens [Tue, 2 Oct 2012 00:20:15 +0000 (20:20 -0400)]
Add a $pointer execute variable substitution and make $wip and $pid consistent (Fix bug 5758)
$wip and $pid would output values for the current target window if there was
one, but output nothing at all if there wasn't making the output difficult to
parse. Changed to make these always output a 0 if there is no target.
Added a $pointer variable that is replaced with the x and y coordiates of the
pointer, separated by a space.
Inspired by the work of Denis Kaganovich <mahatma@eu.by>.
Dana Jansens [Mon, 1 Oct 2012 03:42:16 +0000 (23:42 -0400)]
When a window is the focus target and it is removed from the focus order, reset the focus cycling (Fix bug 5410)
We were only doing this if a dialog was showing. But if it's the target, then
a dialog is not relevant, we should always recompute the focus cycling. This
avoids a crash when not using a dialog and closing a window during cycling.
Dana Jansens [Mon, 1 Oct 2012 02:41:34 +0000 (22:41 -0400)]
Allow windows created by execute actions to steal focus if the user isn't interacting with another window (Fix bug 5419).
When the execute action was run, we would say that the user had used the focused
at that time. Then when a new window popped up, we'd think the user was busy in
the current window and prevent the new one from steal focus.
Now the execute action does not update the "user interacted with the focused
window" timestamp anymore. So, if they aren't currently typing in some window
when they trigger an execute action, and the window appears, it will steal
focus.
Dana Jansens [Mon, 1 Oct 2012 02:16:10 +0000 (22:16 -0400)]
Allow window matching based on the group leader's name and class (Fix bug 5721)
In Openbox 3.4 we used the group leader's WM_CLASS value when it was available.
This prevents windows in the group from overriding with a specific value,
however which is bad. More rationale can be found in
http://icculus.org/pipermail/openbox/2010-September/006790.html
Some applications (eg. Firefox) use command line flags to set the WM_CLASS
property on the group leader but do not change the property on the mapped
windows themselves. This makes matching these windows not possible in Openbox
3.5.
We resolve this by exposing the group's WM_CLASS values alongside the individual
window's values. We add _OB_APP_GROUP_NAME and _OB_APP_GROUP_CLASS properties
along with "groupname" and "classname" attributes for the rc.xml application
tag.
Dana Jansens [Mon, 1 Oct 2012 01:23:58 +0000 (21:23 -0400)]
Allow loading of menu files outside of your XDG_CONFIG_HOME (Fix bug 5711)
When the given file name can not be found in your XDG_CONFIG_HOME, ie in
~/.config/openbox, then try the file name directly.
This means if you specify a menu file such as "/home/dana/helloworld.xml",
openbox will try, in order:
1) ~/.config/openbox/home/dana/helloworld.xml
2) /home/dana/helloworld.xml
And it will load the file you meant when it tries the second one.
Dana Jansens [Mon, 1 Oct 2012 00:29:45 +0000 (20:29 -0400)]
Use the nearest monitor when the search query rect does not intersect any monitor (Fix bug 5500)
Previously we would try to find the primary monitor and use that when the search
was outside any monitor. However, if the primary monitor is chosen by the mouse
position and the mouse is not inside any monitor, we enter infinite recursion
trying to find the primary monitor.
The nearest monitor is a better metric anyhow, and this ensures
screen_find_monitor() is never recursive as it always returns a value without
depending on other screen.c methods.
Dana Jansens [Sun, 16 Oct 2011 03:04:21 +0000 (23:04 -0400)]
Pick the monitor most relevant to a rectangle more cleverly.
When monitors overlap (this happens with cloning), we were choosing a monitor
to associate with a window, for maximization for example, somewhat arbitrarily.
Now we have a more clever algorithm that considers the configured primary
monitor first, and that does not prefer monitors based on their sizes, but only
how much of the window is in the monitor, excluding parts that were claimed
by another monitor already.
Dana Jansens [Mon, 4 Oct 2010 18:33:16 +0000 (14:33 -0400)]
Create some Openbox release scripts
release/bugs: Prints a list of bugs that are mentioned in git commits for a
git revision, since previous release.
- Very useful for updating the CHANGELOG file!
release/go: Tests a git revision for correct compilation, and prepares files
for release.
- Makes the tarball
- Makes a GPG signature for the tarball
- Tags the release
- Spits out URLs to edit and gives the changelog for copy/paste.
release/email: Sends an email to the Openbox mailing list with the changelog
and details about the release. Call this with the same parameters used for
running release/go once it is finished, and the files are uploaded, etc.
- Also emails mikachu re freshmeat.net