/* * $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 "lightpipe.h" #include #include #include #include #include #include #include #include #include #define LP_WINDOW_EVENT_MASK (StructureNotifyMask) typedef struct _light_pipe_window { XLightPipeWindow public; Display *display; Window window; Visual *visual; int depth; XShmSegmentInfo shm_info; Pixmap shm_pixmap; GC shm_gc; Damage damage; XserverRegion repair; struct _light_pipe_window *next_damaged; } light_pipe_window; typedef struct _light_pipe_extension { int event_base; int error_base; } light_pipe_extension; typedef struct _light_pipe_display { Display *display; light_pipe_window *damaged; light_pipe_extension xfixes; light_pipe_extension damage; int has_composite; light_pipe_extension composite; } light_pipe_display; /* lpdamage.c */ /* mark area as damaged */ void _xlightpipe_damage_window (light_pipe_window *lpw, int x, int y, int width, int height); /* synchronize local copy of window with remote */ void _xlightpipe_update_window (light_pipe_window *lpw); /* mark window as entirely undamaged */ void _xlightpipe_undamage_window (light_pipe_window *lpw); light_pipe_window * _xlightpipe_find_damaged (Display *display); /* lpdisplay.c */ light_pipe_display * _xlightpipe_find_display (Display *display); /* lpevent.c */ Bool _xlightpipe_await_event (Display *display); void _xlightpipe_process_events (Display *display); /* lptable.c */ int _xlightpipe_lp_context (void); light_pipe_window * _xlightpipe_find_window (Display *display, Window window); light_pipe_window * _xlightpipe_add_window (Display *display, Window window, Bool provide_region); void _xlightpipe_remove_window (Display *display, Window window); /* lpimage.c */ Bool _xlightpipe_create_window_image (light_pipe_window *lpw); void _xlightpipe_destroy_window_image (light_pipe_window *lpw); void _xlightpipe_update_region (light_pipe_window *lpw, int x, int y, int width, int height); /* lpinit.c */ Bool _xlightpipe_init_window (Display *display, Window window, light_pipe_window *lpw); void _xlightpipe_fini_window (Display *display, Window window, light_pipe_window *lpw);