Commit Graph

146 Commits (2b0dfa9b968ce34f35919f9df216e668fec761b8)
 

Author SHA1 Message Date
Richard Grenville 280bc0fc32 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.
13 years ago
Richard Grenville 10ede89998 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.
13 years ago
Richard Grenville 60f724a30a 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.
13 years ago
Christopher Jeffrey 93de3d1de2 initialize fade_time just to be explicit. 13 years ago
Christopher Jeffrey fdf1593a09 remove fade_time from options struct. 13 years ago
Christopher Jeffrey a0439e57dd add global options struct. 13 years ago
Richard Grenville 760188dbef 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.
13 years ago
Richard Grenville 0c67b84349 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.
13 years ago
Richard Grenville 9a839bc661 Misc: Fix two memory leaks
- Fix two small memory leaks. valgrind detects another memory leak
  possibly caused by XGetTextProperty(), probably a bug in libX11, I
  couldn't fix that one.

- Use predefined atoms in Xatom.h to replace a few XInternAtom() calls.
13 years ago
Richard Grenville 80a4f6d0ab 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().
13 years ago
Richard Grenville cbdaa9c000 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.
13 years ago
Richard Grenville fd0900ef89 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.
13 years ago
Richard Grenville a08c22945a 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.
13 years ago
Richard Grenville fb18759b02 Bug fix: Issue #23, notify-osd not rendered
More details in the issue report.

- Add ClientMessage detection to ev_name() and ev_window(), although we
  don't actually handle the event.
13 years ago
Richard Grenville be3451e097 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.
13 years ago
Richard Grenville e7ba091ccc 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().
13 years ago
Richard Grenville 65e8e56c1e 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.
13 years ago
Richard Grenville 32d9807104 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.
13 years ago
Richard Grenville e370ec9b1c 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.
13 years ago
Christopher Jeffrey 72a1177115 fix code duplication resulting from rebase 13 years ago
Christopher Jeffrey 6278604753 fix determine_evmask warnings 13 years ago
Christopher Jeffrey 212582469a more style changes 13 years ago
Christopher Jeffrey f092885f47 stay consistent with code style 13 years ago
Christopher Jeffrey 2f63377d4e whitespace 13 years ago
Richard Grenville 27197e24db 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.
13 years ago
Richard Grenville 3a0ba85d3b 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.
13 years ago
Richard Grenville a447b5d310 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.
13 years ago
Richard Grenville 73342d1ff2 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.
13 years ago
Richard Grenville 17b8a50161 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.
13 years ago
Richard Grenville 05b229f2a0 Bug fix: Issue #39: Render windows just mapped && focused incorrectly
More info in the issue description. This also fixes the problem for
--inactive-dim.
13 years ago
Richard Grenville 1f271c2953 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.
13 years ago
Richard Grenville 7ab11dfa66 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.
13 years ago
Richard Grenville 0c077a76d1 Bug fix: Segfault when encountering invalid long option
I didn't read the documentation of getopt_long() carefully.
13 years ago
Richard Grenville 00d29b0748 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.
13 years ago
Richard Grenville bbf35f8155 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.
13 years ago
Richard Grenville f7bf27f838 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.
13 years ago
Richard Grenville fe811d6451 Bug fix: Issue #38, fixes painting specially-shaped semi-transparent windows
Fix taken from xcompmgr.
13 years ago
Christopher Jeffrey 4f11c53a6d avoid allocating a new win struct if possible 13 years ago
Christopher Jeffrey e29714d41d add richardgv's patch. see #31. 13 years ago
Christopher Jeffrey c10cd64f1f apply patch from richardgv. fixes #5. 13 years ago
Christopher Jeffrey b42eee1ef3 rename, refactor again. 13 years ago
Christopher Jeffrey 8610fd1f02 refactor, rename 13 years ago
Tim van Dalen 02a5747f34 Fixed a (very) small 'bug' in the usage text, -f wasn't printed on a new line. 13 years ago
Christopher Jeffrey 85de312fe7 stop listening for property events on client window after unmap 13 years ago
Christopher Jeffrey 614a1deb9e minor changes 13 years ago
Christopher Jeffrey d634640199 reorganize tree 13 years ago