Blame synfig-osx/launcher/applewm.c

Carlos Lopez a09598
/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.12 2001/08/27 17:40:57 dawes Exp $ */
Carlos Lopez a09598
/**************************************************************************
Carlos Lopez a09598
Carlos Lopez a09598
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
Carlos Lopez a09598
Copyright 2000 VA Linux Systems, Inc.
Carlos Lopez a09598
Copyright (c) 2002 Apple Computer, Inc.
Carlos Lopez a09598
All Rights Reserved.
Carlos Lopez a09598
Carlos Lopez a09598
Permission is hereby granted, free of charge, to any person obtaining a
Carlos Lopez a09598
copy of this software and associated documentation files (the
Carlos Lopez a09598
"Software"), to deal in the Software without restriction, including
Carlos Lopez a09598
without limitation the rights to use, copy, modify, merge, publish,
Carlos Lopez a09598
distribute, sub license, and/or sell copies of the Software, and to
Carlos Lopez a09598
permit persons to whom the Software is furnished to do so, subject to
Carlos Lopez a09598
the following conditions:
Carlos Lopez a09598
Carlos Lopez a09598
The above copyright notice and this permission notice (including the
Carlos Lopez a09598
next paragraph) shall be included in all copies or substantial portions
Carlos Lopez a09598
of the Software.
Carlos Lopez a09598
Carlos Lopez a09598
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Carlos Lopez a09598
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Carlos Lopez a09598
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
Carlos Lopez a09598
IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
Carlos Lopez a09598
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Carlos Lopez a09598
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Carlos Lopez a09598
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Carlos Lopez a09598
Carlos Lopez a09598
**************************************************************************/
Carlos Lopez a09598
Carlos Lopez a09598
/* THIS IS NOT AN X CONSORTIUM STANDARD */
Carlos Lopez a09598
Carlos Lopez a09598
#define NEED_EVENTS
Carlos Lopez a09598
#define NEED_REPLIES
Carlos Lopez a09598
#include <x11 xlibint.h=""></x11>
Carlos Lopez a09598
#include "applewmstr.h"
Carlos Lopez a09598
#include <x11 extensions="" xext.h=""></x11>
Carlos Lopez a09598
#include "extutil.h"
Carlos Lopez a09598
#include <stdio.h></stdio.h>
Carlos Lopez a09598
Carlos Lopez a09598
static XExtensionInfo _applewm_info_data;
Carlos Lopez a09598
static XExtensionInfo *applewm_info = &_applewm_info_data;
Carlos Lopez a09598
static char *applewm_extension_name = APPLEWMNAME;
Carlos Lopez a09598
Carlos Lopez a09598
#define AppleWMCheckExtension(dpy,i,val) \
Carlos Lopez a09598
  XextCheckExtension (dpy, i, applewm_extension_name, val)
Carlos Lopez a09598
Carlos Lopez a09598
/*****************************************************************************
Carlos Lopez a09598
 *                                                                           *
Carlos Lopez a09598
 *			   private utility routines                          *
Carlos Lopez a09598
 *                                                                           *
Carlos Lopez a09598
 *****************************************************************************/
Carlos Lopez a09598
Carlos Lopez a09598
static int close_display(Display *dpy, XExtCodes *extCodes);
Carlos Lopez a09598
static Bool wire_to_event();
Carlos Lopez a09598
static Status event_to_wire();
Carlos Lopez a09598
Carlos Lopez a09598
static /* const */ XExtensionHooks applewm_extension_hooks = {
Carlos Lopez a09598
    NULL,				/* create_gc */
Carlos Lopez a09598
    NULL,				/* copy_gc */
Carlos Lopez a09598
    NULL,				/* flush_gc */
Carlos Lopez a09598
    NULL,				/* free_gc */
Carlos Lopez a09598
    NULL,				/* create_font */
Carlos Lopez a09598
    NULL,				/* free_font */
Carlos Lopez a09598
    close_display,			/* close_display */
Carlos Lopez a09598
    wire_to_event,			/* wire_to_event */
Carlos Lopez a09598
    event_to_wire,			/* event_to_wire */
Carlos Lopez a09598
    NULL,				/* error */
Carlos Lopez a09598
    NULL,				/* error_string */
Carlos Lopez a09598
};
Carlos Lopez a09598
Carlos Lopez a09598
static XEXT_GENERATE_FIND_DISPLAY (find_display, applewm_info, 
Carlos Lopez a09598
				   applewm_extension_name, 
Carlos Lopez a09598
				   &applewm_extension_hooks, 
Carlos Lopez a09598
				   AppleWMNumberEvents, NULL)
Carlos Lopez a09598
Carlos Lopez a09598
static XEXT_GENERATE_CLOSE_DISPLAY (close_display, applewm_info)
Carlos Lopez a09598
Carlos Lopez a09598
static Bool wire_to_event (dpy, re, event)
Carlos Lopez a09598
    Display *dpy;
Carlos Lopez a09598
    XEvent  *re;
Carlos Lopez a09598
    xEvent  *event;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    XAppleWMNotifyEvent *se;
Carlos Lopez a09598
    xAppleWMNotifyEvent *sevent;
Carlos Lopez a09598
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    switch ((event->u.u.type & 0x7f) - info->codes->first_event) {
Carlos Lopez a09598
    case AppleWMControllerNotify:
Carlos Lopez a09598
    case AppleWMActivationNotify:
Carlos Lopez a09598
    case AppleWMPasteboardNotify:
Carlos Lopez a09598
    	se = (XAppleWMNotifyEvent *) re;
Carlos Lopez a09598
	sevent = (xAppleWMNotifyEvent *) event;
Carlos Lopez a09598
    	se->type = sevent->type & 0x7f;
Carlos Lopez a09598
    	se->serial = _XSetLastRequestRead(dpy,(xGenericReply *) event);
Carlos Lopez a09598
    	se->send_event = (sevent->type & 0x80) != 0;
Carlos Lopez a09598
    	se->display = dpy;
Carlos Lopez a09598
	se->window = 0;
Carlos Lopez a09598
	se->time = sevent->time;
Carlos Lopez a09598
    	se->kind = sevent->kind;
Carlos Lopez a09598
    	se->arg = sevent->arg;
Carlos Lopez a09598
    	return True;
Carlos Lopez a09598
    }
Carlos Lopez a09598
    return False;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
static Status event_to_wire (dpy, re, event)
Carlos Lopez a09598
    Display *dpy;
Carlos Lopez a09598
    XEvent  *re;
Carlos Lopez a09598
    xEvent  *event;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    XAppleWMNotifyEvent *se;
Carlos Lopez a09598
    xAppleWMNotifyEvent *sevent;
Carlos Lopez a09598
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    switch ((re->type & 0x7f) - info->codes->first_event) {
Carlos Lopez a09598
    case AppleWMControllerNotify:
Carlos Lopez a09598
    case AppleWMActivationNotify:
Carlos Lopez a09598
    case AppleWMPasteboardNotify:
Carlos Lopez a09598
    	se = (XAppleWMNotifyEvent *) re;
Carlos Lopez a09598
	sevent = (xAppleWMNotifyEvent *) event;
Carlos Lopez a09598
    	sevent->type = se->type | (se->send_event ? 0x80 : 0);
Carlos Lopez a09598
    	sevent->sequenceNumber = se->serial & 0xffff;
Carlos Lopez a09598
    	sevent->kind = se->kind;
Carlos Lopez a09598
    	sevent->arg = se->arg;
Carlos Lopez a09598
	sevent->time = se->time;
Carlos Lopez a09598
    	return 1;
Carlos Lopez a09598
    }
Carlos Lopez a09598
    return 0;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
/*****************************************************************************
Carlos Lopez a09598
 *                                                                           *
Carlos Lopez a09598
 *		    public Apple-WM Extension routines                      *
Carlos Lopez a09598
 *                                                                           *
Carlos Lopez a09598
 *****************************************************************************/
Carlos Lopez a09598
Carlos Lopez a09598
#if 0
Carlos Lopez a09598
#include <stdio.h></stdio.h>
Carlos Lopez a09598
#define TRACE(msg)  fprintf(stderr, "AppleWM%s\n", msg);
Carlos Lopez a09598
#else
Carlos Lopez a09598
#define TRACE(msg)
Carlos Lopez a09598
#endif
Carlos Lopez a09598
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMQueryExtension (dpy, event_basep, error_basep)
Carlos Lopez a09598
    Display *dpy;
Carlos Lopez a09598
    int *event_basep, *error_basep;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("QueryExtension...");
Carlos Lopez a09598
    if (XextHasExtension(info)) {
Carlos Lopez a09598
	*event_basep = info->codes->first_event;
Carlos Lopez a09598
	*error_basep = info->codes->first_error;
Carlos Lopez a09598
        TRACE("QueryExtension... return True");
Carlos Lopez a09598
	return True;
Carlos Lopez a09598
    } else {
Carlos Lopez a09598
        TRACE("QueryExtension... return False");
Carlos Lopez a09598
	return False;
Carlos Lopez a09598
    }
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMQueryVersion(dpy, majorVersion, minorVersion, patchVersion)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int* majorVersion; 
Carlos Lopez a09598
    int* minorVersion;
Carlos Lopez a09598
    int* patchVersion;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMQueryVersionReply rep;
Carlos Lopez a09598
    xAppleWMQueryVersionReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("QueryVersion...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMQueryVersion, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMQueryVersion;
Carlos Lopez a09598
    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
Carlos Lopez a09598
	UnlockDisplay(dpy);
Carlos Lopez a09598
	SyncHandle();
Carlos Lopez a09598
        TRACE("QueryVersion... return False");
Carlos Lopez a09598
	return False;
Carlos Lopez a09598
    }
Carlos Lopez a09598
    *majorVersion = rep.majorVersion;
Carlos Lopez a09598
    *minorVersion = rep.minorVersion;
