On Wed, 29 Jan 2003, Denis Oliver Kropp wrote:

> Hi,
> 
> I must have forgotten to check this cool patch.
> I would like to include the patch in XDirectFB,
> but unfortunately the patch already has seven
> failing hunks. Do you have a more recent patch?
> Otherwise I would fix the failing hunks myself.
> 
> This extension is really a good proof-of-concept.
> 
> 

Hi,

I have created a new patch for the X-Transparency protocol extension.
This new version is based on xf-4_2_99_3 from xfree cvs, and the
latest cvs versions of directfb and xdirectfb.  There were 7 failed
hunks like you mentioned.  The issues were mostly changes in the
Imakefiles in X11.  There are no new features.



Scott Brumbaugh



diff -Naur --exclude=host.def /extra/X4299.org/xc/config/cf/X11.tmpl 
/extra/X4299/xc/config/cf/X11.tmpl
--- /extra/X4299.org/xc/config/cf/X11.tmpl      Mon Dec  9 09:18:59 2002
+++ /extra/X4299/xc/config/cf/X11.tmpl  Fri Jan 31 20:11:18 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
diff -Naur --exclude=host.def /extra/X4299.org/xc/config/cf/directfb.cf 
/extra/X4299/xc/config/cf/directfb.cf
--- /extra/X4299.org/xc/config/cf/directfb.cf   Fri Jan 31 21:14:49 2003
+++ /extra/X4299/xc/config/cf/directfb.cf       Fri Jan 31 19:54:29 2003
@@ -7,7 +7,9 @@
  */
 XCOMM $XConsortium: $
 
-
+/* The X top-level window transparency extension */
+#define BuildTransparency      YES
+#define BuildTransparencyLib   YES
 
 /* no direct graphics extension */
 #define BuildXF86DGA            NO
diff -Naur --exclude=host.def /extra/X4299.org/xc/include/extensions/Imakefile 
/extra/X4299/xc/include/extensions/Imakefile
--- /extra/X4299.org/xc/include/extensions/Imakefile    Mon Dec 16 08:18:49 2002
+++ /extra/X4299/xc/include/extensions/Imakefile        Fri Jan 31 20:09:52 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)
 
 
 
diff -Naur --exclude=host.def /extra/X4299.org/xc/include/extensions/transparency.h 
/extra/X4299/xc/include/extensions/transparency.h
--- /extra/X4299.org/xc/include/extensions/transparency.h       Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/include/extensions/transparency.h   Fri Jan 31 19:54:29 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 XSetTransparency(Display * dpy, Window win, OpacityValue value);
+
+Status XGetTransparency(Display * dpy, Window win, OpacityValue *value);
+
+_XFUNCPROTOEND
+
+#endif /* _TRANSPARENCY_H_ */
diff -Naur --exclude=host.def 
/extra/X4299.org/xc/include/extensions/transparencyproto.h 
/extra/X4299/xc/include/extensions/transparencyproto.h
--- /extra/X4299.org/xc/include/extensions/transparencyproto.h  Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/include/extensions/transparencyproto.h      Fri Jan 31 19:54:29 
+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_XSetTransparency 1
+#define X_XGetTransparency 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;
+}
+xXGetTransparencyReq;
+
+#define sz_xXGetTransparencyReq 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;
+}
+xXGetTransparencyReply;
+
+#define sz_xXGetTransparencyReply 32
+
+typedef struct
+{
+    CARD8 reqType;
+    CARD8 transparencyReqType;
+    CARD16 length B16;
+    CARD32 window B32;
+    CARD32 value B32;
+}
+xXSetTransparencyReq;
+
+#define sz_xXSetTransparencyReq 12
+
+#endif /* _TRANSPARENCYPROTO_H_ */
diff -Naur --exclude=host.def /extra/X4299.org/xc/include/extensions/transparencystr.h 
/extra/X4299/xc/include/extensions/transparencystr.h
--- /extra/X4299.org/xc/include/extensions/transparencystr.h    Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/include/extensions/transparencystr.h        Fri Jan 31 19:54:29 
+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(*SetTransparencyProcPtr) (WindowPtr, unsigned char);
+typedef Bool(*GetTransparencyProcPtr) (WindowPtr, unsigned char *);
+
+Bool TransparencyExtAddScreen(ScreenPtr, SetTransparencyProcPtr, 
+GetTransparencyProcPtr);
+void XTransparencyExtensionInit(void);
+
+#endif /* _TRANSPARENCYSTR_H_ */
diff -Naur --exclude=host.def /extra/X4299.org/xc/lib/Imakefile 
/extra/X4299/xc/lib/Imakefile
--- /extra/X4299.org/xc/lib/Imakefile   Mon Dec  9 09:19:01 2002
+++ /extra/X4299/xc/lib/Imakefile       Fri Jan 31 20:08:23 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)
diff -Naur --exclude=host.def /extra/X4299.org/xc/lib/Xtransparency/Imakefile 
/extra/X4299/xc/lib/Xtransparency/Imakefile
--- /extra/X4299.org/xc/lib/Xtransparency/Imakefile     Wed Dec 31 16:00:00 1969
+++ /extra/X4299/xc/lib/Xtransparency/Imakefile Fri Jan 31 19:54:29 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()
diff -Naur --exclude=host.def /extra/X4299.org/xc/lib/Xtransparency/transparency.c 
/extra/X4299/xc/lib/Xtransparency/transparency.c
--- /extra/X4299.org/xc/lib/Xtransparency/transparency.c        Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/lib/Xtransparency/transparency.c    Fri Jan 31 19:54:29 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
+XSetTransparency(Display * dpy, Window win, OpacityValue value)
+{
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+    xXSetTransparencyReq *request;
+
+    XTransparencySimpleCheckExtension(dpy, info);
+
+    LockDisplay(dpy);
+    GetReq(XSetTransparency, request);
+    request->reqType = info->codes->major_opcode;
+    request->transparencyReqType = X_XSetTransparency;
+    request->window = win;
+    request->value = (CARD32) value;
+    UnlockDisplay(dpy);
+    SyncHandle();
+}
+
+Status
+XGetTransparency(Display * dpy, Window win, OpacityValue *value)
+{
+
+    XExtDisplayInfo *info = XTransparencyFindDisplay(dpy);
+    xXGetTransparencyReq *request;
+    xXGetTransparencyReply reply;
+    unsigned long value1;
+
+    XTransparencyCheckExtension(dpy, info, None);
+
+    LockDisplay(dpy);
+    GetReq(XGetTransparency, request);
+    request->reqType = info->codes->major_opcode;
+    request->transparencyReqType = X_XGetTransparency;
+    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);
+
+}
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/Imakefile 
/extra/X4299/xc/programs/Imakefile
--- /extra/X4299.org/xc/programs/Imakefile      Tue Nov 19 20:43:50 2002
+++ /extra/X4299/xc/programs/Imakefile  Fri Jan 31 20:06:33 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))
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/Xserver/Imakefile 
/extra/X4299/xc/programs/Xserver/Imakefile
--- /extra/X4299.org/xc/programs/Xserver/Imakefile      Fri Jan 31 21:13:28 2003
+++ /extra/X4299/xc/programs/Xserver/Imakefile  Fri Jan 31 20:04:32 2003
@@ -529,7 +529,8 @@
 DIRECTFBDIRS = $(STDDIRS) $(FBDIR) $(DIRECTFBDDXDIR) $(DEPDIRS)
 DIRECTFBOBJS = 
 DIRECTFBLIBS = PreFbLibs $(DIRECTFBDDXDIR)/LibraryTargetName(directfb) FbPostFbLibs
