Hi,

Here is a new diff file for the X-Transparency extension.  This diff
is based off the x11 source tag xf-4_2_99_3 and xdirectfb-rc4.
There are two changes.

1. There is now a simple man page on the extension in xc/doc/man/Xext.
2. The XSetTransparency and XGetTransparency calls have been changed
   to XSetOpacity and XGetOpacity.

I will soon fix the patch I made to sawfish and post it to this list
to use these new names.

The previous patch was out of date and failed on xdirectfb-rc4.  I
have also tested this new patch against sources from x11 cvs retrieved
with the command:

$ cvs checkout -D "02/18/03" xc



Thanks,


Scott Brumbaugh


Index: xc/config/cf/X11.tmpl
diff -u xc/config/cf/X11.tmpl:1.1.1.1 xc/config/cf/X11.tmpl:1.2
--- xc/config/cf/X11.tmpl:1.1.1.1       Sat Mar 15 18:34:40 2003
+++ xc/config/cf/X11.tmpl       Sat Mar 15 19:39:26 2003
@@ -1107,6 +1107,14 @@
 #endif
 #endif
 
+#ifndef XTransparencyExtensionDefines
+#if BuildTransparency
+#define XTransparencyExtensionDefines -DXTRANSPARENCY
+#else
+#define XTransparencyExtensionDefines /**/
+#endif
+#endif
+
 #ifndef SitePervasiveExtensionDefines
 #define SitePervasiveExtensionDefines /**/
 #endif
@@ -1129,7 +1137,7 @@
        XF86MiscExtensionDefines DBEDefines DPMSDefines EVIDefines \
        ScreenSaverExtensionDefines XvExtensionDefines XvMCExtensionDefines \
        GlxDefines FontCacheExtensionDefines SiteExtensionDefines \
-        XResExtensionDefines
+        XResExtensionDefines XTransparencyExtensionDefines
 #endif
 #define ExtensionDefines BaseExtensionDefines ExtensionOSDefines
 #endif /* ExtensionDefines */
@@ -2262,6 +2270,20 @@
 ProjectUnsharedLibReferences(XXF86DGA,Xxf86dga,$(XXF86DGALIBSRC),XBuildLibDir)
 #endif
 
+#if BuildTransparencyLib
+#ifndef SharedLibXTransparency
+#define SharedLibXTransparency NO
+#endif
+#ifndef NormalLibXTransparency
+#define NormalLibXTransparency YES
+#endif
+#ifndef DebugLibXTransparency
+#define DebugLibXTransparency  NO
+#endif
+#ifndef ProfileLibXTransparency
+#define ProfileLibXTransparency        NO
+#endif
+#endif
 
     XXF86RUSHLIBSRC = $(LIBSRC)/Xxf86rush
 #if SharedLibXxf86rush
Index: xc/config/cf/directfb.cf
diff -u xc/config/cf/directfb.cf:1.1.2.1 xc/config/cf/directfb.cf:1.2
--- xc/config/cf/directfb.cf:1.1.2.1    Sat Mar 15 19:09:11 2003
+++ xc/config/cf/directfb.cf    Sat Mar 15 19:39:26 2003
@@ -163,7 +163,9 @@
 
 #define GlxUseBuiltInDRIDriver NO      /* For libOSmesa */
 
