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

Peter Hutterer peter.hutterer at who-t.net
Mon Aug 12 18:29:36 PDT 2013


On Mon, Aug 12, 2013 at 06:20:36PM +0200, Egbert Eich 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>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
   Peter

> ---
>  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