- Add window background blur support (--blur-background &
--blur-background-frame), with X Render convolution filter.
The performance sucks. The performance when the window is opaque but
frame is transparent could be improved, but there are two possible
ways and I'm hesitating.
- Known issue: The blurring effect looks very ungraceful during fading.
I could partially fix the problem, but it probably isn't easy to fix
it completely.
- Add auxiliary window detection (--detect-transient &
--detect-client-leader). Thanks to SmilingHorse for inspiring me. The
implementation is not too speed-efficient, and bugs are to be
expected.
- Known issue: auxiliary window detection may not work too well with
windows that are never mapped, for example as client leader.
- Add "focus" to the wintypes settings in compton.conf, to mark windows
of certain window types to be always focused. Replaces the ugly
is_normal_win().
- Add a ON/OFF/UNSET switch_t type, but it's unused currently.
- Mark client_win if the window client detection hasn't been performed
when we detect WM_STATE's presence in ev_property_notify(), for
performance.
- Make inactive_dim opacity change according to window opacity by
default, so it looks better when fading. --inactive-dim-fixed restores
the old behavior.
- Make client window default to the window itself. Add w->wmwin to
represent whether the window looks like a WM window instead. A side
effect is, the window type of WM windows are changed from unknown to
normal, making it necessary to use --mark-wmwin-active to avoid
considering them unfocused.
- Add check of PointerRoot to recheck_focus() to avoid BadWindow errors
when the root window is focused.
- Add a few macros to simplify debugging code.
- Add DEBUG_FRAME.
- Add --focus-exclude, which should be used with a list of conditions to
set certain windows to always be considered focused.
- Change focus determination process, with a newly added w->focused_real
that reflects whether the window is actually focused, while w->focused
represents whether compton considers it focused. The primary
difference is now when a window considered focused because of
--mark-wmwin-focused or --mark-ovredir-focused receives a FocusOut
event, it's still considered focused by compton.
- Change opacity target and dim state calculation so that it's done at
most once every paint.
- Split window opacity property fetching from calc_opacity() to a new
function win_update_opacity_prop().
- Silence a warning in wid_get_prop_wintype().
- Rename a few functions. Code clean-up.
- My time is very limited currently, few tests are done, so this commit
may very well introduce bugs.
- Known issue: Dim picture opacity does not change based on window
opacity, causing somehow annoying effects when a window fades off.
- Add support for using _NET_WM_ACTIVE_WINDOW to track focus (rather
than using FocusIn/Out events) as --use-ewmh-active-win.
- Add wid_get_attr() and use it in place of XGetWindowProperty() in
various places.
- Remove dpy parameter from find_win() and find_toplevel() as it's unused.
- Fix a writing-to-freed-memory issue in paint_preprocess().
- Implement clear_shadow with painting region limitation instead of
calculation in shadow image, to make it work correctly on windows with
rounded corners, requested by funeral1988. This might cause more load
on CPU, but could mean less load for GPU. The original implementation
is kept but commented out.
- Code cleanup.
- Stop rendering InputOnly windows. In the past I've misunderstood the
whole thing, I guess, sorry. Thanks to garfilth and funeral1988 for
reporting and providing valuable information.
- Fix a possible segfault in DDEBUG_EVENTS.
- Add "dbe" as a configuration file option.
- Attempt to slightly reduce the rendering delay after VSync in non-DBE
mode. I don't think, however, that this would be greatly helpful for
the tearing issue.
- I realized I might have fundamentally misunderstood VSync. This commit
tries to fix the possible problem, or at least move the tearing line
close to the top of the screen.
- Software VSync is replaced by --sw-opti (software optimization), as
I guess it isn't possible at all to do VSync without driver support.
- Add "vsync" and "sw-opti" as configuration file options.
- Add support for painting on X Composite overlay window instead of root
window (--paint-on-overlay). I intended to use this to fix the
conflict between conky (own-window off) and compton, but it's
unsuccessful. Will have to ask somebody to figure out how to solve
this problem.
- Rename a few variables to avoid confusion.
- Slightly change how root window content (wallpaper) change is
detected.
- Slightly improve window name detection in DEBUG_EVENTS.
Pregenerate alpha pictures to save time when painting. Add --alpha-step
to control the step of alpha picture generation (the opacity difference
between two consecutively generated alpha pictures).
- Add VSync feature. 3 possible VSync methods available: "sw" (software,
not too reliable, but at least you have something to fallback to),
"drm" (using DRM_IOCTL_WAIT_VBLANK, should work only on DRI drivers),
"opengl" (using SGI_swap_control extension OpenGL, might work on more
drivers than the DRM method). "sw" and "opengl" are briefly tested,
"drm" received utterly no test (because I use the nVidia binary blob).
They are enabled with "--vsync sw" / "--vsync drm" / "--vsync opengl".
- Add --refresh-rate to let user specify a refresh rate for software
VSync, in case the automatic refresh rate detection does not work
well.
- Seemingly the automatic refresh rate detection using X RandR in
software VSync detects refresh rate incorrectly. Need further investigation.
- Fix a few bugs in fading timing.
- Add a workaround for client window detection on Fluxbox, as Fluxbox
(incorrectly?) sets the override-redirect flag upon all frame
windows.
- Software VSync adds dependency on librt (a part of glibc) for
nanosecond-level timing functions, and libXrandr for automatic refresh
rate detection; DRM VSync adds dependency on libdrm to use its drm.h,
but does not link to libdrm; OpenGL VSync adds dependency on libGL.
- Print timing information on DEBUG_REPAINT.
- Some WMs don't respect Keith Packard's proposal of
_NET_WM_WINDOW_OPACITY, and do not copy _NET_WM_OPACITY attribute of a
client window to its frame windows, thus cause opacity set by
non-override-redirect windows to have no effect. This commit adds
support for reading _NET_WM_OPACITY from client windows if running
with --detect-client-opacity. Thanks to pvanek for reporting.
- Change Makefile logic to determine options from 3 variables
(NO_LIBCONFIG, NO_REGEX_PCRE, NO_REGEX_PCRE_JIT) instead of CFG to
ensure compatibility when we add new options. CFG variable is no
longer been respected.
- 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.
- 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.
- 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.