/* * $Id$ * * Copyright © 2004 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #include "lpint.h" /* * Initialize library. Must be called before first XOpenDisplay call */ void XLightPipeInit (void) { } /* * Start monitoring window, returns success boolean */ Bool XLightPipeAttendWindow (Display *display, Window window, Bool provide_region) { return _xlightpipe_add_window (display, window, provide_region) ? True : False; } /* * Start monitoring all sub windows; create/destroy handled * automagically */ Bool XLightPipeAttendSubwindows (Display *display, Window window, Bool provide_region) { return False; } /* * Stop monitoring window. Note that monitoring is automatically * disabled if the window is destroyed */ void XLightPipeIgnoreWindow (Display *display, Window window) { _xlightpipe_remove_window (display, window); } /* * Returns XLightPipeWindow structure if there is any damage, * else 0. The XLightPipeWindow structure is 'locked' on return * and must be 'released' before any other calls to the library * including XLightPipeIgnoreWindow. */ XLightPipeWindow * XLightPipeCheckWindow (Display *display, Window window, Bool block) { light_pipe_window *lpw; do { _xlightpipe_process_events (display); for (lpw = _xlightpipe_find_damaged (display); lpw; lpw = lpw->next_damaged) { if (lpw->window == window) { _xlightpipe_update_window (lpw); return &lpw->public; } } } while (block && _xlightpipe_await_event (display)); return 0; } /* * Returns a random window containing damage, 0 if none */ XLightPipeWindow * XLightPipeCheckAny (Display *display, Bool block) { light_pipe_window *lpw; do { _xlightpipe_process_events (display); lpw = _xlightpipe_find_damaged (display); if (lpw) { _xlightpipe_update_window (lpw); return &lpw->public; } } while (block && _xlightpipe_await_event (display)); return 0; } /* * Release the XLightPipeWindow structure so that * additional damage can be added. */ void XLightPipeRelease (Display *display, XLightPipeWindow *xlpw) { light_pipe_window *lpw = (light_pipe_window *) xlpw; _xlightpipe_undamage_window (lpw); }