XFree86 4.3.0.1

This commit is contained in:
Kaleb Keithley 2003-11-14 16:49:22 +00:00
commit d568221710
438 changed files with 42562 additions and 37394 deletions

View file

@ -44,6 +44,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
********************************************************/
/* $XFree86: xc/programs/Xserver/Xi/exevents.c,v 3.10 2001/12/14 19:58:55 dawes Exp $ */
/********************************************************************
*
@ -62,6 +63,14 @@ SOFTWARE.
#include "windowstr.h"
#include "miscstruct.h"
#include "region.h"
#include "exevents.h"
#include "extnsionst.h"
#include "extinit.h" /* LookupDeviceIntRec */
#include "exglobals.h"
#include "dixevents.h" /* DeliverFocusedEvent */
#include "dixgrabs.h" /* CreateGrab() */
#include "chgptr.h"
#define WID(w) ((w) ? ((w)->drawable.id) : 0)
#define AllModifiersMask ( \
@ -72,24 +81,17 @@ SOFTWARE.
#define Motion_Filter(class) (DevicePointerMotionMask | \
(class)->state | (class)->motionMask)
void ActivateKeyboardGrab();
void DeactivateKeyboardGrab();
void ProcessOtherEvent();
void RecalculateDeviceDeliverableEvents();
static Bool ShouldFreeInputMasks();
static Bool MakeInputMasks ();
extern int DeviceKeyPress;
extern int DeviceButtonPress;
extern int DeviceValuator;
extern Mask DevicePointerMotionMask;
extern Mask DeviceMappingNotifyMask;
extern Mask DeviceButtonMotionMask;
extern Mask DeviceButtonGrabMask;
extern Mask DeviceOwnerGrabButtonMask;
extern Mask PropagateMask[];
extern WindowPtr GetSpriteWindow();
extern InputInfo inputInfo;
extern int RT_INPUTCLIENT;
static Bool ShouldFreeInputMasks(
#if NeedFunctionPrototypes
WindowPtr /* pWin */,
Bool /* ignoreSelectedEvents */
#endif
);
static Bool MakeInputMasks (
#if NeedFunctionPrototypes
WindowPtr /* pWin */
#endif
);
/**************************************************************************
*
@ -99,47 +101,40 @@ extern int RT_INPUTCLIENT;
void
RegisterOtherDevice (device)
DevicePtr device;
DeviceIntPtr device;
{
device->processInputProc = ProcessOtherEvent;
device->realInputProc = ProcessOtherEvent;
((DeviceIntPtr)device)->ActivateGrab = ActivateKeyboardGrab;
((DeviceIntPtr)device)->DeactivateGrab = DeactivateKeyboardGrab;
device->public.processInputProc = ProcessOtherEvent;
device->public.realInputProc = ProcessOtherEvent;
(device)->ActivateGrab = ActivateKeyboardGrab;
(device)->DeactivateGrab = DeactivateKeyboardGrab;
}
extern int DeviceMotionNotify;
/*ARGSUSED*/
void
ProcessOtherEvent (xE, other, count)
deviceKeyButtonPointer *xE;
xEventPtr xE;
register DeviceIntPtr other;
int count;
{
extern int DeviceKeyRelease;
extern int DeviceButtonRelease;
extern int ProximityIn;
extern int ProximityOut;
register BYTE *kptr;
register int i;
register CARD16 modifiers;
register CARD16 mask;
GrabPtr grab = other->grab;
Bool deactivateDeviceGrab = FALSE;
int key, bit, rootX, rootY;
int key = 0, bit = 0, rootX, rootY;
ButtonClassPtr b = other->button;
KeyClassPtr k = other->key;
ValuatorClassPtr v = other->valuator;
void NoticeEventTime();
deviceValuator *xV = (deviceValuator *) xE;
if (xE->type != DeviceValuator) {
if (xE->u.u.type != DeviceValuator) {
GetSpritePosition(&rootX, &rootY);
xE->root_x = rootX;
xE->root_y = rootY;
key = xE->detail;
xE->u.keyButtonPointer.rootX = rootX;
xE->u.keyButtonPointer.rootY = rootY;
key = xE->u.u.detail;
NoticeEventTime(xE);
xE->state = inputInfo.keyboard->key->state |
xE->u.keyButtonPointer.state = inputInfo.keyboard->key->state |
inputInfo.pointer->button->state;
bit = 1 << (key & 7);
}
@ -186,7 +181,7 @@ ProcessOtherEvent (xE, other, count)
}
}
if (xE->type == DeviceKeyPress)
if (xE->u.u.type == DeviceKeyPress)
{
modifiers = k->modifierMap[key];
kptr = &k->down[key >> 3];
@ -194,9 +189,9 @@ ProcessOtherEvent (xE, other, count)
{
if (!modifiers)
{
xE->type = DeviceKeyRelease;
xE->u.u.type = DeviceKeyRelease;
ProcessOtherEvent(xE, other, count);
xE->type = DeviceKeyPress;
xE->u.u.type = DeviceKeyPress;
/* release can have side effects, don't fall through */
ProcessOtherEvent(xE, other, count);
}
@ -222,7 +217,7 @@ ProcessOtherEvent (xE, other, count)
return;
}
}
else if (xE->type == DeviceKeyRelease)
else if (xE->u.u.type == DeviceKeyRelease)
{
kptr = &k->down[key >> 3];
if (!(*kptr & bit)) /* guard against duplicates */
@ -249,7 +244,7 @@ ProcessOtherEvent (xE, other, count)
if (other->fromPassiveGrab && (key == other->activatingKey))
deactivateDeviceGrab = TRUE;
}
else if (xE->type == DeviceButtonPress)
else if (xE->u.u.type == DeviceButtonPress)
{
kptr = &b->down[key >> 3];
*kptr |= bit;
@ -257,18 +252,18 @@ ProcessOtherEvent (xE, other, count)
other->valuator->motionHintWindow = NullWindow;
b->buttonsDown++;
b->motionMask = DeviceButtonMotionMask;
xE->detail = b->map[key];
if (xE->detail == 0)
xE->u.u.detail = b->map[key];
if (xE->u.u.detail == 0)
return;
if (xE->detail <= 5)
b->state |= (Button1Mask >> 1) << xE->detail;
if (xE->u.u.detail <= 5)
b->state |= (Button1Mask >> 1) << xE->u.u.detail;
SetMaskForEvent(Motion_Filter(b),DeviceMotionNotify);
if (!grab)
if (CheckDeviceGrabs(other, xE, 0, count))
return;
}
else if (xE->type == DeviceButtonRelease)
else if (xE->u.u.type == DeviceButtonRelease)
{
kptr = &b->down[key >> 3];
*kptr &= ~bit;
@ -276,18 +271,18 @@ ProcessOtherEvent (xE, other, count)
other->valuator->motionHintWindow = NullWindow;
if (!--b->buttonsDown)
b->motionMask = 0;
xE->detail = b->map[key];
if (xE->detail == 0)
xE->u.u.detail = b->map[key];
if (xE->u.u.detail == 0)
return;
if (xE->detail <= 5)
b->state &= ~((Button1Mask >> 1) << xE->detail);
if (xE->u.u.detail <= 5)
b->state &= ~((Button1Mask >> 1) << xE->u.u.detail);
SetMaskForEvent(Motion_Filter(b),DeviceMotionNotify);
if (!b->state && other->fromPassiveGrab)
deactivateDeviceGrab = TRUE;
}
else if (xE->type == ProximityIn)
else if (xE->u.u.type == ProximityIn)
other->valuator->mode &= ~OutOfProximity;
else if (xE->type == ProximityOut)
else if (xE->u.u.type == ProximityOut)
other->valuator->mode |= OutOfProximity;
if (grab)
@ -302,9 +297,9 @@ ProcessOtherEvent (xE, other, count)
(*other->DeactivateGrab)(other);
}
InitProximityClassDeviceStruct(dev)
DeviceIntPtr dev;
{
int
InitProximityClassDeviceStruct( DeviceIntPtr dev)
{
register ProximityClassPtr proxc;
proxc = (ProximityClassPtr)xalloc(sizeof(ProximityClassRec));
@ -312,15 +307,17 @@ InitProximityClassDeviceStruct(dev)
return FALSE;
dev->proximity = proxc;
return TRUE;
}
}
InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution, min_res, max_res)
DeviceIntPtr dev;
int axnum;
int minval;
int maxval;
int resolution;
{
void
InitValuatorAxisStruct( DeviceIntPtr dev,
int axnum,
int minval,
int maxval,
int resolution,
int min_res,
int max_res )
{
register AxisInfoPtr ax = dev->valuator->axes + axnum;
ax->min_value = minval;
@ -328,18 +325,27 @@ InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution, min_res, max_res)
ax->resolution = resolution;
ax->min_resolution = min_res;
ax->max_resolution = max_res;
}
}
static void FixDeviceStateNotify (dev, ev, k, b, v, first)
static void
#if NeedFunctionPrototypes
FixDeviceStateNotify (
DeviceIntPtr dev,
deviceStateNotify *ev,
KeyClassPtr k,
ButtonClassPtr b,
ValuatorClassPtr v,
int first)
#else
FixDeviceStateNotify (dev, ev, k, b, v, first)
DeviceIntPtr dev;
deviceStateNotify *ev;
KeyClassPtr k;
ButtonClassPtr b;
ValuatorClassPtr v;
int first;
{
extern int DeviceStateNotify;
#endif
{
ev->type = DeviceStateNotify;
ev->deviceid = dev->id;
ev->time = currentTime.milliseconds;
@ -376,12 +382,21 @@ static void FixDeviceStateNotify (dev, ev, k, b, v, first)
}
}
static void FixDeviceValuator (dev, ev, v, first)
static void
#if NeedFunctionPrototypes
FixDeviceValuator (
DeviceIntPtr dev,
deviceValuator *ev,
ValuatorClassPtr v,
int first)
#else
FixDeviceValuator (dev, ev, v, first)
DeviceIntPtr dev;
deviceValuator *ev;
ValuatorClassPtr v;
int first;
{
#endif
{
int nval = v->numAxes - first;
ev->type = DeviceValuator;
@ -400,18 +415,12 @@ static void FixDeviceValuator (dev, ev, v, first)
first += ev->num_valuators;
}
void
DeviceFocusEvent(dev, type, mode, detail, pWin)
DeviceIntPtr dev;
int type, mode, detail;
register WindowPtr pWin;
{
extern int DeviceFocusIn;
extern int DeviceFocusOut;
extern int DeviceKeyStateNotify;
extern int DeviceButtonStateNotify;
extern int DeviceValuatorStateNotify;
extern Mask DeviceStateNotifyMask;
extern Mask DeviceFocusChangeMask;
deviceFocus event;
if (type == FocusIn)
@ -426,15 +435,13 @@ DeviceFocusEvent(dev, type, mode, detail, pWin)
event.window = pWin->drawable.id;
event.time = currentTime.milliseconds;
(void)
DeliverEventsToWindow(pWin, &event, 1, DeviceFocusChangeMask, NullGrab,
dev->id);
(void) DeliverEventsToWindow(pWin, (xEvent *)&event, 1,
DeviceFocusChangeMask, NullGrab, dev->id);
if ((type == DeviceFocusIn) &&
(wOtherInputMasks(pWin)) &&
(wOtherInputMasks(pWin)->inputEvents[dev->id] & DeviceStateNotifyMask))
{
int i,j;
int evcount = 1;
deviceStateNotify *ev, *sev;
deviceKeyStateNotify *kev;
@ -518,19 +525,34 @@ DeviceFocusEvent(dev, type, mode, detail, pWin)
nval -= 3;
if (nval > 0) {
(ev-1)->deviceid |= MORE_EVENTS;
FixDeviceValuator (dev, ev++, v, first);
FixDeviceValuator (dev, (deviceValuator *) ev++, v, first);
first += 3;
nval -= 3;
}
}
(void) DeliverEventsToWindow(pWin, sev, evcount, DeviceStateNotifyMask,
NullGrab, dev->id);
(void) DeliverEventsToWindow(pWin, (xEvent *)sev, evcount,
DeviceStateNotifyMask, NullGrab, dev->id);
xfree (sev);
}
}
int
#if NeedFunctionPrototypes
GrabButton(
ClientPtr client,
DeviceIntPtr dev,
BYTE this_device_mode,
BYTE other_devices_mode,
CARD16 modifiers,
DeviceIntPtr modifier_device,
CARD8 button,
Window grabWindow,
BOOL ownerEvents,
Cursor rcursor,
Window rconfineTo,
Mask eventMask)
#else
GrabButton(client, dev, this_device_mode, other_devices_mode, modifiers,
modifier_device, button, grabWindow, ownerEvents, rcursor, rconfineTo,
eventMask)
@ -546,11 +568,10 @@ GrabButton(client, dev, this_device_mode, other_devices_mode, modifiers,
Cursor rcursor;
Window rconfineTo;
Mask eventMask;
#endif
{
WindowPtr pWin, confineTo;
CursorPtr cursor;
GrabPtr CreateGrab();
GrabPtr grab;
if ((this_device_mode != GrabModeSync) &&
@ -609,6 +630,19 @@ GrabButton(client, dev, this_device_mode, other_devices_mode, modifiers,
}
int
#if NeedFunctionPrototypes
GrabKey(
ClientPtr client,
DeviceIntPtr dev,
BYTE this_device_mode,
BYTE other_devices_mode,
CARD16 modifiers,
DeviceIntPtr modifier_device,
CARD8 key,
Window grabWindow,
BOOL ownerEvents,
Mask mask)
#else
GrabKey(client, dev, this_device_mode, other_devices_mode, modifiers,
modifier_device, key, grabWindow, ownerEvents, mask)
ClientPtr client;
@ -621,10 +655,9 @@ GrabKey(client, dev, this_device_mode, other_devices_mode, modifiers,
Window grabWindow;
BOOL ownerEvents;
Mask mask;
#endif
{
WindowPtr pWin;
GrabPtr CreateGrab();
GrabPtr grab;
KeyClassPtr k = dev->key;
@ -673,8 +706,6 @@ GrabKey(client, dev, this_device_mode, other_devices_mode, modifiers,
return AddPassiveGrabToList(grab);
}
extern Mask DevicePointerMotionHintMask;
int
SelectForWindow(dev, pWin, client, mask, exclusivemasks, validmasks)
DeviceIntPtr dev;
@ -803,7 +834,7 @@ RecalculateDeviceDeliverableEvents(pWin)
pChild = pWin;
while (1)
{
if (inputMasks = wOtherInputMasks(pChild))
if ((inputMasks = wOtherInputMasks(pChild)) != 0)
{
for (others = inputMasks->inputClients; others;
others = others->next)
@ -892,10 +923,10 @@ SendEvent (client, d, dest, propagate, ev, mask, count)
Bool propagate;
xEvent *ev;
Mask mask;
int count;
{
WindowPtr pWin;
WindowPtr effectiveFocus = NullWindow; /* only set if dest==InputFocus */
WindowPtr GetCurrentRootWindow();
WindowPtr spriteWin=GetSpriteWindow();
if (dest == PointerWindow)
@ -996,7 +1027,7 @@ SetModifierMapping(client, dev, len, rlen, numKeyPerModifier, inputMap, k)
KeyCode *inputMap;
KeyClassPtr *k;
{
KeyCode *map;
KeyCode *map = NULL;
int inputMapLen;
register int i;
@ -1070,15 +1101,22 @@ SetModifierMapping(client, dev, len, rlen, numKeyPerModifier, inputMap, k)
return(MappingSuccess);
}
int
void
#if NeedFunctionPrototypes
SendDeviceMappingNotify(
CARD8 request,
KeyCode firstKeyCode,
CARD8 count,
DeviceIntPtr dev)
#else
SendDeviceMappingNotify(request, firstKeyCode, count, dev)
CARD8 request, count;
KeyCode firstKeyCode;
DeviceIntPtr dev;
{
#endif
{
xEvent event;
deviceMappingNotify *ev = (deviceMappingNotify *) &event;
extern int DeviceMappingNotify;
ev->type = DeviceMappingNotify;
ev->request = request;
@ -1090,10 +1128,21 @@ SendDeviceMappingNotify(request, firstKeyCode, count, dev)
ev->count = count;
}
SendEventToAllWindows (dev, DeviceMappingNotifyMask, ev, 1);
SendEventToAllWindows (dev, DeviceMappingNotifyMask, (xEvent *)ev, 1);
}
int
#if NeedFunctionPrototypes
ChangeKeyMapping(
ClientPtr client,
DeviceIntPtr dev,
unsigned len,
int type,
KeyCode firstKeyCode,
CARD8 keyCodes,
CARD8 keySymsPerKeyCode,
KeySym *map)
#else
ChangeKeyMapping(client, dev, len, type, firstKeyCode, keyCodes,
keySymsPerKeyCode, map)
ClientPtr client;
@ -1104,6 +1153,7 @@ ChangeKeyMapping(client, dev, len, type, firstKeyCode, keyCodes,
CARD8 keyCodes;
CARD8 keySymsPerKeyCode;
KeySym *map;
#endif
{
KeySymsRec keysyms;
KeyClassPtr k = dev->key;
@ -1158,7 +1208,7 @@ DeleteWindowFromAnyExtEvents(pWin, freeResources)
DeleteDeviceFromAnyExtEvents(pWin, dev);
if (freeResources)
while (inputMasks = wOtherInputMasks(pWin))
while ((inputMasks = wOtherInputMasks(pWin)) != 0)
{
ic = inputMasks->inputClients;
for (i=0; i<EMASKSIZE; i++)
@ -1167,6 +1217,7 @@ DeleteWindowFromAnyExtEvents(pWin, freeResources)
}
}
void
DeleteDeviceFromAnyExtEvents(pWin, dev)
WindowPtr pWin;
DeviceIntPtr dev;
@ -1241,7 +1292,6 @@ MaybeSendDeviceMotionNotifyHint (pEvents, mask)
Mask mask;
{
DeviceIntPtr dev;
DeviceIntPtr LookupDeviceIntRec ();
dev = LookupDeviceIntRec (pEvents->deviceid & DEVICE_BITS);
if (pEvents->type == DeviceMotionNotify)
@ -1262,7 +1312,7 @@ MaybeSendDeviceMotionNotifyHint (pEvents, mask)
return (0);
}
int
void
CheckDeviceGrabAndHintWindow (pWin, type, xE, grab, client, deliveryMask)
WindowPtr pWin;
int type;
@ -1272,7 +1322,6 @@ CheckDeviceGrabAndHintWindow (pWin, type, xE, grab, client, deliveryMask)
Mask deliveryMask;
{
DeviceIntPtr dev;
DeviceIntPtr LookupDeviceIntRec ();
dev = LookupDeviceIntRec (xE->deviceid & DEVICE_BITS);
if (type == DeviceMotionNotify)