[PATCH 1/3][master][1.12] Don't attempt to add non-master core touch pointer emulation listeners

Chase Douglas chase.douglas at canonical.com
Mon Apr 16 11:22:48 PDT 2012


On 04/12/2012 10:38 PM, Peter Hutterer wrote:
> On Wed, Apr 04, 2012 at 01:48:09PM -0700, Chase Douglas wrote:
>> Core events aren't generated for slave devices, so this is just wrong.
>> On top of that, the mask being checked in the removed hunk is wrong as
>> well. It is dereferencing a pointer of type OtherClients as though it
>> were a pointer to type InputClients.
>>
>> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
>> ---
>>  dix/touch.c |   12 ------------
>>  1 files changed, 0 insertions(+), 12 deletions(-)
>>
>> diff --git a/dix/touch.c b/dix/touch.c
>> index 0829b65..fcec916 100644
>> --- a/dix/touch.c
>> +++ b/dix/touch.c
>> @@ -830,18 +830,6 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
>>                               win);
>>              return TRUE;
>>          }
>> -
>> -        /* all others */
>> -        nt_list_for_each_entry(iclients, (InputClients *) wOtherClients(win),
>> -                               next) {
>> -            if (!(iclients->mask[XIAllDevices] & core_filter))
>> -                continue;
>> -
>> -            TouchEventHistoryAllocate(ti);
>> -            TouchAddListener(ti, iclients->resource, CORE,
>> -                             type, LISTENER_AWAITING_BEGIN, win);
>> -            return TRUE;
>> -        }
>>      }
>>  
>>      return FALSE;
>> -- 
>> 1.7.9.1
> 
> wouldn't you have to check for IsMaster() somewhere?
> iirc, this code is called for slave and master devices, but then again my
> brain is a bit mushy by now.

See the block right above the one being removed here:

if (mask & EVENT_CORE_MASK) {
    int coretype = GetCoreType(TouchGetPointerEventType(ev));
    Mask core_filter = event_get_filter_from_type(dev, coretype);

    /* window owner */
    if (IsMaster(dev) && (win->eventMask & core_filter)) {
        TouchEventHistoryAllocate(ti);
        TouchAddListener(ti, win->drawable.id, CORE,
                         LISTENER_POINTER_REGULAR, LISTENER_AWAITING_BEGIN,
                         win);
        return TRUE;
    }

It does check IsMaster(dev).

-- Chase


More information about the xorg-devel mailing list