Good catch! This actually explains quite a bit ... Reviewed-by: Daniel Stone <[email protected]>
Cheers, Daniel On 12 August 2013 17:20, Egbert Eich <[email protected]> wrote: > 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 <[email protected]> > --- > hw/xfree86/common/xf86Events.c | 31 ++++++++++++++++++++++--------- > 1 file changed, 22 insertions(+), 9 deletions(-) > > diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c > index 7a949fd..d0b1431 100644 > --- a/hw/xfree86/common/xf86Events.c > +++ b/hw/xfree86/common/xf86Events.c > @@ -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) > - xf86DisableInputHandler(ih); > + 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) > - xf86EnableInputHandler(ih); > - > + 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) > - xf86EnableInputHandler(ih); > - > + 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; > } > > -- > 1.8.1.4 > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
