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;
 | 
					    InputHandlerProc ihproc;
 | 
				
			||||||
    pointer data;
 | 
					    pointer data;
 | 
				
			||||||
    Bool enabled;
 | 
					    Bool enabled;
 | 
				
			||||||
 | 
					    Bool is_input;
 | 
				
			||||||
    struct x_IHRec *next;
 | 
					    struct x_IHRec *next;
 | 
				
			||||||
} IHRec, *IHPtr;
 | 
					} IHRec, *IHPtr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -446,8 +447,12 @@ xf86VTSwitch(void)
 | 
				
			||||||
         * Keep the order: Disable Device > LeaveVT
 | 
					         * Keep the order: Disable Device > LeaveVT
 | 
				
			||||||
         *                        EnterVT > EnableDevice
 | 
					         *                        EnterVT > EnableDevice
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        for (ih = InputHandlers; ih; ih = ih->next)
 | 
					        for (ih = InputHandlers; ih; ih = ih->next) {
 | 
				
			||||||
            xf86DisableInputHandler(ih);
 | 
					            if (ih->is_input)
 | 
				
			||||||
 | 
					                xf86DisableInputHandler(ih);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                xf86DisableGeneralHandler(ih);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
 | 
					        for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
 | 
				
			||||||
            if (pInfo->dev) {
 | 
					            if (pInfo->dev) {
 | 
				
			||||||
                if (!pInfo->dev->enabled)
 | 
					                if (!pInfo->dev->enabled)
 | 
				
			||||||
| 
						 | 
					@ -496,9 +501,12 @@ xf86VTSwitch(void)
 | 
				
			||||||
                pInfo->flags &= ~XI86_DEVICE_DISABLED;
 | 
					                pInfo->flags &= ~XI86_DEVICE_DISABLED;
 | 
				
			||||||
                pInfo = pInfo->next;
 | 
					                pInfo = pInfo->next;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            for (ih = InputHandlers; ih; ih = ih->next)
 | 
					            for (ih = InputHandlers; ih; ih = ih->next) {
 | 
				
			||||||
                xf86EnableInputHandler(ih);
 | 
					                if (ih->is_input)
 | 
				
			||||||
 | 
					                    xf86EnableInputHandler(ih);
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    xf86EnableGeneralHandler(ih);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            OsReleaseSIGIO();
 | 
					            OsReleaseSIGIO();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -558,9 +566,12 @@ xf86VTSwitch(void)
 | 
				
			||||||
            pInfo = pInfo->next;
 | 
					            pInfo = pInfo->next;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (ih = InputHandlers; ih; ih = ih->next)
 | 
					        for (ih = InputHandlers; ih; ih = ih->next) {
 | 
				
			||||||
            xf86EnableInputHandler(ih);
 | 
					            if (ih->is_input)
 | 
				
			||||||
 | 
					                xf86EnableInputHandler(ih);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                xf86EnableGeneralHandler(ih);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
#ifdef XSERVER_PLATFORM_BUS
 | 
					#ifdef XSERVER_PLATFORM_BUS
 | 
				
			||||||
        /* check for any new output devices */
 | 
					        /* check for any new output devices */
 | 
				
			||||||
        xf86platformVTProbe();
 | 
					        xf86platformVTProbe();
 | 
				
			||||||
| 
						 | 
					@ -600,8 +611,10 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    IHPtr ih = addInputHandler(fd, proc, data);
 | 
					    IHPtr ih = addInputHandler(fd, proc, data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ih)
 | 
					    if (ih) {
 | 
				
			||||||
        AddEnabledDevice(fd);
 | 
					        AddEnabledDevice(fd);
 | 
				
			||||||
 | 
					        ih->is_input = TRUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    return ih;
 | 
					    return ih;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue