Update device valuators on XTest motion event, otherwise the cursor jumps
between coordinates stored in device and coordinates sent by the event.
This commit is contained in:
		
							parent
							
								
									bc4ae25433
								
							
						
					
					
						commit
						2a35d44b6d
					
				
							
								
								
									
										11
									
								
								Xext/xtest.c
								
								
								
								
							
							
						
						
									
										11
									
								
								Xext/xtest.c
								
								
								
								
							|  | @ -316,7 +316,7 @@ ProcXTestFakeInput(client) | ||||||
| #ifdef XINPUT | #ifdef XINPUT | ||||||
| 	if (!extension) | 	if (!extension) | ||||||
| #endif /* XINPUT */ | #endif /* XINPUT */ | ||||||
| 	    dev = (DeviceIntPtr)LookupKeyboardDevice(); | 	    dev = inputInfo.keyboard; | ||||||
| 	if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode || | 	if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode || | ||||||
| 	    ev->u.u.detail > dev->key->curKeySyms.maxKeyCode) | 	    ev->u.u.detail > dev->key->curKeySyms.maxKeyCode) | ||||||
| 	{ | 	{ | ||||||
|  | @ -360,7 +360,8 @@ ProcXTestFakeInput(client) | ||||||
| 	    break; | 	    break; | ||||||
| 	} | 	} | ||||||
| #endif /* XINPUT */ | #endif /* XINPUT */ | ||||||
| 	dev = (DeviceIntPtr)LookupPointerDevice(); |         if (!dev) | ||||||
|  |             dev = inputInfo.pointer; | ||||||
| 	if (ev->u.keyButtonPointer.root == None) | 	if (ev->u.keyButtonPointer.root == None) | ||||||
| 	    root = GetCurrentRootWindow(); | 	    root = GetCurrentRootWindow(); | ||||||
| 	else | 	else | ||||||
|  | @ -378,7 +379,7 @@ ProcXTestFakeInput(client) | ||||||
| 	if (ev->u.u.detail == xTrue) | 	if (ev->u.u.detail == xTrue) | ||||||
| 	{ | 	{ | ||||||
| 	    int x, y; | 	    int x, y; | ||||||
| 	    GetSpritePosition(inputInfo.pointer, &x, &y); | 	    GetSpritePosition(dev, &x, &y); | ||||||
| 	    ev->u.keyButtonPointer.rootX += x; | 	    ev->u.keyButtonPointer.rootX += x; | ||||||
| 	    ev->u.keyButtonPointer.rootY += y; | 	    ev->u.keyButtonPointer.rootY += y; | ||||||
| 	} | 	} | ||||||
|  | @ -442,13 +443,15 @@ ProcXTestFakeInput(client) | ||||||
| 	    (dev, root->drawable.pScreen, | 	    (dev, root->drawable.pScreen, | ||||||
| 	     ev->u.keyButtonPointer.rootX, | 	     ev->u.keyButtonPointer.rootX, | ||||||
| 	     ev->u.keyButtonPointer.rootY, FALSE); | 	     ev->u.keyButtonPointer.rootY, FALSE); | ||||||
|  |         dev->valuator->lastx = ev->u.keyButtonPointer.rootX; | ||||||
|  |         dev->valuator->lasty = ev->u.keyButtonPointer.rootY; | ||||||
| 	break; | 	break; | ||||||
|     case ButtonPress: |     case ButtonPress: | ||||||
|     case ButtonRelease: |     case ButtonRelease: | ||||||
| #ifdef XINPUT | #ifdef XINPUT | ||||||
| 	if (!extension) | 	if (!extension) | ||||||
| #endif /* XINPUT */ | #endif /* XINPUT */ | ||||||
| 	    dev = (DeviceIntPtr)LookupPointerDevice(); | 	    dev = inputInfo.pointer; | ||||||
| 	if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) | 	if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) | ||||||
| 	{ | 	{ | ||||||
| 	    client->errorValue = ev->u.u.detail; | 	    client->errorValue = ev->u.u.detail; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue