
    iX                        d Z 	 ddlZddlZddl	Z	ddl
ZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# ddl$m%Z%  G d	 d
e%jL                        Z& G d dejN                        Z( G d dee%jR                        Z)e)jT                   G d dee%jV                               Z+y# e$ r#Z edj                   ee            e      dZ[ww xY w)z)
The keyboard implementation for *Xorg*.
    Nz"failed to acquire X connection: {})NotifierMixin)
alt_maskalt_gr_maskchar_to_keysymdisplay_managerindex_to_shiftkeyboard_mappingListenerMixinnumlock_maskshift_to_indexsymbol_to_keysym)CHARS	DEAD_KEYSKEYPAD_KEYSKEYSYMSSYMBOLS   )_basec                   4    e Zd ZdZdZed        Zed        Zy)KeyCode)_symbolNc                 V   t         j                  j                  |      }|r | j                  |fd|i|S |s>	 d|z   } | j                  t	        t         j
                  j                  |d      fd|i|S y#   | j                  t        j                  |d      d   fd|i|cY S xY w)zoCreates a key from a symbol.

        :param str symbol: The symbol name.

        :return: a key code
        r   XK_r   )r   N)	XlibXKstring_to_keysymfrom_vkgetattr	keysymdefxkbr   get)clssymbolkwargskeysyms       _/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pynput/keyboard/_xorg.py_from_symbolzKeyCode._from_symbolK   s     ))&13;;v@v@@@ 
"s{{DNN..:"  	 "s{{KK-a0"  s   <A8 8.B(c                 .     | j                   d|z   fi |S )zCreates a media key from a partial name.

        :param str name: The name. The actual symbol name will be this string
            with ``'XF86_Audio'`` prepended.

        :return: a key code
        
XF86_Audio)r'   )r"   namer$   s      r&   _from_mediazKeyCode._from_mediah   s!      st 3>v>>    )__name__
__module____qualname___PLATFORM_EXTENSIONSr   classmethodr'   r+    r,   r&   r   r   B   s7     G 8 ? ?r,   r   c                      e Zd Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Z	ej	                  d      Z
ej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d	      Zej	                  d
      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Zej	                  d      Z ej	                  d      Z!ej	                  d      Z"ej	                  d      Z#ej	                  d      Z$ej	                  d      Z%ej	                  d      Z&ej	                  d       Z'ej	                  d!      Z(ej	                  d"      Z)ej	                  d#      Z*ej	                  d$      Z+ej	                  d%      Z,ej	                  d&      Z-ej	                  d'      Z.ej	                  d(      Z/ej	                  d(      Z0ej	                  d)      Z1ej	                  d*d+,      Z2ej	                  d-      Z3ej	                  d.      Z4ejk                  d/      Z6ejk                  d0      Z7ejk                  d1      Z8ejk                  d2      Z9ejk                  d3      Z:ejk                  d4      Z;ej	                  d5      Z<ej	                  d6      Z=ej	                  d7      Z>ej	                  d8      Z?ej	                  d9      Z@ej	                  d:      ZAy;)<KeyAlt_LAlt_RMode_switch	BackSpace	Caps_LockSuper_LSuper_R	Control_L	Control_RDeleteDownEndReturnEscapeF1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20HomeLeft	Page_DownPage_UpRightShift_LShift_Rspace )charTabUpPlayMuteLowerVolumeRaiseVolumePrevNextInsertMenuNum_LockPausePrintScroll_LockN)Br-   r.   r/   r   r'   altalt_lalt_ralt_gr	backspace	caps_lockcmdcmd_lcmd_rctrlctrl_lctrl_rdeletedownendenterescf1f2f3f4f5f6f7f8f9f10f11f12f13f14f15f16f17f18f19f20homeleft	page_downpage_uprightshiftshift_lshift_rr^   tabupr+   media_play_pausemedia_volume_mutemedia_volume_downmedia_volume_upmedia_previous
media_nextinsertmenunum_lockpauseprint_screenscroll_lockr2   r,   r&   r4   r4   u   s   


w
'C  )E  )E!!-0F$$[1I$$[1I


