Commit Graph

32 Commits

Author SHA1 Message Date
Richard Grenville f95093358e Improvement: Change in client window lookup & wintype detection
- Revert to WM_STATE for client window lookup, as WM_CLASS is
  unreliable, either, but set the client window of an override-redirect
  window to itself.

- Conform to EWMH to make assumptions about window types when
  _NET_WM_WINDOW_TYPE is not available.

- Remove determine_wintype() and completely rely on client window for
  window type detection.
2012-10-02 21:46:37 +08:00
Richard Grenville 2f0417cd74 Feature: #27: Detect shaped windows and disable shadow on them
- 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.
2012-10-01 10:41:51 +08:00
Richard Grenville 8d7d6405b6 Improvement: Wait infinitely for events when idling
Wait infinitely for events when idling, instead of always calling
paint_preprocess(), to reduce CPU usage in the case. Thanks to valr for
help.
2012-09-29 22:53:57 +08:00
Richard Grenville 5a3dfbc064 Improvement: Split shadow_pict to shadow_pict & shadow_alpha_pict
Split w->shadow_pict to w->shadow_pict and w->shadow_alpha_pict, so that
the whole w->shadow_pict need not to be rebuild on shadow opacity
change. This greatly reduces CPU usage of compton when a window with
shadow is fading. (My test shows the CPU usage of compton process
dropped from 1.15% to 0.35% when constantly fading in and out a window.)
It uses a rather painful and slow method in shadow_picture() to get
around the limitation of PictStandardA8 to make colored shadows work. I
wonder if there's a better approach.

- Merge variables gsize and cgsize as they seemingly represent the same
  thing.
2012-09-29 13:21:39 +08:00
Richard Grenville 9139d038c2 Bug fix: #48: Compilation failure with old libconfig/libpcre
- 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.
2012-09-28 09:19:53 +08:00
Richard Grenville 75ebe94bb6 Feature: --no-fading-openclose to partially simulate -F
-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.
2012-09-26 21:47:32 +08:00
Richard Grenville 8c0379180b Bug fix: Issue #46: Optionally mark override-redirect windows as active
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.
2012-09-26 19:48:36 +08:00
Richard Grenville 606e2d7061 Misc: Code clean-up
- Change some members of options_t. Clean up wrongly replaced option
  names in comments. Rename "options" to "opts", to avoid breaking line
  width too much, and to minimize typing as it's so frequently used.
  :-)

- Let general options in commandline arguments override wintype-specific
  options in a configuration file, which could be a more natural
  behavior.
2012-09-26 18:54:35 +08:00
Christopher Jeffrey 93c82a84ef add global options struct. 2012-09-25 20:56:02 -05:00
Richard Grenville 564e55e22c Feature: Wintype-specific options in configuration files
- 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.
2012-09-25 21:08:54 +08:00
Richard Grenville ee9e90efec Feature: Configuration file parsing
- 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.
2012-09-25 10:32:41 +08:00
Richard Grenville a5d9955ca4 Improvement: Change window type detection
- Let window type detection start with the client window if there's one,
  in hope to enhance performance.

- Change get_wintype_prop() to fetch the property only once.

- Default to WINTYPE_UNKNOWN instead of WINTYPE_NORMAL if
  _NET_WM_WINDOW_TYPE is missing.

- Fix a mistake in calc_opacity().

- Add some items to .gitignore.

- Fix a typo in usage().
2012-09-22 20:59:26 +08:00
Richard Grenville 0d6724385e Feature: Issue #29: Alternative shadow blacklist implementation
- Add shadow blacklist feature, but a different implementation from
  nicklan's. 5 matching modes (exact, starts-with, contains, wildcard,
  PCRE) and 3 matching targets (window name, window class instance,
  window general class). Not extensively tested, bugs to be expected.
  It's slower for exact matching than nicklan's as it uses linear search
  instead of hash table. Also, PCRE's JIT optimization may cause issues
  on PaX kernels.

- Add dependency to libpcre. Could be made optional if we have a
  graceful way to handle that in Makefile.

- Some matching functions are GNU extensions of glibc. So this version
  may have troubles running on platforms not using glibc.

- Fix a bug that access freed memory blocks in set_fade_callcack() and
  check_fade_fin(). valgrind found it out.

- Use WM_CLASS to detect client windows instead of WM_STATE. Some client
  windows (like notification windows) have WM_CLASS but not WM_STATE.

- Mark the extents as damaged if shadow state changed in
  determine_shadow().

- Rewrite wid_get_name(). Code clean-up.

- Two debugging options: DEBUG_WINDATA and DEBUG_WINMATCH.

- As the matching system is ready, it should be rather easy to add other
  kinds of blacklists, like fading blacklist.
