
    is              	          S SK r S SKrS SKrS SKrSSKJrJrJrJrJ	r	J
r
JrJrJrJr  \\R                  \R                   \R"                  \R$                  4\	\R&                  \R(                  \R*                  \R,                  4\
\R.                  \R0                  \R2                  \R4                  40r\S\	S\
S0rSSSS S.r " S S\5      rS r S	 r!\4S
 jr"\4S jr#SS jr$S r%S r&g)    N   )
ButtonEvent
WheelEvent	MoveEventLEFTRIGHTMIDDLEXX2UPDOWNF)timebuttonpositionclick_countc                   *    \ rS rSrSS jrS rS rSrg)MouseEventListener   c                 *    X l         Xl        SU l        g )NT)blockingcallback	listening)selfr   r   s      Y/home/kali/github-search/github-env/lib/python3.13/site-packages/keyboard/_darwinmouse.py__init__MouseEventListener.__init__   s          c           	         [         R                  " [         R                  [         R                  [         R                  [         R
                  " [         R                  5      [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  U R                  S5      U l        [         R                   " SU R                  S5      n[         R"                  " 5       n[         R$                  " X![         R&                  5        [         R(                  " U R                  S5        U R*                  (       a:  [         R,                  " [         R&                  SS5        U R*                  (       a  M9  gg)zaCreates a listener and loops while waiting for an event. Intended to run as
a background thread. Nr   T   F)QuartzCGEventTapCreatekCGSessionEventTapkCGHeadInsertEventTapkCGEventTapOptionDefaultCGEventMaskBitkCGEventLeftMouseDownkCGEventLeftMouseUpkCGEventRightMouseDownkCGEventRightMouseUpkCGEventOtherMouseDownkCGEventOtherMouseUpkCGEventMouseMovedkCGEventScrollWheelhandlertapCFMachPortCreateRunLoopSourceCFRunLoopGetCurrentCFRunLoopAddSourcekCFRunLoopDefaultModeCGEventTapEnabler   CFRunLoopRunInMode)r   
loopsourceloops      r   runMouseEventListener.run   s    **%%((++!!&">">?!!&"<"<=>!!&"?"?@A !!&"="=>? !!&"?"?@	A
 !!&"="=>? !!&";";<= !!&"<"<=> LL 99$!L
))+!!$F4P4PQ$/nn%%f&B&BAuM nnnr   c           	      l   [         R                  " U[         R                  5      n[        U5      n[         R                  " U5      nSnU[         R
                  -  n	U[         R                  :X  a  SnOU[         R                  :X  a  SnU R                  (       a  g U R                  [        XXiS95        U$ )N downup)name	is_keypad)r    CGEventGetIntegerValueFieldkCGKeyboardEventKeycodename_from_scancodeCGEventGetFlagskCGEventFlagMaskNumericPadkCGEventKeyDownkCGEventKeyUpr   r   KeyboardEvent)
r   proxye_typeeventrefcon	scan_codekey_nameflags
event_typer?   s
             r   r.   MouseEventListener.handler7   s    66uf>\>\]	%i0&&u-
V>>>	V+++Jv+++J==mJ^_r   )r   r   r   r/   N)F)__name__
__module____qualname____firstlineno__r   r8   r.   __static_attributes__ r   r   r   r      s    
N2r   r   c                      g)zInitializes mouse state NrV   rV   r   r   initrX   K   s    r   c                    ^  [         R                  " 5       S:X  d  [        S5      e[        U 4S j5      n[        R
                  " UR                  SS9nSUl        UR                  5         g)zFAppends events to the queue (ButtonEvent, WheelEvent, and MoveEvent). r   z'Error 13 - Must be run as administratorc                    > TR                  U 5      =(       d'    [        U R                  U R                  [        :H  5      $ )N)put
is_allowedr>   rO   KEY_UP)equeues    r   <lambda>listen.<locals>.<lambda>S   s*    EIIaL,fJqvvq||_eOe<f,fr   rV   )targetargsTN)	osgeteuidOSErrorr   	threadingThreadr8   daemonstart)r_   listenerts   `  r   listenrm   O   sN    ::<1?@@!"fgH26AAHGGIr   c                    [        5       n[        U    u  p#  n[        R                  " SUUU5      n[        S   bv  [
        R
                  R                  5       [        S   -
  [
        R                  " SS9:  a8  [        S   U :X  a+  [        S   U:X  a  [        S[        S   S	-   5      [        S'   O	S	[        S'   [        R                  " U[        R                  [        S   5        [        R                  " [        R                  U5        S
[        U '   [
        R
                  R                  5       [        S'   U [        S'   U[        S'   g)zJSends a down event for the specified button, using the provided constants Nr   g333333?)secondsr   r      r   r   T)get_position_button_mappingr    CGEventCreateMouseEvent_last_clickdatetimenow	timedeltaminCGEventSetIntegerValueFieldkCGMouseEventClickStateCGEventPostkCGHIDEventTap_button_state)r   locationbutton_codebutton_down_r^   s         r   pressr   X   sO   ~H%4V%<"Ka&&		A 6&8+<+<+@+@+B[QWEX+X[c[m[mvy[z+z  @K  LT  @U  Y_  @_  do  pz  d{  G  dG%(K,Fq,H%IM" &'M"
&&	&&M"$ v,,a0 M&"++//1K"K&K
r   c                    [        5       n[        U    u  p#pC[        R                  " SUUU5      n[        S   b  [        S   [
        R
                  R                  5       [
        R                  " SS9-
  :  aG  [        S   U :X  a:  [        S   U:X  a-  [        R                  " U[        R                  [        S   5        [        R                  " [        R                  U5        S[        U '   g)	zISends an up event for the specified button, using the provided constants Nr   i )microsecondsr   r   r   F)rq   rr   r    rs   rt   ru   rv   rw   ry   rz   r{   r|   r}   )r   r~   r   r   	button_upr^   s         r   releaser   s   s   ~H#26#: KI&&		A 6&;v+>ARARAVAVAX[c[m[m  |B  \C  BC  ,C  HS  T\  H]  ag  Hg  lw  xB  lC  GO  lO****&	( v,,a0!M&r   c                 d   [        5       n[        R                  " S[        R                  U[        R                  5      n[        R
                  " S[        R                  SU 5      n[        R                  " [        R                  U5        [        R                  " [        R                  U5        g)z]Sends a wheel event for the provided number of clicks. May be negative to reverse
direction. Nr   )	rq   r    rs   r-   kCGMouseButtonLeftCGEventCreateScrollWheelEventkCGScrollEventUnitLiner{   r|   )deltar~   r^   e2s       r   wheelr      s     ~H&&""!!		#A
 
	-	-%%		
B
 v,,a0
v,,b1r   c                 P   [          HA  n[         U   (       d  M  [        R                  " S[        U   S   X4[        U   S   5      n  O8   [        R                  " S[        R                  X4[        R
                  5      n[        R                  " [        R                  U5        g)z8Sets the mouse's location to the specified coordinates. Nrp   r   )r}   r    rs   rr   r,   r   r{   r|   )xybr^   s       r   move_tor      s    .."1%"1%	'A
   **%%F%%	'
 v,,a0r   c                      [         R                  " S5      n [         R                  " U 5      nUR                  UR                  4$ )z3Returns the mouse's location as a tuple of (x, y). N)r    CGEventCreateCGEventGetLocationr   r   )r^   points     r   rq   rq      s5    T"A%%a(EGGUWWr   )r   )'rd   ru   rg   r    _mouse_eventr   r   r   r   r   r	   r
   r   r   r   r   r&   r'   kCGEventLeftMouseDraggedkCGMouseButtonRightr(   r)   kCGEventRightMouseDraggedkCGMouseButtonCenterr*   r+   kCGEventOtherMouseDraggedrr   r}   rt   objectr   rX   rm   r   r   r   r   rq   rV   r   r   <module>r      s   	    b b b 	6$$f&B&BFD^D^`f``  A	F&&(E(EvGbGbdj  eE  eE  F
V((&*G*GIdIdfl  gG  gG  H 	%	5
E 	/ /f	  '6  "&2"1$r   