|  | 
              
                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.
       |