summaryrefslogtreecommitdiff
path: root/hw/xquartz/applewm.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xquartz/applewm.c')
-rw-r--r--hw/xquartz/applewm.c333
1 files changed, 168 insertions, 165 deletions
diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index 55976c454..bc2c3b9f6 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -1,29 +1,32 @@
-/**************************************************************************
-
-Copyright (c) 2002-2007 Apple Inc. All Rights Reserved.
-Copyright (c) 2003 Torrey T. Lyons. 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.
-
-**************************************************************************/
+/*
+ * Copyright (c) 2003 Torrey T. Lyons. All Rights Reserved.
+ * Copyright (c) 2002-2012 Apple 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, sublicense, 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 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
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
+ * HOLDER(S) 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.
+ *
+ * Except as contained in this notice, the name(s) of the above
+ * copyright holders shall not be used in advertising or otherwise to
+ * promote the sale, use or other dealings in this Software without
+ * prior written authorization.
+ */
#include "sanitizedCarbon.h"
@@ -106,36 +109,36 @@ make_box (int x, int y, int w, int h)
/* Updates the _NATIVE_SCREEN_ORIGIN property on the given root window. */
void
AppleWMSetScreenOrigin(
- WindowPtr pWin
-)
+ WindowPtr pWin
+ )
{
int32_t data[2];
-
+
data[0] = pWin->drawable.pScreen->x + darwinMainScreenX;
data[1] = pWin->drawable.pScreen->y + darwinMainScreenY;
-
+
dixChangeWindowProperty(serverClient, pWin, xa_native_screen_origin(),
- XA_INTEGER, 32, PropModeReplace, 2, data, TRUE);
+ XA_INTEGER, 32, PropModeReplace, 2, data, TRUE);
}
/* Window managers can set the _APPLE_NO_ORDER_IN property on windows
- that are being genie-restored from the Dock. We want them to
- be mapped but remain ordered-out until the animation
- completes (when the Dock will order them in). */
+ that are being genie-restored from the Dock. We want them to
+ be mapped but remain ordered-out until the animation
+ completes (when the Dock will order them in). */
Bool
AppleWMDoReorderWindow(
- WindowPtr pWin
-)
+ WindowPtr pWin
+ )
{
Atom atom;
PropertyPtr prop;
int rc;
-
+
atom = xa_apple_no_order_in();
rc = dixLookupProperty(&prop, pWin, atom, serverClient, DixReadAccess);
if(Success == rc && prop->type == atom)
- return 0;
+ return 0;
return 1;
}
@@ -143,11 +146,11 @@ AppleWMDoReorderWindow(
static int
ProcAppleWMQueryVersion(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
xAppleWMQueryVersionReply rep;
-
+
REQUEST_SIZE_MATCH(xAppleWMQueryVersionReq);
rep.type = X_Reply;
rep.length = 0;
@@ -163,14 +166,14 @@ ProcAppleWMQueryVersion(
return Success;
}
-
+
/* events */
static inline void
updateEventMask (WMEventPtr *pHead)
{
WMEventPtr pCur;
-
+
eventMask = 0;
for (pCur = *pHead; pCur != NULL; pCur = pCur->next)
eventMask |= pCur->mask;
@@ -182,7 +185,7 @@ WMFreeClient (pointer data, XID id) {
WMEventPtr pEvent;
WMEventPtr *pHead, pCur, pPrev;
int i;
-
+
pEvent = (WMEventPtr) data;
i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, serverClient, DixReadAccess | DixWriteAccess | DixDestroyAccess);
if (i == Success && pHead) {
@@ -205,7 +208,7 @@ WMFreeClient (pointer data, XID id) {
static int
WMFreeEvents (pointer data, XID id) {
WMEventPtr *pHead, pCur, pNext;
-
+
pHead = (WMEventPtr *) data;
for (pCur = *pHead; pCur; pCur = pNext) {
pNext = pCur->next;
@@ -224,7 +227,7 @@ ProcAppleWMSelectInput (register ClientPtr client)
WMEventPtr pEvent, pNewEvent, *pHead;
XID clientResource;
int i;
-
+
REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, client, DixWriteAccess);
if (stuff->mask != 0) {
@@ -240,7 +243,7 @@ ProcAppleWMSelectInput (register ClientPtr client)
}
}
}
-
+
/* build the entry */
pNewEvent = (WMEventPtr) malloc(sizeof (WMEventRec));
if (!pNewEvent)
@@ -311,7 +314,7 @@ AppleWMSendEvent (int type, unsigned int mask, int which, int arg) {
WMEventPtr *pHead, pEvent;
xAppleWMNotifyEvent se;
int i;
-
+
i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, serverClient, DixReadAccess);
if (i != Success || !pHead)
return;
@@ -333,60 +336,60 @@ AppleWMSelectedEvents (void)
return eventMask;
}
-
+
/* general utility functions */
static int
ProcAppleWMDisableUpdate(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST_SIZE_MATCH(xAppleWMDisableUpdateReq);
-
+
appleWMProcs->DisableUpdate();
-
+
return Success;
}
static int
ProcAppleWMReenableUpdate(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST_SIZE_MATCH(xAppleWMReenableUpdateReq);
-
+
appleWMProcs->EnableUpdate();
-
+
return Success;
}
-
+
/* window functions */
static int
ProcAppleWMSetWindowMenu(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
const char *bytes, **items;
char *shortcuts;
int max_len, nitems, i, j;
REQUEST(xAppleWMSetWindowMenuReq);
-
+
REQUEST_AT_LEAST_SIZE(xAppleWMSetWindowMenuReq);
-
+
nitems = stuff->nitems;
items = malloc(sizeof (char *) * nitems);
shortcuts = malloc(sizeof (char) * nitems);
-
+
max_len = (stuff->length << 2) - sizeof(xAppleWMSetWindowMenuReq);
bytes = (char *) &stuff[1];
-
+
for (i = j = 0; i < max_len && j < nitems;)
{
shortcuts[j] = bytes[i++];
items[j++] = bytes + i;
-
+
while (i < max_len)
{
if (bytes[i++] == 0)
@@ -396,17 +399,17 @@ ProcAppleWMSetWindowMenu(
X11ApplicationSetWindowMenu (nitems, items, shortcuts);
free(items);
free(shortcuts);
-
+
return Success;
}
static int
ProcAppleWMSetWindowMenuCheck(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST(xAppleWMSetWindowMenuCheckReq);
-
+
REQUEST_SIZE_MATCH(xAppleWMSetWindowMenuCheckReq);
X11ApplicationSetWindowMenuCheck(stuff->index);
return Success;
@@ -414,11 +417,11 @@ ProcAppleWMSetWindowMenuCheck(
static int
ProcAppleWMSetFrontProcess(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST_SIZE_MATCH(xAppleWMSetFrontProcessReq);
-
+
X11ApplicationSetFrontProcess();
return Success;
}
@@ -429,22 +432,22 @@ ProcAppleWMSetWindowLevel(register ClientPtr client)
REQUEST(xAppleWMSetWindowLevelReq);
WindowPtr pWin;
int err;
-
+
REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq);
-
+
if (Success != dixLookupWindow(&pWin, stuff->window, client,
- DixReadAccess))
+ DixReadAccess))
return BadValue;
-
+
if (stuff->level >= AppleWMNumWindowLevels) {
return BadValue;
}
-
- err = appleWMProcs->SetWindowLevel(pWin, stuff->level);
- if (err != Success) {
+
+ err = appleWMProcs->SetWindowLevel(pWin, stuff->level);
+ if (err != Success) {
return err;
}
-
+
return Success;
}
@@ -458,12 +461,12 @@ ProcAppleWMSendPSN(register ClientPtr client)
if(!appleWMProcs->SendPSN)
return BadRequest;
-
+
err = appleWMProcs->SendPSN(stuff->psn_hi, stuff->psn_lo);
if (err != Success) {
return err;
}
-
+
return Success;
}
@@ -478,191 +481,191 @@ ProcAppleWMAttachTransient(register ClientPtr client)
if(!appleWMProcs->AttachTransient)
return BadRequest;
-
+
if (Success != dixLookupWindow(&pWinChild, stuff->child, client, DixReadAccess))
return BadValue;
-
+
if(stuff->parent) {
if(Success != dixLookupWindow(&pWinParent, stuff->parent, client, DixReadAccess))
return BadValue;
} else {
pWinParent = NULL;
}
-
+
err = appleWMProcs->AttachTransient(pWinChild, pWinParent);
if (err != Success) {
return err;
}
-
+
return Success;
}
static int
ProcAppleWMSetCanQuit(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST(xAppleWMSetCanQuitReq);
-
+
REQUEST_SIZE_MATCH(xAppleWMSetCanQuitReq);
-
+
X11ApplicationSetCanQuit(stuff->state);
return Success;
}
-
+
/* frame functions */
static int
ProcAppleWMFrameGetRect(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
xAppleWMFrameGetRectReply rep;
BoxRec ir, or, rr;
REQUEST(xAppleWMFrameGetRectReq);
-
+
REQUEST_SIZE_MATCH(xAppleWMFrameGetRectReq);
rep.type = X_Reply;
rep.length = 0;
rep.sequenceNumber = client->sequence;
-
+
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
-
+
if (appleWMProcs->FrameGetRect(stuff->frame_rect,
stuff->frame_class,
&or, &ir, &rr) != Success)
{
return BadValue;
}
-
+
rep.x = rr.x1;
rep.y = rr.y1;
rep.w = rr.x2 - rr.x1;
rep.h = rr.y2 - rr.y1;
-
+
WriteToClient(client, sizeof(xAppleWMFrameGetRectReply), (char *)&rep);
return Success;
}
static int
ProcAppleWMFrameHitTest(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
xAppleWMFrameHitTestReply rep;
BoxRec ir, or;
int ret;
REQUEST(xAppleWMFrameHitTestReq);
-
+
REQUEST_SIZE_MATCH(xAppleWMFrameHitTestReq);
rep.type = X_Reply;
rep.length = 0;
rep.sequenceNumber = client->sequence;
-
+
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
-
+
if (appleWMProcs->FrameHitTest(stuff->frame_class, stuff->px,
stuff->py, &or, &ir, &ret) != Success)
{
return BadValue;
}
-
+
rep.ret = ret;
-
+
WriteToClient(client, sizeof(xAppleWMFrameHitTestReply), (char *)&rep);
return Success;
}
static int
ProcAppleWMFrameDraw(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
BoxRec ir, or;
unsigned int title_length, title_max;
unsigned char *title_bytes;
REQUEST(xAppleWMFrameDrawReq);
WindowPtr pWin;
-
+
REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq);
-
+
if (Success != dixLookupWindow(&pWin, stuff->window, client,
- DixReadAccess))
+ DixReadAccess))
return BadValue;
-
+
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
-
+
title_length = stuff->title_length;
title_max = (stuff->length << 2) - sizeof(xAppleWMFrameDrawReq);
-
+
if (title_max < title_length)
return BadValue;
-
+
title_bytes = (unsigned char *) &stuff[1];
-
+
errno = appleWMProcs->FrameDraw(pWin, stuff->frame_class,
stuff->frame_attr, &or, &ir,
title_length, title_bytes);
if (errno != Success) {
return errno;
}
-
+
return Success;
}
-
+
/* dispatch */
static int
ProcAppleWMDispatch (
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST(xReq);
-
+
switch (stuff->data)
{
- case X_AppleWMQueryVersion:
- return ProcAppleWMQueryVersion(client);
+ case X_AppleWMQueryVersion:
+ return ProcAppleWMQueryVersion(client);
}
-
+
if (!LocalClient(client))
return WMErrorBase + AppleWMClientNotLocal;
-
+
switch (stuff->data)
{
- case X_AppleWMSelectInput:
- return ProcAppleWMSelectInput(client);
- case X_AppleWMDisableUpdate:
- return ProcAppleWMDisableUpdate(client);
- case X_AppleWMReenableUpdate:
- return ProcAppleWMReenableUpdate(client);
- case X_AppleWMSetWindowMenu:
- return ProcAppleWMSetWindowMenu(client);
- case X_AppleWMSetWindowMenuCheck:
- return ProcAppleWMSetWindowMenuCheck(client);
- case X_AppleWMSetFrontProcess:
- return ProcAppleWMSetFrontProcess(client);
- case X_AppleWMSetWindowLevel:
- return ProcAppleWMSetWindowLevel(client);
- case X_AppleWMSetCanQuit:
- return ProcAppleWMSetCanQuit(client);
- case X_AppleWMFrameGetRect:
- return ProcAppleWMFrameGetRect(client);
- case X_AppleWMFrameHitTest:
- return ProcAppleWMFrameHitTest(client);
- case X_AppleWMFrameDraw:
- return ProcAppleWMFrameDraw(client);
- case X_AppleWMSendPSN:
- return ProcAppleWMSendPSN(client);
- case X_AppleWMAttachTransient:
- return ProcAppleWMAttachTransient(client);
- default:
- return BadRequest;
+ case X_AppleWMSelectInput:
+ return ProcAppleWMSelectInput(client);
+ case X_AppleWMDisableUpdate:
+ return ProcAppleWMDisableUpdate(client);
+ case X_AppleWMReenableUpdate:
+ return ProcAppleWMReenableUpdate(client);
+ case X_AppleWMSetWindowMenu:
+ return ProcAppleWMSetWindowMenu(client);
+ case X_AppleWMSetWindowMenuCheck:
+ return ProcAppleWMSetWindowMenuCheck(client);
+ case X_AppleWMSetFrontProcess:
+ return ProcAppleWMSetFrontProcess(client);
+ case X_AppleWMSetWindowLevel:
+ return ProcAppleWMSetWindowLevel(client);
+ case X_AppleWMSetCanQuit:
+ return ProcAppleWMSetCanQuit(client);
+ case X_AppleWMFrameGetRect:
+ return ProcAppleWMFrameGetRect(client);
+ case X_AppleWMFrameHitTest:
+ return ProcAppleWMFrameHitTest(client);
+ case X_AppleWMFrameDraw:
+ return ProcAppleWMFrameDraw(client);
+ case X_AppleWMSendPSN:
+ return ProcAppleWMSendPSN(client);
+ case X_AppleWMAttachTransient:
+ return ProcAppleWMAttachTransient(client);
+ default:
+ return BadRequest;
}
}
@@ -677,8 +680,8 @@ SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to) {
static int
SProcAppleWMQueryVersion(
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST(xAppleWMQueryVersionReq);
swaps(&stuff->length);
@@ -687,35 +690,35 @@ SProcAppleWMQueryVersion(
static int
SProcAppleWMDispatch (
- register ClientPtr client
-)
+ register ClientPtr client
+ )
{
REQUEST(xReq);
-
+
/* It is bound to be non-local when there is byte swapping */
if (!LocalClient(client))
return WMErrorBase + AppleWMClientNotLocal;
-
+
/* only local clients are allowed WM access */
switch (stuff->data)
{
- case X_AppleWMQueryVersion:
- return SProcAppleWMQueryVersion(client);
- default:
- return BadRequest;
+ case X_AppleWMQueryVersion:
+ return SProcAppleWMQueryVersion(client);
+ default:
+ return BadRequest;
}
}
void
AppleWMExtensionInit(
- AppleWMProcsPtr procsPtr)
+ AppleWMProcsPtr procsPtr)
{
ExtensionEntry* extEntry;
-
+
ClientType = CreateNewResourceType(WMFreeClient, "WMClient");
EventType = CreateNewResourceType(WMFreeEvents, "WMEvent");
eventResource = FakeClientID(0);
-
+
if (ClientType && EventType &&
(extEntry = AddExtension(APPLEWMNAME,
AppleWMNumberEvents,