[PATCH 2/4] input: Provide Queue{Button|Keyboard|Proximity}Event helpers

Jeremy Huddleston jeremyhu at apple.com
Thu Apr 14 20:17:26 PDT 2011


Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

Why are *ProximityEvents not exported?

On Apr 14, 2011, at 7:47 PM, Peter Hutterer wrote:

> Don't require every caller to use GPE + mieqEnqueue, provide matching
> Queue...Event functions instead.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> dix/getevents.c                |   80 ++++++++++++++++++++++++++++++++++++++++
> hw/dmx/input/dmxevents.c       |   54 ++++++++-------------------
> hw/kdrive/src/kinput.c         |   18 ++------
> hw/xfree86/common/xf86Events.c |    6 +--
> hw/xfree86/common/xf86Xinput.c |   36 ++++-------------
> hw/xnest/Events.c              |   32 +++++-----------
> hw/xquartz/darwinEvents.c      |   20 +++------
> hw/xwin/winkeybd.c             |    6 +--
> hw/xwin/winmouse.c             |   15 ++-----
> include/input.h                |   21 ++++++++++
> 10 files changed, 155 insertions(+), 133 deletions(-)
> 
> diff --git a/dix/getevents.c b/dix/getevents.c
> index 0fa8046..5953bc1 100644
> --- a/dix/getevents.c
> +++ b/dix/getevents.c
> @@ -47,6 +47,7 @@
> #include "eventstr.h"
> #include "eventconvert.h"
> #include "inpututils.h"
> +#include "mi.h"
> 
> #include <X11/extensions/XKBproto.h>
> #include "xkbsrv.h"
> @@ -925,6 +926,39 @@ updateHistory(DeviceIntPtr dev, ValuatorMask *mask, CARD32 ms)
>     }
> }
> 
> +static void
> +queueEventList(DeviceIntPtr device, EventList *events, int nevents)
> +{
> +    int i;
> +
> +    for (i = 0; i < nevents; i++)
> +        mieqEnqueue(device, (InternalEvent*)((events + i)->event));
> +}
> +
> +/**
> + * Generate internal events representing this keyboard event and enqueue
> + * them on the event queue.
> + *
> + * FIXME: don't require the event list to be passed in.
> + * FIXME: flags for relative/abs motion?
> + *
> + * @param events Event list used as temporary storage
> + * @param device The device to generate the event for
> + * @param type Event type, one of KeyPress or KeyRelease
> + * @param keycode Key code of the pressed/released key
> + * @param mask Valuator mask for valuators present for this event.
> + *
> + */
> +void
> +QueueKeyboardEvents(EventList *events, DeviceIntPtr device, int type,
> +                    int keycode, const ValuatorMask *mask)
> +{
> +    int nevents;
> +
> +    nevents = GetKeyboardEvents(events, device, type, keycode, mask);
> +    queueEventList(device, events, nevents);
> +}
> +
> /**
>  * Returns a set of InternalEvents for KeyPress/KeyRelease, optionally
>  * also with valuator events.
> @@ -1072,6 +1106,30 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
> }
> 
> /**
> + * Generate internal events representing this pointer event and enqueue them
> + * on the event queue.
> + *
> + * FIXME: don't require the event list to be passed in.
> + *
> + * @param events Event list used as temporary storage
> + * @param device The device to generate the event for
> + * @param type Event type, one of ButtonPress, ButtonRelease, MotionNotify
> + * @param buttons Button number of the buttons modified. Must be 0 for
> + * MotionNotify
> + * @param flags Event modification flags
> + * @param mask Valuator mask for valuators present for this event.
> + */
> +void
> +QueuePointerEvents(EventList *events, DeviceIntPtr device, int type,
> +                   int buttons, int flags, const ValuatorMask *mask)
> +{
> +    int nevents;
> +
> +    nevents = GetPointerEvents(events, device, type, buttons, flags, mask);
> +    queueEventList(device, events, nevents);
> +}
> +
> +/**
>  * Generate a series of InternalEvents (filled into the EventList)
>  * representing pointer motion, or button presses.
>  *
> @@ -1215,6 +1273,28 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
>     return num_events;
> }
> 
> +/**
> + * Generate internal events representing this proximity event and enqueue
> + * them on the event queue.
> + *
> + * FIXME: don't require the event list to be passed in.
> + *
> + * @param events Event list used as temporary storage
> + * @param device The device to generate the event for
> + * @param type Event type, one of ProximityIn or ProximityOut
> + * @param keycode Key code of the pressed/released key
> + * @param mask Valuator mask for valuators present for this event.
> + *
> + */
> +void
> +QueueProximityEvents(EventList *events, DeviceIntPtr device, int type,
> +                     const ValuatorMask *mask)
> +{
> +    int nevents;
> +
> +    nevents = GetProximityEvents(events, device, type, mask);
> +    queueEventList(device, events, nevents);
> +}
> 
> /**
>  * Generate ProximityIn/ProximityOut InternalEvents, accompanied by
> diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
> index 15d80f5..3f9035c 100644
> --- a/hw/dmx/input/dmxevents.c
> +++ b/hw/dmx/input/dmxevents.c
> @@ -176,7 +176,7 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
> {
>     GETDMXLOCALFROMPDEV;
>     DeviceIntPtr p = dmxLocal->pDevice;
> -    int i, nevents, valuators[3];
> +    int valuators[3];
>     EventListPtr events;
>     int detail = 0;  /* XXX should this be mask of pressed buttons? */
>     ValuatorMask mask;
> @@ -185,10 +185,8 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
> 
>     valuator_mask_set_range(&mask, 0, 2, valuators);
>     GetEventList(&events);
> -    nevents = GetPointerEvents(events, p, MotionNotify, detail,
> -                               POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
> -    for (i = 0; i < nevents; i++)
> -       mieqEnqueue(p, (InternalEvent*)(events + i)->event);
> +    QueuePointerEvents(events, p, MotionNotify, detail,
> +                       POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
>     return;
> }
> 
> @@ -291,10 +289,8 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
>     deviceValuator         *xv     = (deviceValuator *)xev+1;
>     int                    thisX   = 0;
>     int                    thisY   = 0;
> -    int                    i;
>     int                    count;
>     EventListPtr           events;
> -    int                    nevents;
>     ValuatorMask           mask;
> 
>     memset(xE, 0, sizeof(xE));
> @@ -348,6 +344,7 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
>             }
>             count              = 2;
>     } else {
> +        int i;
>         for (i = 0, count = 0; i < axesCount; i += 6) {
>             xev->time          = GetTimeInMillis();
>             xev->type          = DeviceMotionNotify;
> @@ -376,10 +373,8 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
>         dmxSigioBlock();
>     valuator_mask_set_range(&mask, firstAxis, axesCount, v);
>     GetEventList(&events);
> -    nevents = GetPointerEvents(events, pDevice, MotionNotify, 0,
> -                               POINTER_ABSOLUTE, &mask);
> -    for (i = 0; i < nevents; i++)
> -        mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
> +    QueuePointerEvents(events, pDevice, MotionNotify, 0,
> +                       POINTER_ABSOLUTE, &mask);
> 
>     if (block)
>         dmxSigioUnblock();
> @@ -395,7 +390,6 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
>     DeviceIntPtr           pDevice = dmxLocal->pDevice;
>     int                    valuators[MAX_VALUATORS];
>     EventListPtr           events;
> -    int                    nevents, i;
>     ValuatorMask           mask;
> 
>     if (!e)
> @@ -453,11 +447,7 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
>         if (block)
>             dmxSigioBlock();
>         GetEventList(&events);
> -        nevents = GetKeyboardEvents(events, pDevice, event,
> -                                    ke->keycode, &mask);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
> -
> +        QueueKeyboardEvents(events, pDevice, event, ke->keycode, &mask);
>         if (block)
>             dmxSigioUnblock();
>         break;
> @@ -468,11 +458,8 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
>         if (block)
>             dmxSigioBlock();
>         GetEventList(&events);
> -        nevents = GetPointerEvents(events, pDevice, event, ke->keycode,
> -                                   POINTER_ABSOLUTE, &mask);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
> -
> +        QueuePointerEvents(events, pDevice, event, ke->keycode,
> +                           POINTER_ABSOLUTE, &mask);
>         if (block)
>             dmxSigioUnblock();
>         break;
> @@ -483,10 +470,7 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
>         if (block)
>             dmxSigioBlock();
>         GetEventList(&events);
> -        nevents = GetProximityEvents(events, pDevice, event, &mask);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
> -
> +        QueueProximityEvents(events, pDevice, event, &mask);
>         if (block)
>             dmxSigioUnblock();
>         break;
> @@ -667,7 +651,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
>     GETDMXINPUTFROMPDEV;
>     xEvent xE;
>     DeviceIntPtr p = dmxLocal->pDevice;
> -    int i, nevents, valuators[3];
> +    int valuators[3];
>     EventListPtr events;
>     ValuatorMask mask;
> 
> @@ -685,9 +669,7 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
> 
>         GetEventList(&events);
>         /*ErrorF("KEY %d  sym %d\n", detail, (int) keySym);*/
> -        nevents = GetKeyboardEvents(events, p, type, detail, NULL);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
> +        QueueKeyboardEvents(events, p, type, detail, NULL);
>         return;
> 
>     case ButtonPress:
> @@ -695,10 +677,8 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
>         detail = dmxGetButtonMapping(dmxLocal, detail);
>         valuator_mask_zero(&mask);
>         GetEventList(&events);
> -        nevents = GetPointerEvents(events, p, type, detail,
> -                                   POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
> +        QueuePointerEvents(events, p, type, detail,
> +                           POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
>         return;
> 
>     case MotionNotify:
> @@ -707,10 +687,8 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
>         valuators[1] = e->xmotion.y;
>         valuators[2] = e->xmotion.state; /* FIXME: WTF?? */
>         valuator_mask_set_range(&mask, 0, 3, valuators);
> -        nevents = GetPointerEvents(events, p, type, detail, 
> -                                   POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
> -        for (i = 0; i < nevents; i++)
> -            mieqEnqueue(p, (InternalEvent*)(events + i)->event);
> +        QueuePointerEvents(events, p, type, detail,
> +                           POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
>         return;
> 
>     case EnterNotify:
> diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
> index f21475f..521542c 100644
> --- a/hw/kdrive/src/kinput.c
> +++ b/hw/kdrive/src/kinput.c
> @@ -1793,7 +1793,7 @@ void
> KdReleaseAllKeys (void)
> {
> #if 0
> -    int	key, nEvents, i;
> +    int	key;
>     KdKeyboardInfo *ki;
> 
>     KdBlockSigio ();
> @@ -1804,9 +1804,7 @@ KdReleaseAllKeys (void)
>             if (key_is_down(ki->dixdev, key, KEY_POSTED | KEY_PROCESSED)) {
>                 KdHandleKeyboardEvent(ki, KeyRelease, key);
>                 GetEventList(&kdEvents);
> -                nEvents = GetKeyboardEvents(kdEvents, ki->dixdev, KeyRelease, key, NULL);
> -                for (i = 0; i < nEvents; i++)
> -                    KdQueueEvent (ki->dixdev, (kdEvents + i)->event);
> +                QueueGetKeyboardEvents(kdEvents, ki->dixdev, KeyRelease, key, NULL);
>             }
>         }
>     }
> @@ -1842,7 +1840,7 @@ KdEnqueueKeyboardEvent(KdKeyboardInfo   *ki,
>     unsigned char key_code;
>     KeyClassPtr	keyc = NULL;
>     KeybdCtrl *ctrl = NULL;
> -    int type, nEvents, i;
> +    int type;
> 
>     if (!ki || !ki->dixdev || !ki->dixdev->kbdfeed || !ki->dixdev->key)
> 	return;
> @@ -1863,10 +1861,7 @@ KdEnqueueKeyboardEvent(KdKeyboardInfo   *ki,
> 	    type = KeyPress;
> 
>         GetEventList(&kdEvents);
> -
> -        nEvents = GetKeyboardEvents(kdEvents, ki->dixdev, type, key_code, NULL);
> -        for (i = 0; i < nEvents; i++)
> -            KdQueueEvent(ki->dixdev, (InternalEvent *)((kdEvents + i)->event));
> +        QueueKeyboardEvents(kdEvents, ki->dixdev, type, key_code, NULL);
>     }
>     else {
>         ErrorF("driver %s wanted to post scancode %d outside of [%d, %d]!\n",
> @@ -1965,7 +1960,6 @@ void
> _KdEnqueuePointerEvent (KdPointerInfo *pi, int type, int x, int y, int z,
>                         int b, int absrel, Bool force)
> {
> -    int nEvents = 0, i = 0;
>     int valuators[3] = { x, y, z };
>     ValuatorMask mask;
> 
> @@ -1976,9 +1970,7 @@ _KdEnqueuePointerEvent (KdPointerInfo *pi, int type, int x, int y, int z,
>     valuator_mask_set_range(&mask, 0, 3, valuators);
> 
>     GetEventList(&kdEvents);
> -    nEvents = GetPointerEvents(kdEvents, pi->dixdev, type, b, absrel, &mask);
> -    for (i = 0; i < nEvents; i++)
> -        KdQueueEvent(pi->dixdev, (InternalEvent *)((kdEvents + i)->event));
> +    QueuePointerEvents(kdEvents, pi->dixdev, type, b, absrel, &mask);
> }
> 
> void
> diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
> index 3006ad1..6402d72 100644
> --- a/hw/xfree86/common/xf86Events.c
> +++ b/hw/xfree86/common/xf86Events.c
> @@ -376,7 +376,7 @@ static void
> xf86ReleaseKeys(DeviceIntPtr pDev)
> {
>     KeyClassPtr keyc;
> -    int i, j, nevents, sigstate;
> +    int i, sigstate;
> 
>     if (!pDev || !pDev->key)
>         return;
> @@ -399,9 +399,7 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
>          i++) {
>         if (key_is_down(pDev, i, KEY_POSTED)) {
>             sigstate = xf86BlockSIGIO ();
> -            nevents = GetKeyboardEvents(xf86Events, pDev, KeyRelease, i, NULL);
> -            for (j = 0; j < nevents; j++)
> -                mieqEnqueue(pDev, (InternalEvent*)(xf86Events + j)->event);
> +            QueueKeyboardEvents(xf86Events, pDev, KeyRelease, i, NULL);
>             xf86UnblockSIGIO(sigstate);
>         }
>     }
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index ef4542c..a6c261c 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -1050,11 +1050,7 @@ xf86PostMotionEventM(DeviceIntPtr	device,
>         }
> #endif
> 
> -    nevents = GetPointerEvents(xf86Events, device, MotionNotify, 0, flags, mask);
> -
> -    for (i = 0; i < nevents; i++) {
> -        mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
> -    }
> +    QueuePointerEvents(xf86Events, device, MotionNotify, 0, flags, mask);
> }
> 
> void
> @@ -1099,13 +1095,8 @@ xf86PostProximityEventM(DeviceIntPtr	device,
>                         int		is_in,
>                         const ValuatorMask *mask)
> {
> -    int i, nevents;
> -
> -    nevents = GetProximityEvents(xf86Events, device,
> -                                 is_in ? ProximityIn : ProximityOut, mask);
> -    for (i = 0; i < nevents; i++)
> -        mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
> -
> +    QueueProximityEvents(xf86Events, device,
> +                         is_in ? ProximityIn : ProximityOut, mask);
> }
> 
> void
> @@ -1177,13 +1168,9 @@ xf86PostButtonEventM(DeviceIntPtr	device,
>     }
> #endif
> 
> -    nevents = GetPointerEvents(xf86Events, device,
> -                               is_down ? ButtonPress : ButtonRelease, button,
> -                               flags, mask);
> -
> -    for (i = 0; i < nevents; i++)
> -        mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
> -
> +    QueuePointerEvents(xf86Events, device,
> +                       is_down ? ButtonPress : ButtonRelease, button,
> +                       flags, mask);
> }
> 
> void
> @@ -1235,8 +1222,6 @@ xf86PostKeyEventM(DeviceIntPtr	device,
>                   int		is_absolute,
>                   const ValuatorMask *mask)
> {
> -    int i = 0, nevents = 0;
> -
> #if XFreeXDGA
>     DeviceIntPtr pointer;
> 
> @@ -1250,12 +1235,9 @@ xf86PostKeyEventM(DeviceIntPtr	device,
>     }
> #endif
> 
> -    nevents = GetKeyboardEvents(xf86Events, device,
> -                                is_down ? KeyPress : KeyRelease,
> -                                key_code, mask);
> -
> -    for (i = 0; i < nevents; i++)
> -        mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event));
> +    QueueKeyboardEvents(xf86Events, device,
> +                        is_down ? KeyPress : KeyRelease,
> +                        key_code, mask);
> }
> 
> void
> diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c
> index 5c80086..574e4e4 100644
> --- a/hw/xnest/Events.c
> +++ b/hw/xnest/Events.c
> @@ -104,20 +104,16 @@ xnestCollectExposures(void)
> void
> xnestQueueKeyEvent(int type, unsigned int keycode)
> {
> -  int i, n;
> -
>   GetEventList(&xnestEvents);
>   lastEventTime = GetTimeInMillis();
> -  n = GetKeyboardEvents(xnestEvents, xnestKeyboardDevice, type, keycode, NULL);
> -  for (i = 0; i < n; i++)
> -    mieqEnqueue(xnestKeyboardDevice, (InternalEvent*)(xnestEvents + i)->event);
> +  QueueKeyboardEvents(xnestEvents, xnestKeyboardDevice, type, keycode, NULL);
> }
> 
> void
> xnestCollectEvents(void)
> {
>   XEvent X;
> -  int i, n, valuators[2];
> +  int valuators[2];
>   ValuatorMask mask;
>   ScreenPtr pScreen;
>   GetEventList(&xnestEvents);
> @@ -138,20 +134,16 @@ xnestCollectEvents(void)
>       valuator_mask_set_range(&mask, 0, 0, NULL);
>       xnestUpdateModifierState(X.xkey.state);
>       lastEventTime = GetTimeInMillis();
> -      n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonPress,
> -                           X.xbutton.button, POINTER_RELATIVE, &mask);
> -      for (i = 0; i < n; i++)
> -        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
> +      QueuePointerEvents(xnestEvents, xnestPointerDevice, ButtonPress,
> +                         X.xbutton.button, POINTER_RELATIVE, &mask);
>       break;
> 
>     case ButtonRelease:
>       valuator_mask_set_range(&mask, 0, 0, NULL);
>       xnestUpdateModifierState(X.xkey.state);
>       lastEventTime = GetTimeInMillis();
> -      n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonRelease,
> -                           X.xbutton.button, POINTER_RELATIVE, &mask);
> -      for (i = 0; i < n; i++)
> -        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
> +      QueuePointerEvents(xnestEvents, xnestPointerDevice, ButtonRelease,
> +                         X.xbutton.button, POINTER_RELATIVE, &mask);
>       break;
> 
>     case MotionNotify:
> @@ -159,10 +151,8 @@ xnestCollectEvents(void)
>       valuators[1] = X.xmotion.y;
>       valuator_mask_set_range(&mask, 0, 2, valuators);
>       lastEventTime = GetTimeInMillis();
> -      n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
> -                           0, POINTER_ABSOLUTE, &mask);
> -      for (i = 0; i < n; i++)
> -        mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
> +      QueuePointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
> +                         0, POINTER_ABSOLUTE, &mask);
>       break;
> 
>     case FocusIn:
> @@ -193,10 +183,8 @@ xnestCollectEvents(void)
>           valuators[1] = X.xcrossing.y;
>           valuator_mask_set_range(&mask, 0, 2, valuators);
>           lastEventTime = GetTimeInMillis();
> -          n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
> -                               0, POINTER_ABSOLUTE, &mask);
> -          for (i = 0; i < n; i++)
> -            mieqEnqueue(xnestPointerDevice, (InternalEvent*)(xnestEvents + i)->event);
> +          QueuePointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
> +                             0, POINTER_ABSOLUTE, &mask);
> 	  xnestDirectInstallColormaps(pScreen);
> 	}
>       }
> diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
> index 451129e..f20e37b 100644
> --- a/hw/xquartz/darwinEvents.c
> +++ b/hw/xquartz/darwinEvents.c
> @@ -413,7 +413,6 @@ static void DarwinPrepareValuators(DeviceIntPtr pDev, int *valuators, ScreenPtr
> void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, float pointer_x, float pointer_y, 
> 			     float pressure, float tilt_x, float tilt_y) {
> 	static int darwinFakeMouseButtonDown = 0;
> -	int i, num_events;
>     ScreenPtr screen;
>     int valuators[5];
> 	
> @@ -466,15 +465,13 @@ void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, floa
>     darwinEvents_lock(); {
>         ValuatorMask mask;
>         valuator_mask_set_range(&mask, 0, (pDev == darwinTabletCurrent) ? 5 : 2, valuators);
> -        num_events = GetPointerEvents(darwinEvents, pDev, ev_type, ev_button, 
> -                                      POINTER_ABSOLUTE, &mask);
> -        for(i=0; i<num_events; i++) mieqEnqueue (pDev, (InternalEvent*)darwinEvents[i].event);
> -        if(num_events > 0) DarwinPokeEQ();
> +        QueuePointerEvents(darwinEvents, pDev, ev_type, ev_button,
> +                           POINTER_ABSOLUTE, &mask);
> +        DarwinPokeEQ();
>     } darwinEvents_unlock();
> }
> 
> void DarwinSendKeyboardEvents(int ev_type, int keycode) {
> -	int i, num_events;
> 
> 	if(!darwinEvents) {
> 		DEBUG_LOG("DarwinSendKeyboardEvents called before darwinEvents was initialized\n");
> @@ -482,14 +479,12 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
> 	}
> 
>     darwinEvents_lock(); {
> -        num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE, NULL);
> -        for(i=0; i<num_events; i++) mieqEnqueue(darwinKeyboard, (InternalEvent*)darwinEvents[i].event);
> -        if(num_events > 0) DarwinPokeEQ();
> +        QueueKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE, NULL);
> +        DarwinPokeEQ();
>     } darwinEvents_unlock();
> }
> 
> void DarwinSendProximityEvents(int ev_type, float pointer_x, float pointer_y) {
> -	int i, num_events;
>     ScreenPtr screen;
>     DeviceIntPtr pDev = darwinTabletCurrent;
>     int valuators[5];
> @@ -511,9 +506,8 @@ void DarwinSendProximityEvents(int ev_type, float pointer_x, float pointer_y) {
>     darwinEvents_lock(); {
>         ValuatorMask mask;
>         valuator_mask_set_range(&mask, 0, 5, valuators);
> -        num_events = GetProximityEvents(darwinEvents, pDev, ev_type, &mask);
> -        for(i=0; i<num_events; i++) mieqEnqueue (pDev, (InternalEvent*)darwinEvents[i].event);
> -        if(num_events > 0) DarwinPokeEQ();
> +        QueueProximityEvents(darwinEvents, pDev, ev_type, &mask);
> +        DarwinPokeEQ();
>     } darwinEvents_unlock();
> }
> 
> diff --git a/hw/xwin/winkeybd.c b/hw/xwin/winkeybd.c
> index 912e2de..cf0dea2 100644
> --- a/hw/xwin/winkeybd.c
> +++ b/hw/xwin/winkeybd.c
> @@ -473,7 +473,6 @@ void
> winSendKeyEvent (DWORD dwKey, Bool fDown)
> {
>   EventListPtr events;
> -  int i, nevents;
> 
>   /*
>    * When alt-tabing between screens we can get phantom key up messages
> @@ -485,10 +484,7 @@ winSendKeyEvent (DWORD dwKey, Bool fDown)
>   g_winKeyState[dwKey] = fDown;
> 
>   GetEventList(&events);
> -  nevents = GetKeyboardEvents(events, g_pwinKeyboard, fDown ? KeyPress : KeyRelease, dwKey + MIN_KEYCODE, NULL);
> -
> -  for (i = 0; i < nevents; i++)
> -    mieqEnqueue(g_pwinKeyboard, (InternalEvent*)events[i].event);
> +  QueueKeyboardEvents(events, g_pwinKeyboard, fDown ? KeyPress : KeyRelease, dwKey + MIN_KEYCODE, NULL);
> 
>   winDebug("winSendKeyEvent: dwKey: %d, fDown: %d, nEvents %d\n",
>            dwKey, fDown, nevents);
> diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c
> index 080e096..0e36687 100644
> --- a/hw/xwin/winmouse.c
> +++ b/hw/xwin/winmouse.c
> @@ -235,7 +235,6 @@ void
> winMouseButtonsSendEvent (int iEventType, int iButton)
> {
>   EventListPtr events;
> -  int i, nevents;
>   ValuatorMask mask;
> 
>   if (g_winMouseButtonMap)
> @@ -243,11 +242,8 @@ winMouseButtonsSendEvent (int iEventType, int iButton)
> 
>   valuator_mask_zero(&mask);
>   GetEventList(&events);
> -  nevents = GetPointerEvents(events, g_pwinPointer, iEventType, iButton,
> -			     POINTER_RELATIVE, &mask);
> -
> -  for (i = 0; i < nevents; i++)
> -    mieqEnqueue(g_pwinPointer, (InternalEvent*)events[i].event);
> +  QueuePointerEvents(events, g_pwinPointer, iEventType, iButton,
> +		     POINTER_RELATIVE, &mask);
> 
> #if CYGDEBUG
>   ErrorF("winMouseButtonsSendEvent: iEventType: %d, iButton: %d, nEvents %d\n",
> @@ -367,7 +363,6 @@ winMouseButtonsHandle (ScreenPtr pScreen,
>  */
> void winEnqueueMotion(int x, int y)
> {
> -  int i, nevents;
>   int valuators[2];
>   ValuatorMask mask;
>   EventListPtr events;
> @@ -378,9 +373,7 @@ void winEnqueueMotion(int x, int y)
> 
>   valuator_mask_set_range(&mask, 0, 2, valuators);
>   GetEventList(&events);
> -  nevents = GetPointerEvents(events, g_pwinPointer, MotionNotify, 0,
> -			     POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
> +  QueuePointerEvents(events, g_pwinPointer, MotionNotify, 0,
> +		     POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
> 
> -  for (i = 0; i < nevents; i++)
> -    mieqEnqueue(g_pwinPointer, (InternalEvent*)events[i].event);
> }
> diff --git a/include/input.h b/include/input.h
> index d0a86aa..ac4c7b9 100644
> --- a/include/input.h
> +++ b/include/input.h
> @@ -455,6 +455,14 @@ extern _X_EXPORT int GetPointerEvents(
>     int flags,
>     const ValuatorMask *mask);
> 
> +extern _X_EXPORT void QueuePointerEvents(
> +    EventListPtr events,
> +    DeviceIntPtr pDev,
> +    int type,
> +    int buttons,
> +    int flags,
> +    const ValuatorMask *mask);
> +
> extern _X_EXPORT int GetKeyboardEvents(
>     EventListPtr events,
>     DeviceIntPtr pDev,
> @@ -462,12 +470,25 @@ extern _X_EXPORT int GetKeyboardEvents(
>     int key_code,
>     const ValuatorMask *mask);
> 
> +extern _X_EXPORT void QueueKeyboardEvents(
> +    EventListPtr events,
> +    DeviceIntPtr pDev,
> +    int type,
> +    int key_code,
> +    const ValuatorMask *mask);
> +
> extern int GetProximityEvents(
>     EventListPtr events,
>     DeviceIntPtr pDev,
>     int type,
>     const ValuatorMask *mask);
> 
> +extern void QueueProximityEvents(
> +    EventListPtr events,
> +    DeviceIntPtr pDev,
> +    int type,
> +    const ValuatorMask *mask);
> +
> extern void PostSyntheticMotion(
>     DeviceIntPtr pDev,
>     int x,
> -- 
> 1.7.4.2
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 



More information about the xorg-devel mailing list