y
)C  +E  +E,D!!+.F!!+.F!!(+F'D


u
%C  *E


x
(C			d	#B			d	#B			d	#B			d	#B			d	#B			d	#B			d	#B			d	#B			d	#B


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C


u
%C'D'D$$[1I""9-G  )E  +E""9-G""9-G  s 3E


u
%C			d	#B**62++F3++M:))-8O((0N$$V,J!!(+F'D##J/H  )E''0L&&}5Kr,   r4   c                        e Zd ZeZeZej                  j                  Z
ej                  j                  Z fdZd Zed        Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Z xZS )
Controllerc                 (   t        t        | 
  |i | t        j                  j                         | _        d | _        i | _        t        j                         | _        t        | j                        | _        t        | j                        | _        y N)superr   __init__r   displayDisplay_display_keyboard_mapping_borrows	threadingRLock_borrow_lockr   ALT_MASKr   ALT_GR_MASKselfargsr$   	__class__s      r&   r   zController.__init__   sl    j$($9&9,,.!%%OO- !/&t}}5r,   c                 R    t        | d      r| j                  j                          y y )Nr   )hasattrr   closer   s    r&   __del__zController.__del__   s!    4$MM! %r,   c                 R    | j                   s| j                          | j                   S )zA mapping from *keysyms* to *key codes*.

        Each value is the tuple ``(key_code, shift_state)``. By sending an
        event with the specified *key code* and shift state, the specified
        *keysym* will be touched.
        )r   _update_keyboard_mappingr   s    r&   r	   zController.keyboard_mapping   s%     %%))+%%%r,   c           
         |r$t         j                  j                  j                  n#t         j                  j                  j                  }| j                  |      }|| j                  |      |j                  t        | j                        5 }t         j                  j                  j                  ||rt         j                  j                  nt         j                  j                  |j                  |j                               ddd       n&	 | j                  |   \  }}| j!                  |||       | j+                  d||       y# 1 sw Y   xY w# t"        $ rz | j$                  5  | j&                  |   \  }}}	| j!                  ||t)        | j                  |             |	|rdndz  }	|||	f| j&                  |<   ddd       n# 1 sw Y   nxY wY w xY w)zResolves a key identifier and sends a keyboard event.

        :param int key: The key to handle.
        :param bool is_press: Whether this is a press.
        Nr   _on_fake_event)r   r   eventKeyPress
KeyRelease_keysymInvalidKeyExceptionvkr   r   extxtest
fake_inputXkeysym_to_keycoder	   	_send_keyKeyErrorr   r   r   _emit)
r   keyis_pressr   r%   dmkeycodeshift_stateindexcounts
             r&   _handlezController._handle   s    08""++##.. 	c" >**3//
 66 / 22))'/DFFOOTVV5F5F((022 2D'+'<'<V'D$ug{; 	

#S(312 2  D&& D,0MM&,A)GUENN&t}}e<> (Q2E-4eU,CDMM&)D D DDs8   A9E%E EG-AG	GG	GGc                     |j                   r| j                  |      S 	 | j                  |      xs7 | j                  |      xs$ | j	                  |      xs | j                  |      S )z\Converts a key to a *keysym*.

        :param KeyCode key: The key code to convert.
        )is_dead_resolve_dead_resolve_special_resolve_normal_resolve_borrowed_resolve_borrowingr   r   s     r&   r   zController._keysym  sr    
 +.++t!!#& 	, <,$$S)<,##C(<, %%c*<, &&s+		,r,   c                    t        | j                        5 | j                  5 }j                         j                  t        dfd      } | |||| j                  |      z  dj                         j                  dt        j                  j                  dddd             ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)a  Sends a single keyboard event.

        :param event: The *X* keyboard event.

        :param int keycode: The calculated keycode.

        :param int shift_state: The shift state. The actual value used is
            :attr:`shift_state` or'd with this value.
        