-
+/* The X top-level window transparency extension */
+#define BuildTransparency      YES
+#define BuildTransparencyLib   YES
 
 /*
  * XIE
Index: xc/doc/man/Xext/Imakefile
diff -u xc/doc/man/Xext/Imakefile:1.1.1.1 xc/doc/man/Xext/Imakefile:1.2
--- xc/doc/man/Xext/Imakefile:1.1.1.1   Sat Mar 15 18:34:44 2003
+++ xc/doc/man/Xext/Imakefile   Tue Mar 18 14:40:48 2003
@@ -24,8 +24,11 @@
 InstallManPageAliases(XmbufQueryExtension,$(MANDIR),XmbufGetVersion 
XmbufCreateBuffers XmbufDestroyBuffers XmbufDisplayBuffers XmbufGetWindowAttributes 
XmbufChangeWindowAttributes XmbufGetBufferAttributes XmbufChangeBufferAttributes 
XmbufGetScreenInfo XmbufCreateStereoWindow)
 InstallManPageLong(Xevi,$(MANDIR),XeviQueryVersion)
 InstallManPageAliases(XeviQueryVersion,$(MANDIR),XeviGetVisualInfo XeviQueryExtension)
+InstallManPageLong(XTransparency,$(MANDIR),XTransparencyQueryExtension)
+InstallManPageAliases(XTransparency,$(MANDIR),XSetOpacity XGetOpacity 
XTransparencyQueryExtension XTransparencyQueryVersion)
 #else
 InstallManPage(XShape,$(MANDIR))
 InstallManPage(Xmbuf,$(MANDIR))
 InstallManPage(Xevi,$(MANDIR))
+InstallManPage(XTransparency,$(MANDIR))
 #endif
Index: xc/doc/man/Xext/XTransparency.man
diff -u /dev/null xc/doc/man/Xext/XTransparency.man:1.1
--- /dev/null   Wed Mar 19 07:57:30 2003
+++ xc/doc/man/Xext/XTransparency.man   Tue Mar 18 14:40:49 2003
@@ -0,0 +1,55 @@
+.\" XTransparency.man - simple documentation file outlining the X-Transparency
+.\" protocol extension
+.\"
+.\" Scott Brumbaugh <[EMAIL PROTECTED]>
+.\"
+.TH XTRANSPARENCY 3X11 __xorgversion__ "X FUNCTIONS"
+.SH NAME
+XTransparencyQueryExtension, XTransparencyQueryVersion, XSetOpacity, XGetOpacity
+.SH SYNTAX
+.nf
+.LP
+\&#include <X11/extensions/transparency.h>
+.LP
+Bool XTransparencyQueryExtension (
+       Display *dpy, 
+       int *event_basep, 
+       int *error_basep);
+.LP
+Status XTransparencyQueryVersion (
+       Display *dpy, 
+       int *major_versionp, 
+       int *minor_versionp);
+.LP
+void XSetOpacity (
+       Display *dpy, 
+       Window dest, 
+       OpacityValue value);
+.LP
+Status XGetOpacity (
+       Display *dpy, 
+       Window dest,
+       OpacityValue *value);
+.fi
+.SH DATA TYPES
+.nf
+.LP
+.ta 3i
+typedef unsigned char OpacityValue;
+.fi
+.SH DESCRIPTION
+The \fIX11 Transparency Extension\fP allows any X client program to set the
+opacity of its own or any other client's top-level X window.  Here, top-level window
+means that a window's parent is the root window.  The opacity value will vary between
+0 and a maximum value of 255.  A window with an opacity value of 0 is invisible, while
+a window with an opacity value of 255 is fully opaque.  Calling XSetOpacity on a 
window
+which is not top-level is an error in the protocol.  An XErrorEvent will be returned 
to
+the calling process asynchronously.  
+.SH BUGS
+This is an experimental protocol extension.  This manual page is incomplete. 
+.SH AUTHOR
+Scott Brumbaugh <[EMAIL PROTECTED]>
+.SH SEE ALSO
+.nf
+\fIX11 Rootless X Server\fP
+\fIXDirectFB\fP
Index: xc/include/extensions/Imakefile
diff -u xc/include/extensions/Imakefile:1.1.1.1 xc/include/extensions/Imakefile:1.2
--- xc/include/extensions/Imakefile:1.1.1.1     Sat Mar 15 18:35:38 2003
+++ xc/include/extensions/Imakefile     Sat Mar 15 19:39:43 2003
@@ -51,12 +51,15 @@
 #if BuildXResExt || BuildXResLibrary
 XRESHEADERS = XRes.h XResproto.h
 #endif
+#if BuildTransparency || BuildTransparencyLibs
+TRANSPARENCYHEADERS = transparency.h transparencyproto.h
+#endif
 
 EXTRAHEADERS = $(SCREENSAVERHEADERS) $(XF86MISCHEADERS) $(XF86BIGFONTHEADERS) \
               $(XF86VIDMODEHEADERS) $(XF86DGAHEADERS) $(XINERAMAHEADERS) \
               $(LBXHEADERS) $(XVHEADERS) $(XVMCHEADERS) $(XF86RUSHHEADERS) \
               $(FONTCACHEHEADERS) $(RENDERHEADERS) $(RANDRHEADERS) \
-              $(XTRAPHEADERS) $(XRESHEADERS)
+              $(XTRAPHEADERS) $(XRESHEADERS) $(TRANSPARENCYHEADERS)
 
 
 
Index: xc/include/extensions/transparency.h
diff -u /dev/null xc/include/extensions/transparency.h:1.2
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/include/extensions/transparency.h        Tue Mar 18 14:41:18 2003
@@ -0,0 +1,31 @@
+/*
+ * transparency.h
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * X-Transparency extension, get/set opacity for top level windows.
+ */
+
+#ifndef _TRANSPARENCY_H_
+#define _TRANSPARENCY_H_
+
+#include <X11/Xlib.h>
+#include <X11/Xfuncproto.h>
+
+/* The opacity, 0 invisible, 255 fully opaque */
+typedef unsigned char OpacityValue;
+
+_XFUNCPROTOBEGIN
+
+Bool XTransparencyQueryExtension(Display * dpy, int *event_base, int *error_base);
+
+Status XTransparencyQueryVersion(Display * dpy, int *major, int *minor);
+
+void XSetOpacity(Display * dpy, Window win, OpacityValue value);
+
+Status XGetOpacity(Display * dpy, Window win, OpacityValue *value);
+
+_XFUNCPROTOEND
+
+#endif /* _TRANSPARENCY_H_ */
Index: xc/include/extensions/transparencyproto.h
diff -u /dev/null xc/include/extensions/transparencyproto.h:1.2
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/include/extensions/transparencyproto.h   Tue Mar 18 14:41:18 2003
@@ -0,0 +1,98 @@
+/*
+ * transparencyproto.h
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * X-Transparency extension, get/set opacity for top level windows.
+ */
+
+#ifndef _TRANSPARENCYPROTO_H_
+#define _TRANSPARENCYPROTO_H_
+
+#include <X11/Xlibint.h>
+
+#define TRANSPARENCY_NAME "X-Transparency"
+#define TRANSPARENCY_MAJOR 0
+#define TRANSPARENCY_MINOR 1
+
+#define X_TRANSPARENCY_ERRORS 0
+#define X_TRANSPARENCY_EVENTS 0
+
+#define X_XTransparencyQueryVersion 0
+#define X_XSetOpacity 1
+#define X_XGetOpacity 2
+
+#define Window CARD32
+#define Transparency CARD32
+
+typedef struct
+{
+    CARD8 reqType;
+    CARD8 transparencyReqType;
+    CARD16 length B16;
+    CARD32 major B32;
+    CARD32 minor B32;
+}
+xXTransparencyQueryVersionReq;
+
+#define sz_xXTransparencyQueryVersionReq 12
+
+typedef struct
+{
+    CARD8 type;                        /* X_Reply */
+    CARD8 pad1;
+    CARD16 sequence B16;
+    CARD32 length B32;
+    CARD32 major B32;
+    CARD32 minor B32;
+    CARD32 pad2 B32;
+    CARD32 pad3 B32;
+    CARD32 pad4 B32;
+    CARD32 pad5 B32;
+}
+xXTransparencyQueryVersionReply;
+
+#define sz_xXTransparencyQueryVersionReply 32
+
+typedef struct
+{
+    CARD8 reqType;
+    CARD8 transparencyReqType;
+    CARD16 length B16;
+    CARD32 window B32;
+}
+xXGetOpacityReq;
+
+#define sz_xXGetOpacityReq 8
+
+typedef struct
+{
+    CARD8 type;
+    CARD8 pad1;
+    CARD16 sequence B16;
+    CARD32 length B32;
+    CARD32 value B32;
+    CARD32 pad2 B32;
+    CARD32 pad3 B32;
+    CARD32 pad4 B32;
+    CARD32 pad5 B32;
+    CARD32 pad6 B32;
+}
+xXGetOpacityReply;
+
+#define sz_xXGetOpacityReply 32
+
+typedef struct
+{
+    CARD8 reqType;
+    CARD8 transparencyReqType;
+    CARD16 length B16;
+    CARD32 window B32;
+    CARD32 value B32;
+}
+xXSetOpacityReq;
+
+#define sz_xXSetOpacityReq 12
+
+#endif /* _TRANSPARENCYPROTO_H_ */
Index: xc/include/extensions/transparencystr.h
diff -u /dev/null xc/include/extensions/transparencystr.h:1.2
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/include/extensions/transparencystr.h     Tue Mar 18 14:41:18 2003
@@ -0,0 +1,19 @@
+/*
+ * transparencystr.h
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * X-Transparency extension, get/set opacity for top level windows.
+ */
+
+#ifndef _TRANSPARENCYSTR_H_
+#define _TRANSPARENCYSTR_H_
+
+typedef Bool(*SetOpacityProcPtr) (WindowPtr, unsigned char);
+typedef Bool(*GetOpacityProcPtr) (WindowPtr, unsigned char *);
+
+Bool TransparencyExtAddScreen(ScreenPtr, SetOpacityProcPtr, GetOpacityProcPtr);
+void XTransparencyExtensionInit(void);
+
+#endif /* _TRANSPARENCYSTR_H_ */
Index: xc/lib/Imakefile
diff -u xc/lib/Imakefile:1.1.1.1 xc/lib/Imakefile:1.2
--- xc/lib/Imakefile:1.1.1.1    Sat Mar 15 18:35:38 2003
+++ xc/lib/Imakefile    Sat Mar 15 19:39:43 2003
@@ -168,6 +168,10 @@
 FONTCACHELIBDIR = Xfontcache
 #endif
 
+#if BuildTransparencyLib
+TRANSPARENCYLIBDIR = Xtransparency
+#endif
+
 FONTSUBDIR = font
 
 #if BuildFontEncLib
@@ -216,7 +220,7 @@
              $(ZLIBDIR) $(REGEXDIR) $(RENDERLIBDIR) $(FREETYPE2BUILDDIR) \
              $(LIBXML2BUILDDIR) $(EXPATBUILDDIR) $(FONTCONFIGBUILDDIR) \
              $(XFT1LIBDIR) $(XFTLIBDIR) $(XVMCLIBDIR) $(RANDRLIBDIR) \
-             $(XTRAPLIBDIR) $(XRESLIBDIR) $(XCURSORLIBDIR)
+             $(XTRAPLIBDIR) $(XRESLIBDIR) $(XCURSORLIBDIR) $(TRANSPARENCYLIBDIR)
 
 SUBDIRS = $(BERKDIR) xtrans $(LINTSUBDIRS) $(FONTSUBDIR) $(FONTENCSUBDIR) \
           $(FONTCACHELIBDIR)
Index: xc/lib/Xtransparency/Imakefile
diff -u /dev/null xc/lib/Xtransparency/Imakefile:1.1
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/lib/Xtransparency/Imakefile      Sat Mar 15 19:39:43 2003
@@ -0,0 +1,30 @@
+XCOMM $XFree86$
+
+#define DoNormalLib NormalLibXTransparency
+#define DoSharedLib SharedLibXTransparency
+#define DoDebugLib DebugLibXTransparency
+#define DoProfileLib ProfileLibXTransparency
+#define LibName XTransparency
+#define SoRev SOXTRANSPARENCYREV
+#define IncSubdir X11
+#define IncSubSubdir extensions
+
+#include <Threads.tmpl>
+
+#ifdef SharedXTransparencyReqs
+REQUIREDLIBS = SharedXTransparencyReqs
+#endif
+
+#if Malloc0ReturnsNull
+ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL
+#endif
+
+      DEFINES = $(ALLOC_DEFINES)
+     INCLUDES = -I$(XLIBSRC) -I$(EXTINCSRC)
+         SRCS = transparency.c
+         OBJS = transparency.o
+     LINTLIBS = $(LINTXLIB)
+
+#include <Library.tmpl>
+
+DependTarget()
Index: xc/lib/Xtransparency/transparency.c
diff -u /dev/null xc/lib/Xtransparency/transparency.c:1.2
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/lib/Xtransparency/transparency.c Tue Mar 18 14:41:32 2003
@@ -0,0 +1,196 @@
+/*
+ * transparency.c
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * X-Transparency extension, get/set opacity for top level windows.
+ */
+
+#include "transparency.h"
+#include "transparencyproto.h"
+
+#include <X11/Xlib.h>
+#include <X11/Xlibint.h>
+#include <Xext.h>
+#include <extutil.h>
+
+#include <stdio.h>
+
+typedef struct
+{
+    int major;
+    int minor;
+}
+XTransparencyInfo;
+
+XExtensionInfo XTransparencyExtensionInfo;
+
+static Status XTransparencyCloseDisplay(Display * dpy, XExtCodes * codes);
+
+static XExtensionHooks transparency_extension_hooks = {
+    NULL,                              /* create_gc */
+    NULL,                              /* copy_gc */
+    NULL,                              /* flush_gc */
+    NULL,                              /* free_gc */
+    NULL,                              /* create_font */
+    NULL,                              /* free_font */
+    XTransparencyCloseDisplay,         /* close_display */
+    NULL,                              /* wire_to_event */
+    NULL,                              /* event_to_wire */
+    NULL,                              /* error */
+    NULL,                              /* error_string */
+};
+
+#define XTransparencyCheckExtension(dpy,i,val) \
+    XextCheckExtension(dpy,i,TRANSPARENCY_NAME, val)
+#define XTransparencySimpleCheckExtension(dpy,i) \
+    XextSimpleCheckExtension(dpy,i,TRANSPARENCY_NAME)
+
+XExtDisplayInfo *
+XTransparencyFindDisplay(Display * dpy)
+{
+    XExtDisplayInfo *dpyinfo;
+    XTransparencyInfo *xti;
+
+    dpyinfo = XextFindDisplay(&XTransparencyExtensionInfo, dpy);
+
+    if (!dpyinfo) {
+        xti = Xmalloc(sizeof(XTransparencyInfo));
+        if (xti == NULL) {
+            return NULL;
+        }
+
+        dpyinfo = XextAddDisplay(&XTransparencyExtensionInfo, dpy,
+            TRANSPARENCY_NAME, &transparency_extension_hooks, 0, 0);
+
+        xti->major = -1;
+        xti->minor = -1;
+        dpyinfo->data = (char *)xti;
+    }
+
+    return dpyinfo;
+}
+
+Bool
+XTransparencyQueryExtension(Display * dpy, int *event_basep, int *error_basep)
+{
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+
+    if (XextHasExtension(info)) {
+        *event_basep = info->codes->first_event;
+        *error_basep = info->codes->first_error;
+        return True;
+    } else {
+        return False;
+    }
+
+}
+
+Status
+XTransparencyQueryVersion(Display * dpy,
+    int *major_versionp, int *minor_versionp)
+{
+
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+    XTransparencyInfo *xti;
+    xXTransparencyQueryVersionReq *request;
+    xXTransparencyQueryVersionReply reply;
+
+    XTransparencyCheckExtension(dpy, info, 0);
+
+    xti = (XTransparencyInfo *) info->data;
+
+    LockDisplay(dpy);
+
+    GetReq(XTransparencyQueryVersion, request);
+    request->reqType = info->codes->major_opcode;
+    request->transparencyReqType = X_XTransparencyQueryVersion;
+    request->major = 0;
+    request->minor = 0;
+    if (!_XReply(dpy, (xReply *) & reply, 0, True)) {
+        UnlockDisplay(dpy);
+        SyncHandle();
+        return 0;                      /* failure */
+    }
+
+    xti->major = reply.major;
+    xti->minor = reply.minor;
+
+    UnlockDisplay(dpy);
+
+    *major_versionp = xti->major;
+    *minor_versionp = xti->minor;
+
+    SyncHandle();
+
+    return 1;
+}
+
+void
+XSetOpacity(Display * dpy, Window win, OpacityValue value)
+{
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+    xXSetOpacityReq *request;
+
+    XTransparencySimpleCheckExtension(dpy, info);
+
+    LockDisplay(dpy);
+    GetReq(XSetOpacity, request);
+    request->reqType = info->codes->major_opcode;
+    request->transparencyReqType = X_XSetOpacity;
+    request->window = win;
+    request->value = (CARD32) value;
+    UnlockDisplay(dpy);
+    SyncHandle();
+}
+
+Status
+XGetOpacity(Display * dpy, Window win, OpacityValue *value)
+{
+
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+    xXGetOpacityReq *request;
+    xXGetOpacityReply reply;
+    unsigned long value1;
+
+    XTransparencyCheckExtension(dpy, info, None);
+
+    LockDisplay(dpy);
+    GetReq(XGetOpacity, request);
+    request->reqType = info->codes->major_opcode;
+    request->transparencyReqType = X_XGetOpacity;
+    request->window = win;
+
+    if (!_XReply(dpy, (xReply *) & reply, 0, xFalse)) {
+        UnlockDisplay(dpy);
+        SyncHandle();
+        return BadRequest;
+    }
+
+    *value = (OpacityValue)reply.value;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+
+    return Success;
+
+}
+
+static Status
+XTransparencyCloseDisplay(Display * dpy, XExtCodes * codes)
+{
+
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+
+    LockDisplay(dpy);
+    if (info->data) {
+        XTransparencyInfo *xti = (XTransparencyInfo *) info->data;
+
+        XFree(xti);
+    }
+    UnlockDisplay(dpy);
+
+    return XextRemoveDisplay(&XTransparencyExtensionInfo, dpy);
+
+}
Index: xc/programs/Imakefile
diff -u xc/programs/Imakefile:1.1.1.1 xc/programs/Imakefile:1.2
--- xc/programs/Imakefile:1.1.1.1       Sat Mar 15 18:35:50 2003
+++ xc/programs/Imakefile       Sat Mar 15 19:39:43 2003
@@ -108,6 +108,10 @@
    XCURSORGENDIR = xcursorgen
 #endif
 
