|
|
1.1 root 1: /************************************************************
2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
4:
5: All Rights Reserved
6:
7: Permission to use, copy, modify, and distribute this software and its
8: documentation for any purpose and without fee is hereby granted,
9: provided that the above copyright notice appear in all copies and that
10: both that copyright notice and this permission notice appear in
11: supporting documentation, and that the names of Digital or MIT not be
12: used in advertising or publicity pertaining to distribution of the
13: software without specific, written prior permission.
14:
15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21: SOFTWARE.
22:
23: ********************************************************/
24:
25: /* $Header: inputstr.h,v 1.14 87/08/29 16:31:44 toddb Exp $ */
26:
27: #ifndef INPUTSTRUCT_H
28: #define INPUTSTRUCT_H
29:
30: #include "input.h"
31: #include "window.h"
32: #include "dixstruct.h"
33:
34: typedef struct _OtherClients {
35: OtherClientsPtr next;
36: ClientPtr client; /* which client is slecting on this window */
37: int resource; /* id for putting into resource manager */
38: long mask;
39: } OtherClients;
40:
41: typedef struct _DeviceIntRec *DeviceIntPtr;
42:
43: /*
44: * The following structure gets used for both active and passive grabs. For
45: * active grabs some of the fields (e.g. modifiers) are not used. However,
46: * that is not much waste since there are at most 2 active grabs (keyboard
47: * and pointer) going at once in the server.
48: */
49:
50: #define MasksPerDetailMask 8 /* 256 keycodes and 256 possible
51: modifier combinations, but only
52: 3 buttons. */
53:
54: typedef struct _DetailRec { /* Grab details may be bit masks */
55: int exact;
56: Mask *pMask;
57: } DetailRec;
58:
59: typedef struct _GrabRec {
60: GrabPtr next; /* for chain of passive grabs */
61: int resource;
62: ClientPtr client;
63: DeviceIntPtr device;
64: WindowPtr window;
65: Bool ownerEvents;
66: Bool keyboardMode, pointerMode;
67: DetailRec modifiersDetail;
68: Mask eventMask;
69: union {
70: struct {
71: DetailRec buttonDetail;
72: WindowPtr confineTo;
73: CursorPtr cursor;
74: } ptr;
75: struct {
76: DetailRec keyDetail;
77: } keybd;
78: } u;
79: } GrabRec;
80:
81: typedef struct {
82: WindowPtr win;
83: int revert;
84: TimeStamp time;
85: } FocusRec, *FocusPtr;
86:
87: /* states for devices */
88:
89: #define NOT_GRABBED 0
90: #define THAWED 1
91: #define THAWED_BOTH 2 /* not a real state */
92: #define FREEZE_NEXT_EVENT 3
93: #define FREEZE_BOTH_NEXT_EVENT 4
94: #define FROZEN 5 /* any state >= has device frozen */
95: #define FROZEN_NO_EVENT 5
96: #define FROZEN_WITH_EVENT 6
97:
98: typedef struct _DeviceIntRec {
99: DeviceRec public;
100: TimeStamp grabTime;
101: Bool startup; /* true if needs to be turned on at
102: server intialization time */
103: DeviceProc deviceProc; /* proc(DevicePtr, DEVICE_??). It is
104: used to initialize, turn on, or
105: turn off the device */
106: Bool inited; /* TRUE if INIT returns Success */
107: GrabPtr grab; /* the grabber - used by DIX */
108: struct {
109: Bool frozen;
110: int state;
111: GrabPtr other; /* if other grab has this frozen */
112: xEvent event; /* saved to be replayed */
113: } sync;
114: BYTE down[DOWN_LENGTH];
115: union {
116: struct {
117: /* here we store a bitmask for each key of the modifiers it sets */
118: CARD8 modifierMap[MAP_LENGTH];
119: KeybdCtrl ctrl;
120: void (*BellProc) ();
121: void (*CtrlProc) ();
122: FocusRec focus;
123: Bool passiveGrab;
124: } keybd;
125: struct {
126: PtrCtrl ctrl;
127: void (*CtrlProc) ();
128: int (*GetMotionProc) ();
129: Bool autoReleaseGrab; /* any button delivery */
130: BYTE map[MAP_LENGTH];
131: int mapLength; /* valid entries in the map */
132: } ptr;
133: struct {
134: FocusRec focus;
135: BYTE map[MAP_LENGTH];
136: int mapLength; /* valid entries in the map */
137: } other;
138: } u;
139: } DeviceIntRec;
140:
141: typedef struct {
142: int numMotionEvents;
143: int numDevices;
144: int arraySize;
145: DeviceIntPtr *devices; /* all the devices (including below) */
146: DeviceIntPtr keyboard; /* the main one for the server */
147: DeviceIntPtr pointer;
148: } InputInfo;
149:
150: /* for keeping the events for devices grabbed synchronously */
151: typedef struct _QdEvent *QdEventPtr;
152: typedef struct _QdEvent {
153: QdEventPtr forw;
154: QdEventPtr back;
155: DeviceIntPtr device;
156: xEvent event;
157: } QdEventRec;
158:
159: #endif /* INPUTSTRUCT_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.