Feature #16: _COMPTON_SHADOW window property support

- 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.
This commit is contained in:
Richard Grenville
2012-11-09 11:35:40 +08:00
parent b47205db08
commit e924976b28
2 changed files with 94 additions and 10 deletions

View File

@ -318,6 +318,9 @@ typedef struct _win {
Picture shadow_pict;
/// Alpha mask Picture to render shadow. Affected by shadow opacity.
Picture shadow_alpha_pict;
/// The value of _COMPTON_SHADOW attribute of the window. Below 0 for
/// none.
long attr_shadow;
// Dim-related members
/// Whether the window is to be dimmed.
@ -391,6 +394,8 @@ typedef struct _options {
wincond *shadow_blacklist;
/// Whether bounding-shaped window should be ignored.
Bool shadow_ignore_shaped;
/// Whether to respect _COMPTON_SHADOW.
Bool respect_attr_shadow;
// Fading
Bool wintype_fade[NUM_WINTYPES];
@ -1063,9 +1068,18 @@ set_focused(Display *dpy, win *w, Bool focused) {
static void
determine_fade(Display *dpy, win *w);
static void
win_update_shape_raw(Display *dpy, win *w);
static void
win_update_shape(Display *dpy, win *w);
static void
win_update_attr_shadow_raw(Display *dpy, win *w);
static void
win_update_attr_shadow(Display *dpy, win *w);
static void
determine_shadow(Display *dpy, win *w);