+#if BuildTransparency && BuildTransparencyLib
+       XTOGGLETRANSDIR = xtoggletrans
+#endif
+
 #if BuildServersOnly || !BuildClients
 SUBDIRS = $(XSSRCDIR)
 #else
@@ -132,7 +136,7 @@
        $(XTERMSRCDIR) $(XTRAPCLIENTDIRS) $(XVIDTUNESRCDIR) xwd xwininfo xwud \
        $(XPMCLIENTDIRS) $(XVINFOSRCDIR) \
        $(XSSRCDIR) $(XASSRCDIR) $(LBXPROXYSRCDIR) $(SCRIPTSDIR) \
-       $(GLXCLIENTDIRS) $(XRANDRDIR) $(XCURSORGENDIR)
+       $(GLXCLIENTDIRS) $(XRANDRDIR) $(XCURSORGENDIR) $(XTOGGLETRANSDIR)
 #endif
 
 MakeSubdirs($(SUBDIRS))
Index: xc/programs/Xserver/Xext/Imakefile
diff -u xc/programs/Xserver/Xext/Imakefile:1.1.1.1 
xc/programs/Xserver/Xext/Imakefile:1.2
--- xc/programs/Xserver/Xext/Imakefile:1.1.1.1  Sat Mar 15 18:35:52 2003
+++ xc/programs/Xserver/Xext/Imakefile  Sat Mar 15 19:39:43 2003
@@ -101,20 +101,27 @@
 #endif
 #endif
 
+#if BuildTransparency
+        TRANSPARENCYSRCS = transparency.c
+        TRANSPARENCYOBJS = transparency.o
+#endif
+
 
        SRCS = shape.c $(SHMSRCS) $(MULTIBUFSRC) \
               mitmisc.c xtest.c xtest1di.c xtest1dd.c sleepuntil.c \
              bigreq.c sync.c $(SCRNSAVSRC) xcmisc.c $(VIDMODESRCS) \
              $(XF86MISCSRCS) $(XF86BIGFSRCS) $(XF86DGASRCS) $(SECURITYSRCS) \
              $(APPGROUPSRCS) xprint.c $(CUPSRCS) $(PNRXSRCS) $(DPMSSRCS) \
-             $(EVISRCS) $(XVSRCS) $(FONTCACHESRCS) $(XRESSRCS)
+             $(EVISRCS) $(XVSRCS) $(FONTCACHESRCS) $(XRESSRCS) \
+             $(TRANSPARENCYSRCS)
 
        OBJS = shape.o $(SHMOBJS) $(MULTIBUFOBJ) \
               mitmisc.o xtest.o xtest1di.o xtest1dd.o sleepuntil.o \
               bigreq.o sync.o $(SCRNSAVOBJ) xcmisc.o $(VIDMODEOBJS) \
              $(XF86MISCOBJS) $(XF86BIGFOBJS) $(XF86DGAOBJS) $(SECURITYOBJS) \
              $(APPGROUPOBJS) xprint.o $(CUPOBJS) $(PNRXOBJS) $(DPMSOBJS) \
-             $(EVIOBJS) $(XVOBJS) $(FONTCACHEOBJS) $(XRESOBJS)
+             $(EVIOBJS) $(XVOBJS) $(FONTCACHEOBJS) $(XRESOBJS) \
+             $(TRANSPARENCYOBJS)
 
       SOBJS = $(SHMOBJS) $(APPGROUPOBJS) $(SECURITYOBJS) xprint.o \
              xtest.o xtest1di.o xtest1dd.o sleepuntil.o $(PNRXOBJS) \
