[PATCH] DDX/Events: Distinguish between Input- and GeneralHandlers in xf86VTSwitch()

Daniel Stone daniel at fooishbar.org
Mon Aug 12 12:59:38 PDT 2013


Good catch! This actually explains quite a bit ...

Reviewed-by: Daniel Stone <daniel at fooishbar.org>

Cheers,
Daniel

On 12 August 2013 17:20, Egbert Eich <eich at freedesktop.org> 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 <eich at freedesktop.org>
> ---
>  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
>


More information about the xorg-devel mailing list