diff options
Diffstat (limited to 'xorg-server/hw/xquartz/applewm.c')
-rw-r--r-- | xorg-server/hw/xquartz/applewm.c | 301 |
1 files changed, 135 insertions, 166 deletions
diff --git a/xorg-server/hw/xquartz/applewm.c b/xorg-server/hw/xquartz/applewm.c index 55976c454..70fb60a18 100644 --- a/xorg-server/hw/xquartz/applewm.c +++ b/xorg-server/hw/xquartz/applewm.c @@ -64,38 +64,41 @@ static Atom func (void) { \ } DEFINE_ATOM_HELPER(xa_native_screen_origin, "_NATIVE_SCREEN_ORIGIN") -DEFINE_ATOM_HELPER (xa_apple_no_order_in, "_APPLE_NO_ORDER_IN") + DEFINE_ATOM_HELPER(xa_apple_no_order_in, "_APPLE_NO_ORDER_IN") static AppleWMProcsPtr appleWMProcs; static int WMErrorBase; - static unsigned char WMReqCode = 0; static int WMEventBase = 0; -static RESTYPE ClientType, EventType; /* resource types for event masks */ +static RESTYPE ClientType, EventType; /* resource types for event masks */ static XID eventResource; /* Currently selected events */ static unsigned int eventMask = 0; -static int WMFreeClient (pointer data, XID id); -static int WMFreeEvents (pointer data, XID id); -static void SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to); +static int +WMFreeClient(pointer data, XID id); +static int +WMFreeEvents(pointer data, XID id); +static void +SNotifyEvent(xAppleWMNotifyEvent * from, xAppleWMNotifyEvent * to); typedef struct _WMEvent *WMEventPtr; typedef struct _WMEvent { - WMEventPtr next; - ClientPtr client; - XID clientResource; - unsigned int mask; + WMEventPtr next; + ClientPtr client; + XID clientResource; + unsigned int mask; } WMEventRec; static inline BoxRec -make_box (int x, int y, int w, int h) +make_box(int x, int y, int w, int h) { BoxRec r; + r.x1 = x; r.y1 = y; r.x2 = x + w; @@ -105,9 +108,7 @@ 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 -) +AppleWMSetScreenOrigin(WindowPtr pWin) { int32_t data[2]; @@ -115,7 +116,7 @@ AppleWMSetScreenOrigin( 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 @@ -123,9 +124,7 @@ AppleWMSetScreenOrigin( be mapped but remain ordered-out until the animation completes (when the Dock will order them in). */ Bool -AppleWMDoReorderWindow( - WindowPtr pWin -) +AppleWMDoReorderWindow(WindowPtr pWin) { Atom atom; PropertyPtr prop; @@ -133,18 +132,15 @@ AppleWMDoReorderWindow( atom = xa_apple_no_order_in(); rc = dixLookupProperty(&prop, pWin, atom, serverClient, DixReadAccess); - - if(Success == rc && prop->type == atom) - return 0; - + + if (Success == rc && prop->type == atom) + return 0; + return 1; } - static int -ProcAppleWMQueryVersion( - register ClientPtr client -) +ProcAppleWMQueryVersion(register ClientPtr client) { xAppleWMQueryVersionReply rep; @@ -159,15 +155,14 @@ ProcAppleWMQueryVersion( swaps(&rep.sequenceNumber); swapl(&rep.length); } - WriteToClient(client, sizeof(xAppleWMQueryVersionReply), (char *)&rep); + WriteToClient(client, sizeof(xAppleWMQueryVersionReply), (char *) &rep); return Success; } - /* events */ static inline void -updateEventMask (WMEventPtr *pHead) +updateEventMask(WMEventPtr * pHead) { WMEventPtr pCur; @@ -176,18 +171,21 @@ updateEventMask (WMEventPtr *pHead) eventMask |= pCur->mask; } -/*ARGSUSED*/ -static int -WMFreeClient (pointer data, XID id) { - WMEventPtr pEvent; - WMEventPtr *pHead, pCur, pPrev; + /*ARGSUSED*/ static int +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); + i = dixLookupResourceByType((pointer *) &pHead, eventResource, EventType, + serverClient, + DixReadAccess | DixWriteAccess | + DixDestroyAccess); if (i == Success && pHead) { pPrev = 0; - for (pCur = *pHead; pCur && pCur != pEvent; pCur=pCur->next) + for (pCur = *pHead; pCur && pCur != pEvent; pCur = pCur->next) pPrev = pCur; if (pCur) { if (pPrev) @@ -195,21 +193,21 @@ WMFreeClient (pointer data, XID id) { else *pHead = pEvent->next; } - updateEventMask (pHead); + updateEventMask(pHead); } free((pointer) pEvent); return 1; } -/*ARGSUSED*/ -static int -WMFreeEvents (pointer data, XID id) { - WMEventPtr *pHead, pCur, pNext; + /*ARGSUSED*/ static int +WMFreeEvents(pointer data, XID id) +{ + WMEventPtr *pHead, pCur, pNext; pHead = (WMEventPtr *) data; for (pCur = *pHead; pCur; pCur = pNext) { pNext = pCur->next; - FreeResource (pCur->clientResource, ClientType); + FreeResource(pCur->clientResource, ClientType); free((pointer) pCur); } free((pointer) pHead); @@ -218,31 +216,30 @@ WMFreeEvents (pointer data, XID id) { } static int -ProcAppleWMSelectInput (register ClientPtr client) +ProcAppleWMSelectInput(register ClientPtr client) { REQUEST(xAppleWMSelectInputReq); - WMEventPtr pEvent, pNewEvent, *pHead; - XID clientResource; - int i; + WMEventPtr pEvent, pNewEvent, *pHead; + XID clientResource; + int i; - REQUEST_SIZE_MATCH (xAppleWMSelectInputReq); - i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, client, DixWriteAccess); + REQUEST_SIZE_MATCH(xAppleWMSelectInputReq); + i = dixLookupResourceByType((pointer *) &pHead, eventResource, EventType, + client, DixWriteAccess); if (stuff->mask != 0) { if (i == Success && pHead) { /* check for existing entry. */ - for (pEvent = *pHead; pEvent; pEvent = pEvent->next) - { - if (pEvent->client == client) - { + for (pEvent = *pHead; pEvent; pEvent = pEvent->next) { + if (pEvent->client == client) { pEvent->mask = stuff->mask; - updateEventMask (pHead); + updateEventMask(pHead); return Success; } } } /* build the entry */ - pNewEvent = (WMEventPtr) malloc(sizeof (WMEventRec)); + pNewEvent = (WMEventPtr) malloc(sizeof(WMEventRec)); if (!pNewEvent) return BadAlloc; pNewEvent->next = 0; @@ -252,9 +249,9 @@ ProcAppleWMSelectInput (register ClientPtr client) * add a resource that will be deleted when * the client goes away */ - clientResource = FakeClientID (client->index); + clientResource = FakeClientID(client->index); pNewEvent->clientResource = clientResource; - if (!AddResource (clientResource, ClientType, (pointer)pNewEvent)) + if (!AddResource(clientResource, ClientType, (pointer) pNewEvent)) return BadAlloc; /* * create a resource to contain a pointer to the list @@ -262,21 +259,20 @@ ProcAppleWMSelectInput (register ClientPtr client) * the list may be arbitrarily rearranged which cannot be * done through the resource database. */ - if (i != Success || !pHead) - { - pHead = (WMEventPtr *) malloc(sizeof (WMEventPtr)); + if (i != Success || !pHead) { + pHead = (WMEventPtr *) malloc(sizeof(WMEventPtr)); if (!pHead || - !AddResource (eventResource, EventType, (pointer)pHead)) - { - FreeResource (clientResource, RT_NONE); + !AddResource(eventResource, EventType, (pointer) pHead)) { + FreeResource(clientResource, RT_NONE); return BadAlloc; } *pHead = 0; } pNewEvent->next = *pHead; *pHead = pNewEvent; - updateEventMask (pHead); - } else if (stuff->mask == 0) { + updateEventMask(pHead); + } + else if (stuff->mask == 0) { /* delete the interest */ if (i == Success && pHead) { pNewEvent = 0; @@ -286,16 +282,17 @@ ProcAppleWMSelectInput (register ClientPtr client) pNewEvent = pEvent; } if (pEvent) { - FreeResource (pEvent->clientResource, ClientType); + FreeResource(pEvent->clientResource, ClientType); if (pNewEvent) pNewEvent->next = pEvent->next; else *pHead = pEvent->next; free(pEvent); - updateEventMask (pHead); + updateEventMask(pHead); } } - } else { + } + else { client->errorValue = stuff->mask; return BadValue; } @@ -307,12 +304,14 @@ ProcAppleWMSelectInput (register ClientPtr client) */ void -AppleWMSendEvent (int type, unsigned int mask, int which, int arg) { - WMEventPtr *pHead, pEvent; +AppleWMSendEvent(int type, unsigned int mask, int which, int arg) +{ + WMEventPtr *pHead, pEvent; xAppleWMNotifyEvent se; - int i; + int i; - i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, serverClient, DixReadAccess); + i = dixLookupResourceByType((pointer *) &pHead, eventResource, EventType, + serverClient, DixReadAccess); if (i != Success || !pHead) return; for (pEvent = *pHead; pEvent; pEvent = pEvent->next) { @@ -322,24 +321,21 @@ AppleWMSendEvent (int type, unsigned int mask, int which, int arg) { se.kind = which; se.arg = arg; se.time = currentTime.milliseconds; - WriteEventsToClient (pEvent->client, 1, (xEvent *) &se); + WriteEventsToClient(pEvent->client, 1, (xEvent *) &se); } } /* Safe to call from any thread. */ unsigned int -AppleWMSelectedEvents (void) +AppleWMSelectedEvents(void) { return eventMask; } - /* general utility functions */ static int -ProcAppleWMDisableUpdate( - register ClientPtr client -) +ProcAppleWMDisableUpdate(register ClientPtr client) { REQUEST_SIZE_MATCH(xAppleWMDisableUpdateReq); @@ -349,9 +345,7 @@ ProcAppleWMDisableUpdate( } static int -ProcAppleWMReenableUpdate( - register ClientPtr client -) +ProcAppleWMReenableUpdate(register ClientPtr client) { REQUEST_SIZE_MATCH(xAppleWMReenableUpdateReq); @@ -359,41 +353,37 @@ ProcAppleWMReenableUpdate( return Success; } - /* window functions */ static int -ProcAppleWMSetWindowMenu( - register ClientPtr client -) +ProcAppleWMSetWindowMenu(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); + 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;) - { + for (i = j = 0; i < max_len && j < nitems;) { shortcuts[j] = bytes[i++]; items[j++] = bytes + i; - while (i < max_len) - { + while (i < max_len) { if (bytes[i++] == 0) break; } } - X11ApplicationSetWindowMenu (nitems, items, shortcuts); + X11ApplicationSetWindowMenu(nitems, items, shortcuts); free(items); free(shortcuts); @@ -401,9 +391,7 @@ ProcAppleWMSetWindowMenu( } static int -ProcAppleWMSetWindowMenuCheck( - register ClientPtr client -) +ProcAppleWMSetWindowMenuCheck(register ClientPtr client) { REQUEST(xAppleWMSetWindowMenuCheckReq); @@ -413,9 +401,7 @@ ProcAppleWMSetWindowMenuCheck( } static int -ProcAppleWMSetFrontProcess( - register ClientPtr client -) +ProcAppleWMSetFrontProcess(register ClientPtr client) { REQUEST_SIZE_MATCH(xAppleWMSetFrontProcessReq); @@ -432,16 +418,15 @@ ProcAppleWMSetWindowLevel(register ClientPtr client) REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq); - if (Success != dixLookupWindow(&pWin, stuff->window, client, - DixReadAccess)) + if (Success != dixLookupWindow(&pWin, stuff->window, client, 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; } @@ -453,10 +438,10 @@ ProcAppleWMSendPSN(register ClientPtr client) { REQUEST(xAppleWMSendPSNReq); int err; - + REQUEST_SIZE_MATCH(xAppleWMSendPSNReq); - - if(!appleWMProcs->SendPSN) + + if (!appleWMProcs->SendPSN) return BadRequest; err = appleWMProcs->SendPSN(stuff->psn_hi, stuff->psn_lo); @@ -471,21 +456,25 @@ static int ProcAppleWMAttachTransient(register ClientPtr client) { WindowPtr pWinChild, pWinParent; + REQUEST(xAppleWMAttachTransientReq); int err; - + REQUEST_SIZE_MATCH(xAppleWMAttachTransientReq); - - if(!appleWMProcs->AttachTransient) + + if (!appleWMProcs->AttachTransient) return BadRequest; - if (Success != dixLookupWindow(&pWinChild, stuff->child, client, DixReadAccess)) + if (Success != + dixLookupWindow(&pWinChild, stuff->child, client, DixReadAccess)) return BadValue; - if(stuff->parent) { - if(Success != dixLookupWindow(&pWinParent, stuff->parent, client, DixReadAccess)) + if (stuff->parent) { + if (Success != + dixLookupWindow(&pWinParent, stuff->parent, client, DixReadAccess)) return BadValue; - } else { + } + else { pWinParent = NULL; } @@ -498,9 +487,7 @@ ProcAppleWMAttachTransient(register ClientPtr client) } static int -ProcAppleWMSetCanQuit( - register ClientPtr client -) +ProcAppleWMSetCanQuit(register ClientPtr client) { REQUEST(xAppleWMSetCanQuitReq); @@ -509,17 +496,15 @@ ProcAppleWMSetCanQuit( X11ApplicationSetCanQuit(stuff->state); return Success; } - /* frame functions */ static int -ProcAppleWMFrameGetRect( - register ClientPtr client -) +ProcAppleWMFrameGetRect(register ClientPtr client) { xAppleWMFrameGetRectReply rep; BoxRec ir, or, rr; + REQUEST(xAppleWMFrameGetRectReq); REQUEST_SIZE_MATCH(xAppleWMFrameGetRectReq); @@ -527,13 +512,12 @@ ProcAppleWMFrameGetRect( 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); + 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) - { + &or, &ir, &rr) != Success) { return BadValue; } @@ -542,18 +526,17 @@ ProcAppleWMFrameGetRect( rep.w = rr.x2 - rr.x1; rep.h = rr.y2 - rr.y1; - WriteToClient(client, sizeof(xAppleWMFrameGetRectReply), (char *)&rep); + WriteToClient(client, sizeof(xAppleWMFrameGetRectReply), (char *) &rep); return Success; } static int -ProcAppleWMFrameHitTest( - register ClientPtr client -) +ProcAppleWMFrameHitTest(register ClientPtr client) { xAppleWMFrameHitTestReply rep; BoxRec ir, or; int ret; + REQUEST(xAppleWMFrameHitTestReq); REQUEST_SIZE_MATCH(xAppleWMFrameHitTestReq); @@ -561,40 +544,37 @@ ProcAppleWMFrameHitTest( 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); + 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) - { + stuff->py, &or, &ir, &ret) != Success) { return BadValue; } rep.ret = ret; - WriteToClient(client, sizeof(xAppleWMFrameHitTestReply), (char *)&rep); + WriteToClient(client, sizeof(xAppleWMFrameHitTestReply), (char *) &rep); return Success; } static int -ProcAppleWMFrameDraw( - register ClientPtr client -) +ProcAppleWMFrameDraw(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)) + if (Success != dixLookupWindow(&pWin, stuff->window, client, 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); + 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); @@ -613,19 +593,15 @@ ProcAppleWMFrameDraw( return Success; } - /* dispatch */ static int -ProcAppleWMDispatch ( - register ClientPtr client -) +ProcAppleWMDispatch(register ClientPtr client) { REQUEST(xReq); - switch (stuff->data) - { + switch (stuff->data) { case X_AppleWMQueryVersion: return ProcAppleWMQueryVersion(client); } @@ -633,8 +609,7 @@ ProcAppleWMDispatch ( if (!LocalClient(client)) return WMErrorBase + AppleWMClientNotLocal; - switch (stuff->data) - { + switch (stuff->data) { case X_AppleWMSelectInput: return ProcAppleWMSelectInput(client); case X_AppleWMDisableUpdate: @@ -667,18 +642,17 @@ ProcAppleWMDispatch ( } static void -SNotifyEvent(xAppleWMNotifyEvent *from, xAppleWMNotifyEvent *to) { +SNotifyEvent(xAppleWMNotifyEvent * from, xAppleWMNotifyEvent * to) +{ to->type = from->type; to->kind = from->kind; - cpswaps (from->sequenceNumber, to->sequenceNumber); - cpswapl (from->time, to->time); - cpswapl (from->arg, to->arg); + cpswaps(from->sequenceNumber, to->sequenceNumber); + cpswapl(from->time, to->time); + cpswapl(from->arg, to->arg); } static int -SProcAppleWMQueryVersion( - register ClientPtr client -) +SProcAppleWMQueryVersion(register ClientPtr client) { REQUEST(xAppleWMQueryVersionReq); swaps(&stuff->length); @@ -686,9 +660,7 @@ SProcAppleWMQueryVersion( } static int -SProcAppleWMDispatch ( - register ClientPtr client -) +SProcAppleWMDispatch(register ClientPtr client) { REQUEST(xReq); @@ -697,8 +669,7 @@ SProcAppleWMDispatch ( return WMErrorBase + AppleWMClientNotLocal; /* only local clients are allowed WM access */ - switch (stuff->data) - { + switch (stuff->data) { case X_AppleWMQueryVersion: return SProcAppleWMQueryVersion(client); default: @@ -707,10 +678,9 @@ SProcAppleWMDispatch ( } void -AppleWMExtensionInit( - AppleWMProcsPtr procsPtr) +AppleWMExtensionInit(AppleWMProcsPtr procsPtr) { - ExtensionEntry* extEntry; + ExtensionEntry *extEntry; ClientType = CreateNewResourceType(WMFreeClient, "WMClient"); EventType = CreateNewResourceType(WMFreeEvents, "WMEvent"); @@ -722,14 +692,13 @@ AppleWMExtensionInit( AppleWMNumberErrors, ProcAppleWMDispatch, SProcAppleWMDispatch, - NULL, - StandardMinorOpcode))) - { + NULL, StandardMinorOpcode))) { size_t i; - WMReqCode = (unsigned char)extEntry->base; + + WMReqCode = (unsigned char) extEntry->base; WMErrorBase = extEntry->errorBase; WMEventBase = extEntry->eventBase; - for (i=0; i < AppleWMNumberEvents; i++) + for (i = 0; i < AppleWMNumberEvents; i++) EventSwapVector[WMEventBase + i] = (EventSwapPtr) SNotifyEvent; appleWMProcs = procsPtr; } |