Carlos Lopez a09598
    *patchVersion = rep.patchVersion;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("QueryVersion... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMDisableUpdate(dpy, screen)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int screen;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMDisableUpdateReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("DisableUpdate...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMDisableUpdate, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMDisableUpdate;
Carlos Lopez a09598
    req->screen = screen;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("DisableUpdate... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMReenableUpdate(dpy, screen)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int screen;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMReenableUpdateReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("ReenableUpdate...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMReenableUpdate, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMReenableUpdate;
Carlos Lopez a09598
    req->screen = screen;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("ReenableUpdate... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSelectInput(dpy, mask)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    unsigned long mask;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSelectInputReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SelectInput...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSelectInput, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSelectInput;
Carlos Lopez a09598
    req->mask = mask;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetlectInput... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetWindowMenuWithShortcuts(dpy, nitems, items, shortcuts)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int nitems;
Carlos Lopez a09598
    const char **items;
Carlos Lopez a09598
    const char *shortcuts;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSetWindowMenuReq *req;
Carlos Lopez a09598
    int i, total_length, len;
Carlos Lopez a09598
    char *buf, *ptr;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SetWindowMenu...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSetWindowMenu, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSetWindowMenu;
Carlos Lopez a09598
    req->nitems = nitems;
Carlos Lopez a09598
Carlos Lopez a09598
    total_length = 0;
Carlos Lopez a09598
    for (i = 0; i < nitems; i++)
Carlos Lopez a09598
	total_length += strlen (items[i]) + 2;
Carlos Lopez a09598
Carlos Lopez a09598
    ptr = buf = alloca (total_length);
Carlos Lopez a09598
    for (i = 0; i < nitems; i++)
Carlos Lopez a09598
    {
Carlos Lopez a09598
	len = strlen (items[i]);
Carlos Lopez a09598
	*ptr++ = shortcuts ? shortcuts[i] : 0;
Carlos Lopez a09598
	memcpy (ptr, items[i], len);
Carlos Lopez a09598
	ptr[len] = 0;
Carlos Lopez a09598
	ptr += len + 1;
Carlos Lopez a09598
    }
Carlos Lopez a09598
Carlos Lopez a09598
    req->length += (total_length + 3) >> 2;
Carlos Lopez a09598
    Data (dpy, buf, total_length);
Carlos Lopez a09598
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetlectInput... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetWindowMenu(dpy, nitems, items)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int nitems;
Carlos Lopez a09598
    const char **items;
Carlos Lopez a09598
{
Carlos Lopez a09598
    return XAppleWMSetWindowMenuWithShortcuts (dpy, nitems, items, NULL);
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetWindowMenuCheck(dpy, idx)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int idx;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSetWindowMenuCheckReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SetWindowMenuCheck...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSetWindowMenuCheck, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSetWindowMenuCheck;
Carlos Lopez a09598
    req->index = idx;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetWindowMenuCheck... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetFrontProcess(dpy)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSetFrontProcessReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SetFrontProcess...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSetFrontProcess, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSetFrontProcess;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetFrontProcess... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetWindowLevel(dpy, id, level)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    Window id;
Carlos Lopez a09598
    int level;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSetWindowLevelReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SetWindowLevel...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSetWindowLevel, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSetWindowLevel;
Carlos Lopez a09598
    req->window = id;
Carlos Lopez a09598
    req->level = level;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetWindowLevel... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMSetCanQuit(dpy, state)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    Bool state;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMSetCanQuitReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("SetCanQuit...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMSetCanQuit, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMSetCanQuit;
Carlos Lopez a09598
    req->state = state;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("SetCanQuit... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMFrameGetRect(dpy, frame_class, frame_rect,
Carlos Lopez a09598
			   ix, iy, iw, ih, ox, oy, ow, oh, rx, ry, rw, rh)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    unsigned int frame_class, frame_rect;
Carlos Lopez a09598
    short ix, iy, iw, ih;
Carlos Lopez a09598
    short ox, oy, ow, oh;
Carlos Lopez a09598
    short *rx, *ry, *rw, *rh;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMFrameGetRectReply rep;
Carlos Lopez a09598
    xAppleWMFrameGetRectReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("FrameGetRect...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMFrameGetRect, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMFrameGetRect;
Carlos Lopez a09598
    req->frame_class = frame_class;
Carlos Lopez a09598
    req->frame_rect = frame_rect;
Carlos Lopez a09598
    req->ix = ix;
Carlos Lopez a09598
    req->iy = iy;
Carlos Lopez a09598
    req->iw = iw;
Carlos Lopez a09598
    req->ih = ih;
Carlos Lopez a09598
    req->ox = ox;
Carlos Lopez a09598
    req->oy = oy;
Carlos Lopez a09598
    req->ow = ow;
Carlos Lopez a09598
    req->oh = oh;
Carlos Lopez a09598
    rep.x = rep.y = rep.w = rep.h = 0;
Carlos Lopez a09598
    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
Carlos Lopez a09598
	UnlockDisplay(dpy);
Carlos Lopez a09598
	SyncHandle();
Carlos Lopez a09598
        TRACE("FrameGetRect... return False");
Carlos Lopez a09598
	return False;
Carlos Lopez a09598
    }
Carlos Lopez a09598
    *rx = rep.x; *ry = rep.y;
Carlos Lopez a09598
    *rw = rep.w; *rh = rep.h;
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("FrameGetRect... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
unsigned int XAppleWMFrameHitTest(dpy, frame_class, px, py,
Carlos Lopez a09598
				   ix, iy, iw, ih, ox, oy, ow, oh)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    unsigned int frame_class;
Carlos Lopez a09598
    short px, py;
Carlos Lopez a09598
    short ix, iy, iw, ih;
Carlos Lopez a09598
    short ox, oy, ow, oh;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMFrameHitTestReply rep;
Carlos Lopez a09598
    xAppleWMFrameHitTestReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("FrameHitTest...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMFrameHitTest, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMFrameHitTest;
Carlos Lopez a09598
    req->frame_class = frame_class;
Carlos Lopez a09598
    req->px = px;
Carlos Lopez a09598
    req->py = py;
Carlos Lopez a09598
    req->ix = ix;
Carlos Lopez a09598
    req->iy = iy;
Carlos Lopez a09598
    req->iw = iw;
Carlos Lopez a09598
    req->ih = ih;
Carlos Lopez a09598
    req->ox = ox;
Carlos Lopez a09598
    req->oy = oy;
Carlos Lopez a09598
    req->ow = ow;
Carlos Lopez a09598
    req->oh = oh;
Carlos Lopez a09598
    rep.ret = 0;
Carlos Lopez a09598
    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
Carlos Lopez a09598
	UnlockDisplay(dpy);
Carlos Lopez a09598
	SyncHandle();
Carlos Lopez a09598
        TRACE("FrameHitTest... return False");
Carlos Lopez a09598
	return False;
Carlos Lopez a09598
    }
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("FrameHiTest... return True");
Carlos Lopez a09598
    return rep.ret;
Carlos Lopez a09598
}
Carlos Lopez a09598
Carlos Lopez a09598
Bool XAppleWMFrameDraw(dpy, screen, window,
Carlos Lopez a09598
			frame_class, frame_attr,
Carlos Lopez a09598
			ix, iy, iw, ih, ox, oy, ow, oh,
Carlos Lopez a09598
			title_length, title_bytes)
Carlos Lopez a09598
    Display* dpy;
Carlos Lopez a09598
    int screen;
Carlos Lopez a09598
    Window window;
Carlos Lopez a09598
    unsigned int frame_class, frame_attr;
Carlos Lopez a09598
    short ix, iy, iw, ih;
Carlos Lopez a09598
    short ox, oy, ow, oh;
Carlos Lopez a09598
    unsigned int title_length;
Carlos Lopez a09598
    const unsigned char *title_bytes;
Carlos Lopez a09598
{
Carlos Lopez a09598
    XExtDisplayInfo *info = find_display (dpy);
Carlos Lopez a09598
    xAppleWMFrameDrawReq *req;
Carlos Lopez a09598
Carlos Lopez a09598
    TRACE("FrameDraw...");
Carlos Lopez a09598
    AppleWMCheckExtension (dpy, info, False);
Carlos Lopez a09598
Carlos Lopez a09598
    LockDisplay(dpy);
Carlos Lopez a09598
    GetReq(AppleWMFrameDraw, req);
Carlos Lopez a09598
    req->reqType = info->codes->major_opcode;
Carlos Lopez a09598
    req->wmReqType = X_AppleWMFrameDraw;
Carlos Lopez a09598
    req->screen = screen;
Carlos Lopez a09598
    req->window = window;
Carlos Lopez a09598
    req->frame_class = frame_class;
Carlos Lopez a09598
    req->frame_attr = frame_attr;
Carlos Lopez a09598
    req->ix = ix;
Carlos Lopez a09598
    req->iy = iy;
Carlos Lopez a09598
    req->iw = iw;
Carlos Lopez a09598
    req->ih = ih;
Carlos Lopez a09598
    req->ox = ox;
Carlos Lopez a09598
    req->oy = oy;
Carlos Lopez a09598
    req->ow = ow;
Carlos Lopez a09598
    req->oh = oh;
Carlos Lopez a09598
    req->title_length = title_length;
Carlos Lopez a09598
Carlos Lopez a09598
    req->length += (title_length + 3)>>2;
Carlos Lopez a09598
    Data (dpy, title_bytes, title_length);
Carlos Lopez a09598
Carlos Lopez a09598
    UnlockDisplay(dpy);
Carlos Lopez a09598
    SyncHandle();
Carlos Lopez a09598
    TRACE("FrameDraw... return True");
Carlos Lopez a09598
    return True;
Carlos Lopez a09598
}