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