-DIRECTFBSYSLIBS = $(FONTLIBS) $(SYSLIBS) `directfb-config --libs`
+DIRECTFBRPATHDIR = $(shell directfb-config --prefix)/lib
+DIRECTFBSYSLIBS = $(FONTLIBS) $(SYSLIBS) `directfb-config --libs` 
+-Wl,-rpath,$(DIRECTFBRPATHDIR)
 SetUIDServerTarget(XDirectFB,$(DIRECTFBDIRS),$(DIRECTFBOBJS), \
        $(DIRECTFBLIBS),$(DIRECTFBSYSLIBS))
 
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/Xserver/Xext/Imakefile 
/extra/X4299/xc/programs/Xserver/Xext/Imakefile
--- /extra/X4299.org/xc/programs/Xserver/Xext/Imakefile Wed Mar  6 13:12:32 2002
+++ /extra/X4299/xc/programs/Xserver/Xext/Imakefile     Fri Jan 31 20:00:55 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) \
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/Xserver/Xext/transparency.c 
/extra/X4299/xc/programs/Xserver/Xext/transparency.c
--- /extra/X4299.org/xc/programs/Xserver/Xext/transparency.c    Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/programs/Xserver/Xext/transparency.c        Fri Jan 31 19:54:29 
+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
+{
+    SetTransparencyProcPtr SetTransparencyCallback;
+    GetTransparencyProcPtr GetTransparencyCallback;
+    CloseScreenProcPtr CloseScreen;
+}
+TransparencyPrivate, *TransparencyPrivatePtr;
+
+static int TransparencyScreenPrivateIndex;
+static int TransparencyGeneration = 0;
+
+Bool TransparencyExtAddScreen(ScreenPtr, SetTransparencyProcPtr, 
+GetTransparencyProcPtr);
+static Bool TransparencyCloseScreen(int i, ScreenPtr pScreen);
+
+static int ProcXTransparencyQueryVersion(ClientPtr);
+static int SProcXTransparencyQueryVersion(ClientPtr);
+static int ProcXTransparencySet(ClientPtr);
+static int SProcXTransparencySet(ClientPtr);
+static int ProcXTransparencyGet(ClientPtr);
+static int SProcXTransparencyGet(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,
+    SetTransparencyProcPtr setTransparency,
+    GetTransparencyProcPtr getTransparency)
+{
+
+    TransparencyPrivatePtr pTransparencyPrivate;
+
+    if (TransparencyGeneration != serverGeneration) {
+        TransparencyScreenPrivateIndex = AllocateScreenPrivateIndex();
+        if (TransparencyScreenPrivateIndex < 0) {
+            return FALSE;
+        }
+        TransparencyGeneration = serverGeneration;
+    }
+
+    pTransparencyPrivate = xalloc(sizeof(TransparencyPrivate));
+    if (pTransparencyPrivate == 0) {
+        return FALSE;
+    }
+
+    pTransparencyPrivate->SetTransparencyCallback = setTransparency;
+    pTransparencyPrivate->GetTransparencyCallback = getTransparency;
+    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
+ProcXTransparencySet(ClientPtr client)
+{
+
+    REQUEST(xXSetTransparencyReq);
+    WindowPtr pWin;
+    OpacityValue value;
+    TransparencyPrivatePtr pPriv;
+
+    REQUEST_SIZE_MATCH(xXSetTransparencyReq);
+
+    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->SetTransparencyCallback(pWin, value)) {
+        return BadMatch;
+    }
+
+    return client->noClientException;
+}
+
+static int
+SProcXTransparencySet(ClientPtr client)
+{
+    return ProcXTransparencySet(client);
+}
+
+static int
+ProcXTransparencyGet(ClientPtr client)
+{
+
+    REQUEST(xXGetTransparencyReq);
+    xXGetTransparencyReply reply;
+    WindowPtr pWin;
+    OpacityValue value;
+    TransparencyPrivatePtr pPriv;
+
+    REQUEST_SIZE_MATCH(xXGetTransparencyReq);
+
+    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->GetTransparencyCallback(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_xXGetTransparencyReply, (char *)&reply);
+
+    return client->noClientException;
+}
+
+static int
+SProcXTransparencyGet(ClientPtr client)
+{
+    REQUEST(xXGetTransparencyReq);
+
+    REQUEST_SIZE_MATCH(xXGetTransparencyReq);
+
+    return ProcXTransparencyGet(client);
+}
+
+static int
+ProcXTransparencyDispatch(ClientPtr client)
+{
+    REQUEST(xReq);
+
+    switch (stuff->data) {
+    case X_XTransparencyQueryVersion:
+        return ProcXTransparencyQueryVersion(client);
+    case X_XSetTransparency:
+        return ProcXTransparencySet(client);
+    case X_XGetTransparency:
+        return ProcXTransparencyGet(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_XSetTransparency:
+        return SProcXTransparencySet(client);
+    case X_XGetTransparency:
+        return SProcXTransparencyGet(client);
+    }
+
+    return BadRequest;
+}
diff -Naur --exclude=host.def 
/extra/X4299.org/xc/programs/Xserver/hw/directfb/Imakefile 
/extra/X4299/xc/programs/Xserver/hw/directfb/Imakefile
--- /extra/X4299.org/xc/programs/Xserver/hw/directfb/Imakefile  Wed Jan 29 10:56:48 
2003
+++ /extra/X4299/xc/programs/Xserver/hw/directfb/Imakefile      Fri Jan 31 19:54:29 
+2003
@@ -35,6 +35,9 @@
 DEFINES = -Wall
 EXTRAMANDEFS = -D__logdir__=$(LOGDIRECTORY)
 
+SpecialCObjectRule(directfbScreen,NullParameter,XTransparencyExtensionDefines)
+SpecialCObjectRule(rootlessDirectFB,NullParameter,XTransparencyExtensionDefines)
+
 NormalLibraryObjectRule()
 NormalLibraryTarget(directfb,$(OBJS))
 
diff -Naur --exclude=host.def 
/extra/X4299.org/xc/programs/Xserver/hw/directfb/directfbScreen.c 
/extra/X4299/xc/programs/Xserver/hw/directfb/directfbScreen.c
--- /extra/X4299.org/xc/programs/Xserver/hw/directfb/directfbScreen.c   Fri Dec 27 
10:00:09 2002
+++ /extra/X4299/xc/programs/Xserver/hw/directfb/directfbScreen.c       Fri Jan 31 
+19:54:29 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>
@@ -274,6 +278,10 @@
     ShmRegisterFbFuncs(pScreen);
 #endif
 
+#ifdef XTRANSPARENCY
+    TransparencyExtAddScreen(pScreen, XDirectFBSetTransparency, 
+XDirectFBGetTransparency);
+#endif
+
   /* This must be initialized (why doesnt X have a default?) */
   pScreen->SaveScreen = XDirectFBSaveScreen;
 
diff -Naur --exclude=host.def 
/extra/X4299.org/xc/programs/Xserver/hw/directfb/rootlessDirectFB.c 
/extra/X4299/xc/programs/Xserver/hw/directfb/rootlessDirectFB.c
--- /extra/X4299.org/xc/programs/Xserver/hw/directfb/rootlessDirectFB.c Wed Jan 29 
10:56:49 2003
+++ /extra/X4299/xc/programs/Xserver/hw/directfb/rootlessDirectFB.c     Fri Jan 31 
+19:57:13 2003
@@ -1144,3 +1144,47 @@
       win = win->next;
     }
 }
