- Revert to WM_STATE for client window lookup, as WM_CLASS is
unreliable, either, but set the client window of an override-redirect
window to itself.
- Conform to EWMH to make assumptions about window types when
_NET_WM_WINDOW_TYPE is not available.
- Remove determine_wintype() and completely rely on client window for
window type detection.
- Optionally detect shaped windows using X Shape extension and disable
shadow on them with --shadow-ignore-shaped.
- Some windows are bounding-shaped just to support rounded corners, like
Chromium windows (when system titlebar is disabled in its settings).
Add --detect-rounded-corners to treat them as non-shaped windows (thus
enable shadow on them). The algorithm I use is not perfect and wrong
detection results are pretty possible to appear.
- Many windows don't use X Shape extensions to add shapes but use ARGB
background instead. These windows could only be blacklisted with
--shadow-blacklist.
- Rename a few functions. Code clean up.
Split w->shadow_pict to w->shadow_pict and w->shadow_alpha_pict, so that
the whole w->shadow_pict need not to be rebuild on shadow opacity
change. This greatly reduces CPU usage of compton when a window with
shadow is fading. (My test shows the CPU usage of compton process
dropped from 1.15% to 0.35% when constantly fading in and out a window.)
It uses a rather painful and slow method in shadow_picture() to get
around the limitation of PictStandardA8 to make colored shadows work. I
wonder if there's a better approach.
- Merge variables gsize and cgsize as they seemingly represent the same
thing.
- Fix compilation failure with <libpcre-8.20 and <libconfig-1.4. Tested
with libpcre-8.12 and libconfig-1.3.2, but not extensively tested.
libconfig-1.3* probably has more limitations on configuration file
syntax (enforces comma at the end of a setting?) and does not support
@include.
- Make it possible to turn off PCRE and libconfig support using
environment variable "CFG". Not well tested. CMake might provide a
better solution.
-F hasn't being working for long. This commit adds a switch
--no-fading-openclose (and a configuration file option of the same name)
to simulate the behavior when only -F is enabled, which disables fading
when opening/closing windows, and makes -F an alias for -f.
Attempt to fix the transparency issue of Firefox and Chromium location
bar dropdown window by marking override_redirect windows as active. This
may not work completely and could have other side effects. Experimental.
Enable by using --mark-ovredir-focused.
- Change some members of options_t. Clean up wrongly replaced option
names in comments. Rename "options" to "opts", to avoid breaking line
width too much, and to minimize typing as it's so frequently used.
:-)
- Let general options in commandline arguments override wintype-specific
options in a configuration file, which could be a more natural
behavior.
- Add support of window-type-specific options (fade, shadow, and
opacity) in configuration file parsing. Syntax shown in
compton.sample.conf.
- Replace wintype_name() with an array of window type names. Code
clean-up.
- Add support for parsing configuration files using libconfig.
(Dependency on libconfig could be made optional once we get some
better building system.) Few tests has been done, bugs to be expected.
compton searches for a configuration file mostly according to the XDG
standard. Firstly the configuration file requested by --config, then
$XDG_CONFIG_HOME/compton.conf (~/.config/compton.conf, usually), then
~/.compton.conf, then compton.conf under $XDG_DATA_DIRS (often
/etc/xdg/compton.conf). A sample configuration file is supplied as
compton.sample.conf. Configuration file syntax may change in the
future. Commandline switches has higher priority than configuration
file, except for --shadow-exclude. Use --config /dev/null to
temporarily disable configuration file.
- Fix a bug that causes windows to disappear or be partially rendered on
opacity changes.
- Fix a bug that causes some windows to ignore -i (inactive_opacity) and
--inactive-dim, caused by the default window type change in
a5d9955ca4.
- Let window type detection start with the client window if there's one,
in hope to enhance performance.
- Change get_wintype_prop() to fetch the property only once.
- Default to WINTYPE_UNKNOWN instead of WINTYPE_NORMAL if
_NET_WM_WINDOW_TYPE is missing.
- Fix a mistake in calc_opacity().
- Add some items to .gitignore.
- Fix a typo in usage().
- Add shadow blacklist feature, but a different implementation from
nicklan's. 5 matching modes (exact, starts-with, contains, wildcard,
PCRE) and 3 matching targets (window name, window class instance,
window general class). Not extensively tested, bugs to be expected.
It's slower for exact matching than nicklan's as it uses linear search
instead of hash table. Also, PCRE's JIT optimization may cause issues
on PaX kernels.
- Add dependency to libpcre. Could be made optional if we have a
graceful way to handle that in Makefile.
- Some matching functions are GNU extensions of glibc. So this version
may have troubles running on platforms not using glibc.
- Fix a bug that access freed memory blocks in set_fade_callcack() and
check_fade_fin(). valgrind found it out.
- Use WM_CLASS to detect client windows instead of WM_STATE. Some client
windows (like notification windows) have WM_CLASS but not WM_STATE.
- Mark the extents as damaged if shadow state changed in
determine_shadow().
- Rewrite wid_get_name(). Code clean-up.
- Two debugging options: DEBUG_WINDATA and DEBUG_WINMATCH.
- As the matching system is ready, it should be rather easy to add other
kinds of blacklists, like fading blacklist.
See chjj's comments on issue #39:
https://github.com/chjj/compton/issues/39#issuecomment-8533360
- Add a switch --mark-wmwin-focused that try to detect WM windows and
mark them active.
- Fix a bug that causes BadDrawable, etc. if a window is mapped then
immediately unmapped.
- Fix a bug in determine_evmask().
- Add a debug option DEBUG_CLIENTWIN.
- Force window repaint on window frame extent change.
- Code cleanup.
- Change fading mechanism for better modularity. Remove fade queue and
use members in struct _win to record fading data. In contrast to
previous commits, this one actually could make the program slower (but
very slightly, hardly noticeable if your CPU is anywhere close to AMD
K7). As this commit changes lots of things, bugs are to be expected.
- Currently -F does not do its job. -f actually equals -fF. (While in
the past -F equals nothing and -f is just -f.) A fix will be made
soon. I suppose it isn't hard.
- Add a preprocessor function paint_preprocess() and move all
preprocessing code in paint_all() to it.
- Add window flag support but currently unused.
- Add DamageNotify handling to ev_window().
- I'm considering removing HAS_NAME_WINDOW_PIXMAP = 0 support as I
couldn't see what it is good for. Nor do I know what CAN_DO_USABLE
does. Basically all my changes ignore these cases.
- Defer shadow picture generation to minimize interactions with X,
hoping to boost performance.
- Fix a rendering issue caused by clip_changed in configure_win().
Remove clip_changed altogether.
- Split generation of shadow picture from calculating its geometry.
- Cache width/height including borders in struct _win as it's frequently
used.
- Now compton paints windows from the lowest to the highest. Warning:
I'm not completely certain that the change won't introduce unexpected
glitches. This commit may be revoked in the future.
- Remove w->border_clip since it's no longer needed.
- Correct a mistake in find_toplevel2(). (clang --analyze found it out.)
- Change "func_name()" prototypes to "func_name(void)". If I remember
correctly, "func_name()" means you are remaining silent about this
function's parameters instead of stating it has no parameter in ANSI
C.
- Add timestamps to error messages.
- Suppress error messages caused by free_damage().
- Change how w->alpha_pict is generated, in hope to boost performance,
slightly, and as a step to eventually move handling code of most resources
used when painting to paint_preprocess().
- Remove alpha_pict parameter of shadow_picture() as it's not
necessary.
- Let window opacity affect frame opacity.
- Rename some members of struct _win.
- Add 4 helper free functions that free XserverRegion, Damage, Picture,
and Pixmap.
- Rename w->shadow to w->shadow_pict. Add a bool member w->shadow to
prepare for a future change.
More details on the issue report.
- Look up the client window of a WM frame when it's mapped instead of when
it's created, for better reliability.
- Fix a warning when building.
Use find_toplevel() to find out the WM frame of a client window. I
didn't noticed it beforehand. Fallback to the old method as compton does
not always get correct client windows.
- Clean up find_client_win() a bit. A BFS search algorithm could be more
optimal yet it requires a queue implementation.
More information in the issue report.
- Let window opacity affect the opacity of its shadow and frames even if
-z is enabled.
- Check for the range of -o to eliminate potential segfault.
- Change all #if DEBUG_XXX directives to #ifdef, thus making it
possible to directly enable debugging options with CFLAGS
(-DDEBUG_XXX).
- Print timestamp before event debugging messages.
More details in the bug report.
- Rewritten much of the opacity calculation, code cleanup.
- Commandline switch --inactive_opacity_override to restore the old
behavior in which inactive_opacity has higher priority than
_NET_WM_OPACITY.
- Use getopt_long() instead of getopt() for argument parsing, making
long options possible.
- Add support of colored shadows with 3 commandline switches.
More descriptions on issue #36.
- Listens ShapeNotify event to get around the Chromium window painting
issues.
- Adds dependency on X Shape extension.
- Adds a few functions for convenience, so a bit code clean up.
- Better event debug support, adds restack_win() debug.