Improvement #7: Add double buffering

Add double buffering with X DBE extension in hope to get rid of the
tearing issue. Thanks to cairo-compmgr for providing hints. Could be
enabled with --dbe. Only very limited tests have been done, I don't know
if it actually solves the tearing issue. My estimation is it is harmful
for performance, but I found no clear evidence. Experimental, so no
configuration file option is available for it.

MONITOR_REPAINT is broken if --dbe is turned on, this is intended for
testing whether DBE is actually working.
Improvement: Add painting on overlay support

- 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.
Bug fix #7: Correct a possible issue in VSync

- 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.
Bug fix #57: Fix incorrect handling of InputOnly windows

- 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.
Improvement: Change clear_shadow implementation

- 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.
Merge branch 'master' into richardgv-dev

Merged the documentation changes. Program code unchanged.
Bug fix: Fading blocks in rare circumstances

- In very rare circumstances, poll() to the X connection returns 1 but
  no events are read out, causing XNextEvent() in the main loop to wait
  infinitely until another event comes, typically affecting fading
  process only, causing fading to appear somehow stopped. This commit
  adds a (possible) fix.

- Listen to Expose events of the X Composite overlay window if we are
  painting to it, to avoid making some parts of the screen blank when
  switching out of X screen in --paint-on-overlay mode.

- Drop "fade_fin" member of struct _win, because it's pretty useless.

- Drop unused "root" parameter of expose_root(), move get_time_ms() to
  compton.h, etc.
Misc: Small adjustments

- Minor change of code in configure_win() for a slight performance boost
  in some cases.

- Discovered there are a lot of X errors that I basically cannot fix, caused by
  the asynchronous nature of Xlib...

- Correct the position of the timestamps in DEBUG_REPAINT. This might
  have negative effects for debugging X errors, though.
Improvement: Try to reduce reg_ignore regenerations

- Try to reduce regenerations of reg_ignore. Highly experimental and
  could lead to very obscure bugs. More testing needed.

- Introduce to_paint in struct _win to keep track of whether this window
  was painted last time.

- Drop CAN_DO_USABLE support. Its usage looks pretty limited.

- Fix a bug that possibly causes rendering issues on frame width changes
  if frame_opacity is enabled.

- Detect other borders (instead of only top border) when determining
  frame opacity.

- Change the type of w->mode from int to an enumeration type.

- Ignore ShapeNotify if the window is not mapped, to avoid loss of
  w->border_size in some cases, which breaks the fading out process of
  shaped windows.

- Stop rendering a window if its picture is lost and it's unmapped, to
  avoid a series of X errors and possible rendering problems.
Improvement: border_size & ConfigureNotify & VSync changes

- Run XSync() before the final paint to catch VBlank better. Stolen from
  Xfwm4 VSync patch.

- Add --vsync-aggressive that sends out the final painting request
  earlier, simulating xfwm4 VSync patch. But this thing does have the
  possibility of breaking VSync, I think...

- Change handling of ConfigureNotify to avoid freeing w->extents and
  w->border_size if possible.

- Change logic in paint_prepreprocess() to use win_get_region() for
  border_size generation instead of border_size() if the window is not
  shaped to try to avoid some BadRegion error messages when a window
  loses its border_size then is unmapped, about which Adys complained in
  #25.

- Detect if w->border_size is None before using it in various places.
  Practically the effect is pretty limited because
  XFixesCreateRegionFromWindow() usually returns an invalid X ID instead
  of None on error.

- Fix a bug that rounded corner detection could fail if the window size
  is changed by a ConfigureNotify immediately.
Misc: Add Asciidoc man pages

Add Asciidoc man pages. The old man page is still kept, and you need to
run "make docs" to generate the new man pages and a HTML version of it.
An Asciidoc man page for compton-trans is not added yet.
Bug fix #17: Try to fix artifacts after animating/shading shaped wins in Openbox

- Correct design mistakes in win_get_region_noframe(). I must be
  sleepwalking when I wrote that thing!

- Intersect border_size with window region rectangle because Openbox is
  offering wrong window shapes larger than the window rectangle for shaped
  windows. Shame on you, Openbox.

- Change logic in reg_ignore calculation as border_size is now
  intersected with window rectangle and we don't need to do this here
  again.

- Rewrite window painting with frame opacity part in win_paint_win() to
  deal with absurd frame widths WM offers. Again, Openbox, this is your
  fault.

- As I'm in a pretty bad state (continuously working on compton for 10+
  hours without rest...), all these changes are not well tested, and
  bugs are to be expected.
Misc: Code cleanup & debug code changes

- Merge @daBrado's focus event debugging code. Thanks!

- Use macro to reduce code redundancy in various functions.

- Move focus event validation from ev_focus_out() to a separate
  function.

- Add logic in ev_handle() to increase the chance of successful window
  name detection if compton is not reading window names normally (i.e.
  if there's no --shadow-exclude), when DEBUG_EVENTS is on.
Bug fix: A XserverRegion leak

- Fix a XserverRegion leak introduced in b78ab316fd. I hope this is the
  reason of the slowdowns many users reported. Thanks to xrestop!

- Cache the screen region as a variable.

- Add debugging code for region allocation.
Improvement: Focus detection & --mark-ovredir-focused changes

- Change focus detection to filter FocusIn/Out events in an alternative
  way. Could break things, and may be revoked in the future.

- Change --mark-ovredir-focused's semantics. Now it determines whether a
  window is to be unconditionally focused by checking if its client
  window is the window itself. This resolves a problem in window
  managers that set frame windows to be override-redirected (Fluxbox and
  i3?). Yes, I know it's bad to change semantics in this way.
Improvement: Add EWMH _NET_WM_ACTIVE_WINDOW support

- 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().
Bug fix #61: Silence a warning

- Silence a FORTIFY_SOURCE warning. Thanks to @smlx for reporting.

- Add -O2 -D_FORTIFY_SOURCE=2 to default CFLAGS in Makefile.

- Use a cleaner way to resolve the writing-to-freed-memory issue
  mentioned in last commit.
Misc: Asciidoc man page update

- Add man page for compton-trans in Asciidoc format.

- Add description of --use-ewmh-active-win to compton man page.
Bug fix: Window rendered incorrectly if has no border with -e

- 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.
Bug fix: Shape update of opaque windows not handled correctly

- 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.