Send PointerKeyboardPairingChangedNotifyEvent using XGE.
Needs updated inputproto and libXi.
This commit is contained in:
parent
325380adb2
commit
8b42ba64e1
|
@ -97,6 +97,8 @@ libXi_la_SOURCES = \
|
|||
ungrdevk.c \
|
||||
ungrdevk.h \
|
||||
warpdevp.c \
|
||||
warpdevp.h
|
||||
warpdevp.h \
|
||||
xiselev.c \
|
||||
xiselev.h
|
||||
|
||||
EXTRA_DIST = stubs.c
|
||||
|
|
|
@ -44,11 +44,14 @@ from the author.
|
|||
#include "windowstr.h" /* window structure */
|
||||
#include "scrnintstr.h" /* screen structure */
|
||||
#include <X11/extensions/XI.h>
|
||||
#include <X11/extensions/XInput.h>
|
||||
#include <X11/extensions/XIproto.h>
|
||||
#include <X11/extensions/geproto.h>
|
||||
#include "extnsionst.h"
|
||||
#include "extinit.h" /* LookupDeviceIntRec */
|
||||
#include "exevents.h"
|
||||
#include "exglobals.h"
|
||||
#include "geext.h"
|
||||
|
||||
|
||||
#include "chpkpair.h"
|
||||
|
@ -74,6 +77,7 @@ ProcXChangePointerKeyboardPairing(ClientPtr client)
|
|||
{
|
||||
DeviceIntPtr pPointer, pKeyboard;
|
||||
int ret;
|
||||
pairingChangedNotify ev;
|
||||
|
||||
REQUEST(xChangePointerKeyboardPairingReq);
|
||||
REQUEST_SIZE_MATCH(xChangePointerKeyboardPairingReq);
|
||||
|
@ -105,6 +109,27 @@ ProcXChangePointerKeyboardPairing(ClientPtr client)
|
|||
}
|
||||
|
||||
|
||||
/* TODO: generate event here... */
|
||||
memset(&ev, 0, sizeof(pairingChangedNotify));
|
||||
GEInitEvent(GEV(&ev), IReqCode);
|
||||
ev.evtype = XI_PointerKeyboardPairingChangedNotify;
|
||||
ev.pointer = pPointer->id;
|
||||
ev.keyboard = pKeyboard->id;
|
||||
ev.length = 0;
|
||||
ev.time = currentTime.milliseconds;
|
||||
SendEventToAllWindows(inputInfo.pointer,
|
||||
XI_PointerKeyboardPairingChangedMask,
|
||||
(xEvent*)&ev, 1);
|
||||
return Success;
|
||||
}
|
||||
|
||||
/* Event swap proc */
|
||||
void
|
||||
SPointerKeyboardPairingChangedNotifyEvent (pairingChangedNotify *from,
|
||||
pairingChangedNotify *to)
|
||||
{
|
||||
char n;
|
||||
|
||||
*to = *from;
|
||||
swaps(&to->sequenceNumber, n);
|
||||
swapl(&to->time, n);
|
||||
}
|
||||
|
|
|
@ -36,5 +36,10 @@ int SProcXChangePointerKeyboardPairing(ClientPtr /* client */
|
|||
int ProcXChangePointerKeyboardPairing(ClientPtr /* client */
|
||||
);
|
||||
|
||||
void
|
||||
SPointerKeyboardPairingChangedNotifyEvent (pairingChangedNotify* /* from */,
|
||||
pairingChangedNotify* /* to */
|
||||
);
|
||||
|
||||
#endif /* WARPDEVP_H */
|
||||
|
||||
|
|
55
Xi/extinit.c
55
Xi/extinit.c
|
@ -65,6 +65,8 @@ SOFTWARE.
|
|||
#include "extnsionst.h" /* extension entry */
|
||||
#include <X11/extensions/XI.h>
|
||||
#include <X11/extensions/XIproto.h>
|
||||
#include <X11/extensions/geproto.h>
|
||||
#include "geext.h" /* extension interfaces for ge */
|
||||
|
||||
#include "dixevents.h"
|
||||
#include "exevents.h"
|
||||
|
@ -121,6 +123,8 @@ SOFTWARE.
|
|||
#include "ungrdevb.h"
|
||||
#include "ungrdevk.h"
|
||||
#include "warpdevp.h"
|
||||
#include "xiselev.h"
|
||||
|
||||
|
||||
static Mask lastExtEventMask = 1;
|
||||
int ExtEventIndex;
|
||||
|
@ -180,7 +184,6 @@ Mask DeviceButtonMotionMask;
|
|||
Mask DevicePresenceNotifyMask;
|
||||
Mask DeviceEnterWindowMask;
|
||||
Mask DeviceLeaveWindowMask;
|
||||
Mask PointerKeyboardPairingChangedMask;
|
||||
|
||||
int DeviceValuator;
|
||||
int DeviceKeyPress;
|
||||
|
@ -200,6 +203,8 @@ int ChangeDeviceNotify;
|
|||
int DevicePresenceNotify;
|
||||
int DeviceEnterNotify;
|
||||
int DeviceLeaveNotify;
|
||||
|
||||
/* GE events */
|
||||
int PointerKeyboardPairingChangedNotify;
|
||||
|
||||
int RT_INPUTCLIENT;
|
||||
|
@ -225,6 +230,26 @@ static XExtensionVersion thisversion = { XI_Present,
|
|||
XI_Add_DevicePresenceNotify_Minor
|
||||
};
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* EventSwap for generic events coming from the GE extension.
|
||||
*/
|
||||
|
||||
static void
|
||||
XIGEEventSwap(xGenericEvent* from, xGenericEvent* to)
|
||||
{
|
||||
int n;
|
||||
|
||||
swaps(&from->sequenceNumber, n);
|
||||
switch(from->evtype)
|
||||
{
|
||||
case XI_PointerKeyboardPairingChangedNotify:
|
||||
SPointerKeyboardPairingChangedNotifyEvent
|
||||
((pairingChangedNotify*)from, (pairingChangedNotify*)to);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* ProcIDispatch - main dispatch routine for requests to this extension.
|
||||
|
@ -314,6 +339,8 @@ ProcIDispatch(ClientPtr client)
|
|||
return (ProcXChangeDeviceCursor(client));
|
||||
else if (stuff->data == X_ChangePointerKeyboardPairing)
|
||||
return (ProcXChangePointerKeyboardPairing(client));
|
||||
else if (stuff->data == X_XiSelectEvent)
|
||||
return (ProcXiSelectEvent(client));
|
||||
else if (stuff->data == X_RegisterPairingClient)
|
||||
return (ProcXRegisterPairingClient(client));
|
||||
else if (stuff->data == X_GrabAccessControl)
|
||||
|
@ -425,6 +452,8 @@ SProcIDispatch(ClientPtr client)
|
|||
return (SProcXChangeDeviceCursor(client));
|
||||
else if (stuff->data == X_ChangePointerKeyboardPairing)
|
||||
return (SProcXChangePointerKeyboardPairing(client));
|
||||
else if (stuff->data == X_XiSelectEvent)
|
||||
return (SProcXiSelectEvent(client));
|
||||
else if (stuff->data == X_RegisterPairingClient)
|
||||
return (SProcXRegisterPairingClient(client));
|
||||
else if (stuff->data == X_GrabAccessControl)
|
||||
|
@ -659,16 +688,6 @@ SDeviceLeaveNotifyEvent (deviceLeaveNotify *from, deviceLeaveNotify *to)
|
|||
swaps(&to->eventY, n);
|
||||
}
|
||||
|
||||
static void
|
||||
SPointerKeyboardPairingChangedNotifyEvent (pairingChangedNotify *from,
|
||||
pairingChangedNotify *to)
|
||||
{
|
||||
char n;
|
||||
|
||||
*to = *from;
|
||||
swaps(&to->sequenceNumber, n);
|
||||
swapl(&to->time, n);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
|
@ -792,7 +811,10 @@ FixExtensionEvents(ExtensionEntry * extEntry)
|
|||
DevicePresenceNotify = DeviceButtonStateNotify + 1;
|
||||
DeviceEnterNotify = DevicePresenceNotify + 1;
|
||||
DeviceLeaveNotify = DeviceEnterNotify + 1;
|
||||
PointerKeyboardPairingChangedNotify = DeviceLeaveNotify + 1;
|
||||
|
||||
/* GE Events */
|
||||
PointerKeyboardPairingChangedNotify =
|
||||
XI_PointerKeyboardPairingChangedNotify;
|
||||
|
||||
event_base[KeyClass] = DeviceKeyPress;
|
||||
event_base[ButtonClass] = DeviceButtonPress;
|
||||
|
@ -877,11 +899,6 @@ FixExtensionEvents(ExtensionEntry * extEntry)
|
|||
SetMaskForExtEvent(DeviceLeaveWindowMask, DeviceLeaveNotify);
|
||||
AllowPropagateSuppress(DeviceLeaveWindowMask);
|
||||
|
||||
PointerKeyboardPairingChangedMask = GetNextExtEventMask();
|
||||
SetMaskForExtEvent(PointerKeyboardPairingChangedMask,
|
||||
PointerKeyboardPairingChangedNotify);
|
||||
AllowPropagateSuppress(PointerKeyboardPairingChangedMask);
|
||||
|
||||
SetEventInfo(0, _noExtensionEvent);
|
||||
}
|
||||
|
||||
|
@ -925,7 +942,6 @@ RestoreExtensionEvents(void)
|
|||
DevicePresenceNotify = 14;
|
||||
DeviceEnterNotify = 15;
|
||||
DeviceLeaveNotify = 16;
|
||||
PointerKeyboardPairingChangedNotify = 17;
|
||||
|
||||
BadDevice = 0;
|
||||
BadEvent = 1;
|
||||
|
@ -1095,8 +1111,6 @@ SEventIDispatch(xEvent * from, xEvent * to)
|
|||
DO_SWAP(SDeviceEnterNotifyEvent, deviceEnterNotify);
|
||||
else if (type == DeviceLeaveNotify)
|
||||
DO_SWAP(SDeviceLeaveNotifyEvent, deviceLeaveNotify);
|
||||
else if (type == PointerKeyboardPairingChangedNotify)
|
||||
DO_SWAP(SPointerKeyboardPairingChangedNotifyEvent, pairingChangedNotify);
|
||||
else {
|
||||
FatalError("XInputExtension: Impossible event!\n");
|
||||
}
|
||||
|
@ -1144,7 +1158,6 @@ XInputExtensionInit(void)
|
|||
EventSwapVector[ChangeDeviceNotify] = SEventIDispatch;
|
||||
EventSwapVector[DeviceEnterNotify] = SEventIDispatch;
|
||||
EventSwapVector[DeviceLeaveNotify] = SEventIDispatch;
|
||||
EventSwapVector[PointerKeyboardPairingChangedNotify] = SEventIDispatch;
|
||||
} else {
|
||||
FatalError("IExtensionInit: AddExtensions failed\n");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user