xkb: Unwrap properly in ProcessPointerEvent.

Instead of hardcoding CoreProcessPointerEvent, actually try to unwrap properly
and then call the unwrapped processInputProc. Seems to be a better idea,
especially since it makes stuff actually work...
This commit is contained in:
Peter Hutterer 2007-09-26 18:04:59 +09:30
parent 3342b5ad47
commit 8f9bf927e1
2 changed files with 26 additions and 3 deletions

View File

@ -684,6 +684,8 @@ Bool ignoreKeyEvent = FALSE;
/* don't accidentally turn on StickyKeys or the Keyboard Response Group.*/
/* */
/************************************************************************/
extern int xkbDevicePrivateIndex;
extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
void
ProcessPointerEvent( register xEvent * xE,
register DeviceIntPtr mouse,
@ -692,6 +694,8 @@ ProcessPointerEvent( register xEvent * xE,
DeviceIntPtr dev = (DeviceIntPtr)LookupKeyboardDevice();
XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
unsigned changed = 0;
ProcessInputProc backupproc;
xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse);
xkbi->shiftKeyCount = 0;
xkbi->lastPtrEventTime= xE->u.keyButtonPointer.time;
@ -703,7 +707,26 @@ unsigned changed = 0;
xkbi->lockedPtrButtons&= ~(1<<(xE->u.u.detail&0x7));
changed |= XkbPointerButtonMask;
}
CoreProcessPointerEvent(xE,mouse,count);
/* Guesswork. mostly.
* xkb actuall goes through some effort to transparently wrap the
* processInputProcs (see XkbSetExtension). But we all love fun, so the
* previous XKB implementation just hardcoded the CPPE call here instead
* of unwrapping like anybody with any sense of decency would do.
* I got no clue what the correct thing to do is, but my guess is that
* it's not hardcoding. I may be wrong. whatever it is, don't come whining
* to me. I just work here.
*
* Anyway. here's the old call, if you don't like the wrapping, revert it.
*
* CoreProcessPointerEvent(xE,mouse,count);
*
* see. it's still steaming. told you. (whot)
*/
UNWRAP_PROCESS_INPUT_PROC(mouse, xkbPrivPtr, backupproc);
mouse->public.processInputProc(xE, mouse, count);
COND_WRAP_PROCESS_INPUT_PROC(mouse, xkbPrivPtr,
backupproc, xkbUnwrapProc);
xkbi->state.ptr_buttons = mouse->button->state;

View File

@ -42,9 +42,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define EXTENSION_EVENT_BASE 64
static unsigned int _xkbServerGeneration;
static int xkbDevicePrivateIndex = -1;
int xkbDevicePrivateIndex = -1;
static void
void
xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
pointer data)
{