Skip to content
  • Keith Packard's avatar
    dix: Don't update current time in the middle of input event processing · 7c77c42f
    Keith Packard authored
    In patch 137ac094
    
    , Adam moved an
    expensive call to UpdateCurrentTime out of the main dispatch
    loop. That's a good change as the original fix from Chase was a bit
    expensive. However, it breaks grab processing and so a couple of the
    calls to UpdateCurrenTime need to be removed.
    
    Input event processing can generate a stream of events; a button press
    that activates a grab will send a press followed by a sequence of
    enter/leave events. All of these should have the same time stamp on
    the wire as they occur at the 'same' time.
    
    More importantly, the grab time recorded in the device is pulled from
    currentTime after all of the events are delivered, so if currentTime
    doesn't match the time in the device event, then future grab
    modifications will fail as the time marked in the device will be
    'later' than the grab time known to the client (which is defined as
    the timestamp from the activating input event).
    
    A bit of history here -- it used to be that currentTime was driven
    *entirely* by input events; those timestamps didn't even have to be
    related to the system time in any way. Then we started doing ICCCM
    stuff and people got confused when PropertyNotify events would have
    the same timestamp even when delivered minutes apart because no input
    events were delivered.
    
    We added code in the server to go update the time, but only if no
    input events were pending (so that the clock "wouldn't" go
    backwards). The only places where this is necessary is in request
    processing which may generate an event with a timestamp, and there
    only at the very top of the request processing code so that the whole
    request would be processed at the 'same time', just like events.
    
    cc: Chase Douglas <chase.douglas@canonical.com>
    cc: Peter Hutterer <peter.hutterer@who-t.net>
    cc: Adam Jackson <ajax@redhat.com>
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    Tested-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
    Acked-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    7c77c42f