Index: xc/programs/Xserver/Xext/transparency.c
diff -u /dev/null xc/programs/Xserver/Xext/transparency.c:1.2
--- /dev/null   Wed Mar 19 07:57:31 2003
+++ xc/programs/Xserver/Xext/transparency.c     Tue Mar 18 14:41:36 2003
@@ -0,0 +1,285 @@
+/*
+ * transparency.c
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * X-Transparency extension, get/set opacity for top level windows.
+ */
+
+#include "X.h"
+#include "Xdefs.h"
+#include "windowstr.h"
+#include "scrnintstr.h"
+#include "extnsionst.h"
+#include "dixstruct.h"
+
+#include "transparencyproto.h"
+#include "transparencystr.h"
+#include "transparency.h"
+
+#define IsTopLevel(pWin) \
+       ((pWin) && (pWin)->parent && !(pWin)->parent->parent)
+
+typedef struct _TransparencyPrivate
+{
+    SetOpacityProcPtr SetOpacityCallback;
+    GetOpacityProcPtr GetOpacityCallback;
+    CloseScreenProcPtr CloseScreen;
+}
+TransparencyPrivate, *TransparencyPrivatePtr;
+
+static int TransparencyScreenPrivateIndex;
+static int TransparencyGeneration = 0;
+
+Bool TransparencyExtAddScreen(ScreenPtr, SetOpacityProcPtr, GetOpacityProcPtr);
+static Bool TransparencyCloseScreen(int i, ScreenPtr pScreen);
+
+static int ProcXTransparencyQueryVersion(ClientPtr);
+static int SProcXTransparencyQueryVersion(ClientPtr);
+static int ProcXOpacitySet(ClientPtr);
+static int SProcXOpacitySet(ClientPtr);
+static int ProcXOpacityGet(ClientPtr);
+static int SProcXOpacityGet(ClientPtr);
+static int ProcXTransparencyDispatch(ClientPtr);
+static int SProcXTransparencyDispatch(ClientPtr);
+
+static void
+XTransparencyResetProc(ExtensionEntry * extEntry)
+{
+       /* empty */
+}
+
+void
+XTransparencyExtensionInit()
+{
+    ExtensionEntry *extEntry = AddExtension(TRANSPARENCY_NAME,
+        X_TRANSPARENCY_EVENTS, X_TRANSPARENCY_ERRORS,
+        ProcXTransparencyDispatch,
+        SProcXTransparencyDispatch,
+        XTransparencyResetProc,
+        StandardMinorOpcode);
+}
+
+Bool
+TransparencyExtAddScreen(ScreenPtr pScreen,
+    SetOpacityProcPtr setOpacity,
+    GetOpacityProcPtr getOpacity)
+{
+
+    TransparencyPrivatePtr pTransparencyPrivate;
+
+    if (TransparencyGeneration != serverGeneration) {
+        TransparencyScreenPrivateIndex = AllocateScreenPrivateIndex();
+        if (TransparencyScreenPrivateIndex < 0) {
+            return FALSE;
+        }
+        TransparencyGeneration = serverGeneration;
+    }
+
+    pTransparencyPrivate = xalloc(sizeof(TransparencyPrivate));
+    if (pTransparencyPrivate == 0) {
+        return FALSE;
+    }
+
+    pTransparencyPrivate->SetOpacityCallback = setOpacity;
+    pTransparencyPrivate->GetOpacityCallback = getOpacity;
+    pTransparencyPrivate->CloseScreen = pScreen->CloseScreen;
+
+    pScreen->CloseScreen = TransparencyCloseScreen;
+
+    pScreen->devPrivates[TransparencyScreenPrivateIndex].ptr =
+        (pointer) pTransparencyPrivate;
+
+    return TRUE;
+}
+
+static Bool
+TransparencyCloseScreen(int i, ScreenPtr pScreen)
+{
+
+    TransparencyPrivatePtr pTransparencyPrivate;
+
+    pTransparencyPrivate =
+        (TransparencyPrivatePtr) pScreen->
+        devPrivates[TransparencyScreenPrivateIndex].ptr;
+
+    pScreen->CloseScreen = pTransparencyPrivate->CloseScreen;
+
+    xfree(pTransparencyPrivate);
+
+    return pScreen->CloseScreen(i, pScreen);
+
+}
+
+static int
+ProcXTransparencyQueryVersion(ClientPtr client)
+{
+
+    REQUEST(xXTransparencyQueryVersionReq);
+    xXTransparencyQueryVersionReply reply;
+
+    REQUEST_SIZE_MATCH(xXTransparencyQueryVersionReq);
+
+    reply.type = X_Reply;
+    reply.length = 0;
+    reply.sequence = client->sequence;
+    reply.major = TRANSPARENCY_MAJOR;
+    reply.minor = TRANSPARENCY_MINOR;
+    if (client->swapped) {
+        int n;
+
+        swaps(&reply.sequence, n);
+        swapl(&reply.length, n);
+        swaps(&reply.major, n);
+        swaps(&reply.minor, n);
+    }
+    WriteToClient(client, sz_xXTransparencyQueryVersionReply, (char *)&reply);
+
+    return client->noClientException;
+
+}
+
+static int
+SProcXTransparencyQueryVersion(ClientPtr client)
+{
+    REQUEST(xXTransparencyQueryVersionReq);
+    int n;
+
+    REQUEST_SIZE_MATCH(xXTransparencyQueryVersionReq);
+    swaps(&stuff->major, n);
+    swaps(&stuff->minor, n);
+    return ProcXTransparencyQueryVersion(client);
+}
+
+static int
+ProcXOpacitySet(ClientPtr client)
+{
+
+    REQUEST(xXSetOpacityReq);
+    WindowPtr pWin;
+    OpacityValue value;
+    TransparencyPrivatePtr pPriv;
+
+    REQUEST_SIZE_MATCH(xXSetOpacityReq);
+
+    pWin = LookupWindow(stuff->window, client);
+    if (!IsTopLevel(pWin)) {
+        return BadWindow;
+    }
+
+    if (TransparencyScreenPrivateIndex == -1) {
+        return BadMatch;
+    }
+
+    pPriv =
+        (TransparencyPrivatePtr) pWin->drawable.pScreen->
+        devPrivates[TransparencyScreenPrivateIndex].ptr;
+
+    value = (OpacityValue) stuff->value;
+
+    if (!pPriv->SetOpacityCallback(pWin, value)) {
+        return BadMatch;
+    }
+
+    return client->noClientException;
+}
+
+static int
+SProcXOpacitySet(ClientPtr client)
+{
+    return ProcXOpacitySet(client);
+}
+
+static int
+ProcXOpacityGet(ClientPtr client)
+{
+
+    REQUEST(xXGetOpacityReq);
+    xXGetOpacityReply reply;
+    WindowPtr pWin;
+    OpacityValue value;
+    TransparencyPrivatePtr pPriv;
+
+    REQUEST_SIZE_MATCH(xXGetOpacityReq);
+
+    pWin = LookupWindow(stuff->window, client);
+    if (!IsTopLevel(pWin)) {
+        return BadWindow;
+    }
+
+    if (TransparencyScreenPrivateIndex == -1) {
+        return BadMatch;
+    }
+
+    pPriv =
+        (TransparencyPrivatePtr) pWin->drawable.pScreen->
+        devPrivates[TransparencyScreenPrivateIndex].ptr;
+
+    if (!pPriv->GetOpacityCallback(pWin, &value)) {
+        return BadMatch;
+    }
+
+    reply.type = X_Reply;
+    reply.sequence = client->sequence;
+    reply.length = 0;                  /* words */
+    reply.value = (CARD32) value;
+    if (client->swapped) {
+        int n;
+
+        swaps(&reply.sequence, n);
+        swapl(&reply.length, n);
+        swapl(&reply.value, n);
+    }
+
+    WriteToClient(client, sz_xXGetOpacityReply, (char *)&reply);
+
+    return client->noClientException;
+}
+
+static int
+SProcXOpacityGet(ClientPtr client)
+{
+    REQUEST(xXGetOpacityReq);
+
+    REQUEST_SIZE_MATCH(xXGetOpacityReq);
+
+    return ProcXOpacityGet(client);
+}
+
+static int
+ProcXTransparencyDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+
+    switch (stuff->data) {
+    case X_XTransparencyQueryVersion:
+        return ProcXTransparencyQueryVersion(client);
+    case X_XSetOpacity:
+        return ProcXOpacitySet(client);
+    case X_XGetOpacity:
+        return ProcXOpacityGet(client);
+    }
+
+    return BadRequest;
+}
+
+static int
+SProcXTransparencyDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+    int n;
+
+    swaps(&stuff->length, n);
+
+    switch (stuff->data) {
+    case X_XTransparencyQueryVersion:
+        return SProcXTransparencyQueryVersion(client);
+    case X_XSetOpacity:
+        return SProcXOpacitySet(client);
+    case X_XGetOpacity:
+        return SProcXOpacityGet(client);
+    }
+
+    return BadRequest;
+}
Index: xc/programs/Xserver/hw/directfb/Imakefile
diff -u xc/programs/Xserver/hw/directfb/Imakefile:1.1.2.1 
xc/programs/Xserver/hw/directfb/Imakefile:1.2
--- xc/programs/Xserver/hw/directfb/Imakefile:1.1.2.1   Sat Mar 15 19:09:58 2003
+++ xc/programs/Xserver/hw/directfb/Imakefile   Sat Mar 15 19:39:43 2003
@@ -35,6 +35,9 @@
 DEFINES = -Wall
 EXTRAMANDEFS = -D__logdir__=$(LOGDIRECTORY)
 
