summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authortorrey <torrey>2003-08-12 23:47:06 +0000
committertorrey <torrey>2003-08-12 23:47:06 +0000
commitcfbb83f9ef36835e69dcd339ecfbc11571338dbd (patch)
treed70702fbbf5cd5a80258ae22facfd0bf53cb1864 /lib
parent4f749b91f73c73e1d1439a61d4d5cbd0c186910e (diff)
Added Apple-WM extension and library (Apple and Torrey T. Lyons).
Diffstat (limited to 'lib')
-rw-r--r--lib/Imakefile8
-rw-r--r--lib/apple/AppleWM.man59
-rw-r--r--lib/apple/Imakefile37
-rw-r--r--lib/apple/applewm.c527
-rw-r--r--lib/apple/applewm.h158
-rw-r--r--lib/apple/applewmstr.h250
6 files changed, 1037 insertions, 2 deletions
diff --git a/lib/Imakefile b/lib/Imakefile
index 59afe6e91..233fcd107 100644
--- a/lib/Imakefile
+++ b/lib/Imakefile
@@ -3,7 +3,7 @@ XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:44:00 cpqbld Exp $
-XCOMM $XFree86: xc/lib/Imakefile,v 3.73 2003/01/28 22:07:30 alanh Exp $
+XCOMM $XFree86: xc/lib/Imakefile,v 3.74 2003/04/14 20:37:07 herrb Exp $
#define IHaveSubdirs
#define PassCDebugFlags
@@ -129,6 +129,10 @@ XCURSORLIBDIR = Xcursor
XTRAPLIBDIR = XTrap
#endif
+#if BuildAppleWMLibrary
+APPLELIBDIR = apple
+#endif
+
XF86EXTLIBS = $(XF86MISCLIBDIR) $(XF86VMLIBDIR) \
$(XF86DGALIBDIR) $(XF86RUSHLIBDIR)
@@ -204,7 +208,7 @@ LINTSUBDIRS = $(XAULIBDIR) $(XDMCPLIBDIR) $(THRSTUBLIBDIR) $(X11LIBDIR) \
$(ZLIBDIR) $(REGEXDIR) $(RENDERLIBDIR) $(FREETYPE2BUILDDIR) \
$(LIBXML2BUILDDIR) $(EXPATBUILDDIR) $(FONTCONFIGBUILDDIR) \
$(XFT1LIBDIR) $(XFTLIBDIR) $(XVMCLIBDIR) $(RANDRLIBDIR) \
- $(XTRAPLIBDIR) $(XRESLIBDIR) $(XCURSORLIBDIR)
+ $(XTRAPLIBDIR) $(XRESLIBDIR) $(XCURSORLIBDIR) $(APPLELIBDIR)
SUBDIRS = $(BERKDIR) xtrans $(LINTSUBDIRS) $(FONTSUBDIR) $(FONTENCSUBDIR) \
$(FONTCACHELIBDIR)
diff --git a/lib/apple/AppleWM.man b/lib/apple/AppleWM.man
new file mode 100644
index 000000000..36bd31d03
--- /dev/null
+++ b/lib/apple/AppleWM.man
@@ -0,0 +1,59 @@
+.\"
+.\" $XFree86: xc/lib/Xrandr/Xrandr.man,v 1.6 2003/06/12 14:12:28 eich Exp $
+.\"
+.\" Copyright (c) 2002 Apple Computer, Inc.
+.\" All Rights Reserved.
+.\"
+.\" 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, sub license, and/or sell copies of the Software, and to
+.\" permit persons to whom the Software is furnished to do so, subject to
+.\" the following conditions:
+.\"
+.\" The above copyright notice and this permission notice (including the
+.\" next paragraph) shall be included in all copies or substantial portions
+.\" of the Software.
+.\"
+.\" 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 NON-INFRINGEMENT.
+.\" IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+.\" ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+.\"
+.de TQ
+.br
+.ns
+.TP \\$1
+..
+.TH APPLEWM 3 "Version 1.0" "XFree86"
+
+.SH NAME
+ AppleWM \- Apple rootless window management extension.
+.SH SYNTAX
+\&#include <X11/extensions/applewm.h>
+.br
+\&#include <X11/extensions/applewmstr.h>
+.nf
+.sp
+List of functions will go here.
+.fi
+.SH ARGUMENTS
+
+.SH DESCRIPTION
+.B AppleWM
+is a simple library designed to interface with the Apple-WM extension.
+This extension allows X window managers to better interact with
+the Mac OS X Aqua user interface when running X11 in a rootless mode.
+.PP
+A more complete description will be forthcoming eventually.
+
+.SH FUNCTIONS
+Detailed description of functions will go here.
+
+.SH RESTRICTIONS
+.B AppleWM
+is only intended to be used on Mac OS X when running a rootless X server.
diff --git a/lib/apple/Imakefile b/lib/apple/Imakefile
new file mode 100644
index 000000000..a3dabf455
--- /dev/null
+++ b/lib/apple/Imakefile
@@ -0,0 +1,37 @@
+XCOMM $XFree86: xc/lib/Xrandr/Imakefile,v 1.2 2002/10/02 16:55:41 keithp Exp $
+
+
+#define DoNormalLib NormalLibAppleWM
+#define DoSharedLib SharedLibAppleWM
+#define DoDebugLib DebugLibAppleWM
+#define DoProfileLib ProfileLibAppleWM
+#define LibName AppleWM
+#define SoRev SOAPPLEWMREV
+#define IncSubdir X11
+#define IncSubSubdir extensions
+
+#include <Threads.tmpl>
+
+#ifdef SharedAppleWMReqs
+REQUIREDLIBS = SharedAppleWMReqs
+#endif
+
+#if Malloc0ReturnsNull
+ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL
+#endif
+
+ DEFINES = $(ALLOC_DEFINES)
+ INCLUDES = -I$(XLIBSRC) -I$(EXTINCSRC)
+ SRCS = applewm.c
+ OBJS = applewm.o
+ LINTLIBS = $(LINTXLIB)
+
+HEADERS = applewm.h applewmstr.h
+
+#include <Library.tmpl>
+
+MANSUFFIX = $(LIBMANSUFFIX)
+
+InstallManPage(AppleWM,$(LIBMANDIR))
+
+DependTarget()
diff --git a/lib/apple/applewm.c b/lib/apple/applewm.c
new file mode 100644
index 000000000..6a1142f90
--- /dev/null
+++ b/lib/apple/applewm.c
@@ -0,0 +1,527 @@
+/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.12 2001/08/27 17:40:57 dawes Exp $ */
+/**************************************************************************
+
+Copyright (c) 2002 Apple Computer, Inc.
+All Rights Reserved.
+
+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, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+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 NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+/* THIS IS NOT AN X CONSORTIUM STANDARD */
+
+#define NEED_EVENTS
+#define NEED_REPLIES
+#include <X11/Xlibint.h>
+#include "applewmstr.h"
+#include <X11/extensions/Xext.h>
+#include "extutil.h"
+#include <stdio.h>
+
+static XExtensionInfo _applewm_info_data;
+static XExtensionInfo *applewm_info = &_applewm_info_data;
+static char *applewm_extension_name = APPLEWMNAME;
+
+#define AppleWMCheckExtension(dpy,i,val) \
+ XextCheckExtension (dpy, i, applewm_extension_name, val)
+
+/*****************************************************************************
+ * *
+ * private utility routines *
+ * *
+ *****************************************************************************/
+
+static int close_display(Display *dpy, XExtCodes *extCodes);
+static Bool wire_to_event();
+static Status event_to_wire();
+
+static /* const */ XExtensionHooks applewm_extension_hooks = {
+ NULL, /* create_gc */
+ NULL, /* copy_gc */
+ NULL, /* flush_gc */
+ NULL, /* free_gc */
+ NULL, /* create_font */
+ NULL, /* free_font */
+ close_display, /* close_display */
+ wire_to_event, /* wire_to_event */
+ event_to_wire, /* event_to_wire */
+ NULL, /* error */
+ NULL, /* error_string */
+};
+
+static XEXT_GENERATE_FIND_DISPLAY (find_display, applewm_info,
+ applewm_extension_name,
+ &applewm_extension_hooks,
+ AppleWMNumberEvents, NULL)
+
+static XEXT_GENERATE_CLOSE_DISPLAY (close_display, applewm_info)
+
+static Bool wire_to_event (dpy, re, event)
+ Display *dpy;
+ XEvent *re;
+ xEvent *event;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ XAppleWMNotifyEvent *se;
+ xAppleWMNotifyEvent *sevent;
+
+ AppleWMCheckExtension (dpy, info, False);
+
+ switch ((event->u.u.type & 0x7f) - info->codes->first_event) {
+ case AppleWMControllerNotify:
+ case AppleWMActivationNotify:
+ case AppleWMPasteboardNotify:
+ se = (XAppleWMNotifyEvent *) re;
+ sevent = (xAppleWMNotifyEvent *) event;
+ se->type = sevent->type & 0x7f;
+ se->serial = _XSetLastRequestRead(dpy,(xGenericReply *) event);
+ se->send_event = (sevent->type & 0x80) != 0;
+ se->display = dpy;
+ se->window = 0;
+ se->time = sevent->time;
+ se->kind = sevent->kind;
+ se->arg = sevent->arg;
+ return True;
+ }
+ return False;
+}
+
+static Status event_to_wire (dpy, re, event)
+ Display *dpy;
+ XEvent *re;
+ xEvent *event;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ XAppleWMNotifyEvent *se;
+ xAppleWMNotifyEvent *sevent;
+
+ AppleWMCheckExtension (dpy, info, False);
+
+ switch ((re->type & 0x7f) - info->codes->first_event) {
+ case AppleWMControllerNotify:
+ case AppleWMActivationNotify:
+ case AppleWMPasteboardNotify:
+ se = (XAppleWMNotifyEvent *) re;
+ sevent = (xAppleWMNotifyEvent *) event;
+ sevent->type = se->type | (se->send_event ? 0x80 : 0);
+ sevent->sequenceNumber = se->serial & 0xffff;
+ sevent->kind = se->kind;
+ sevent->arg = se->arg;
+ sevent->time = se->time;
+ return 1;
+ }
+ return 0;
+}
+
+/*****************************************************************************
+ * *
+ * public Apple-WM Extension routines *
+ * *
+ *****************************************************************************/
+
+#if 0
+#include <stdio.h>
+#define TRACE(msg) fprintf(stderr, "AppleWM%s\n", msg);
+#else
+#define TRACE(msg)
+#endif
+
+
+Bool XAppleWMQueryExtension (dpy, event_basep, error_basep)
+ Display *dpy;
+ int *event_basep, *error_basep;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+
+ TRACE("QueryExtension...");
+ if (XextHasExtension(info)) {
+ *event_basep = info->codes->first_event;
+ *error_basep = info->codes->first_error;
+ TRACE("QueryExtension... return True");
+ return True;
+ } else {
+ TRACE("QueryExtension... return False");
+ return False;
+ }
+}
+
+Bool XAppleWMQueryVersion(dpy, majorVersion, minorVersion, patchVersion)
+ Display* dpy;
+ int* majorVersion;
+ int* minorVersion;
+ int* patchVersion;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMQueryVersionReply rep;
+ xAppleWMQueryVersionReq *req;
+
+ TRACE("QueryVersion...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMQueryVersion, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMQueryVersion;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("QueryVersion... return False");
+ return False;
+ }
+ *majorVersion = rep.majorVersion;
+ *minorVersion = rep.minorVersion;
+ *patchVersion = rep.patchVersion;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("QueryVersion... return True");
+ return True;
+}
+
+Bool XAppleWMDisableUpdate(dpy, screen)
+ Display* dpy;
+ int screen;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMDisableUpdateReq *req;
+
+ TRACE("DisableUpdate...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMDisableUpdate, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMDisableUpdate;
+ req->screen = screen;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("DisableUpdate... return True");
+ return True;
+}
+
+Bool XAppleWMReenableUpdate(dpy, screen)
+ Display* dpy;
+ int screen;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMReenableUpdateReq *req;
+
+ TRACE("ReenableUpdate...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMReenableUpdate, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMReenableUpdate;
+ req->screen = screen;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("ReenableUpdate... return True");
+ return True;
+}
+
+Bool XAppleWMSelectInput(dpy, mask)
+ Display* dpy;
+ unsigned long mask;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSelectInputReq *req;
+
+ TRACE("SelectInput...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSelectInput, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSelectInput;
+ req->mask = mask;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetlectInput... return True");
+ return True;
+}
+
+Bool XAppleWMSetWindowMenuWithShortcuts(dpy, nitems, items, shortcuts)
+ Display* dpy;
+ int nitems;
+ const char **items;
+ const char *shortcuts;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSetWindowMenuReq *req;
+ int i, total_length, len;
+ char *buf, *ptr;
+
+ TRACE("SetWindowMenu...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSetWindowMenu, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSetWindowMenu;
+ req->nitems = nitems;
+
+ total_length = 0;
+ for (i = 0; i < nitems; i++)
+ total_length += strlen (items[i]) + 2;
+
+ ptr = buf = alloca (total_length);
+ for (i = 0; i < nitems; i++)
+ {
+ len = strlen (items[i]);
+ *ptr++ = shortcuts ? shortcuts[i] : 0;
+ memcpy (ptr, items[i], len);
+ ptr[len] = 0;
+ ptr += len + 1;
+ }
+
+ req->length += (total_length + 3) >> 2;
+ Data (dpy, buf, total_length);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetlectInput... return True");
+ return True;
+}
+
+Bool XAppleWMSetWindowMenu(dpy, nitems, items)
+ Display* dpy;
+ int nitems;
+ const char **items;
+{
+ return XAppleWMSetWindowMenuWithShortcuts (dpy, nitems, items, NULL);
+}
+
+Bool XAppleWMSetWindowMenuCheck(dpy, idx)
+ Display* dpy;
+ int idx;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSetWindowMenuCheckReq *req;
+
+ TRACE("SetWindowMenuCheck...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSetWindowMenuCheck, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSetWindowMenuCheck;
+ req->index = idx;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetWindowMenuCheck... return True");
+ return True;
+}
+
+Bool XAppleWMSetFrontProcess(dpy)
+ Display* dpy;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSetFrontProcessReq *req;
+
+ TRACE("SetFrontProcess...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSetFrontProcess, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSetFrontProcess;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetFrontProcess... return True");
+ return True;
+}
+
+Bool XAppleWMSetWindowLevel(dpy, id, level)
+ Display* dpy;
+ Window id;
+ int level;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSetWindowLevelReq *req;
+
+ TRACE("SetWindowLevel...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSetWindowLevel, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSetWindowLevel;
+ req->window = id;
+ req->level = level;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetWindowLevel... return True");
+ return True;
+}
+
+Bool XAppleWMSetCanQuit(dpy, state)
+ Display* dpy;
+ Bool state;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMSetCanQuitReq *req;
+
+ TRACE("SetCanQuit...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMSetCanQuit, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMSetCanQuit;
+ req->state = state;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("SetCanQuit... return True");
+ return True;
+}
+
+Bool XAppleWMFrameGetRect(dpy, frame_class, frame_rect,
+ ix, iy, iw, ih, ox, oy, ow, oh, rx, ry, rw, rh)
+ Display* dpy;
+ unsigned int frame_class, frame_rect;
+ short ix, iy, iw, ih;
+ short ox, oy, ow, oh;
+ short *rx, *ry, *rw, *rh;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMFrameGetRectReply rep;
+ xAppleWMFrameGetRectReq *req;
+
+ TRACE("FrameGetRect...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMFrameGetRect, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMFrameGetRect;
+ req->frame_class = frame_class;
+ req->frame_rect = frame_rect;
+ req->ix = ix;
+ req->iy = iy;
+ req->iw = iw;
+ req->ih = ih;
+ req->ox = ox;
+ req->oy = oy;
+ req->ow = ow;
+ req->oh = oh;
+ rep.x = rep.y = rep.w = rep.h = 0;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("FrameGetRect... return False");
+ return False;
+ }
+ *rx = rep.x; *ry = rep.y;
+ *rw = rep.w; *rh = rep.h;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("FrameGetRect... return True");
+ return True;
+}
+
+unsigned int XAppleWMFrameHitTest(dpy, frame_class, px, py,
+ ix, iy, iw, ih, ox, oy, ow, oh)
+ Display* dpy;
+ unsigned int frame_class;
+ short px, py;
+ short ix, iy, iw, ih;
+ short ox, oy, ow, oh;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMFrameHitTestReply rep;
+ xAppleWMFrameHitTestReq *req;
+
+ TRACE("FrameHitTest...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMFrameHitTest, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMFrameHitTest;
+ req->frame_class = frame_class;
+ req->px = px;
+ req->py = py;
+ req->ix = ix;
+ req->iy = iy;
+ req->iw = iw;
+ req->ih = ih;
+ req->ox = ox;
+ req->oy = oy;
+ req->ow = ow;
+ req->oh = oh;
+ rep.ret = 0;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("FrameHitTest... return False");
+ return False;
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("FrameHiTest... return True");
+ return rep.ret;
+}
+
+Bool XAppleWMFrameDraw(dpy, screen, window,
+ frame_class, frame_attr,
+ ix, iy, iw, ih, ox, oy, ow, oh,
+ title_length, title_bytes)
+ Display* dpy;
+ int screen;
+ Window window;
+ unsigned int frame_class, frame_attr;
+ short ix, iy, iw, ih;
+ short ox, oy, ow, oh;
+ unsigned int title_length;
+ const unsigned char *title_bytes;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xAppleWMFrameDrawReq *req;
+
+ TRACE("FrameDraw...");
+ AppleWMCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(AppleWMFrameDraw, req);
+ req->reqType = info->codes->major_opcode;
+ req->wmReqType = X_AppleWMFrameDraw;
+ req->screen = screen;
+ req->window = window;
+ req->frame_class = frame_class;
+ req->frame_attr = frame_attr;
+ req->ix = ix;
+ req->iy = iy;
+ req->iw = iw;
+ req->ih = ih;
+ req->ox = ox;
+ req->oy = oy;
+ req->ow = ow;
+ req->oh = oh;
+ req->title_length = title_length;
+
+ req->length += (title_length + 3)>>2;
+ Data (dpy, title_bytes, title_length);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ TRACE("FrameDraw... return True");
+ return True;
+}
diff --git a/lib/apple/applewm.h b/lib/apple/applewm.h
new file mode 100644
index 000000000..f3580138e
--- /dev/null
+++ b/lib/apple/applewm.h
@@ -0,0 +1,158 @@
+/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.7 2000/12/07 20:26:02 dawes Exp $ */
+/**************************************************************************
+
+Copyright (c) 2002 Apple Computer, Inc.
+All Rights Reserved.
+
+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, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+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 NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+#ifndef _APPLEWM_H_
+#define _APPLEWM_H_
+
+#include <X11/Xfuncproto.h>
+
+#define X_AppleWMQueryVersion 0
+#define X_AppleWMFrameGetRect 1
+#define X_AppleWMFrameHitTest 2
+#define X_AppleWMFrameDraw 3
+#define X_AppleWMDisableUpdate 4
+#define X_AppleWMReenableUpdate 5
+#define X_AppleWMSelectInput 6
+#define X_AppleWMSetWindowMenuCheck 7
+#define X_AppleWMSetFrontProcess 8
+#define X_AppleWMSetWindowLevel 9
+#define X_AppleWMSetCanQuit 10
+#define X_AppleWMSetWindowMenu 11
+
+/* Events */
+#define AppleWMControllerNotify 0
+#define AppleWMActivationNotify 1
+#define AppleWMPasteboardNotify 2
+#define AppleWMNumberEvents 3
+
+#define AppleWMControllerNotifyMask (1L << 0)
+#define AppleWMActivationNotifyMask (1L << 1)
+#define AppleWMPasteboardNotifyMask (1L << 2)
+
+/* "Kinds" of ControllerNotify events */
+#define AppleWMMinimizeWindow 0
+#define AppleWMZoomWindow 1
+#define AppleWMCloseWindow 2
+#define AppleWMBringAllToFront 3
+#define AppleWMHideWindow 4
+#define AppleWMHideAll 5
+#define AppleWMShowAll 6
+#define AppleWMWindowMenuItem 9
+#define AppleWMWindowMenuNotify 10
+#define AppleWMNextWindow 11
+#define AppleWMPreviousWindow 12
+
+/* "Kinds" of ActivationNotify events */
+#define AppleWMIsActive 0
+#define AppleWMIsInactive 1
+
+/* "Kinds" of PasteboardNotify events */
+#define AppleWMCopyToPasteboard 0
+
+/* Errors */
+#define AppleWMClientNotLocal 0
+#define AppleWMOperationNotSupported 1
+#define AppleWMNumberErrors (AppleWMOperationNotSupported + 1)
+
+/* Window level ids */
+#define AppleWMWindowLevelNormal 0
+#define AppleWMWindowLevelFloating 1
+#define AppleWMWindowLevelTornOff 2
+#define AppleWMWindowLevelDock 3
+#define AppleWMWindowLevelDesktop 4
+#define AppleWMNumWindowLevels 5
+
+#ifndef _APPLEWM_SERVER_
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came frome a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* window of event */
+ Time time; /* server timestamp when event happened */
+ int kind; /* subtype of event */
+ int arg;
+} XAppleWMNotifyEvent;
+
+_XFUNCPROTOBEGIN
+
+Bool XAppleWMQueryExtension (Display *dpy, int *event_base, int *error_base);
+
+Bool XAppleWMQueryVersion (Display *dpy, int *majorVersion,
+ int *minorVersion, int *patchVersion);
+
+Bool XAppleWMDisableUpdate (Display *dpy, int screen);
+
+Bool XAppleWMReenableUpdate (Display *dpy, int screen);
+
+Bool XAppleWMSelectInput (Display *dpy, unsigned long mask);
+
+Bool XAppleWMSetWindowMenu (Display *dpy, int nitems, const char **items);
+Bool XAppleWMSetWindowMenuWithShortcuts (Display *dpy, int nitems,
+ const char **items,
+ const char *shortcuts);
+
+Bool XAppleWMSetWindowMenuCheck (Display *dpy, int index);
+
+Bool XAppleWMSetFrontProcess (Display *dpy);
+
+Bool XAppleWMSetWindowLevel (Display *dpy, Window id, int level);
+
+Bool XAppleWMSetCanQuit (Display *dpy, Bool state);
+
+Bool XAppleWMFrameGetRect (Display *dpy,
+ unsigned int frame_class, unsigned int frame_rect,
+ short inner_x, short inner_y,
+ short inner_w, short inner_h,
+ short outer_x, short outer_y,
+ short outer_w, short outer_h,
+ short *ret_x, short *ret_y,
+ short *ret_w, short *ret_h);
+
+unsigned int XAppleWMFrameHitTest (Display *dpy,
+ unsigned int frame_class,
+ short point_x, short point_y,
+ short inner_x, short inner_y,
+ short inner_w, short inner_h,
+ short outer_x, short outer_y,
+ short outer_w, short outer_h);
+
+Bool XAppleWMFrameDraw (Display *dpy, int screen, Window window,
+ unsigned int frame_class, unsigned int frame_attr,
+ short inner_x, short inner_y,
+ short inner_w, short inner_h,
+ short outer_x, short outer_y,
+ short outer_w, short outer_h,
+ unsigned int title_length,
+ const unsigned char * title_bytes);
+
+_XFUNCPROTOEND
+
+#endif /* _APPLEWM_SERVER_ */
+#endif /* _APPLEWM_H_ */
diff --git a/lib/apple/applewmstr.h b/lib/apple/applewmstr.h
new file mode 100644
index 000000000..f0c027ac5
--- /dev/null
+++ b/lib/apple/applewmstr.h
@@ -0,0 +1,250 @@
+/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.9 2001/03/21 16:01:08 dawes Exp $ */
+/**************************************************************************
+
+Copyright (c) 2002 Apple Computer, Inc.
+All Rights Reserved.
+
+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, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+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 NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+#ifndef _APPLEWMSTR_H_
+#define _APPLEWMSTR_H_
+
+#include <X11/extensions/applewm.h>
+#include <X11/X.h>
+#include <X11/Xmd.h>
+
+#define APPLEWMNAME "Apple-WM"
+
+#define APPLE_WM_MAJOR_VERSION 1 /* current version numbers */
+#define APPLE_WM_MINOR_VERSION 0
+#define APPLE_WM_PATCH_VERSION 0
+
+typedef struct _AppleWMQueryVersion {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMQueryVersion */
+ CARD16 length B16;
+} xAppleWMQueryVersionReq;
+#define sz_xAppleWMQueryVersionReq 4
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 majorVersion B16; /* major version of WM protocol */
+ CARD16 minorVersion B16; /* minor version of WM protocol */
+ CARD32 patchVersion B32; /* patch version of WM protocol */
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xAppleWMQueryVersionReply;
+#define sz_xAppleWMQueryVersionReply 32
+
+typedef struct _AppleWMDisableUpdate {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMDisableUpdate */
+ CARD16 length B16;
+ CARD32 screen B32;
+} xAppleWMDisableUpdateReq;
+#define sz_xAppleWMDisableUpdateReq 8
+
+typedef struct _AppleWMReenableUpdate {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMReenableUpdate */
+ CARD16 length B16;
+ CARD32 screen B32;
+} xAppleWMReenableUpdateReq;
+#define sz_xAppleWMReenableUpdateReq 8
+
+typedef struct _AppleWMSelectInput {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSelectInput */
+ CARD16 length B16;
+ CARD32 mask B32;
+} xAppleWMSelectInputReq;
+#define sz_xAppleWMSelectInputReq 8
+
+typedef struct _AppleWMNotify {
+ BYTE type; /* always eventBase + event type */
+ BYTE kind;
+ CARD16 sequenceNumber B16;
+ Time time B32; /* time of change */
+ CARD16 pad1 B16;
+ CARD32 arg B32;
+ CARD32 pad3 B32;
+} xAppleWMNotifyEvent;
+#define sz_xAppleWMNotifyEvent 20
+
+typedef struct _AppleWMSetWindowMenu {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSetWindowMenu */
+ CARD16 length B16;
+ CARD16 nitems B16;
+ CARD16 pad1 B16;
+} xAppleWMSetWindowMenuReq;
+#define sz_xAppleWMSetWindowMenuReq 8
+
+typedef struct _AppleWMSetWindowMenuCheck {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSetWindowMenuCheck */
+ CARD16 length B16;
+ CARD32 index;
+} xAppleWMSetWindowMenuCheckReq;
+#define sz_xAppleWMSetWindowMenuCheckReq 8
+
+typedef struct _AppleWMSetFrontProcess {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSetFrontProcess */
+ CARD16 length B16;
+} xAppleWMSetFrontProcessReq;
+#define sz_xAppleWMSetFrontProcessReq 4
+
+typedef struct _AppleWMSetWindowLevel {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSetWindowLevel */
+ CARD16 length B16;
+ CARD32 window;
+ CARD32 level;
+} xAppleWMSetWindowLevelReq;
+#define sz_xAppleWMSetWindowLevelReq 12
+
+typedef struct _AppleWMSetCanQuit {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMSetCanQuit */
+ CARD16 length B16;
+ CARD32 state;
+} xAppleWMSetCanQuitReq;
+#define sz_xAppleWMSetCanQuitReq 8
+
+typedef struct _AppleWMFrameGetRect {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMFrameGetRect */
+ CARD16 length B16;
+ CARD16 frame_class B16;
+ CARD16 frame_rect B16;
+ CARD16 ix B16;
+ CARD16 iy B16;
+ CARD16 iw B16;
+ CARD16 ih B16;
+ CARD16 ox B16;
+ CARD16 oy B16;
+ CARD16 ow B16;
+ CARD16 oh B16;
+} xAppleWMFrameGetRectReq;
+#define sz_xAppleWMFrameGetRectReq 24
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 x B16;
+ CARD16 y B16;
+ CARD16 w B16;
+ CARD16 h B16;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xAppleWMFrameGetRectReply;
+#define sz_xAppleWMFrameGetRectReply 32
+
+typedef struct _AppleWMFrameHitTest {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMFrameHitTest */
+ CARD16 length B16;
+ CARD16 frame_class B16;
+ CARD16 pad1 B16;
+ CARD16 px B16;
+ CARD16 py B16;
+ CARD16 ix B16;
+ CARD16 iy B16;
+ CARD16 iw B16;
+ CARD16 ih B16;
+ CARD16 ox B16;
+ CARD16 oy B16;
+ CARD16 ow B16;
+ CARD16 oh B16;
+} xAppleWMFrameHitTestReq;
+#define sz_xAppleWMFrameHitTestReq 28
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BOOL pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 ret B32;
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+} xAppleWMFrameHitTestReply;
+#define sz_xAppleWMFrameHitTestReply 32
+
+typedef struct _AppleWMFrameDraw {
+ CARD8 reqType; /* always WMReqCode */
+ CARD8 wmReqType; /* always X_WMFrameDraw */
+ CARD16 length B16;
+ CARD32 screen B32;
+ CARD32 window B32;
+ CARD16 frame_class B16;
+ CARD16 frame_attr B16;
+ CARD16 ix B16;
+ CARD16 iy B16;
+ CARD16 iw B16;
+ CARD16 ih B16;
+ CARD16 ox B16;
+ CARD16 oy B16;
+ CARD16 ow B16;
+ CARD16 oh B16;
+ CARD32 title_length B32;
+} xAppleWMFrameDrawReq;
+#define sz_xAppleWMFrameDrawReq 36
+
+#ifdef _APPLEWM_SERVER_
+
+void AppleWMExtensionInit(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+void AppleWMSendEvent (
+#if NeedFunctionPrototypes
+ int /* type */,
+ unsigned int /* mask */,
+ int /* which */,
+ int /* arg */
+#endif
+);
+
+unsigned int AppleWMSelectedEvents (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+#endif /* _APPLEWM_SERVER_ */
+#endif /* _APPLEWMSTR_H_ */