+
+#ifdef XTRANSPARENCY
+/* Callbacks for the X-Transparent top level window extention */
+/* Get the current transparency for a window */ 
+Bool XDirectFBGetTransparency(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 XDirectFBSetTransparency(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 */
diff -Naur --exclude=host.def 
/extra/X4299.org/xc/programs/Xserver/hw/directfb/rootlessDirectFB.h 
/extra/X4299/xc/programs/Xserver/hw/directfb/rootlessDirectFB.h
--- /extra/X4299.org/xc/programs/Xserver/hw/directfb/rootlessDirectFB.h Mon Nov 18 
14:48:33 2002
+++ /extra/X4299/xc/programs/Xserver/hw/directfb/rootlessDirectFB.h     Fri Jan 31 
+19:54:29 2003
@@ -38,4 +38,10 @@
  */
 void XDirectFBSetCursorShape (IDirectFBSurface *shape, int hot_x, int hot_y);
 
+#ifdef XTRANSPARENCY
+/* Callbacks for the X top-level window transparency extension */
+Bool XDirectFBSetTransparency(WindowPtr pWin, __u8 value);
+Bool XDirectFBGetTransparency(WindowPtr pWin, __u8 * value);
+#endif
+
 #endif /* _ROOTLESSDIRECTFB_H */
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/Xserver/mi/miinitext.c 
/extra/X4299/xc/programs/Xserver/mi/miinitext.c
--- /extra/X4299.org/xc/programs/Xserver/mi/miinitext.c Fri Nov 29 22:21:33 2002
+++ /extra/X4299/xc/programs/Xserver/mi/miinitext.c     Fri Jan 31 19:54:29 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
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/xtoggletrans/Imakefile 
/extra/X4299/xc/programs/xtoggletrans/Imakefile
--- /extra/X4299.org/xc/programs/xtoggletrans/Imakefile Wed Dec 31 16:00:00 1969
+++ /extra/X4299/xc/programs/xtoggletrans/Imakefile     Fri Jan 31 19:54:29 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)
diff -Naur --exclude=host.def /extra/X4299.org/xc/programs/xtoggletrans/xtoggletrans.c 
/extra/X4299/xc/programs/xtoggletrans/xtoggletrans.c
--- /extra/X4299.org/xc/programs/xtoggletrans/xtoggletrans.c    Wed Dec 31 16:00:00 
1969
+++ /extra/X4299/xc/programs/xtoggletrans/xtoggletrans.c        Fri Jan 31 19:54:29 
+2003
@@ -0,0 +1,92 @@
+/*
+ * 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 <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 transparency of the window is set to number.\n"
+        "Number is 0 for transparent, 255 for 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 (XGetTransparency(dpy, window, &orig_value) != 0) {
+        fprintf(stderr, "Failed to get window transparency\n");
+        exit(1);
+    }
+
+    /*
+     * Toggle the transparency 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;
+    }
+
+    XSetTransparency(dpy, window, new_value);
+
+    XSync(dpy, False);
+
+    fprintf(stdout, "Window id 0x%lx: transparency was %d now %d\n", window, 
+orig_value,
+        new_value);
+
+}



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

Reply via email to