+SpecialCObjectRule(directfbScreen,NullParameter,XTransparencyExtensionDefines)
+SpecialCObjectRule(rootlessDirectFB,NullParameter,XTransparencyExtensionDefines)
+
 NormalLibraryObjectRule()
 NormalLibraryTarget(directfb,$(OBJS))
 
Index: xc/programs/Xserver/hw/directfb/directfbScreen.c
diff -u xc/programs/Xserver/hw/directfb/directfbScreen.c:1.1.2.1 
xc/programs/Xserver/hw/directfb/directfbScreen.c:1.3
--- xc/programs/Xserver/hw/directfb/directfbScreen.c:1.1.2.1    Sat Mar 15 19:09:58 
2003
+++ xc/programs/Xserver/hw/directfb/directfbScreen.c    Tue Mar 18 14:41:40 2003
@@ -33,6 +33,10 @@
 #include "globals.h"
 #include "dix.h"
 
+#ifdef XTRANSPARENCY
+#include "transparencystr.h"
+#endif
+
 /* System headers */
 #include <unistd.h>
 #include <sys/types.h>
@@ -301,6 +305,10 @@
 
 #ifdef MITSHM
      ShmRegisterFbFuncs(pScreen);
+#endif
+
+#ifdef XTRANSPARENCY
+    TransparencyExtAddScreen(pScreen, XDirectFBSetOpacity, XDirectFBGetOpacity);
 #endif
 
      /* This must be initialized (why doesnt X have a default?) */
Index: xc/programs/Xserver/hw/directfb/rootlessDirectFB.c
diff -u xc/programs/Xserver/hw/directfb/rootlessDirectFB.c:1.1.2.1 
xc/programs/Xserver/hw/directfb/rootlessDirectFB.c:1.3
--- xc/programs/Xserver/hw/directfb/rootlessDirectFB.c:1.1.2.1  Sat Mar 15 19:09:58 
2003
+++ xc/programs/Xserver/hw/directfb/rootlessDirectFB.c  Tue Mar 18 14:41:40 2003
@@ -1031,3 +1031,47 @@
      }
 }
 
+
+#ifdef XTRANSPARENCY
+/* Callbacks for the X-Transparent top level window extention */
+/* Get the current transparency for a window */ 
+Bool XDirectFBGetOpacity(WindowPtr pWin, __u8 * value)
+{
+
+    RootlessWindowRec *pWinRec;
+    DirectFBWindowRec *pDFBWinRec;
+
+    pWinRec = WINREC(pWin);
+    if (!pWinRec)
+    {
+        return FALSE;
+    }
+    pDFBWinRec = DFBWINREC(&pWinRec->frame);
+    *value = pDFBWinRec->opacity.current;
+
+    return TRUE;
+}
+
+/* Set the current opacity for a window */
+Bool XDirectFBSetOpacity(WindowPtr pWin, __u8 value)
+{
+
+    RootlessWindowRec *pWinRec;
+    DirectFBWindowRec *pDFBWinRec;
+    IDirectFBWindow *window;
+
+    pWinRec = WINREC(pWin);
+    if (!pWinRec)
+    {
+        return FALSE;
+    }
+
+    pDFBWinRec = DFBWINREC(&(pWinRec->frame));
+    pDFBWinRec->opacity.current = value;
+    window = pDFBWinRec->window;
+    window->SetOpacity(window, value);
+
+    return TRUE;
+}
+
+#endif /* XTRANSPARENCY */
Index: xc/programs/Xserver/hw/directfb/rootlessDirectFB.h
diff -u xc/programs/Xserver/hw/directfb/rootlessDirectFB.h:1.1.2.1 
xc/programs/Xserver/hw/directfb/rootlessDirectFB.h:1.3
--- xc/programs/Xserver/hw/directfb/rootlessDirectFB.h:1.1.2.1  Sat Mar 15 19:09:58 
2003
+++ xc/programs/Xserver/hw/directfb/rootlessDirectFB.h  Tue Mar 18 14:41:40 2003
@@ -38,4 +38,12 @@
  */
 void XDirectFBSetCursorShape (IDirectFBSurface *shape, int hot_x, int hot_y);
 
