summaryrefslogtreecommitdiffstats
path: root/compton.c
Commit message (Collapse)AuthorAgeFilesLines
...
* Feature: WM_WINDOW_ROLE matchingRichard Grenville2012-12-051-47/+72
| | | | | | | | | | | | | | | | | | | | | | | | - Add support of matching WM_WINDOW_ROLE value. Thanks to Vladimir A. Pavlov! - Thanks to Vladimir A. Pavlov for reporting the issues caused by missing client window, fixed in the last commit! - Fix a memory leak in wid_get_text_prop() and wid_get_name(). Xlib documentation did not mention how to free the value XGetTextProperty() returns, so my fix could lead to troubles. - Set focus out in unmap_win(), and add w->leader, to prepare for subsidiary window detection. - Abstract update of a single string window property to win_get_prop_str(). - Change wid_get_name() to rely on wid_get_text_prop() as much as possible. - Correct a typo in win_get_prop_str() that could cause unnecessary update of shadow state and window focus.
* Bug fix: Dynamic inactive dim & client window changesRichard Grenville2012-12-051-32/+66
| | | | | | | | | | | | | | | | | | | - Make inactive_dim opacity change according to window opacity by default, so it looks better when fading. --inactive-dim-fixed restores the old behavior. - Make client window default to the window itself. Add w->wmwin to represent whether the window looks like a WM window instead. A side effect is, the window type of WM windows are changed from unknown to normal, making it necessary to use --mark-wmwin-active to avoid considering them unfocused. - Add check of PointerRoot to recheck_focus() to avoid BadWindow errors when the root window is focused. - Add a few macros to simplify debugging code. - Add DEBUG_FRAME.
* Feature #65: --focus-excludeRichard Grenville2012-11-281-83/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add --focus-exclude, which should be used with a list of conditions to set certain windows to always be considered focused. - Change focus determination process, with a newly added w->focused_real that reflects whether the window is actually focused, while w->focused represents whether compton considers it focused. The primary difference is now when a window considered focused because of --mark-wmwin-focused or --mark-ovredir-focused receives a FocusOut event, it's still considered focused by compton. - Change opacity target and dim state calculation so that it's done at most once every paint. - Split window opacity property fetching from calc_opacity() to a new function win_update_opacity_prop(). - Silence a warning in wid_get_prop_wintype(). - Rename a few functions. Code clean-up. - My time is very limited currently, few tests are done, so this commit may very well introduce bugs. - Known issue: Dim picture opacity does not change based on window opacity, causing somehow annoying effects when a window fades off.
* Bug fix: --use-ewmh-active-win causes wrong focus state in AwesomeRichard Grenville2012-11-271-2/+11
| | | | | | | | | | | | | | - Fix a bug that causes wrong focus detection result in Awesome and maybe other window managers, when --use-ewmh-active-win is enabled and _NET_ACTIVE_WINDOW changes before the newly-focused window is mapped. - Fix a typo that causes more than one window to stay focused after a window destruction with --use-ewmh-active-win. - Fix a bug that find_clientwin() incorrectly returns a window when window ID 0 is passed to it. - Check for window ID 0 in update_ewmh_active_win().
* Bug fix: Wrong file path being displayed on config file parsing errorRichard Grenville2012-11-211-28/+36
| | | | | | | | | - Fix a bug that causes wrong file path being displayed on configuration file parsing error. - Continue dropping unused parameters and silence clang warnings. - Add conky shadow exclusion rule to compton.sample.conf.
* Feature #51: Re-initialize when SIGUSR1 is receivedRichard Grenville2012-11-191-1371/+1561
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Create a session_t structure, to get rid of most global variables and let information pass in/out mostly through parameters. Huge changes, so bugs may very well appear. I'm worried about resource leakages, in particular. - Add gcc attributes on various functions. - Add Doxygen configuration. - Replace much Xlib Bool with C99 bool. - Add and adjust some comments. - Drop unused parameters from some functions. - Cache default Visual and Depth, mainly to shorten code. - Rename some types, variables, and functions. - Add win_ev_stop() and set_ignore_next() for convenience. - Modify wid_get_prop_wintype() and wid_get_opacity_prop() to use wid_get_prop(). - Rename --respect-attr-shadow to --respect-prop-shadow. - Fix a memory leak in --respect-prop-shadow. - Many other small changes.
* Misc: Code cleanupRichard Grenville2012-11-141-32/+43
| | | | | | | - Form a function ev_window_name() for all window name detection in debugging code. - Add unredir-if-possible to configuration file options.
* Bug fix: Client window event mask not restored in map_win()Richard Grenville2012-11-101-4/+3
| | | | | | | | - Fix a bug that client window event masks are not restored in map_win(), causing further property changes to be ignored, for example. - Misc changes.
* Feature: Unredirect windows when there's a fullscreen windowRichard Grenville2012-11-091-26/+132
| | | | | | | | | | | | | | | | | | | | | | - Optionally unredirect windows when there's a fullscreen opaque window on the top of the stack (--unredir-if-possible). Experimental. Known issues: * Screen flickers when redirecting/unredirecting windows. --paint-on-overlay seemingly minimizes it (Thanks for hints from mutter), but still noticeable. * It probably does not play well with vdpau in some cases. - A debug option DEBUG_REDIR is added. - Fix a bug that reg_ignore are not expired when a CirculateNotify is received. - Add extra safe guards in some places, which could be bad for performance. - Remove some abundant code.
* Feature #16: _COMPTON_SHADOW window property supportRichard Grenville2012-11-091-10/+80
| | | | | | | | | | | | | | | - 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.
* Bug fix: Shape update of opaque windows not handled correctlyRichard Grenville2012-11-081-11/+5
| | | | | | | | | | | | | - 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.
* Bug fix: Window rendered incorrectly if has no border with -eRichard Grenville2012-11-061-27/+27
| | | | | | | | | | | - 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 #61: Silence a warningRichard Grenville2012-11-041-12/+12
| | | | | | | | | - 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.
* Improvement: Add EWMH _NET_WM_ACTIVE_WINDOW supportRichard Grenville2012-11-041-92/+146
| | | | | | | | | | | | - 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().
* Improvement: Focus detection & --mark-ovredir-focused changesRichard Grenville2012-11-031-6/+11
| | | | | | | | | | | - 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.
* Bug fix: A XserverRegion leakRichard Grenville2012-11-031-1/+18
| | | | | | | | | - 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.
* Misc: Code cleanup & debug code changesRichard Grenville2012-11-031-114/+105
| | | | | | | | | | | | | - 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 #17: Try to fix artifacts after animating/shading shaped wins in OpenboxRichard Grenville2012-11-011-51/+94
| | | | | | | | | | | | | | | | | | | | | - 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.
* Improvement: border_size & ConfigureNotify & VSync changesRichard Grenville2012-11-011-14/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* Improvement: Try to reduce reg_ignore regenerationsRichard Grenville2012-10-311-168/+128
| | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* Misc: Small adjustmentsRichard Grenville2012-10-301-24/+19
| | | | | | | | | | | - 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.
* Bug fix: Fading blocks in rare circumstancesRichard Grenville2012-10-291-33/+19
| | | | | | | | | | | | | | | | | - 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.
* Merge branch 'master' into richardgv-devRichard Grenville2012-10-291-1/+1
|\ | | | | | | Merged the documentation changes. Program code unchanged.
| * more man page changesChristopher Jeffrey2012-10-221-1/+1
| |
| * fix man page and various other documentation.Christopher Jeffrey2012-10-221-1/+1
| |
| * revert to c7ca345Christopher Jeffrey2012-10-221-858/+200
| |
| * v0.0.1Christopher Jeffrey2012-10-221-4/+4
| |
* | Improvement: Change clear_shadow implementationRichard Grenville2012-10-281-22/+44
| | | | | | | | | | | | | | | | | | | | - 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.
* | Bug fix #57: Fix incorrect handling of InputOnly windowsRichard Grenville2012-10-271-3/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* | Bug fix #7: Correct a possible issue in VSyncRichard Grenville2012-10-261-105/+109
| | | | | | | | | | | | | | | | | | | | | | - 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.
* | Improvement: Add painting on overlay supportRichard Grenville2012-10-241-49/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* | Improvement #7: Add double bufferingRichard Grenville2012-10-231-10/+79
|/ | | | | | | | | | | | 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.
* Misc: Drop support for old versions of libXcompositeRichard Grenville2012-10-221-21/+0
| | | | | | Basically dropping support for HAS_NAME_PIXMAP = 0 because I don't think there are many people using it, and I cannot maintain it. CAN_DO_USABLE support is under evaluation.
* Bug fix #55: Workaround for window type detection on Openbox menusRichard Grenville2012-10-211-0/+5
| | | | A small workaround for a small problem.
* Improvement: Stop painting on regions of higher windowsRichard Grenville2012-10-211-79/+242
| | | | | | | | Sort of reverts cdf7db750d, but implements in a different way. (Well, maybe the pre-cdf7db750d way is actually better, if I'm willing to sacrifice some precious code reusability.) Basically, trading CPU for GPU, in an attempt to solve farseerfc and ichi-no-eda's problems. Highly experimental, could be revoked at any moment.
* Improvement: Pregenerate alpha picturesRichard Grenville2012-10-131-31/+48
| | | | | | Pregenerate alpha pictures to save time when painting. Add --alpha-step to control the step of alpha picture generation (the opacity difference between two consecutively generated alpha pictures).
* Misc: Code clean-upRichard Grenville2012-10-101-6/+20
| | | | | | | | | | | - Fix a memory leak in register_cm(). - Print a warning message if argument of --vsync is invalid. - Known bug: compton will probably freeze X if another compositing window manager is running and --vsync opengl is enabled, with nvidia-drivers-304.51. Probably an issue on the driver. I could see no workaround.
* Feature: #7: VSyncRichard Grenville2012-10-081-44/+501
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add VSync feature. 3 possible VSync methods available: "sw" (software, not too reliable, but at least you have something to fallback to), "drm" (using DRM_IOCTL_WAIT_VBLANK, should work only on DRI drivers), "opengl" (using SGI_swap_control extension OpenGL, might work on more drivers than the DRM method). "sw" and "opengl" are briefly tested, "drm" received utterly no test (because I use the nVidia binary blob). They are enabled with "--vsync sw" / "--vsync drm" / "--vsync opengl". - Add --refresh-rate to let user specify a refresh rate for software VSync, in case the automatic refresh rate detection does not work well. - Seemingly the automatic refresh rate detection using X RandR in software VSync detects refresh rate incorrectly. Need further investigation. - Fix a few bugs in fading timing. - Add a workaround for client window detection on Fluxbox, as Fluxbox (incorrectly?) sets the override-redirect flag upon all frame windows. - Software VSync adds dependency on librt (a part of glibc) for nanosecond-level timing functions, and libXrandr for automatic refresh rate detection; DRM VSync adds dependency on libdrm to use its drm.h, but does not link to libdrm; OpenGL VSync adds dependency on libGL. - Print timing information on DEBUG_REPAINT.
* Improvement: Support reading _NET_WM_OPACITY from client windowsRichard Grenville2012-10-031-13/+39
| | | | | | | | | | | | | | - Some WMs don't respect Keith Packard's proposal of _NET_WM_WINDOW_OPACITY, and do not copy _NET_WM_OPACITY attribute of a client window to its frame windows, thus cause opacity set by non-override-redirect windows to have no effect. This commit adds support for reading _NET_WM_OPACITY from client windows if running with --detect-client-opacity. Thanks to pvanek for reporting. - Change Makefile logic to determine options from 3 variables (NO_LIBCONFIG, NO_REGEX_PCRE, NO_REGEX_PCRE_JIT) instead of CFG to ensure compatibility when we add new options. CFG variable is no longer been respected.
* Improvement: Change in client window lookup & wintype detectionRichard Grenville2012-10-021-30/+27
| | | | | | | | | | | | - 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.
* Merge branch 'richardgv-dev'Christopher Jeffrey2012-09-301-65/+195
|\
| * Feature: #27: Detect shaped windows and disable shadow on themRichard Grenville2012-10-011-18/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
| * Improvement: Wait infinitely for events when idlingRichard Grenville2012-09-291-2/+18
| | | | | | | | | | | | Wait infinitely for events when idling, instead of always calling paint_preprocess(), to reduce CPU usage in the case. Thanks to valr for help.
| * Improvement: Split shadow_pict to shadow_pict & shadow_alpha_pictRichard Grenville2012-09-291-39/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * Bug fix: #48: Compilation failure with old libconfig/libpcreRichard Grenville2012-09-281-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | - 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.
* | Merge commit '69513d6'Christopher Jeffrey2012-09-281-190/+226
|\ \ | |/ | | | | | | | | Conflicts: src/compton.c src/compton.h
| * Bug fix: Issue #47: Locale cause problems with float argumentsRichard Grenville2012-09-271-0/+10
| | | | | | | | | | | | A locale using comma instead of dot in floating point values causes unexpected behavior when parsing floating point commandline arguments. This commits enforces LC_NUMERIC="C" during commandline argument parsing.
| * Feature: --no-fading-openclose to partially simulate -FRichard Grenville2012-09-261-8/+33
| | | | | | | | | | | | | | -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.
| * Bug fix: Issue #46: Optionally mark override-redirect windows as activeRichard Grenville2012-09-261-2/+15
| | | | | | | | | | | | | | 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.
| * Misc: Code clean-upRichard Grenville2012-09-261-187/+176
| | | | | | | | | | | | | | | | | | | | | | - 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.