dix: add AllocMasterDevice for creation of new master devices.
Devices are initiated pretty much the same as the core devices.
This commit is contained in:
		
							parent
							
								
									5fe9bfd23f
								
							
						
					
					
						commit
						299573f461
					
				| 
						 | 
				
			
			@ -2374,3 +2374,69 @@ NextFreePointerDevice()
 | 
			
		|||
            return dev;
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * Create a new master device (== one pointer, one keyboard device).
 | 
			
		||||
 * Only allocates the devices, you will need to call ActivateDevice() and
 | 
			
		||||
 * EnableDevice() manually.
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
AllocMasterDevice(char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd)
 | 
			
		||||
{
 | 
			
		||||
    DeviceIntPtr pointer;
 | 
			
		||||
    DeviceIntPtr keyboard;
 | 
			
		||||
 | 
			
		||||
    pointer = AddInputDevice(CorePointerProc, TRUE);
 | 
			
		||||
    if (!pointer)
 | 
			
		||||
        return BadAlloc;
 | 
			
		||||
 | 
			
		||||
    pointer->name = xcalloc(strlen(name) + strlen("-ptr") + 1, sizeof(char));
 | 
			
		||||
    strcpy(pointer->name, name);
 | 
			
		||||
    strcat(pointer->name, "-ptr");
 | 
			
		||||
 | 
			
		||||
#ifdef XKB
 | 
			
		||||
    pointer->public.processInputProc = ProcessOtherEvent;
 | 
			
		||||
    pointer->public.realInputProc = ProcessOtherEvent;
 | 
			
		||||
    if (!noXkbExtension)
 | 
			
		||||
        XkbSetExtension(pointer, ProcessPointerEvent);
 | 
			
		||||
#else
 | 
			
		||||
    pointer->public.processInputProc = ProcessPointerEvent;
 | 
			
		||||
    pointer->public.realInputProc = ProcessPointerEvent;
 | 
			
		||||
#endif
 | 
			
		||||
    pointer->deviceGrab.ActivateGrab = ActivatePointerGrab;
 | 
			
		||||
    pointer->deviceGrab.DeactivateGrab = DeactivatePointerGrab;
 | 
			
		||||
    pointer->coreEvents = TRUE;
 | 
			
		||||
    pointer->spriteInfo->spriteOwner = TRUE;
 | 
			
		||||
 | 
			
		||||
    pointer->u.lastSlave = NULL;
 | 
			
		||||
    pointer->isMaster = TRUE;
 | 
			
		||||
 | 
			
		||||
    keyboard = AddInputDevice(CoreKeyboardProc, TRUE);
 | 
			
		||||
    if (!keyboard)
 | 
			
		||||
        return BadAlloc;
 | 
			
		||||
 | 
			
		||||
    keyboard->name = xcalloc(strlen(name) + strlen("-keybd") + 1, sizeof(char));
 | 
			
		||||
    strcpy(keyboard->name, name);
 | 
			
		||||
    strcat(keyboard->name, "-keybd");
 | 
			
		||||
 | 
			
		||||
#ifdef XKB
 | 
			
		||||
    keyboard->public.processInputProc = ProcessOtherEvent;
 | 
			
		||||
    keyboard->public.realInputProc = ProcessOtherEvent;
 | 
			
		||||
    if (!noXkbExtension)
 | 
			
		||||
        XkbSetExtension(keyboard, ProcessKeyboardEvent);
 | 
			
		||||
#else
 | 
			
		||||
    keyboard->public.processInputProc = ProcessKeyboardEvent;
 | 
			
		||||
    keyboard->public.realInputProc = ProcessKeyboardEvent;
 | 
			
		||||
#endif
 | 
			
		||||
    keyboard->deviceGrab.ActivateGrab = ActivateKeyboardGrab;
 | 
			
		||||
    keyboard->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab;
 | 
			
		||||
    keyboard->coreEvents = TRUE;
 | 
			
		||||
    keyboard->spriteInfo->spriteOwner = FALSE;
 | 
			
		||||
 | 
			
		||||
    keyboard->u.lastSlave = NULL;
 | 
			
		||||
    keyboard->isMaster = TRUE;
 | 
			
		||||
 | 
			
		||||
    *ptr = pointer;
 | 
			
		||||
    *keybd = keyboard;
 | 
			
		||||
 | 
			
		||||
    return Success;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -477,6 +477,10 @@ extern Bool UnregisterPairingClient(ClientPtr client);
 | 
			
		|||
extern DeviceIntPtr GuessFreePointerDevice(void);
 | 
			
		||||
extern DeviceIntPtr NextFreePointerDevice(void);
 | 
			
		||||
 | 
			
		||||
extern int AllocMasterDevice(char* name,
 | 
			
		||||
                             DeviceIntPtr* ptr,
 | 
			
		||||
                             DeviceIntPtr* keybd);
 | 
			
		||||
 | 
			
		||||
/* Window/device based access control */
 | 
			
		||||
extern Bool ACRegisterClient(ClientPtr client);
 | 
			
		||||
extern Bool ACUnregisterClient(ClientPtr client);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue