summaryrefslogtreecommitdiffstats
path: root/compton.h
Commit message (Collapse)AuthorAgeFilesLines
* Improvement: Stop painting on regions of higher windowsRichard Grenville2012-10-211-0/+38
| | | | | | | | 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-6/+5
| | | | | | 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-1/+0
| | | | | | | | | | | - 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-2/+121
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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-1/+10
| | | | | | | | | | | | | | - 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-5/+1
| | | | | | | | | | | | - 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.
* Feature: #27: Detect shaped windows and disable shadow on themRichard Grenville2012-10-011-46/+82
| | | | | | | | | | | | | | | | | - 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-0/+1
| | | | | | 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-2/+3
| | | | | | | | | | | | | | 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-4/+25
| | | | | | | | | | | | - 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.
* Feature: --no-fading-openclose to partially simulate -FRichard Grenville2012-09-261-1/+4
| | | | | | | -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-0/+2
| | | | | | | 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-26/+34
| | | | | | | | | | | - 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.
* add global options struct.Christopher Jeffrey2012-09-251-0/+58
|
* Feature: Wintype-specific options in configuration filesRichard Grenville2012-09-251-0/+12
| | | | | | | | | - 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.
* Feature: Configuration file parsingRichard Grenville2012-09-251-1/+70
| | | | | | | | | | | | | | | | | | | | | | - 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.
* Improvement: Change window type detectionRichard Grenville2012-09-221-1/+1
| | | | | | | | | | | | | | | | - 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().
* Feature: Issue #29: Alternative shadow blacklist implementationRichard Grenville2012-09-221-14/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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.
* Bug fix: Detect and mark WM windows as activeRichard Grenville2012-09-201-5/+9
| | | | | | | | | | | | | | | | | | | 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.
* Improvement: Change fading mechanismRichard Grenville2012-09-191-38/+59
| | | | | | | | | | | | | | | | | | | | | | | - 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.
* Improvement: Defer shadow picture generationRichard Grenville2012-09-171-17/+49
| | | | | | | | | | | | | - 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.
* Improvement: Change painting sequenceRichard Grenville2012-09-171-19/+15
| | | | | | | | | | | | | | | | | | | - 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().
* Improvement: Change generating process of alpha_pict, etc.Richard Grenville2012-09-171-3/+15
| | | | | | | | | | | | | - 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.
* Misc: Clean upRichard Grenville2012-09-161-14/+48
| | | | | | | | - 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.
* Bug fix: Issue #43, better client window lookupRichard Grenville2012-09-141-3/+3
| | | | | | | | | 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.
* fix determine_evmask warningsChristopher Jeffrey2012-09-131-0/+9
|
* more style changesChristopher Jeffrey2012-09-131-6/+15
|
* stay consistent with code styleChristopher Jeffrey2012-09-131-32/+42
|
* whitespaceChristopher Jeffrey2012-09-131-2/+2
|
* Improvement: Use find_toplevel() to find WM frameRichard Grenville2012-09-131-2/+49
| | | | | | | | | 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: Issue #40: -z does not work as expectedRichard Grenville2012-09-121-0/+17
| | | | | | | | | 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.
* Feature: Issue #2: Support dim inactive windowsRichard Grenville2012-09-121-0/+15
| | | | | | | - Add a switch --inactive-dim that dims inactive windows. - The window dimming feature is implemented in a pretty ugly way. Improve it if possible.
* Debug: Enhanced debugging capabilityRichard Grenville2012-09-121-6/+67
| | | | | | | | - 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.
* Bug fix: Issue #37, fix 5 opacity-related bugsRichard Grenville2012-09-111-5/+36
| | | | | | | | | | 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.
* Feature: Issue #35, Add colored shadowsRichard Grenville2012-09-111-0/+12
| | | | | | | - 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 #36: Chromium window painting problemsRichard Grenville2012-09-111-0/+39
| | | | | | | | | | | | | 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.
* reorganize treeChristopher Jeffrey2012-02-271-0/+355