|  | 
              
                Selected by: 
              
                :focus-change.
             
              :focus-in
              and
              :focus-out
              events are generated when the input focus changes. All
              :focus-out
              events caused by a window :unmap are generated after any
              :unmap-notify
              event, but the ordering of
              :focus-out
              with respect to generated
              :enter-notify,
              :leave-notify,
              :visibility-notify,
              and :expose events is not constrained. 
             
              
                window, event-window 
              
                Type
                window.
                For
                :focus-in,
                the new input focus window. For :focus-out, the
                previous input focus window. 
              
                mode 
              
                Type (member :normal :while-grabbed :grab :ungrab).
                Events generated by
                set-input-focus
                when the keyboard is not grabbed have mode :normal.
                Events generated by
                set-input-focus
                when the keyboard is grabbed have mode :while-grabbed.
                Events generated when a keyboard grab activates have mode
                :grab, and events generated when a keyboard grab
                deactivates have mode :ungrab. 
              
                kind 
              
                Type (member :ancestor :virtual :inferior :nonlinear
                :nonlinear-virtual :pointer :pointer-root :none). When the
                focus moves from window A to window B, and A is an inferior of
                B, with the pointer in window P: 
                
                  
                    :focus-out
                    with kind :ancestor is generated on A 
                  
                    :focus-out
                    with kind :virtual is generated on each
                    window between A and B exclusive (in that order) 
                  
                    :focus-in
                    with kind :inferior is generated on B 
                  
                    If P is an inferior of B, but P is not A or an inferior of
                    A or an ancestor of A,
                    :focus-in
                    with kind :pointer is generated on each
                    window below B down to and including P (in order)
                 
                  When the focus moves from window A to window B, and B is an
                  inferior of A, with the pointer in window P: 
                 
                  
                    If P is an inferior of A, but P is not A or an inferior of
                    B or an ancestor of B,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to but not including A (in order) 
                  
                    :focus-out
                    with kind :inferior is generated on A 
                  
                    :focus-in
                    with kind :virtual is generated on each
                    window between A and B exclusive (in that order) 
                  
                    :focus-in
                    with kind :ancestor is generated on B
                 
                  When the focus moves from window A to window B, with window
                  C being their least common ancestor, and with the pointer in
                  window P: 
                 
                  
                    If P is an inferior of A,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to but not including A (in order) 
                  
                    :focus-out
                    with kind :nonlinear is generated on A 
                  
                    :focus-out
                    with kind :nonlinear-virtual is generated on
                    each window between A and C exclusive (in that order) 
                  
                    :focus-in
                    with kind :nonlinear-virtual is generated on
                    each window between C and B exclusive (in that order) 
                  
                    :focus-in with kind :nonlinear is generated
                    on B 
                  
                    If P is an inferior of B,
                    :focus-in
                    with kind :pointer is generated on each
                    window below B down to and including P (in order)
                 
                  When the focus moves from window A to window B, on different
                  screens, with the pointer in window P: 
                 
                  
                    If P is an inferior of A,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to but not including A (in order) 
                  
                    :focus-out
                    with kind :nonlinear is generated on A 
                  
                    If A is not a root window,
                    :focus-out
                    with kind :nonlinear-virtual is generated on
                    each window above A up to and including its root (in
                    order) 
                  
                    If B is not a root window,
                    :focus-in
                    with kind :nonlinear-virtual is generated on
                    each window from B's root down to but not including B (in
                    order) 
                  
                    :focus-in
                    with kind :nonlinear is generated on B 
                  
                    If P is an inferior of B,
                    :focus-in
                    with kind :pointer is generated on each
                    window below B down to and including P (in order)
                 
                  When the focus moves from window A to :pointer-root
                  (or :none), with the pointer in window P: 
                 
                  
                    If P is an inferior of A,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to but not including A (in order) 
                  
                    :focus-out
                    with kind :nonlinear is generated on A 
                  
                    If A is not a root window,
                    :focus-out
                    with kind :nonlinear-virtual is generated on
                    each window above A up to and including its root (in
                    order) 
                  
                    :focus-in
                    with kind :pointer-root (or :none) is
                    generated on all root windows 
                  
                    If the new focus is :pointer-root,
                    :focus-in
                    with kind :pointer is generated on each
                    window from P's root down to and including P (in order)
                 
                  When the focus moves from :pointer-root (or
                  :none) to window A, with the pointer in window P: 
                 
                  
                    If the old focus is :pointer-root,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to and including P's root (in order) 
                  
                    :focus-out
                    with kind :pointer-root (or :none) is
                    generated on all root windows 
                  
                    If A is not a root window,
                    :focus-in
                    with kind :nonlinear-virtual is generated on
                    each window from A's root down to but not including A (in
                    order) 
                  
                    :focus-in
                    with kind :nonlinear is generated on A 
                  
                    If P is an inferior of A,
                    :focus-in
                    with kind :pointer is generated on each
                    window below A down to and including P (in order)
                 
                  When the focus moves from :pointer-root to
                  :none (or vice versa), with the pointer in window P: 
                 
                  
                    If the old focus is :pointer-root,
                    :focus-out
                    with kind :pointer is generated on each
                    window from P up to and including P's root (in order) 
                  
                    :focus-out
                    with kind :pointer-root (or :none) is
                    generated on all root windows 
                  
                    :focus-in
                    with kind :none (or :pointer-root) is
                    generated on all root windows 
                  
                    If the new focus is :pointer-root,
                    :focus-in
                    with kind :pointer is generated on each
                    window from P's root down to and including P (in order)
                 
              When a keyboard grab activates (but before generating any actual
              :key-press
              event that activates the grab), with G the
              grab-window for the grab and F the current focus,
              then
              :focus-in
              and
              :focus-out
              events with mode :grab are generated (as for
              :normal above) as if the focus were to change from
              F to G. 
             
              When a keyboard grab deactivates (but after generating any
              actual
              :key-release
              event that deactivates the grab), with G the
              grab-window for the grab and F the current focus,
              then
              :focus-in
              and
              :focus-out
              events with mode :ungrab are generated (as for
              :normal above) as if the focus were to change from
              G to F.
           |