summaryrefslogtreecommitdiffstats
path: root/compton.h
Commit message (Collapse)AuthorAgeFilesLines
* Bug fix #137: Auto-detect screen changesRichard Grenville2013-08-281-0/+3
| | | | | Attempt to auto-detect screen changes to address the issue reported by Feltzer.
* Improvement #137: --xinerama-shadow-cropRichard Grenville2013-08-221-0/+42
| | | | | Add --xinerama-shadow-crop to crop shadow to current Xinerama screen. Thanks to Feltzer for suggestion.
* Misc: --paint-exclude & #119Richard Grenville2013-06-191-11/+0
| | | | | | | | | | | - Add --paint-exclude to prevent certain windows from being painted, for debugging purposes. - Add predefined matching target "x", "y", "width", "height", "widthb", "heightb", "border_width", and "fullscreen". - Fix bug #119, wrong man page install dir in CMake configuration. Thanks to sstewartgallus for reporting.
* Feature #116: Shadow exclusion regionRichard Grenville2013-06-091-0/+35
| | | | | | | | - Add --shadow-exclude-reg, which excludes certain regions on the screen to have shadows painted in. (#116) - Adjust session initialization order. Now X root and screen info and basic X extensions are available in configuration parsing step.
* Feature #113: Set opacity based on conditionsRichard Grenville2013-05-211-0/+11
| | | | | | | | | | | - Add --opacity-rule, which sets opacity based on conditions, as requested by zabbal. (#113) - Add a data field for each condition. - Correct the FAQ link in README.md. Silly me. - Code clean-up.
* Imp: Multi-pass blur & D-Bus fading controlRichard Grenville2013-05-201-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | - Add multipass blur support. Note GLX Framebuffer support is required. My benchmark shows multipass blur brings 5% performance boost for X Render backend (3x3box). On GLX backend it brings 10% performance boost for 5x5box but negatively affects performance for 3x3box. Thanks to jrfonseca for advice. (#107) - GLX backend: Cache blur texture for each window, for a 12% performance boost. - Add D-Bus fading control. Thanks to yulan6248 for testing. (#112) - Fix FAQ link in README.md. Thanks to lorenzos for report. (#111) - Correctly deinitialize VSync on on-the-fly VSync method switch. - X Render backend: Normalize blur kernel. - Code clean-up. - Known issue: Linear corruption on border of a window may appear with X Render multi-pass blur. Possible to fix but probably not worthwhile.
* Misc: Add DEBUG_GLX_MARK & MiscRichard Grenville2013-05-121-1/+1
| | | | | | | | | | | - GLX backend: Add DEBUG_GLX_MARK, to add GL marks around functions with glStringMarkerGREMEDY(), and mark frame termination with glFrameTerminatorGREMEDY(). - Print output of `compton -h` to stdout. (#110) - GLX backend: Strip out elements with factor 0 in GLSL blur code. Thanks to jrfonseca for guides. (#107)
* Bug fix: Compilation failure with NO_LIBCONFIG / NO_C2Richard Grenville2013-05-091-2/+2
| | | | | - Fix compilation failure with NO_LIBCONFIG or NO_C2. Thanks to Spaulding for reporting.
* Misc: Validate wallpaper pixmap & Documentation updateRichard Grenville2013-05-011-2/+26
| | | | | | | - Split Pixmap validation out to validate_pixmap(). Validate wallpaper Pixmap as well. - Update README.md and man page.
* Bug fix: Fix --resize-damageRichard Grenville2013-04-271-1/+1
| | | | | | | | | | | | - Fix --resize-damage. I forgot to shrink the painting region back when actually copying to destination. - Include extra pixels around the blur texture to avoid some possible small issues, if --resize-damage is positive. - Known issue: Line artifacts may still appear with --dbe (X Render backend) or --glx-swap-method (GLX backend). I doubt if there's way to fix this without very inefficient mechanisms.
* Improvement: --resize-damageRichard Grenville2013-04-271-5/+55
| | | | | | | | - Add --resize-damage to enlarge/shrink repaint region by a specific number of pixels, used for solving the line corruption issue with blur. Thanks to Nuck and jerri in #104 for reporting. - Fix the memory leak of blur shader string.
* Bug fix: GLX: Fix dim and blur with --glx-no-stencilRichard Grenville2013-04-061-12/+21
| | | | | | | | | | | | | - GLX backend: Fix broken dim and blur with --glx-no-stencil when dealing with shaped windows. - GLX backend: Cache region contents and do a local region intersection instead of using XFixesIntersectRegion(). Drastic reduction in CPU usage for --glx-no-stencil. Now --glx-no-stencil substantially outperforms (~15%) normal mode. - Use macros to reuse paint-in-region code in opengl.c . Add new type "reg_data_t" to store XserverRegion cache.
* Improvement: GLX: Cache region contents & --glx-no-rebind-pixmapRichard Grenville2013-04-051-7/+16
| | | | | | | | | | | | | | - Cache region contents in is_region_empty(), mostly useful only for GLX backend to save one roundtrip to X. - GLX backend: Add --glx-no-rebind-pixmap, which prevents rebinding of GLX texture to pixmap on content change. It doesn't work on some drivers, but it saves some CPU on those where it does. - Wrap XFree() with a new function cxfree() since its man page claims NULL pointers are not acceptable (although in fact it does...). - Use macro to save some code in get_cfg(). Code clean-up.
* Improvement: --blur-background-exclude #98 & MESA_swap_control & othersRichard Grenville2013-03-231-0/+9
| | | | | | | | | | | | | | | - Add --blur-background-exclude. (#98) - Add `opengl-mswc` VSync, which uses MESA_swap_control instead of SGI_swap_control. I don't expect it to perform better than SGI_swap_control, though. - Update CMakeLists.txt . - Add a few targets for D-Bus `win_get`. Misc changes. - Known issue: Apparently I've forgotten implementing --inactive-dim on GLX backend... Silly me.
* Improvement: --glx-use-copysubbuffermesaRichard Grenville2013-03-211-4/+2
| | | | | | | | | | - GLX backend: Add --glx-use-copysubbuffermesa, to use MESA_copy_sub_buffer to do partial screen update. Huge performance boost on mesa drivers for partial screen updates, but does not work for nvidia-drivers and may break VSync. Automagically overrides --glx-copy-from-front. - Add rect_is_fullscreen() to reuse code. Misc changes.
* Bug fix: GLX: ARGB texture too dark & Jitter when resize & othersRichard Grenville2013-03-181-7/+11
| | | | | | | | | | | | | | | | | | | | | | - GLX backend: Fix a bug that ARGB windows / shadows are rendered too dark. Thanks to derhass in FreeNode/##opengl for help. - GLX backend: Fix a problem that during window resize the content looks jittering, by letting compton fetch pixmap sizes with XGetGeometry() instead of relying on window width/height, which could be inaccurate during window resize. Negative effect on performance. Thanks to M4he for reporting. (#7) - Add .desktop file. Thanks to quequotion for providing it. (#97) - Avoid checking presence of window pixmap, because they may not exist with very old X Composite implementations. - Add workaround for a strange window restack issue when compton receieves a ConfigureNotify with non-existent new above window. - Add debugging function hexdump(). Extra sanity checks on various places.
* Bug fix: GLX backend incompatibility with VirtualBox & othersRichard Grenville2013-03-171-3/+5
| | | | | | | | | | | | | | | | | | | | | | | - GLX backend: Fix a bug that window content does not get updated on VirtualBox, by rebinding texture when window content changes. This may have a negative effect on performance. - GLX backend: Add --glx-no-stencil to restore the old clipping method, just in case. - GLX backend: Apply stricter checks on texture-pixmap binding. - GLX backend: Fix a bug that glx_set_clip() behaves incorrectly when None is passed in. - GLX backend: Use glEnable()/glDisable() to toggle stencil tests, in hope to increase performance. - Move window pixmap/picture fetching to win_paint_win(), in hope to increase performance. - Intersect shadow painting region with its bounding rectangle, in hope to increase performance.
* Bug fix: GLX backend incompatibility with mesa & othersRichard Grenville2013-03-161-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Fix a bug that glx_bind_pixmap() doesn't work with mesa drivers. Thanks to Janhouse and mkraemer for reporting. (#7) - Use stencil buffer to attempt to eliminate potential double-paint issue in glx_render(). X Fixes doesn't guarantee the rectangles in a region do not overlap, and this may cause some regions to be painted twice, which would be a problem if we are painting transparent things. Now the target window must have a stencil buffer. Compiz uses its own region implementation to deal with this, but as a lightweight compositor we can't really do the same. It may have a positive or negative effort over performance. Callgrind result indicates basically no change in performance, but this may or may not be true. - Correctly distinguish GL extensions and GLX extensions. Sorry. :-D - Handle screen size. Thanks to tsmithe for reporting. (#7) - Rename OpenGL backend to GLX backend, because, we might have a EGL backend someday. - Add configuration file option `backend` to specify backend. Add `backend` to D-Bus `opts_get`. - Add OpenGL shader compilation code, but currently unused. - Minor adjustments. - Known issue: Window content doesn't get updated in VirtualBox, probably because its OpenGL implementation requires constant rebinding of texture. But that's really slow... - Known issue: Blur feature is still unimplemented in GLX backend.
* Feature: OpenGL backendRichard Grenville2013-03-151-53/+84
| | | | | | | | | | | | | | | | | | | | | | - Add experimental OpenGL backend (--opengl). --blur-background is currently not possible with this backend, because I'm still trying to find a proper way to do blur with OpenGL. Flipping backend on-the-fly is really hard, so it isn't supported right now. No configuration file option exists to enable this, because it isn't stable enough. - Add `opengl-swc` VSync method that uses SGI_swap_control to control buffer swap, with OpenGL backend. (#7) - Fix a potential read-from-freed-memory issue in paint_all(). - Correctly reattach GLX context after fork. - Dump error text in error(). Add GLX error code handling. - Code clean-up. - Known issues: Region operations take a lot of time in glx_render(). I'm hesitating about what to do.
* Bug fix #91: Using pkg-config to find drm.h & OpenGL changesRichard Grenville2013-03-011-35/+41
| | | | | | | | | | | | | | | | | - #91: Use pkg-config to find drm.h to avoid issues on FreeBSD. Thanks to hun7err for pointing out and providing patch. - #89: Add default shadow exclusion rule for notify-osd. Thanks to DanielRS. - Check for abundant positional arguments. - Use paint target window (root window / overlay window) instead of ps->reg_win to create GLXContext. (May have negative effects on OpenGL VSync.) Add new OpenGL helpers functions, to prepare for the new OpenGL backend. - Dump more info of a PropertyNotify with DEBUG_EVENTS.
* Improvement: Change VSync mode with D-Bus & Makefile update & MiscRichard Grenville2013-01-311-0/+33
| | | | | | | | | | | | | | | | | | - Add on-the-fly VSync option modification via D-Bus, as requested by kunitoki (#80). Expose parse_vsync(), create vsync_init() and ensure_glx_context(). - Change default value of ps->drm_fd to -1. - Update Makefile. Change the install/uninstall rules and add doc installation, requested by hasufell in #85. - Mark window not damaged in map_win(). It helps in reducing flickering with inverted window color, but I'm not completely sure if it's safe. - Avoid modifying w->invert_color when window is unmapped. - Update documentation. Thanks to hasufell for pointing out.
* Improvement #7: Add GLX_OML_sync_control VSync supportRichard Grenville2013-01-301-4/+29
| | | | | | | | | | | | | | | | - Add "vsync-oml" VSync method, using GLX_OML_sync_control. Untested, because it's not supported by my driver. - Unredirect ps->reg_win, because DRI wiki says it's related to the behavior of OpenGL VSync extensions. - Add glFlush() and glXWaitX() calls, in hope they are slightly helpful for VSync. - Change a few functions to make error handling more graceful. Make some errors fatal. Code clean-up. - Add unused function make_text_prop().
* Improvement: Improve color inversion performance & Validate pixmapRichard Grenville2013-01-291-3/+6
| | | | | | | | | | | | | | | - Try to improve the performance of color inversion by applying clipping region during color inversion. (#75) - Validate pixmap on window unmap/destruction. Probably slightly helpful for #52. - Change the design of unmap_win() and destroy_win(), a bit. - Add warning message to help messages about features disabled at compile time, instead of dropping their description completely. (#85) - Silence some warnings. Code clean-up.
* Feature #16: Advanced window matchingRichard Grenville2013-01-281-39/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add advanced window matching system, capable of matching against arbitrary window properties as well as a series of internal properties, with 4 additional operators (>, <, >=, <=) useful for integer targets, and support of logical operators. The old matching system is removed, but compatibility with the format is retained. - As the new matching system is pretty complicated, and I have no past experience in writing a parser, it's pretty possible that bugs are present. It also has inferior performance, but I hope it doesn't matter on modern CPUs. - It's possible to disable matching system at compile time with NO_C2=1 now. - Add ps->o.config_file to track which config file we have actually read. Queryable via D-Bus. - Parse -d in first pass in get_cfg() as c2 needs to query X to get atoms during condition parsing. - Fix a bug in wid_get_prop_adv() that 0 == rformat is not handled correctly. - Fix incompatibility with FreeBSD sed in dbus-examples/cdbus-driver.sh . - Add recipe to generate .clang_complete in Makefile, used by Vim clang_complete plugin. - Add DEBUG_C2 for debugging condition string parsing. DEBUG_WINMATCH is still used for match debugging. - Rename win_on_wdata_change() to win_on_factor_change(). - Extra malloc() failure checks. Add const to matching cache members in session_t. Code clean-up. Documentation update.
* Bug fix #84: Root window not repainted sometimes on wallpaper changeRichard Grenville2013-01-241-128/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Fix a bug that root window is not repainted on wallpaper change unless an Expose X event is received. Seemingly, if there's no mapped window on a screen, X will not send an Expose event when the wallpaper changes. Thanks to baskerville for reporting. - Fix a X Pixmap leak when there's no existing wallpaper pixmap found. - Fix a bug in mstrncpy() that null character is not added to the end of the copied string. - Make VSYNC_STRS public, for use in src/dbus.c. Adjust the type of WINTYPES array. Add NUM_VSYNC. - Add more targets for various D-Bus methods. Add "bad_target" D-Bus error. Improve error handling. Add more helper functions to append arguments to a D-Bus message. Add Introspect method to D-Bus introspection reply. - Add public declarations of things in the new condition format code to common.h. Move definitions of some inline functions from compton.h to common.h. Make some functions public. Move wid_get_prop_adv() to compton.c. The primary code files of the new format src/c2.{c,h} will be published when ready. - Add support for dumping version string in Makefile (make version), to make snapshot generation easier. - Add repeated inclusion protection to common.h. - Update documentation. - Use gsed instead of sed in dbus-examples/cdbus-driver.sh if possible, as some BSD systems does not come with GNU sed by default. Thanks to DaChiChang for reporting. - Code clean-up. Small type changes in register_cm() to silence warnings. Quit on failure in parse_vsync(). Apply stricter checks in force_repaint().
* Feature #80: D-Bus supportRichard Grenville2013-01-191-1250/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add D-Bus support. Currently 7 methods are available: "reset" (same as SIGUSR1), "list_win" (list the windows compton manages), "win_get" (get a property of the window), "win_set" (set a property of the window), "find_win" (find window based on client window / focus), "opts_get" (get the value of a compton option), and "opts_set" (set the value of a compton option), together with 4 signals: "win_added", "win_destroyed", "win_mapped", "win_unmapped". - D-Bus support depends on libdbus. - As there are many items and my time is tight, no much tests are done. Bugs to be expected. - Create a new header file `common.h` that contains shared content. - Fix some bugs in timeout handling. - Update file headers in all source files. - Re-enable --unredir-if-possible on multi-screen set-ups, as the user could turn if off manually anyway. - Check if the window is mapped in `repair_win()`. - Add ps->track_atom_lst and its handlers, to prepare for the new condition format. - Known issue 1: "win_get", "win_set", "opts_get", "opts_set" support a very limited number of targets only. New ones will be added gradually. - Known issue 2: Accidental drop of D-Bus connection is not handled. - Known issue 3: Introspection does not reveal all available methods, because some methods have unpredictable prototypes. Still hesitating about what to do... - Known issue 4: Error handling is not finished yet. Compton does not always reply with the correct error message (but it does print out the correct error message, usually).
* Bug fix #75: --invert-color-include not working & othersRichard Grenville2013-01-131-2/+4
| | | | | | | | | | - Fix a small bug that breaks --invert-color-include if no other blacklists are present. Thanks to MaskRay and xiaq for reporting. - Disable --unredir-if-possible for multi-screen setups. - Fix a bug that causes --no-fading-openclose to have no effect in some cases. Add w->in_openclose to keep track of window open/close state.
* Feature #75: Invert window colorRichard Grenville2013-01-121-9/+38
| | | | | | | | | | | | | | | | | | | | - Add window color inversion (--invert-color-include). It means 2-3 times extra painting, so performance issues are likely to appear. I hope I could find a faster way to invert colors. - Rename some functions. - Fix update of some window properties after window type/data change. Hopefully this will be helpful for #73. - Split win_build_picture() from win_blur_background(). - Correct memory leak of ps->focus_blacklist during reinitialization. - Add win_upd_t and win_upd_run(), to reduce duplicate window property updates. But is unused right now. - Limited tests are done overall. Bugs to be expected.
* Improvement: Use select() for main loopRichard Grenville2013-01-111-47/+178
| | | | | | | | | | | | | | | | | | | - Back to using select() for main loop. Thus we are not longer relying on libevent. - Add generic timeout system (untested) to prepare for D-Bus support. - Drop troff man pages. Revise Makefile to improve documentation building, fix double LDFLAGS inclusion, and re-add -lrt. This turns asciidoc into a build time dependency. - Change fading time calculation. - Add --logpath and ostream_reopen() for debugging with -b. - Drop unused lceil_ntimes() and other helper functions. - Only very limited tests are done. Bugs to be expected.
* Bug fix #77 incorrect border_width handling & #73 window data issueRichard Grenville2013-01-091-5/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | - (Hopefully) fix all incorrect handling of w->a.border_width in compton (#77). Thanks to baskerville for reporting. - Attempt to fix #73 by correcting a mistake that window data is fetched from the wrong function. Thanks to zakkak. - Add git commit/tag detection to Makefile for automatic versioning. - Change -lGL linking order, to fix a segmentation fault caused by something in nvidia-drivers under FreeBSD, mentioned in #74. Thanks for the report from DachiChang. - Link to -levent_core instead of -levent in Makefile. We might move to libev soon, though. - Increase SWOPTI_TOLERANCE to handle the extraordinary delay of kqueue() under FreeBSD. Thanks for DachiChang's report. - Add helper function dump_drawable() for debugging. - Replace XInternAtom() calls with get_atom(). - Remove -lrt as it's unneeded.
* Improvement #74: Use libevent for main loopRichard Grenville2013-01-081-74/+240
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Use libevent for main loop. I will explain the reasons in #56 later. The preferred libevent version is 2.x, yet 1.4.x should work as well. - As a result, compton now should build fine on *BSD. Thanks to DachiChang for the FreeBSD build issue report. - Another consequence is we now use microsecond-level timing all the way. Nanosecond-level code will be dropped soon. Start using long instead of unsigned long to represent time in milliseconds, as both can't hold the full epoch time in ms, anyway, and a signed type requires less care in subtraction. Wrap the epoch time in ms to 15 days. - Fix broken NO_VSYNC_DRM and NO_VSYNC_OPENGL compile-time options. - Use git revision number for versioning in Makefile, and other small improvements. - Reorganize struct _win. Drop unused w->damaged_sequence. w->damaged is turned to bool. - Add type and format to winprop_t, as preparation for the new condition format. - Add w->shadow_force and w->focus_force, to prepare for D-Bus support. - Rename wid_get_prop() to wid_get_prop_adv() with more options. Add wrapper function wid_get_prop(). - Add some extra helper functions, for D-Bus support later. - Make some functions return a bool value to indicate if it's successful. - Modify add_win(), use a static const structure to initialize the new struct _win. - Add some helper macros, like printf_err(f)(q). Make some errors fatal. - Rename some types, constants, and functions. Code clean-up. - Check for time disorder in paint_preprocess() when calculating fading steps. - Rename evpoll() to swopti_handle_timeout(), and partially rewrite it. - Make -h / --help legal. - Known issue: compton segfaults on FreeBSD with nvidia-drivers, unless NO_VSYNC_OPENGL is used. Will look into it later. Thamls to DachiChang for reporting.
* Improvement: Dynamic blur strength & improved frame blur performanceRichard Grenville2012-12-151-1/+10
| | | | | | | | | | | | | | - Remove the region expansion design in win_blur_background(). I must be sleep-walking when I wrote that! - Improve performance of blurring when a window is opaque but its frame is transparent. - Adjust blur strength according to window opacity. --blur-background-fixed restores the old behavior. - Add "use_offset" parameter to a few functions for convenience. Code clean-up.
* Feature #69: Blur window backgroundRichard Grenville2012-12-141-0/+27
| | | | | | | | | | | | - Add window background blur support (--blur-background & --blur-background-frame), with X Render convolution filter. The performance sucks. The performance when the window is opaque but frame is transparent could be improved, but there are two possible ways and I'm hesitating. - Known issue: The blurring effect looks very ungraceful during fading. I could partially fix the problem, but it probably isn't easy to fix it completely.
* Misc: Code cleanupRichard Grenville2012-12-121-72/+14
| | | | | | | | | - Move some long functions to ./src/compton.c . - Fix a small potential issue in win_set_focused() when a window with neither leader nor client window is focused. - Add DEBUG_LEADER.
* Feature #65: Auxiliary window detectionRichard Grenville2012-12-121-6/+150
| | | | | | | | | | - Add auxiliary window detection (--detect-transient & --detect-client-leader). Thanks to SmilingHorse for inspiring me. The implementation is not too speed-efficient, and bugs are to be expected. - Known issue: auxiliary window detection may not work too well with windows that are never mapped, for example as client leader.
* Feature: Wintype-based focus exclusionRichard Grenville2012-12-101-8/+29
| | | | | | | | | | | | - Add "focus" to the wintypes settings in compton.conf, to mark windows of certain window types to be always focused. Replaces the ugly is_normal_win(). - Add a ON/OFF/UNSET switch_t type, but it's unused currently. - Mark client_win if the window client detection hasn't been performed when we detect WM_STATE's presence in ev_property_notify(), for performance.
* Bug fix #68: Possible fix for failure in client window detectionRichard Grenville2012-12-071-6/+23
| | | | | | | | | | | | | | | | | | | | | | | | | - Note I'm not in the best state today (bad cold & sleep-deprived). This commit is likely to introduce bugs. - Attempt to fix client window detection failures happening when compton searches for client window before it's ready. - Fix build failure with <libpcre-8.20. Thanks to @pvanek for reporting in #51. - Move client window detection to a new function win_recheck_client(). - Add win_unmark_client(), which unmarks a client window. - Rename a few functions. - Split fetching of values of type-Window properties to a new function wid_get_prop_window(). - Add extra safety checks and assert calls to various functions, to expose potential bugs. - Fix a memory leak that w->role is not freed on window destruction.
* Feature: WM_WINDOW_ROLE matchingRichard Grenville2012-12-051-1/+58
| | | | | | | | | | | | | | | | | | | | | | | | - 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-20/+27
| | | | | | | | | | | | | | | | | | | - 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-6/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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/+5
| | | | | | | | | | | | | | - 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-14/+21
| | | | | | | | | - 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-395/+698
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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-0/+5
| | | | | | | - 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-1/+6
| | | | | | | | - 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-0/+24
| | | | | | | | | | | | | | | | | | | | | | - 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-0/+14
| | | | | | | | | | | | | | | - 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-1/+33
| | | | | | | | | | | | | - 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.
* Improvement: Add EWMH _NET_WM_ACTIVE_WINDOW supportRichard Grenville2012-11-041-2/+69
| | | | | | | | | | | | - 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().
* Bug fix: A XserverRegion leakRichard Grenville2012-11-031-0/+20
| | | | | | | | | - 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.