2004-07-31 10:24:14 +02:00
|
|
|
/*
|
2009-05-15 20:22:32 +02:00
|
|
|
* Copyright © 2006 Sun Microsystems, Inc. All rights reserved.
|
2006-03-13 22:59:55 +01:00
|
|
|
*
|
2009-05-15 20:22:32 +02:00
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
* copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, and/or sell copies of the Software, and to permit persons
|
|
|
|
* to whom the Software is furnished to do so, provided that the above
|
|
|
|
* copyright notice(s) and this permission notice appear in all copies of
|
|
|
|
* the Software and that both the above copyright notice(s) and this
|
|
|
|
* permission notice appear in supporting documentation.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
|
|
* OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
|
|
* HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
|
2006-03-13 22:59:55 +01:00
|
|
|
*
|
2009-05-15 20:22:32 +02:00
|
|
|
* Except as contained in this notice, the name of a copyright holder
|
|
|
|
* shall not be used in advertising or otherwise to promote the sale, use
|
|
|
|
* or other dealings in this Software without prior written authorization
|
|
|
|
* of the copyright holder.
|
2006-03-13 22:59:55 +01:00
|
|
|
*
|
2004-07-31 10:24:14 +02:00
|
|
|
* Copyright © 2003 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.
|
|
|
|
*/
|
|
|
|
|
2005-07-03 09:02:09 +02:00
|
|
|
#ifdef HAVE_DIX_CONFIG_H
|
|
|
|
#include <dix-config.h>
|
|
|
|
#endif
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
#ifndef _COMPINT_H_
|
|
|
|
#define _COMPINT_H_
|
|
|
|
|
2005-07-03 10:53:54 +02:00
|
|
|
#include "misc.h"
|
2004-07-31 10:24:14 +02:00
|
|
|
#include "scrnintstr.h"
|
2005-07-03 10:53:54 +02:00
|
|
|
#include "os.h"
|
2004-07-31 10:24:14 +02:00
|
|
|
#include "regionstr.h"
|
|
|
|
#include "validate.h"
|
|
|
|
#include "windowstr.h"
|
|
|
|
#include "input.h"
|
|
|
|
#include "resource.h"
|
|
|
|
#include "colormapst.h"
|
|
|
|
#include "cursorstr.h"
|
|
|
|
#include "dixstruct.h"
|
|
|
|
#include "gcstruct.h"
|
|
|
|
#include "servermd.h"
|
|
|
|
#include "dixevents.h"
|
|
|
|
#include "globals.h"
|
|
|
|
#include "picturestr.h"
|
|
|
|
#include "extnsionst.h"
|
2007-08-28 15:28:25 +02:00
|
|
|
#include "privates.h"
|
2004-07-31 10:24:14 +02:00
|
|
|
#include "mi.h"
|
|
|
|
#include "damage.h"
|
|
|
|
#include "damageextint.h"
|
|
|
|
#include "xfixes.h"
|
|
|
|
#include <X11/extensions/compositeproto.h>
|
|
|
|
#include <assert.h>
|
|
|
|
|
2004-08-15 21:05:01 +02:00
|
|
|
/*
|
|
|
|
* enable this for debugging
|
|
|
|
|
|
|
|
#define COMPOSITE_DEBUG
|
|
|
|
*/
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
typedef struct _CompClientWindow {
|
|
|
|
struct _CompClientWindow *next;
|
|
|
|
XID id;
|
|
|
|
int update;
|
|
|
|
} CompClientWindowRec, *CompClientWindowPtr;
|
|
|
|
|
|
|
|
typedef struct _CompWindow {
|
|
|
|
RegionRec borderClip;
|
|
|
|
DamagePtr damage; /* for automatic update mode */
|
|
|
|
Bool damageRegistered;
|
|
|
|
Bool damaged;
|
|
|
|
int update;
|
|
|
|
CompClientWindowPtr clients;
|
|
|
|
int oldx;
|
|
|
|
int oldy;
|
|
|
|
PixmapPtr pOldPixmap;
|
|
|
|
int borderClipX, borderClipY;
|
|
|
|
} CompWindowRec, *CompWindowPtr;
|
|
|
|
|
|
|
|
#define COMP_ORIGIN_INVALID 0x80000000
|
|
|
|
|
|
|
|
typedef struct _CompSubwindows {
|
|
|
|
int update;
|
|
|
|
CompClientWindowPtr clients;
|
|
|
|
} CompSubwindowsRec, *CompSubwindowsPtr;
|
|
|
|
|
2004-08-13 10:16:14 +02:00
|
|
|
#ifndef COMP_INCLUDE_RGB24_VISUAL
|
|
|
|
#define COMP_INCLUDE_RGB24_VISUAL 0
|
|
|
|
#endif
|
|
|
|
|
2006-03-13 22:59:55 +01:00
|
|
|
typedef struct _CompOverlayClientRec *CompOverlayClientPtr;
|
|
|
|
|
|
|
|
typedef struct _CompOverlayClientRec {
|
|
|
|
CompOverlayClientPtr pNext;
|
|
|
|
ClientPtr pClient;
|
|
|
|
ScreenPtr pScreen;
|
|
|
|
XID resource;
|
|
|
|
} CompOverlayClientRec;
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
typedef struct _CompScreen {
|
|
|
|
PositionWindowProcPtr PositionWindow;
|
|
|
|
CopyWindowProcPtr CopyWindow;
|
|
|
|
CreateWindowProcPtr CreateWindow;
|
|
|
|
DestroyWindowProcPtr DestroyWindow;
|
|
|
|
RealizeWindowProcPtr RealizeWindow;
|
|
|
|
UnrealizeWindowProcPtr UnrealizeWindow;
|
|
|
|
ClipNotifyProcPtr ClipNotify;
|
|
|
|
/*
|
|
|
|
* Called from ConfigureWindow, these
|
|
|
|
* three track changes to the offscreen storage
|
|
|
|
* geometry
|
|
|
|
*/
|
|
|
|
MoveWindowProcPtr MoveWindow;
|
|
|
|
ResizeWindowProcPtr ResizeWindow;
|
|
|
|
ChangeBorderWidthProcPtr ChangeBorderWidth;
|
|
|
|
/*
|
|
|
|
* Reparenting has an effect on Subwindows redirect
|
|
|
|
*/
|
|
|
|
ReparentWindowProcPtr ReparentWindow;
|
|
|
|
|
2004-08-13 10:16:14 +02:00
|
|
|
/*
|
|
|
|
* Colormaps for new visuals better not get installed
|
|
|
|
*/
|
|
|
|
InstallColormapProcPtr InstallColormap;
|
|
|
|
|
2007-08-25 21:08:20 +02:00
|
|
|
/*
|
|
|
|
* Fake backing store via automatic redirection
|
|
|
|
*/
|
|
|
|
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
ScreenBlockHandlerProcPtr BlockHandler;
|
|
|
|
CloseScreenProcPtr CloseScreen;
|
|
|
|
Bool damaged;
|
2006-08-09 03:07:22 +02:00
|
|
|
int numAlternateVisuals;
|
|
|
|
VisualID *alternateVisuals;
|
2006-03-13 22:59:55 +01:00
|
|
|
|
|
|
|
WindowPtr pOverlayWin;
|
2008-05-05 06:52:58 +02:00
|
|
|
Window overlayWid;
|
2006-03-13 22:59:55 +01:00
|
|
|
CompOverlayClientPtr pOverlayClients;
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
} CompScreenRec, *CompScreenPtr;
|
|
|
|
|
2007-08-28 15:28:25 +02:00
|
|
|
extern DevPrivateKey CompScreenPrivateKey;
|
|
|
|
extern DevPrivateKey CompWindowPrivateKey;
|
|
|
|
extern DevPrivateKey CompSubwindowsPrivateKey;
|
2004-07-31 10:24:14 +02:00
|
|
|
|
2007-08-28 15:28:25 +02:00
|
|
|
#define GetCompScreen(s) ((CompScreenPtr) \
|
|
|
|
dixLookupPrivate(&(s)->devPrivates, CompScreenPrivateKey))
|
|
|
|
#define GetCompWindow(w) ((CompWindowPtr) \
|
|
|
|
dixLookupPrivate(&(w)->devPrivates, CompWindowPrivateKey))
|
|
|
|
#define GetCompSubwindows(w) ((CompSubwindowsPtr) \
|
|
|
|
dixLookupPrivate(&(w)->devPrivates, CompSubwindowsPrivateKey))
|
2004-07-31 10:24:14 +02:00
|
|
|
|
|
|
|
extern RESTYPE CompositeClientWindowType;
|
|
|
|
extern RESTYPE CompositeClientSubwindowsType;
|
2008-05-05 06:52:58 +02:00
|
|
|
extern RESTYPE CompositeClientOverlayType;
|
2004-07-31 10:24:14 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* compalloc.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update);
|
|
|
|
|
|
|
|
void
|
|
|
|
compFreeClientWindow (WindowPtr pWin, XID id);
|
|
|
|
|
|
|
|
int
|
|
|
|
compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update);
|
|
|
|
|
|
|
|
int
|
|
|
|
compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update);
|
|
|
|
|
|
|
|
void
|
|
|
|
compFreeClientSubwindows (WindowPtr pWin, XID id);
|
|
|
|
|
|
|
|
int
|
|
|
|
compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update);
|
|
|
|
|
|
|
|
int
|
|
|
|
compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin);
|
|
|
|
|
|
|
|
int
|
|
|
|
compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compAllocPixmap (WindowPtr pWin);
|
|
|
|
|
|
|
|
void
|
|
|
|
compFreePixmap (WindowPtr pWin);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compReallocPixmap (WindowPtr pWin, int x, int y,
|
|
|
|
unsigned int w, unsigned int h, int bw);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* compext.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
CompositeExtensionInit (void);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* compinit.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compScreenInit (ScreenPtr pScreen);
|
|
|
|
|
2008-05-05 06:52:58 +02:00
|
|
|
/*
|
|
|
|
* compoverlay.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
compFreeOverlayClient (CompOverlayClientPtr pOcToDel);
|
|
|
|
|
|
|
|
CompOverlayClientPtr
|
|
|
|
compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
|
|
|
|
|
|
|
|
CompOverlayClientPtr
|
|
|
|
compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compCreateOverlayWindow (ScreenPtr pScreen);
|
|
|
|
|
|
|
|
void
|
|
|
|
compDestroyOverlayWindow (ScreenPtr pScreen);
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
/*
|
|
|
|
* compwindow.c
|
|
|
|
*/
|
|
|
|
|
2004-08-15 21:05:01 +02:00
|
|
|
#ifdef COMPOSITE_DEBUG
|
2004-07-31 10:24:14 +02:00
|
|
|
void
|
|
|
|
compCheckTree (ScreenPtr pScreen);
|
2004-08-15 21:05:01 +02:00
|
|
|
#else
|
|
|
|
#define compCheckTree(s)
|
2004-07-31 10:24:14 +02:00
|
|
|
#endif
|
|
|
|
|
2007-09-02 06:14:22 +02:00
|
|
|
PictFormatPtr
|
|
|
|
compWindowFormat (WindowPtr pWin);
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
void
|
|
|
|
compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compCheckRedirect (WindowPtr pWin);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compPositionWindow (WindowPtr pWin, int x, int y);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compRealizeWindow (WindowPtr pWin);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compUnrealizeWindow (WindowPtr pWin);
|
|
|
|
|
|
|
|
void
|
|
|
|
compClipNotify (WindowPtr pWin, int dx, int dy);
|
|
|
|
|
|
|
|
void
|
|
|
|
compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind);
|
|
|
|
|
|
|
|
void
|
|
|
|
compResizeWindow (WindowPtr pWin, int x, int y,
|
|
|
|
unsigned int w, unsigned int h, WindowPtr pSib);
|
|
|
|
|
|
|
|
void
|
|
|
|
compChangeBorderWidth (WindowPtr pWin, unsigned int border_width);
|
|
|
|
|
|
|
|
void
|
|
|
|
compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compCreateWindow (WindowPtr pWin);
|
|
|
|
|
|
|
|
Bool
|
|
|
|
compDestroyWindow (WindowPtr pWin);
|
|
|
|
|
|
|
|
void
|
|
|
|
compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion);
|
|
|
|
|
|
|
|
RegionPtr
|
|
|
|
compGetRedirectBorderClip (WindowPtr pWin);
|
|
|
|
|
|
|
|
void
|
|
|
|
compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
|
|
|
|
|
|
|
|
void
|
|
|
|
compWindowUpdate (WindowPtr pWin);
|
|
|
|
|
2006-03-13 22:59:55 +01:00
|
|
|
WindowPtr
|
|
|
|
CompositeRealChildHead (WindowPtr pWin);
|
|
|
|
|
|
|
|
int
|
|
|
|
DeleteWindowNoInputDevices(pointer value, XID wid);
|
|
|
|
|
2004-07-31 10:24:14 +02:00
|
|
|
#endif /* _COMPINT_H_ */
|