• Keith Packard's avatar
    hw/xfree86: Fix block handler wrapping in xf86Rotate · 08fc3304
    Keith Packard authored
    xf86Rotate, it was delaying unwrapping the BlockHandler until after
    calling xf86RotateRedisplay. If there was a software cursor on the
    screen, the redisplay operation would cause cursor to be removed from
    the frame buffer and the misprite block handler to be inserted into
    the block handler chain with the misprite screen private saved block
    handler now set to xf86RotateBlockHandler.
    
    When xf86RotateRedisplay returned, xf86RotateBlockHandler would then
    set screen->BlockHandler to its saved value, call down and then reset
    screen->BlockHandler to xf86RotateBlockHandler. miSpriteBlockHandler
    would never be called after that, which meant that the software cursor
    will now disappear from the screen whenever rendering overlapped and
    would only reappear when the cursor was moved.
    
    To correct this, all that is needed is to move the restoration of
    screen->BlockHandler to the top of xf86RotateBlockHandler, before the
    call to xf86RotateRedisplay.
    Signed-off-by: Keith Packard's avatarKeith Packard <keithp@keithp.com>
    Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
    08fc3304
xf86Rotate.c 15.9 KB