[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