Misc: Add Vim swap files to .gitignore
Bug fix: Issue #38, fixes painting specially-shaped semi-transparent windows

Fix taken from xcompmgr.
Bug fix: Issue #36: Chromium window painting problems

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.
Feature: Issue #35, Add colored shadows

- Use getopt_long() instead of getopt() for argument parsing, making
  long options possible.

- Add support of colored shadows with 3 commandline switches.
Bug fix: Issue #37, fix 5 opacity-related bugs

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.
Bug fix: Segfault when encountering invalid long option

I didn't read the documentation of getopt_long() carefully.
Debug: Enhanced debugging capability

- 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.
Feature: Issue #2: Support dim inactive windows

- Add a switch --inactive-dim that dims inactive windows.

- The window dimming feature is implemented in a pretty ugly way.
  Improve it if possible.
Bug fix: Issue #39: Render windows just mapped && focused incorrectly

More info in the issue description. This also fixes the problem for
--inactive-dim.
Bug fix: Double free when XQueryTree() fails

Take care of failure of XQueryTree() to prevent it from causing a
double-free crash. This usually happens when X is initializing and windows
are constantly changing.
Bug fix: Issue #40: -z does not work as expected

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.
Improvement: Do not track focus changes unless necessary

Stop tracking focus changes unless either inactive_opacity or
inactive_dim is enabled, small performance boost in certain cases.
Improvement: Use find_toplevel() to find WM frame

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.
Bug fix: Segfault when meeting FocusIn/Out from destoryed windows

I found compton segfaults sometimes when starting from .xinitrc.
Debugging reveals my conky window was just reparented to a fvwm's
frame window before compton picked up a FocusOut event on this conky
window that has just been destroyed in the event queue. find_win()
call in ev_focus_in/out() returned a NULL pointer. When it tried to
use the pointer segfault happens.

- Add extra check to ev_focus_in/out() to stop the segfault.

- Reset window event mask on window reparenting to a non-root window to
  minimize wrong events.

- More abstraction for determining window event mask.
whitespace
stay consistent with code style
more style changes
fix determine_evmask warnings
fix code duplication resulting from rebase