- Add experimental OpenGL backend (--opengl). --blur-background is
currently not possible with this backend, because I'm still trying to
find a proper way to do blur with OpenGL. Flipping backend on-the-fly
is really hard, so it isn't supported right now. No configuration file
option exists to enable this, because it isn't stable enough.
- Add `opengl-swc` VSync method that uses SGI_swap_control to control
buffer swap, with OpenGL backend. (#7)
- Fix a potential read-from-freed-memory issue in paint_all().
- Correctly reattach GLX context after fork.
- Dump error text in error(). Add GLX error code handling.
- Code clean-up.
- Known issues: Region operations take a lot of time in glx_render().
I'm hesitating about what to do.
- Create OpenGL context only after initializing overlay, which fixes a
bug that --paint-on-overlay does not work with OpenGL VSync. Thanks to
tsmithe for reporting. (#7)
- Fix an assertion failure that occurs when a window is reparented to
the root window then immediately to another window. Thanks to smlx for
reporting.
- Add extra debugging info for ReparentNotify.
- #91: Use pkg-config to find drm.h to avoid issues on FreeBSD. Thanks
to hun7err for pointing out and providing patch.
- #89: Add default shadow exclusion rule for notify-osd. Thanks to
DanielRS.
- Check for abundant positional arguments.
- Use paint target window (root window / overlay window) instead of
ps->reg_win to create GLXContext. (May have negative effects on OpenGL
VSync.) Add new OpenGL helpers functions, to prepare for the new
OpenGL backend.
- Dump more info of a PropertyNotify with DEBUG_EVENTS.
- Make Makefile compatible with BSD install, by dropping -D.
- Make CFG independent in Makefile, to allow people to specify CFLAGS
as a parameter to make.
- Correct location of .clang_complete.
- Add on-the-fly VSync option modification via D-Bus, as requested by
kunitoki (#80). Expose parse_vsync(), create vsync_init() and
ensure_glx_context().
- Change default value of ps->drm_fd to -1.
- Update Makefile. Change the install/uninstall rules and add doc
installation, requested by hasufell in #85.
- Mark window not damaged in map_win(). It helps in reducing flickering
with inverted window color, but I'm not completely sure if it's safe.
- Avoid modifying w->invert_color when window is unmapped.
- Update documentation. Thanks to hasufell for pointing out.
- Add "vsync-oml" VSync method, using GLX_OML_sync_control. Untested,
because it's not supported by my driver.
- Unredirect ps->reg_win, because DRI wiki says it's related to the
behavior of OpenGL VSync extensions.
- Add glFlush() and glXWaitX() calls, in hope they are slightly helpful
for VSync.
- Change a few functions to make error handling more graceful. Make some
errors fatal. Code clean-up.
- Add unused function make_text_prop().
- Try to improve the performance of color inversion by applying clipping
region during color inversion. (#75)
- Validate pixmap on window unmap/destruction. Probably slightly helpful
for #52.
- Change the design of unmap_win() and destroy_win(), a bit.
- Add warning message to help messages about features disabled at
compile time, instead of dropping their description completely. (#85)
- Silence some warnings. Code clean-up.
- Add advanced window matching system, capable of matching against
arbitrary window properties as well as a series of internal
properties, with 4 additional operators (>, <, >=, <=) useful for
integer targets, and support of logical operators. The old matching
system is removed, but compatibility with the format is retained.
- As the new matching system is pretty complicated, and I have no past
experience in writing a parser, it's pretty possible that bugs are
present. It also has inferior performance, but I hope it doesn't
matter on modern CPUs.
- It's possible to disable matching system at compile time with NO_C2=1
now.
- Add ps->o.config_file to track which config file we have actually
read. Queryable via D-Bus.
- Parse -d in first pass in get_cfg() as c2 needs to query X to get
atoms during condition parsing.
- Fix a bug in wid_get_prop_adv() that 0 == rformat is not handled
correctly.
- Fix incompatibility with FreeBSD sed in dbus-examples/cdbus-driver.sh
.
- Add recipe to generate .clang_complete in Makefile, used by Vim
clang_complete plugin.
- Add DEBUG_C2 for debugging condition string parsing. DEBUG_WINMATCH is
still used for match debugging.
- Rename win_on_wdata_change() to win_on_factor_change().
- Extra malloc() failure checks. Add const to matching cache members in
session_t. Code clean-up. Documentation update.
- Fix a bug that root window is not repainted on wallpaper change unless
an Expose X event is received. Seemingly, if there's no mapped window
on a screen, X will not send an Expose event when the wallpaper
changes. Thanks to baskerville for reporting.
- Fix a X Pixmap leak when there's no existing wallpaper pixmap found.
- Fix a bug in mstrncpy() that null character is not added to the end of
the copied string.
- Make VSYNC_STRS public, for use in src/dbus.c. Adjust the type of
WINTYPES array. Add NUM_VSYNC.
- Add more targets for various D-Bus methods. Add "bad_target" D-Bus
error. Improve error handling. Add more helper functions to append
arguments to a D-Bus message. Add Introspect method to D-Bus
introspection reply.
- Add public declarations of things in the new condition format code to
common.h. Move definitions of some inline functions from compton.h to
common.h. Make some functions public. Move wid_get_prop_adv() to
compton.c. The primary code files of the new format src/c2.{c,h} will
be published when ready.
- Add support for dumping version string in Makefile (make version), to
make snapshot generation easier.
- Add repeated inclusion protection to common.h.
- Update documentation.
- Use gsed instead of sed in dbus-examples/cdbus-driver.sh if possible,
as some BSD systems does not come with GNU sed by default. Thanks to
DaChiChang for reporting.
- Code clean-up. Small type changes in register_cm() to silence
warnings. Quit on failure in parse_vsync(). Apply stricter checks in
force_repaint().
- Add D-Bus support. Currently 7 methods are available: "reset" (same as
SIGUSR1), "list_win" (list the windows compton manages), "win_get"
(get a property of the window), "win_set" (set a property of the
window), "find_win" (find window based on client window / focus),
"opts_get" (get the value of a compton option), and "opts_set" (set
the value of a compton option), together with 4 signals: "win_added",
"win_destroyed", "win_mapped", "win_unmapped".
- D-Bus support depends on libdbus.
- As there are many items and my time is tight, no much tests are done.
Bugs to be expected.
- Create a new header file `common.h` that contains shared content.
- Fix some bugs in timeout handling.
- Update file headers in all source files.
- Re-enable --unredir-if-possible on multi-screen set-ups, as the user
could turn if off manually anyway.
- Check if the window is mapped in `repair_win()`.
- Add ps->track_atom_lst and its handlers, to prepare for the new
condition format.
- Known issue 1: "win_get", "win_set", "opts_get", "opts_set" support a
very limited number of targets only. New ones will be added gradually.
- Known issue 2: Accidental drop of D-Bus connection is not handled.
- Known issue 3: Introspection does not reveal all available methods,
because some methods have unpredictable prototypes. Still hesitating
about what to do...
- Known issue 4: Error handling is not finished yet. Compton does not
always reply with the correct error message (but it does print out the
correct error message, usually).
- Fix a small bug that breaks --invert-color-include if no other
blacklists are present. Thanks to MaskRay and xiaq for reporting.
- Disable --unredir-if-possible for multi-screen setups.
- Fix a bug that causes --no-fading-openclose to have no effect in some
cases. Add w->in_openclose to keep track of window open/close state.
- Add window color inversion (--invert-color-include). It means 2-3
times extra painting, so performance issues are likely to appear. I
hope I could find a faster way to invert colors.
- Rename some functions.
- Fix update of some window properties after window type/data change.
Hopefully this will be helpful for #73.
- Split win_build_picture() from win_blur_background().
- Correct memory leak of ps->focus_blacklist during reinitialization.
- Add win_upd_t and win_upd_run(), to reduce duplicate window property
updates. But is unused right now.
- Limited tests are done overall. Bugs to be expected.
- Back to using select() for main loop. Thus we are not longer relying
on libevent.
- Add generic timeout system (untested) to prepare for D-Bus support.
- Drop troff man pages. Revise Makefile to improve documentation
building, fix double LDFLAGS inclusion, and re-add -lrt. This turns
asciidoc into a build time dependency.
- Change fading time calculation.
- Add --logpath and ostream_reopen() for debugging with -b.
- Drop unused lceil_ntimes() and other helper functions.
- Only very limited tests are done. Bugs to be expected.
- (Hopefully) fix all incorrect handling of w->a.border_width in compton
(#77). Thanks to baskerville for reporting.
- Attempt to fix#73 by correcting a mistake that window data is fetched
from the wrong function. Thanks to zakkak.
- Add git commit/tag detection to Makefile for automatic versioning.
- Change -lGL linking order, to fix a segmentation fault caused by
something in nvidia-drivers under FreeBSD, mentioned in #74. Thanks
for the report from DachiChang.
- Link to -levent_core instead of -levent in Makefile. We might move to
libev soon, though.
- Increase SWOPTI_TOLERANCE to handle the extraordinary delay of
kqueue() under FreeBSD. Thanks for DachiChang's report.
- Add helper function dump_drawable() for debugging.
- Replace XInternAtom() calls with get_atom().
- Remove -lrt as it's unneeded.
- Use libevent for main loop. I will explain the reasons in #56 later.
The preferred libevent version is 2.x, yet 1.4.x should work as well.
- As a result, compton now should build fine on *BSD. Thanks to
DachiChang for the FreeBSD build issue report.
- Another consequence is we now use microsecond-level timing all the
way. Nanosecond-level code will be dropped soon. Start using long
instead of unsigned long to represent time in milliseconds, as both
can't hold the full epoch time in ms, anyway, and a signed type
requires less care in subtraction. Wrap the epoch time in ms to 15
days.
- Fix broken NO_VSYNC_DRM and NO_VSYNC_OPENGL compile-time options.
- Use git revision number for versioning in Makefile, and other small
improvements.
- Reorganize struct _win. Drop unused w->damaged_sequence. w->damaged is
turned to bool.
- Add type and format to winprop_t, as preparation for the new condition
format.
- Add w->shadow_force and w->focus_force, to prepare for D-Bus support.
- Rename wid_get_prop() to wid_get_prop_adv() with more options. Add
wrapper function wid_get_prop().
- Add some extra helper functions, for D-Bus support later.
- Make some functions return a bool value to indicate if it's
successful.
- Modify add_win(), use a static const structure to initialize the new
struct _win.
- Add some helper macros, like printf_err(f)(q). Make some errors fatal.
- Rename some types, constants, and functions. Code clean-up.
- Check for time disorder in paint_preprocess() when calculating fading
steps.
- Rename evpoll() to swopti_handle_timeout(), and partially rewrite it.
- Make -h / --help legal.
- Known issue: compton segfaults on FreeBSD with nvidia-drivers, unless
NO_VSYNC_OPENGL is used. Will look into it later. Thamls to DachiChang
for reporting.
- Remove the region expansion design in win_blur_background(). I must be
sleep-walking when I wrote that!
- Improve performance of blurring when a window is opaque but its frame
is transparent.
- Adjust blur strength according to window opacity.
--blur-background-fixed restores the old behavior.
- Add "use_offset" parameter to a few functions for convenience. Code
clean-up.
- 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.
- Move some long functions to ./src/compton.c .
- Fix a small potential issue in win_set_focused() when a window with
neither leader nor client window is focused.
- Add DEBUG_LEADER.
- 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.
- Attempt to fix client window detection when WM_STATE property is not
yet set when the window is mapped. Thanks to kinclma1 for reporting.
- Apply stricter checks for whether window is mapped in
determine_evmask() and win_mark_client().
- Note I'm not in the best state today (bad cold & sleep-deprived). This
commit is likely to introduce bugs.
- Attempt to fix client window detection failures happening when compton
searches for client window before it's ready.
- Fix build failure with <libpcre-8.20. Thanks to @pvanek for reporting
in #51.
- Move client window detection to a new function win_recheck_client().
- Add win_unmark_client(), which unmarks a client window.
- Rename a few functions.
- Split fetching of values of type-Window properties to a new function
wid_get_prop_window().
- Add extra safety checks and assert calls to various functions, to
expose potential bugs.
- Fix a memory leak that w->role is not freed on window destruction.
- Add support of matching WM_WINDOW_ROLE value. Thanks to Vladimir A.
Pavlov!
- Thanks to Vladimir A. Pavlov for reporting the issues caused by
missing client window, fixed in the last commit!
- Fix a memory leak in wid_get_text_prop() and wid_get_name(). Xlib
documentation did not mention how to free the value XGetTextProperty()
returns, so my fix could lead to troubles.
- Set focus out in unmap_win(), and add w->leader, to prepare for
subsidiary window detection.
- Abstract update of a single string window property to
win_get_prop_str().
- Change wid_get_name() to rely on wid_get_text_prop() as much as
possible.
- Correct a typo in win_get_prop_str() that could cause unnecessary
update of shadow state and window focus.
- 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.
- Fix a bug that causes wrong focus detection result in Awesome and
maybe other window managers, when --use-ewmh-active-win is enabled and
_NET_ACTIVE_WINDOW changes before the newly-focused window is mapped.
- Fix a typo that causes more than one window to stay focused after a
window destruction with --use-ewmh-active-win.
- Fix a bug that find_clientwin() incorrectly returns a window when
window ID 0 is passed to it.
- Check for window ID 0 in update_ewmh_active_win().
- Create a session_t structure, to get rid of most global variables and
let information pass in/out mostly through parameters. Huge changes,
so bugs may very well appear. I'm worried about resource leakages, in
particular.
- Add gcc attributes on various functions.
- Add Doxygen configuration.
- Replace much Xlib Bool with C99 bool.
- Add and adjust some comments.
- Drop unused parameters from some functions.
- Cache default Visual and Depth, mainly to shorten code.
- Rename some types, variables, and functions.
- Add win_ev_stop() and set_ignore_next() for convenience.
- Modify wid_get_prop_wintype() and wid_get_opacity_prop() to use
wid_get_prop().
- Rename --respect-attr-shadow to --respect-prop-shadow.
- Fix a memory leak in --respect-prop-shadow.
- Many other small changes.
- compton-trans: Allow reading opacity value from positional arguments,
like the version in master branch.
- compton-trans: Quit when meeting an unrecognized option.
- Optionally unredirect windows when there's a fullscreen opaque window on
the top of the stack (--unredir-if-possible). Experimental. Known
issues:
* Screen flickers when redirecting/unredirecting windows.
--paint-on-overlay seemingly minimizes it (Thanks for hints from
mutter), but still noticeable.
* It probably does not play well with vdpau in some cases.
- A debug option DEBUG_REDIR is added.
- Fix a bug that reg_ignore are not expired when a CirculateNotify is
received.
- Add extra safe guards in some places, which could be bad for
performance.
- Remove some abundant code.
- Add support for reading _COMPTON_SHADOW property from windows
(--respect-attr-shadow). Presently the only defined behavior is, if
_COMPTON_SHADOW is set on the highest ancestor below root window of a
window (usually the WM frame), it's format is 32-bit, type is CADINAL,
value is 0, the window will not get a shadow. The format and behavior
could change in the future without prior notification.
- Fix an issue in fork_after() that may cause some streams to remain
open. My mistake.
- Attempt to reduce determine_shadow() calls from map_win() by
separating some raw handler functions out.
Rewrite a part of compton-trans in order to provide more friendly
error messages, to support window title that contains spaces, and to
limit the number of xwininfo calls to a constant. Not much tests are
done, and I don't know bash well, so bugs could very well exist.
- Fix a bug that causes rendering issues if a opaque window changes
shape.
- Remove abundant handling code in paint_preprocess() when generating
border_size as border_size() is no longer relying on
XFixesCreateRegionFromWindow() right now by default.
- Add extra code to print backtrace in DEBUG_ALLOC_REG.
- Move initialization of fade_time closer to first paint.
- Fix a bug that window content and some borders are not rendered if the
window has no border on particular sides when -e (frame-opacity) is
enabled, introduced in 66d3f30978. Just as what I said in the commit
message of the commit, "bugs are to be expected". :-S
- Fix a potential segfault in win_match().
- Slightly update CPackConfig.cmake to add dependency to libdrm.