+#ifdef XTRANSPARENCY
+/* Callbacks for the X top-level window transparency extension.
+ * The protocol will call these when it handles a get/set opacity
+ * request from an X client. */
+Bool XDirectFBSetOpacity(WindowPtr pWin, __u8 value);
+Bool XDirectFBGetOpacity(WindowPtr pWin, __u8 * value);
+#endif
+
 #endif /* _ROOTLESSDIRECTFB_H */
Index: xc/programs/Xserver/mi/miinitext.c
diff -u xc/programs/Xserver/mi/miinitext.c:1.1.1.1 
xc/programs/Xserver/mi/miinitext.c:1.2
--- xc/programs/Xserver/mi/miinitext.c:1.1.1.1  Sat Mar 15 18:36:21 2003
+++ xc/programs/Xserver/mi/miinitext.c  Sat Mar 15 19:39:44 2003
@@ -111,6 +111,9 @@
 #ifdef RES
 #include "XResproto.h"
 #endif
+#ifdef XTRANSPARENCY
+#include "transparencystr.h"
+#endif
 
 /* FIXME: this whole block of externs should be from the appropriate headers */
 #ifdef BEZIER
@@ -235,6 +238,9 @@
 #ifdef RES
 extern void ResExtensionInit(INITARGS);
 #endif
+#ifdef XTRANSPARENCY
+extern void XTransparencyExtensionInit(INITARGS);
+#endif
 
 #ifndef XFree86LOADER
 
@@ -374,6 +380,10 @@
 #ifdef RES
     ResExtensionInit();
 #endif
+#ifdef XTRANSPARENCY
+       XTransparencyExtensionInit();
+#endif
+
 }
 
 void
Index: xc/programs/xtoggletrans/Imakefile
diff -u /dev/null xc/programs/xtoggletrans/Imakefile:1.1
--- /dev/null   Wed Mar 19 07:57:33 2003
+++ xc/programs/xtoggletrans/Imakefile  Sat Mar 15 19:39:44 2003
@@ -0,0 +1,9 @@
+        DEPLIBS = $(DEPXMUULIB) $(DEPXLIB)
+LOCAL_LIBRARIES = $(XMUULIB) $(XLIB) -lXTransparency
+           SRCS = xtoggletrans.c dsimple.c
+           OBJS = xtoggletrans.o dsimple.o
+
+LinkSourceFile(dsimple.c,../xlsfonts)
+LinkSourceFile(dsimple.h,../xlsfonts)
+
+ComplexProgramTargetNoMan(xtoggletrans)
Index: xc/programs/xtoggletrans/xtoggletrans.c
diff -u /dev/null xc/programs/xtoggletrans/xtoggletrans.c:1.2
--- /dev/null   Wed Mar 19 07:57:33 2003
+++ xc/programs/xtoggletrans/xtoggletrans.c     Tue Mar 18 14:41:46 2003
@@ -0,0 +1,95 @@
+/*
+ * xtoggletrans.c
+ *
+ * Copyright 2002 Scott Brumbaugh
+ * All rights reserved
+ *
+ * Demonstrates use of the X-Transparency extension wich allows
+ * clients to get/set opacity value of top-level windows.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/extensions/transparency.h>
+
+#include "dsimple.h"
+
+extern Display *dpy;
+
+void
+usage()
+{
+    fprintf(stdout,
+        "xtoggletrans [-value number]\n"
+        "\n"
+        "Toggle transparency of top-level X window with a mouse click.\n"
+        "If the selected window is already partly transparent, it is reset to 
opaque.\n"
+        "Otherwise, the opacity of the window is set to number.\n"
+        "Number is 0 for completely transparent, 255 for fully opaque, default is 
127\n");
+
+    exit(1);
+
+}
+
+int
+main(int argc, char *argv[])
+{
+
+    Window window;
+    int event_base, error_base;
+    int major, minor;
+    OpacityValue orig_value;
+    OpacityValue new_value = 127;
+    int i;
+
+    Setup_Display_And_Screen(&argc, argv);
+
+    for (i = 1; i < argc; i++) {
+        if (!strncmp(argv[i], "-value", 6) && argv[++i]) {
+            new_value = (OpacityValue) atoi(argv[i]);
+            continue;
+        }
+        usage();
+    }
+
+    if (!XTransparencyQueryExtension(dpy, &event_base, &error_base)) {
+        fprintf(stderr, "Transparency extension not found\n");
+        exit(1);
+    }
+
+    if (!XTransparencyQueryVersion(dpy, &major, &minor)) {
+        fprintf(stderr, "Query transparency extension version failed\n");
+        exit(1);
+    }
+
+    fprintf(stdout, "Using X-Transparency extension version %d.%d\n",
+        major, minor);
+    fprintf(stdout, "Select a top level window\n");
+
+    window = Select_Window(dpy);
+
+    if (XGetOpacity(dpy, window, &orig_value) != 0) {
+        fprintf(stderr, "Failed to get window opacity\n");
+        exit(1);
+    }
+
+    /*
+     * Toggle the opacity value between full opacity and the new value
+     * If the window is already partly transparent reset it to opaque
+     */
+    if (orig_value != 255) {
+        new_value = 255;
+    }
+
+    XSetOpacity(dpy, window, new_value);
+
+    XSync(dpy, False);
+
+    fprintf(stdout, "Window id 0x%lx: opacity was %d now %d\n", window, orig_value,
+        new_value);
+
+    return 0;
+}



-- 
Info:  To unsubscribe send a mail to [EMAIL PROTECTED] with 
"unsubscribe directfb-dev" as subject.

Reply via email to