send_eventc                 (    j                  |       S r   )r   )r   r   windows    r&   <lambda>z&Controller._send_key.<locals>.<lambda>'  s    bmmFE: r,   r   )detailstatetimerootr   same_screenchildroot_xroot_yevent_xevent_yN)r   r   	modifiersget_input_focusfocusr   _shift_maskscreenr   r   r   NONE)r   r   r   r   r   r   r   r   s         @@r&   r   zController._send_key  s     T]]+ 	;r4>> 	;Y '')//F :<J u!D$4$4Y$??YY[%%ffkkAq: ;	; 	; 	; 	; 	; 	;s#   C	BB=,C	=C	C		Cc                 n    	 t         t        |j                        \  }}|| j                  vry|S #  Y yxY w)z`Tries to resolve a dead key.

        :param str identifier: The identifier to resolve.
        N)r   r   	combiningr	   )r   r   r%   _s       r&   r   zController._resolve_dead2  s@    	cmm 45IFA
 ...	s   0 4c                 4    |j                   sy|j                   S )zTries to resolve a special key.

        A special key has the :attr:`~KeyCode.vk` attribute set.

        :param KeyCode key: The key to resolve.
        Nr   r   s     r&   r   zController._resolve_specialC  s     vvvvr,   c                 L    | j                  |      }|y|| j                  vry|S )zTries to resolve a normal key.

        A normal key exists on the keyboard, and is typed by pressing
        and releasing a simple key, possibly in combination with a modifier.

        :param KeyCode key: The key to resolve.
        N)_key_to_keysymr	   r   r   r%   s      r&   r   zController._resolve_normalO  s2     $$S)>...r,   c                     | j                  |      }|y| j                  5  || j                  vr
	 ddd       y	 ddd       |S # 1 sw Y   |S xY w)zTries to resolve a key by looking up the already borrowed *keysyms*.

        A borrowed *keysym* does not exist on the keyboard, but has been
        temporarily added to the layout.

        :param KeyCode key: The key to resolve.
        N)r  r   r   r  s      r&   r   zController._resolve_borrowed`  s_     $$S)> 	T]]*	 	*	 		 s   AAc                    	
  j                        

y j                  j                  dd      d d 		 fd}fd} fd}	
 fd	}	 t         j                        5 } j                  5 } ||g |       xs  |       xs  |         ddd       ddd       
S # 1 sw Y   xY w# 1 sw Y   
S xY w# t
        $ r Y yw xY w)
zTries to resolve a key by modifying the layout temporarily.

        A borrowed *keysym* does not exist on the keyboard, but is temporarily
        added to the layout.

        :param KeyCode key: The key to resolve.
        N      c                     | dz   S Nr  r2   )r   s    r&   i2kcz+Controller._resolve_borrowing.<locals>.i2kc  s    19r,   c                     | dz
  S r  r2   )r   s    r&   kc2iz+Controller._resolve_borrowing.<locals>.kc2i  s    Q;r,   c                      j                   j                         D ]1  \  } \  }} }  |         }t        d      D ]  }||   r	||fc c S  3 y )N   )r   itemsrange)r   r   keycodesr   r  mappingr   s       r&   reusez,Controller._resolve_borrowing.<locals>.reuse  s^    &*mm&9&9&; ."?GQ"4=1 #1X .E#E?&~-.	.r,   c                  Z    t              D ]  \  } }t        |      r |       dfc S  y )Nr   )	enumerateany)ir  r	  r  s     r&   borrowz-Controller._resolve_borrowing.<locals>.borrow  s0    (1 &88}7A:%&r,   c                      j                   j                         D ]!  \  } \  }}}|dk  sj                   | = ||fc S  y Nr   )r   r  )r%   r   r   r   r   s       r&   	overwritez0Controller._resolve_borrowing.<locals>.overwrite  sH    37==3F3F3H *//%19f-"E>)*r,   c                 P    |      }j                   j                         }j                   j                         }||k7  rt        |      dk(  rt        |      dk(  rt	        d 	|   D              r
j                  t        j                  |            }
j                  t        j                  |            }|r|	|   d<   |ddf
j                  |<   |r5|	|   d<   |ddf
j                  |<   n	|   |<   ||df
j                  <   | j                  |	||dz           y )Nr   c              3   V   K   | ]!  }|t         j                  j                  k(   # y wr   )r   r   NoSymbol).0ms     r&   	<genexpr>zBController._resolve_borrowing.<locals>.register.<locals>.<genexpr>  s)      N) )))N)s   ')r   )
r`   lowerupperlenallr  r   	from_charr   change_keyboard_mapping)r   r   r   r  r!  r"  r  r   r%   r  r   s         r&   registerz/Controller._resolve_borrowing.<locals>.register  s"   WA HHNN$EHHNN$E~#e*/c%jAo# N)$QZN) K) ++G,=,=e,DE++G,=,=e,DE$)GAJqM,3Q?DMM%($)GAJqM,3Q?DMM%($*
5!)0%(;f%&&w!a%0@Ar,   )r  r   get_keyboard_mappingr   r   	TypeError)r   r   r  r  r  r'  r   r   r	  r  r%   r  s   ``      @@@@r&   r   zController._resolve_borrowingr  s     $$S)>--44Q@			.	&	*	B 	B.	 / "2t7H7H "A  "G  H K"" " M" " " M 		sH   C .B:;!B.B:$	C .B7	3B::C?C C 	CCc                     |j                   |j                   S t        j                  |j                  d      }|t	        |j                        S 	 t        |      S #  	 t        |   d   cY S #  Y Y yxY wxY w)zConverts a character key code to a *keysym*.

        :param KeyCode key: The key code.

        :return: a keysym if found
        :rtype: int or None
        Nr   )r   r   r!   r`   r   r   r   )r   r   r#   s      r&   r  zController._key_to_keysym  su     6666M 388T*>!#((++	#F++	vq))s*   
A A5A-*A5-A2/A52A5c                    dt         j                  |v r| j                  ndz  t         j                  |v r| j                  ndz  t         j
                  |v r| j                  ndz  t         j                  |v r| j                  z  S dz  S )zThe *X* modifier mask to apply for a set of modifiers.

        :param set modifiers: A set of active modifiers for which to get the
            shift mask.
        r   )	r4   ro   r   rr   r   rx   	CTRL_MASKr   
SHIFT_MASK)r   r   s     r&   r   zController._shift_mask  s     ''Y& }},-/
 **	) /02 ((i' ~~-.0 ))y( 1	2 /01	2r,   c                 x    t        | j                        5 }t        |      | _        ddd       y# 1 sw Y   yxY w)z&Updates the keyboard mapping.
        N)r   r   r	   r   )r   r   s     r&   r   z#Controller._update_keyboard_mapping  s4     T]]+ 	:r%5b%9D"	: 	: 	:s   09)r-   r.   r/   r   _KeyCoder4   _Keyr   r   ControlMaskr,  	ShiftMaskr-  r   r   propertyr	   r   r   r   r   r   r   r   r   r  r   r   __classcell__)r   s   @r&   r   r      s    HD ""I !!J
6" 	& 	&*4X	,;8"
"$N`:2(:r,   r   c                      e Zd Zej                  j
                  ej                  j                  fZeD  ci c]  }|j                  j                  | c}} Zi ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed	   ej                  d
      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  d      ed   ej                  ed   ej                  d      ed   ej                   ed   ej"                  ed   ej$                  i ed   ej                  d       ed!   ej&                  ed"   ej(                  ed#   ej*                  ed$   ej,                  ed%   ej.                  ed&   ej0                  ed'   ej2                  ed(   ej                  d)      ed*   ej4                  ed+   ej6                  ed,   ej8                  ed-   ej:                  ed.   ej                  d/      ed0   ej<                  ed1   ej>                  Z fd2Z!fd3Z"d4 Z#d5 Z$d6 Z%d7 Z&d8 Z'd9 Z(d: Z)xZ*S c c}} w );ListenerKP_00KP_11KP_22KP_33KP_44KP_55KP_66KP_77KP_88KP_99KP_Add+
KP_Decimal,	KP_Delete	KP_Divide/KP_DownKP_EndKP_EnterKP_Equal=KP_F1KP_F2KP_F3KP_F4KP_Home	KP_InsertKP_LeftKP_Multiply*KP_Page_Down
KP_Page_UpKP_RightKP_SpaceKP_Subtract-KP_TabKP_Upc                 :    t        t        | 
  |i | d | _        y r   )r   r6  r   r   r   s      r&   r   zListener.__init__)  s    h&77!%r,   c                 t    | j                         5  t        t        |           d d d        y # 1 sw Y   y xY wr   )_receiver   r6  _run)r   r   s    r&   rk  zListener._run-  s.    ]]_ 	)(D&(	) 	) 	)s   .7c                     |j                   j                  j                  }|j                   j                  j                  |z
  dz   }|j	                  ||      | _        y r  )r   infomin_keycodemax_keycoder(  r   )r   r   rn  keycode_counts       r&   _initializezListener._initialize1  sP     oo**66,,88;FJ!(!=!="(r,   c                 4   	 | j                  ||      }|j                  t        j                  j
                  k(  r| j                  ||       y |j                  t        j                  j                  k(  r| j                  ||       y y # t        $ r d }Y w xY wr   )	_event_to_key
IndexErrortyper   r   r   on_pressr   
on_release)r   r   r   injectedr   s        r&   _handle_messagezListener._handle_message9  s|    	$$We4C ::(MM#x(ZZ466,,,OOC* -  	C	s   B	 	BBc                     |j                         j                  j                  | j                  t        j
                  j                  t        j
                  j                  t        j
                  j                         y r   )r   r   grab_keyboard_event_maskr   r   GrabModeAsyncCurrentTimer   r   s     r&   _suppress_startzListener._suppress_startG  sK    ++dff22DFF4H4HFF	 r,   c                 V    |j                  t        j                  j                         y r   )ungrab_keyboardr   r   r~  r  s     r&   _suppress_stopzListener._suppress_stopL  s     2 23r,   c                      |r| j                   n| j                  | j                  j                  |j                  |      d       y)zThe handler for fake press events sent by the controllers.

        :param KeyCode key: The key pressed.

        :param bool is_press: Whether this is a press event.
        TN)rv  rw  _SPECIAL_KEYSr!   r   )r   r   r   s      r&   r   zListener._on_fake_eventO  s6     
