
    i                     l    S SK JrJr  S SKrS SKr S SKJr   " S S\5      r	g! \ a	    S SKJr   Nf = f)    )ThreadLockN)Queuec                   L    \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	rg
)GenericListener   c                 >    / U l         SU l        [        5       U l        g )NF)handlers	listeningr   queueselfs    U/home/kali/github-search/github-env/lib/python3.13/site-packages/keyboard/_generic.py__init__GenericListener.__init__   s    W
    c                     U R                    H  n U" U5      (       a    gM     g ! [         a   n[        R                  " 5          S nAM=  S nAff = f)N   )r
   	Exception	traceback	print_exc)r   eventhandleres       r   invoke_handlersGenericListener.invoke_handlers   sG    }}G&5>> " %
  &##%%&s   %
AA

Ac                    U R                   R                  5          U R                  (       d  U R                  5         SU l        [	        U R
                  S9U l        SU R                  l        U R                  R                  5         [	        U R                  S9U l
        SU R                  l        U R                  R                  5         U R                   R                  5         g! U R                   R                  5         f = f)z3
Starts the listening thread if it wasn't already.
T)targetN)lockacquirer   initr   listenlistening_threaddaemonstartprocessprocessing_threadreleaser   s    r   start_if_necessary"GenericListener.start_if_necessary   s     				 >>		!%(.dkk(B%/3%%,%%++-)/t||)D&04&&-&&,,.IIDIIs   B.C% %Dc                     [        S5      e)Nz5This method should be implemented in the child class.)NotImplementedErrorr   r   s     r   pre_process_event!GenericListener.pre_process_event0   s    !"YZZr   c                     U R                   c   e U R                   R                  5       nU R                  U5      (       a  U R                  U5        U R                   R	                  5         M]  )zH
Loops over the underlying queue of events and processes them in order.
)r   getr.   r   	task_doner-   s     r   r&   GenericListener.process3   s[     zz%%%JJNN$E%%e,,$$U+JJ  "	 r   c                 Z    U R                  5         U R                  R                  U5        g)z^
Adds a function to receive each event captured, starting the capturing
process if necessary.
N)r)   r
   appendr   r   s     r   add_handlerGenericListener.add_handler>   s"    
 	!W%r   c                 |    XR                   ;   a-  U R                   R                  U5        XR                   ;   a  M,  gg)z*Removes a previously added event handler. N)r
   remover6   s     r   remove_handlerGenericListener.remove_handlerF   s*    &MM  ) &r   )r
   r   r#   r'   r   N)__name__
__module____qualname____firstlineno__r   r   r   r   r)   r.   r&   r7   r;   __static_attributes__ r   r   r   r      s-    6D
& ([	#&*r   r   )
	threadingr   r   r   	functoolsr   r   ImportErrorobjectr   rB   r   r   <module>rG      s6    "  >*f >*  s   $ 33