Xext: return BadDevice from XTest if we don't have keys/buttons/valuators.
BadDevice is an XI error, but this cannot happen for core XTest fake input anyway since the device will be the matching virtual XTest slave device. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									0fdff0a47a
								
							
						
					
					
						commit
						226dd90597
					
				
							
								
								
									
										10
									
								
								Xext/xtest.c
								
								
								
								
							
							
						
						
									
										10
									
								
								Xext/xtest.c
								
								
								
								
							|  | @ -49,6 +49,7 @@ | ||||||
| #include <X11/extensions/xteststr.h> | #include <X11/extensions/xteststr.h> | ||||||
| #include <X11/extensions/XI.h> | #include <X11/extensions/XI.h> | ||||||
| #include <X11/extensions/XIproto.h> | #include <X11/extensions/XIproto.h> | ||||||
|  | #include "exglobals.h" | ||||||
| 
 | 
 | ||||||
| #include "modinit.h" | #include "modinit.h" | ||||||
| 
 | 
 | ||||||
|  | @ -342,6 +343,9 @@ ProcXTestFakeInput(ClientPtr client) | ||||||
|     { |     { | ||||||
|         case KeyPress: |         case KeyPress: | ||||||
|         case KeyRelease: |         case KeyRelease: | ||||||
|  |             if (!dev->key) | ||||||
|  |                 return BadDevice; | ||||||
|  | 
 | ||||||
|             if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || |             if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || | ||||||
|                 ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) |                 ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) | ||||||
|             { |             { | ||||||
|  | @ -350,6 +354,9 @@ ProcXTestFakeInput(ClientPtr client) | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         case MotionNotify: |         case MotionNotify: | ||||||
|  |             if (!dev->valuator) | ||||||
|  |                 return BadDevice; | ||||||
|  | 
 | ||||||
|             /* broken lib, XI events have root uninitialized */ |             /* broken lib, XI events have root uninitialized */ | ||||||
|             if (extension || ev->u.keyButtonPointer.root == None) |             if (extension || ev->u.keyButtonPointer.root == None) | ||||||
|                 root = GetCurrentRootWindow(dev); |                 root = GetCurrentRootWindow(dev); | ||||||
|  | @ -376,6 +383,9 @@ ProcXTestFakeInput(ClientPtr client) | ||||||
|             break; |             break; | ||||||
|         case ButtonPress: |         case ButtonPress: | ||||||
|         case ButtonRelease: |         case ButtonRelease: | ||||||
|  |             if (!dev->button) | ||||||
|  |                 return BadDevice; | ||||||
|  | 
 | ||||||
|             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