Enables using compositing manager transparency to provide additional
options for visual feedback. New options are available
to enable/configure window opacity:
opacity_hinting - utilize compositing manager window transparency.
opacity_focus - opacity of focused window.
opacity_unfocus - opacity of unfocused window.
bar_opacity_focus - opacity of the status bar on the focused region.
bar_opacity_unfocus - opacity of the status bar on unfocused regions.
Opacity values range from 0.0 (fully transparent) to 1.0 (opaque).
Default values:
opacity_hinting = 0 # (disabled)
opacity_focus = 1.0
opacity_unfocus = 0.75
bar_opacity_focus[1] = 1.0
bar_opacity_unfocus[1] = 0.75
Add ALWAYSOPAQUE quirk - disable opacity hinting on matching window(s).
In get_binding_keycode() a uint8_t loop variable was incremented in a
for loop. The variable would overflow right before the loop's
condition was met. Therefore the loop would never terminate.
To avoid the infinite loop the condition has to be checked before the
increment operation and not afterwards.
xcb_key_symbols_get_keycode() returns a list of keycodes that is ordered
by keycode value instead of keyboard layout order. If a keysym resolves
to multiple keycodes, the first keycode in the returned array may be from
the wrong layout.
For example, if the current keymap has two layouts: 'us, us(dvorak)', 'p'
will resolve to keycode 27 of the secondary 'dvorak' layout instead of
keycode 33 of the primary 'us' layout.
Instead of using xcb_key_symbols_get_keycode() to resolve keysyms to
keycodes, search each keysym column in the key map until there is a hit.
Setting `disable_border = always` removes border from lone tiled
windows, regardless of the bar being enabled/disabled. This is an
addition to an existing feature, and does not change existing behaviour.
On the musl libc, autorun, layout and workspace name settings were
always rejected as invalid. As it turns out, parsing those was relying
on sscanf incorrectly matching %Nc as long as there is at least one
character. This is fixed by matching only the initial part of the string
via sscanf and skipping ahead by the amount of bytes consumed. This also
avoids unnecessary zeroing, copying and possible implicit truncation.
Relevant glibc bug:
https://sourceware.org/bugzilla/show_bug.cgi?id=12701
If the status bar script returns NUL as the first character through
stdin, spectrwm is prone to an out of boundary access. Depending on
the memory layout of the machine, it could turn into an OOB write.
The fix is simple: If the string is empty, do not further check for
newline character.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Match the type of the array to the `format` argument (32).
Could change the format to 16, but the value is documented to be a `CARD32`, so may as well use 32 bit input.
One xcb module, one header file: <xcb/xcb.h> should to be
included directly, instead of relying on other modules dragging
it in; on the other hand, it's okay to include just the top
level <xcb/xcb_util.h> instead of the three separate sub-headers.
[rk@rejii.com: skip xcb_util.h since it breaks xcb-util < 0.3.8]
closes#142