Imported Upstream version 1.15.1
[deb_xorg-server.git] / xfixes / saveset.c
1 /*
2 * Copyright © 2002 Keith Packard
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Keith Packard not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. Keith Packard makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
13 *
14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
21 */
22
23 #ifdef HAVE_DIX_CONFIG_H
24 #include <dix-config.h>
25 #endif
26
27 #include "xfixesint.h"
28
29 int
30 ProcXFixesChangeSaveSet(ClientPtr client)
31 {
32 Bool toRoot, map;
33 int result;
34 WindowPtr pWin;
35
36 REQUEST(xXFixesChangeSaveSetReq);
37
38 REQUEST_SIZE_MATCH(xXFixesChangeSaveSetReq);
39 result = dixLookupWindow(&pWin, stuff->window, client, DixManageAccess);
40 if (result != Success)
41 return result;
42 if (client->clientAsMask == (CLIENT_BITS(pWin->drawable.id)))
43 return BadMatch;
44 if ((stuff->mode != SetModeInsert) && (stuff->mode != SetModeDelete)) {
45 client->errorValue = stuff->mode;
46 return BadValue;
47 }
48 if ((stuff->target != SaveSetNearest) && (stuff->target != SaveSetRoot)) {
49 client->errorValue = stuff->target;
50 return BadValue;
51 }
52 if ((stuff->map != SaveSetMap) && (stuff->map != SaveSetUnmap)) {
53 client->errorValue = stuff->map;
54 return BadValue;
55 }
56 toRoot = (stuff->target == SaveSetRoot);
57 map = (stuff->map == SaveSetMap);
58 return AlterSaveSetForClient(client, pWin, stuff->mode, toRoot, map);
59 }
60
61 int
62 SProcXFixesChangeSaveSet(ClientPtr client)
63 {
64 REQUEST(xXFixesChangeSaveSetReq);
65
66 swaps(&stuff->length);
67 swapl(&stuff->window);
68 return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
69 }