Skip to content
  • Jens Granseuer's avatar
    [typing-break] Reset timer after suspend · 543251c2
    Jens Granseuer authored
    This patch does 2 things:
    1) Defines a DrwTimer that we use instead of GTimer. This is just a thin
    wrapper around g_get_current_time, and it means we can accurately track
    typing/idle periods based on real-world wall-clock time, which GTimer is
    apparently not intended to do.
    
    2) The typing monitor has some complicated state handling where it transitions
    between an IDLE state and a TYPING state. This transition is based on running a
    callback once per second, and checking whether any keystrokes have been
    recorded since the last time the callback was called. The actual idle *time* is
    tracked separately, independently of these two states, but only when we are in
    the IDLE *state* was the idle *time* checked to see if we should reset the
    break timer. This leads to a race condition -- if we suspend while in the
    TYPING state, then eventually we will wake up, notice that no key press has
    happened in the last second, *reset the idle timer*, transition to the IDLE
    state, and then check the amount of time on the idle timer. We will thus never
    notice the amount of time that the computer was suspended.
    
    I considered making the IDLE/TYPING transition code smarter, but it turns out
    the desired behavior for the two states is entirely identical anyway, so rather
    than adding more complexity to this pointless code, I just diked it out and
    replaced them both by a single state called RUNNING.
    
    Closes bug #430797.
    543251c2