2012-09-22 11:42:39 +08:00
Richard Grenville 8724101c0a Bug fix: Detect and mark WM windows as active
See chjj's comments on issue #39:
https://github.com/chjj/compton/issues/39#issuecomment-8533360

- Add a switch --mark-wmwin-focused that try to detect WM windows and
  mark them active.

- Fix a bug that causes BadDrawable, etc. if a window is mapped then
  immediately unmapped.

- Fix a bug in determine_evmask().

- Add a debug option DEBUG_CLIENTWIN.

- Force window repaint on window frame extent change.

- Code cleanup.
2012-09-20 14:11:50 +08:00
Richard Grenville 778a8b177c Improvement: Change fading mechanism
- Change fading mechanism for better modularity. Remove fade queue and
  use members in struct _win to record fading data. In contrast to
  previous commits, this one actually could make the program slower (but
  very slightly, hardly noticeable if your CPU is anywhere close to AMD
  K7). As this commit changes lots of things, bugs are to be expected.

- Currently -F does not do its job. -f actually equals -fF. (While in
  the past -F equals nothing and -f is just -f.) A fix will be made
  soon. I suppose it isn't hard.

- Add a preprocessor function paint_preprocess() and move all
  preprocessing code in paint_all() to it.

- Add window flag support but currently unused.

- Add DamageNotify handling to ev_window().

- I'm considering removing HAS_NAME_WINDOW_PIXMAP = 0 support as I
  couldn't see what it is good for. Nor do I know what CAN_DO_USABLE
  does. Basically all my changes ignore these cases.
2012-09-19 21:14:28 +08:00
Richard Grenville 1437e406c7 Improvement: Defer shadow picture generation
- Defer shadow picture generation to minimize interactions with X,
  hoping to boost performance.

- Fix a rendering issue caused by clip_changed in configure_win().
  Remove clip_changed altogether.

- Split generation of shadow picture from calculating its geometry.

- Cache width/height including borders in struct _win as it's frequently
  used.
2012-09-17 22:15:04 +08:00
Richard Grenville cdf7db750d Improvement: Change painting sequence
- Now compton paints windows from the lowest to the highest.  Warning:
  I'm not completely certain that the change won't introduce unexpected
  glitches. This commit may be revoked in the future.

- Remove w->border_clip since it's no longer needed.

- Correct a mistake in find_toplevel2(). (clang --analyze found it out.)

- Change "func_name()" prototypes to "func_name(void)". If I remember
  correctly, "func_name()" means you are remaining silent about this
  function's parameters instead of stating it has no parameter in ANSI
  C.

- Add timestamps to error messages.

- Suppress error messages caused by free_damage().
2012-09-17 16:04:04 +08:00
Richard Grenville dfde67255f Improvement: Change generating process of alpha_pict, etc.
- Change how w->alpha_pict is generated, in hope to boost performance,
  slightly, and as a step to eventually move handling code of most resources
  used when painting to paint_preprocess().

- Remove alpha_pict parameter of shadow_picture() as it's not
  necessary.

- Let window opacity affect frame opacity.

- Rename some members of struct _win.
2012-09-17 12:41:41 +08:00
Richard Grenville 64d53f6534 Misc: Clean up
- Add 4 helper free functions that free XserverRegion, Damage, Picture,
  and Pixmap.

- Rename w->shadow to w->shadow_pict. Add a bool member w->shadow to
  prepare for a future change.
2012-09-16 23:17:34 +08:00
Richard Grenville 4293a4626a Bug fix: Issue #43, better client window lookup
More details on the issue report.

- Look up the client window of a WM frame when it's mapped instead of when
  it's created, for better reliability.

- Fix a warning when building.
2012-09-14 11:51:46 +08:00
Christopher Jeffrey e2c14ee545 fix determine_evmask warnings 2012-09-13 10:24:37 -05:00
Christopher Jeffrey 0064894bf6 more style changes 2012-09-13 10:24:14 -05:00
Christopher Jeffrey 5bcbf87f32 stay consistent with code style 2012-09-13 10:00:57 -05:00
Christopher Jeffrey 5112f91c48 whitespace 2012-09-13 09:59:50 -05:00
Richard Grenville 18b3a96d0b 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.
2012-09-13 21:38:55 +08:00
Richard Grenville 3abeb58690 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.
2012-09-12 21:01:06 +08:00
Richard Grenville e9cfa49c86 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.
2012-09-12 10:52:52 +08:00
Richard Grenville f280750a03 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.
2012-09-12 09:08:15 +08:00
Richard Grenville 129115171a 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.
2012-09-11 22:22:58 +08:00
Richard Grenville deaaf5c5cf 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.
2012-09-11 21:57:50 +08:00
Richard Grenville f5aed89a67 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.
2012-09-11 21:33:03 +08:00
Christopher Jeffrey 8f4eafaf79 reorganize tree 2012-02-27 05:22:33 -06:00