8(""3663/	7r,   c                     |j                  ||      }|r|S |dz  r| j                  |||dz        S |dz  r| j                  |||dz        S y)a  Converts a keycode and shift state index to a keysym.

        This method uses a simplified version of the *X* convention to locate
        the correct keysym in the display table: since this method is only used
        to locate special keys, alphanumeric keys are not treated specially.

        :param display: The current *X* display.

        :param keycode: The keycode.

        :param index: The shift state index.

        :return: a keysym
           r   r   )keycode_to_keysym_keycode_to_keysym)r   r   r   r   r%   s        r&   r  zListener._keycode_to_keysymY  sa     **7E:MS[**7GUT\JJS[**7GUT\JJr,   c                    |j                   }t        ||j                        }| j                  |||      }|| j                  v r| j                  |   S || j
                  v r@	 | j
                  | j                  ||t        |j                  t        |      z                 S t        j                  |d      }|p|t        v rh|dz  rt        |   d   j                         nt        |   d   }|t        v rt        j                  t        |   |      S t        j!                  ||      S t        j#                  |      S # t        $ r Y w xY w)a  Converts an *X* event to a :class:`KeyCode`.

        :param display: The current *X* display.

        :param event: The event to convert.

        :return: a :class:`pynput.keyboard.KeyCode`

        :raises IndexError: if the key code is invalid
        Nr   r   )r   r   r   r  r  _KEYPAD_KEYSboolr   r   r   r!   r   r"  r   r   	from_deadr%  r   )r   r   r   r   r   r%   r*   r`   s           r&   rs  zListener._event_to_keyr  sH    ,,w4 (('5AT'''%%f--t(((((++U[[<+@@ACD D {{64(/4qy74=#))+gdmA>NDy ((4V(DD((&(99 v&&  s   ">D> >	E
	E
)+r-   r.   r/   r   r   r   r   _EVENTSr4   valuer   r  r   r   r%  r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r^   r   r   r  r   rk  rq  ry  r  r  r   r  rs  r4  )r  r   r   s   00@r&   r6  r6    s    	G  			cM
!&FW..s3!&FW..s3!& 	FW..s3!& 	FW..s3	!&
 	FW..s3!& 	FW..s3!& 	FW..s3!& 	FW..s3!& 	FW..s3!& 	FW..s3!& 	Hw005!& 	L!7#4#4S#9!& 	K #**!& 	K '"3"3C"8!& 	I!&  	Hsww!!&" 	J#!&$ 	J!2!23!7%!&& 	Gcff'!&( 	Gcff)!&* 	Gcff+!&, 	Gcff-!&. 	I/!&0 	K #**1!&2 	I3!&4 	M"G$5$5c$:5!&6 	N#S]]7!&8 	L!3;;9!&: 	J;!&< 	J=!&> 	M"G$5$5c$:?!&@ 	HswwA!&B 	GcffC!&LF&)(+ 
472)'cs   K r6  ),__doc__pynput._util.xorgpynput	ExceptioneImportErrorformatstrenumr   Xlib.displayr   Xlib.extXlib.ext.xtestXlib.XXlib.XKXlib.protocolXlib.keysymdef.xkbpynput._utilr   r   r   r   r   r   r	   r
   r   r   r   pynput._util.xorg_keysymsr   r   r   r   r    r   r   Enumr4   r   	_receiverr6  r2   r,   r&   <module>r     s   "N
          &
 
 
  /?emm /?f?6$)) ?6F: 0 0 :D
 `'}enn `' `'{  N
:AA#a&I1
MMNs   C C,	C''C,