DDX/Events: Distinguish between Input- and GeneralHandlers in xf86VTSwitch()
When enabling/disabling input handlers in xf86VTSwitch() we treat Input- and GeneralHandlers equally. The result is that after a VT switch the masks for EnabledDevices and AllSockets are equal and the distiction between both types is lost. Signed-off-by: Egbert Eich <eich@freedesktop.org> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
		
							parent
							
								
									0cb33ce340
								
							
						
					
					
						commit
						508e05777a
					
				| 
						 | 
				
			
			@ -116,6 +116,7 @@ typedef struct x_IHRec {
 | 
			
		|||
    InputHandlerProc ihproc;
 | 
			
		||||
    pointer data;
 | 
			
		||||
    Bool enabled;
 | 
			
		||||
    Bool is_input;
 | 
			
		||||
    struct x_IHRec *next;
 | 
			
		||||
} IHRec, *IHPtr;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -446,8 +447,12 @@ xf86VTSwitch(void)
 | 
			
		|||
         * Keep the order: Disable Device > LeaveVT
 | 
			
		||||
         *                        EnterVT > EnableDevice
 | 
			
		||||
         */
 | 
			
		||||
        for (ih = InputHandlers; ih; ih = ih->next)
 | 
			
		||||
        for (ih = InputHandlers; ih; ih = ih->next) {
 | 
			
		||||
            if (ih->is_input)
 | 
			
		||||
                xf86DisableInputHandler(ih);
 | 
			
		||||
            else
 | 
			
		||||
                xf86DisableGeneralHandler(ih);
 | 
			
		||||
        }
 | 
			
		||||
        for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
 | 
			
		||||
            if (pInfo->dev) {
 | 
			
		||||
                if (!pInfo->dev->enabled)
 | 
			
		||||
| 
						 | 
				
			
			@ -496,9 +501,12 @@ xf86VTSwitch(void)
 | 
			
		|||
                pInfo->flags &= ~XI86_DEVICE_DISABLED;
 | 
			
		||||
                pInfo = pInfo->next;
 | 
			
		||||
            }
 | 
			
		||||
            for (ih = InputHandlers; ih; ih = ih->next)
 | 
			
		||||
            for (ih = InputHandlers; ih; ih = ih->next) {
 | 
			
		||||
                if (ih->is_input)
 | 
			
		||||
                    xf86EnableInputHandler(ih);
 | 
			
		||||
 | 
			
		||||
                else
 | 
			
		||||
                    xf86EnableGeneralHandler(ih);
 | 
			
		||||
            }
 | 
			
		||||
            OsReleaseSIGIO();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -558,9 +566,12 @@ xf86VTSwitch(void)
 | 
			
		|||
            pInfo = pInfo->next;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (ih = InputHandlers; ih; ih = ih->next)
 | 
			
		||||
        for (ih = InputHandlers; ih; ih = ih->next) {
 | 
			
		||||
            if (ih->is_input)
 | 
			
		||||
                xf86EnableInputHandler(ih);
 | 
			
		||||
 | 
			
		||||
            else
 | 
			
		||||
                xf86EnableGeneralHandler(ih);
 | 
			
		||||
        }
 | 
			
		||||
#ifdef XSERVER_PLATFORM_BUS
 | 
			
		||||
        /* check for any new output devices */
 | 
			
		||||
        xf86platformVTProbe();
 | 
			
		||||
| 
						 | 
				
			
			@ -600,8 +611,10 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data)
 | 
			
		|||
{
 | 
			
		||||
    IHPtr ih = addInputHandler(fd, proc, data);
 | 
			
		||||
 | 
			
		||||
    if (ih)
 | 
			
		||||
    if (ih) {
 | 
			
		||||
        AddEnabledDevice(fd);
 | 
			
		||||
        ih->is_input = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
    return ih;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue