
    ^h?                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJrJ	r	  SSK
JrJr  \R                  S    S:  a  S rOS r " S	 S
5      r\R                   " \R"                  " S5      \R"                  " S5      \R"                  " S5      \R$                  " S5      5      r\R                   " \R(                  " S5      \R"                  " S5      \R"                  " S5      \R*                  " S5      \R(                  " S5      \R(                  " S5      \R(                  " S5      \R$                  " S5      5      r\R                   " \R"                  " S5      \R$                  " S5      \R.                  " SS5      \R$                  " S5      \R0                  " S\5      5      r\R                   " \R4                  " S5      \R6                  " S5      \R(                  " S5      \R(                  " S5      \R(                  " S5      \R*                  " S5      \R*                  " S5      \R*                  " S 5      \R*                  " S!5      \R*                  " S"5      \R*                  " S#5      \R(                  " S$5      \R"                  " S%5      \R"                  " S&5      \R"                  " S'5      \R.                  " S(S5      \R0                  " S(\5      5      r " S) S*\R:                  5      rg)+    N)error)lockconnect   )rqevent3c                     U $ N xs    G/var/www/html/env/lib/python3.13/site-packages/Xlib/protocol/display.py_bytes_itemr   '   s        c                     [        U 5      $ r   )ordr   s    r   r   r   *   s    1vr   c                   8   \ rS rSr0 r0 r\R                  R                  5       r	\
R                  R                  5       rS S jrS rS rS rS rS rS	 rS
 rS rS rS rS S jrS rS rS rS rS rS rS rS!S jr S r!S r"S r#S r$S r%S r&S r'S r(Sr)g)"Display.   Nc           	         [         R                  " U5      u  p#pEX l        XPl        [         R                  " X#U5      U l        [         R                  " U R
                  X#U5      u  pg[        R                  " 5       U l	        S U l
        [        R                  " 5       U l        [        R                  " 5       U l        / U l        [        R                  " 5       U l        SU l        / U l        [        R                  " 5       U l        SU l        SU l        SU l        [        R                  " 5       U l        SU l        [        R                  " 5       U l        / U l        SU l        SU l        SU l        SU l        [        R                  " 5       U l        0 U l        SU l        S U l         [B        RD                  " S[B        RF                  " SS5      5      S   U l$        U RH                  (       a  SnOSn[K        U US	SUUS
9n	U	RL                  S:w  a+  [N        RP                  " U R                  U	RR                  5      eXl*        [W        U R                  [Y        U RT                  RZ                  5      S-
  5      U l        g )Nr   r   r   BBH   B   l      )
byte_orderprotocol_majorprotocol_minorauth_prot_nameauth_prot_data).r   get_displaydisplay_namedefault_screen
get_socketsocketget_authr   allocate_locksocket_error_locksocket_errorevent_queue_read_lockevent_queue_write_lockevent_queuerequest_queue_lockrequest_serialrequest_queuesend_recv_locksend_activerecv_activeevent_waitingevent_wait_lockrequest_waitingrequest_wait_locksent_requestsrequest_length	data_send	data_recvdata_sent_bytesresource_id_lockresource_idslast_resource_iderror_handlerstructunpackpack
big_endianConnectionSetupRequeststatusr   DisplayConnectionErrorreasoninfominlenroots)
selfdisplaynamehost	displaynoscreenno	auth_name	auth_dataorderrs
             r   __init__Display.__init__4   s   *1*=*=g*F'I &((Y?&//04I G	 "&!3!3!5  &*%7%7%9"&*&8&8&:# #'"4"4"6 #002#113 !%!3!3!5    !% 2 2 4 ! " !--fkk#v.FGJ??EE #40546454=4=? 88q=..t/@/@!((KK 	!$"5"5s499??7Ka7OPr   c                     U R                   $ r   )r$   rN   s    r   get_display_nameDisplay.get_display_name   s       r   c                     U R                   $ r   )r%   r[   s    r   get_default_screenDisplay.get_default_screen   s    """r   c                 V    U R                  5         U R                  R                  5       $ r   )check_for_errorr'   filenor[   s    r   rc   Display.fileno   s!    {{!!##r   c                 0   U R                  5         U R                  R                  5         U R                  R                  5         U R                  (       dp  U R
                  R                  5         U R                  R                  5         U R                  SS9  U R                  R                  5         U R                  (       d  Mp  U R                  S   nU R                  S	 U R                  R                  5         U R                  R                  5         U$ )Nr   )r   r   )rb   r,   acquirer-   r.   r2   releasesend_and_recv)rN   r   s     r   
next_eventDisplay.next_event   s     	""**, 	##++-
 ""
 '') ''//1 q) ''//1# """,   #Q##++-
 	""**, r   c                 
   U R                  5         U R                  R                  5         U R                  SS9  U R                  R                  5         [        U R                  5      nU R                  R                  5         U$ )Nr   )recv)rb   r2   rf   rh   r-   rL   r.   rg   )rN   counts     r   pending_eventsDisplay.pending_events   sn     	##%!$ 	##++-D$$%##++-r   c                 v    U R                  5         U R                  R                  5         U R                  SS9  g )Nr   )flush)rb   r2   rf   rh   r[   s    r   rq   Display.flush   s1    ##%1%r   c                 F    U R                  5         U R                  S5        g )Nclient)rq   close_internalr[   s    r   closeDisplay.close   s    

H%r   c                     Xl         g r   )rA   )rN   handlers     r   set_error_handlerDisplay.set_error_handler   s    $r   c                    U R                   R                  5          U R                  nXR                  ;   aV  US-   nXR                  R
                  :  a  SnXR                  :X  a  [        R                  " S5      eXR                  ;   a  MV  SU R                  U'   Xl        U R                  R                  U-  U R                   R                  5         $ ! U R                   R                  5         f = f)zid = d.allocate_resource_id()

Allocate a new X resource id number ID.

Raises ResourceIDError if there are no free resource ids.
r   r   zout of resource idsN)
r>   rf   r@   r?   rJ   resource_id_maskr   ResourceIDErrorresource_id_baserg   )rN   is     r   allocate_resource_idDisplay.allocate_resource_id   s     	%%'	,%%A(((Eyy111A---//0EFF ((( $(Da $%!99--1!!))+D!!))+s   A/C -C C1c                    U R                   R                  5          XR                  R                  -  nX-
  U R                  R                  :w  a   U R                   R                  5         g U R                  U	 U R                   R                  5         g! [         a     N'f = f! U R                   R                  5         f = f)zxd.free_resource_id(rid)

Free resource id RID.  Attempts to free a resource id which
isn't allocated by us are ignored.
N)r>   rf   rJ   r}   r   rg   r?   KeyError)rN   ridr   s      r   free_resource_idDisplay.free_resource_id   s     	%%'	,ii000A w$))444 !!))+%%a( !!))+   !!))+s)   4B% -B 
B"B% !B""B% %Cc                 8    U R                   R                  X5      $ )zclass = d.get_resource_class(class_name, default = None)

Return the class to be used for X resource objects of type
CLASS_NAME, or DEFAULT if no such class is set.
)resource_classesget)rN   
class_namedefaults      r   get_resource_classDisplay.get_resource_class  s     $$((==r   c                      X R                   U'   g r   extension_major_opcodes)rN   extnamemajors      r   set_extension_majorDisplay.set_extension_major  s    05$$W-r   c                      U R                   U   $ r   r   )rN   r   s     r   get_extension_majorDisplay.get_extension_major   s    ++G44r   c                      X R                   U'   g r   )event_classes)rN   codeevts      r   add_extension_eventDisplay.add_extension_event#      #&4 r   c                      X R                   U'   g r   )error_classes)rN   r   errs      r   add_extension_errorDisplay.add_extension_error&  r   r   c                     U R                   R                  5         U R                  nU R                   R                  5         U(       a  Ueg r   )r*   rf   r+   rg   rN   r   s     r   rb   Display.check_for_error.  s>    &&(&&(I r   c                 X   U R                   (       a  U R                   eU R                  R                  5         U R                  Ul        U R                  S-   S-  U l        U R
                  R                  X45        [        U R
                  5      nU R                  R                  5         g )Nr      )	r+   r/   rf   r0   _serialr1   appendrL   rg   )rN   requestwait_for_responseqlens       r   send_requestDisplay.send_request6  s    ###'')--#22Q6%?!!7">?4%%&'')r   c                    S U l         S U l        S U l        S U l        S U l        U R
                  R                  5         U R                  R                  5         [        R                  " U5      U l        U R                  R                  5         g r   )r1   r9   r.   r;   r<   r'   rv   r*   rf   r   ConnectionClosedErrorr+   rg   )rN   whoms     r   ru   Display.close_internalG  ss    !! 	 	&&(!77=&&(r   c                 
   U(       d  Ub  U R                   (       d  U(       d  U(       a  U R                  (       a  U(       a5  U R                  nU R                  (       d  SU l        UR	                  5         O7Ub4  U R
                  nU R                  (       d  SU l        UR	                  5         U R                  R                  5         U(       d  U(       a  gWR	                  5         UR                  5         gU R                  (       d
  SnSU l        OSnSnSn U(       d  U R                   (       d  U R                  R	                  5         U R                   HG  u  pU R                  U	R                  -   U l        U
(       d  M,  U R                  R                  U	5        MI     U R                  SS2	 U R                  R                  5         U R                  (       a
  SU l         SnO	SU l         SnU R                  R                  5         U(       a%  Uc"  U R                  [!        U R                  5      -   n U(       a  U R"                  /nO/ nU(       d  U(       a  SnOSn[$        R$                  " U R"                  /U/ U5      u  pnU(       aN   U R"                  R-                  U R                  5      nU R                  US U l        U R                  U-   U l        SnU(       a  U(       af   U R"                  R3                  S5      nU(       d  U R/                  S5        U R0                  eU R6                  U-   U l        U R9                  U5      nO<U R                  R	                  5         SU l         U R                  R                  5         gU(       a  XpR                  :  a  OIU(       a  U R:                  (       a  O0Ub  U(       a  O%U(       a  OU R                  R	                  5         GM  U R                  R	                  5         U(       a  SU l         U(       a  SU l        U R                  (       a!  SU l        U R                  R                  5         U R                  (       a!  SU l        U R
                  R                  5         U R                  R                  5         g! [&         aF  nUR(                  [(        R*                  :w  a  UeU R                  R	                  5          SnAGM  SnAff = f! [&         a(  nU R/                  SUS   -  5        U R0                  eSnAff = f! [&         a/  nU R/                  SUR4                  -  5        U R0                  eSnAff = f)as  send_and_recv(flush = None, event = None, request = None, recv = None)

Perform I/O, or wait for some other thread to do it for us.

send_recv_lock MUST be LOCKED when send_and_recv is called.
It will be UNLOCKED at return.

Exactly or one of the parameters flush, event, request and recv must
be set to control the return condition.

To attempt to send all requests in the queue, flush should
be true.  Will return immediately if another thread is
already doing send_and_recv.

To wait for an event to be recieved, event should be true.

To wait for a response to a certain request (either an error
or a response), request should be set the that request's
serial number.

To just read any pending data from the server, recv should be true.

It is not guaranteed that the return condition has been
fulfilled when the function returns, so the caller has to loop
until it is finished.
Nr   r   z
server: %si   server)r3   r4   r6   r5   rf   r8   r7   r2   rg   r/   r1   r;   _binaryr9   r   r=   rL   r'   selectOSErrorerrnoEINTRsendru   r+   rl   strerrorr<   parse_responser.   )rN   rq   r   r   rl   	wait_lock	recievingflush_bytessendingreqwaitwritesettimeoutrswsesr   r   gotreq
bytes_recvs                       r   rh   Display.send_and_recvX  sk   N w*0@0@$D$4$4  00	)))*D&%%'$ 22	+++,D(%%' '')
    I DI  d..
 ''//1!%!3!3IC%)^^ckk%ADNt**11#6 "4
 &&q)''//1 >>'(D$G'(D$G '')
 ,"22S5HH   $}H!H
 5G"G#]]DKK=(BP
  ,((8A
 "&!3'+';';a'?$ F 0%)[[%5%5d%;

 &++H5"///%)^^j%@DN!009F ''//1'(D$''//1  (<(<< )) "v 
 '')] j 	##% D D!"D  ((*#$D ""**,##%O  99+I
 ##++-  ,''s1v(=>+++,  # 0++L3<<,GH"///0sI   7AR$ %S7 .T, $
S4.:S//S47
T)#T$$T),
U%6*U  U%c                 *   US:X  a  U R                  5       $ Sn U R                  (       a?  [        U R                  5      U R                  :  a  U$ U R	                  U5      =(       d    Un[        U R                  5      S:  a  U$ [        U R                  S   5      nUS:X  a  U R                  U5      =(       d    UnOUUS:X  a>  [        [        R                  " SU R                  SS 5      S   5      nSUS-  -   U l        OU R                  U5        M  )zInternal method.

Parse data recieved from server.  If REQUEST is not None
true is returned if the request with that serial number
was recieved, otherwise false is returned.

If REQUEST is -1, we're parsing the server connection setup
response.
r   r       z=L      )parse_connection_setupr:   rL   r<   parse_request_responser   parse_error_responseintrB   rC   parse_event_response)rN   r   r   rtyperlens        r   r   Display.parse_responsem  s     b=..00 ""t~~&)<)<<!M!88AKVF
 4>>"R'  q 12E z227;Ev ! 6==t~~a/BCAFG&(4!8m# ))%0= r   c                    [        U R                  S   5      nU R                  R                  U[        R
                  5      nU" X R                  S S 5      nU R                  SS  U l        U R                  UR                  5      nU(       a  UR                  U5      (       a  [        U[        R                  5      (       af  U R                  R                  5         U R                  (       a!  SU l        U R                  R!                  5         U R                  R!                  5         XR                  :H  $ U R"                  (       a#  [        R$                  " U R"                  US 5        gU R'                  U5        g)Nr   r   r   )r   r<   r   r   r   XErrorget_waiting_requestsequence_number
_set_error
isinstancer   ReplyRequestr2   rf   r7   r8   rg   rA   call_error_handlerdefault_error_handler)rN   r   r   estructer   s         r   r   Display.parse_error_response  s)   4>>!,- $$((u||<D.."-., &&q'8'89 3>>!$$
 #r//##++-''+,D(**224##++-//// !!%%d&8&8!TB  **1-r   c                 H    [         R                  R                  SU-  5        g )NzX protocol error:
%s
)sysstderrwriter   s     r   r   Display.default_error_handler  s    

2S89r   c                 N   U R                  5       n[        R                  " SU R                  SS 5      S   nX2R                  :w  a  [        SUR                  < SU< S35      eUR                  U R                  S U R                   5        U R                  U R                  S  U l        SU l        U R                  R                  5         U R                  (       a!  SU l
        U R                  R                  5         U R                  R                  5         UR                  U:H  $ )Nz=H   r   r   zExpected reply for request z
, but got z.  Can't happen!)get_waiting_replyrequestrB   rC   r<   r   RuntimeError_parse_responser:   r2   rf   r7   r8   rg   r   )rN   r   r   snos       r   r   Display.parse_request_response  s    ++- mmD$..1"56q9++"%++s 4 5 5 	DNN+?D,?,?@A (;(;(<=
 	##%#$D ""**,##% ""g--r   c                 X   U R                   R                  US-  [        R                  5      nU" X R                  S S S9nU R                  SS  U l        U R                  UR                  S-
  S-  5        U R                  R                  5         U R                  R                  U5        U R                  R                  5         U R                  R                  5         U R                  (       a!  SU l        U R                  R                  5         U R                  R                  5         g )N   r   )rO   
binarydatar   r   r   )r   r   r   AnyEventr<   r   r   r-   rf   r.   r   rg   r2   r5   r6   )rN   etyper   r   s       r   r   Display.parse_event_response  s     $$((u~~Fd1DE, 	  !"3"3a"75!@A
 	##++-"##++- 	##%!"D  ((*##%r   c                 x   U R                   (       d  g U R                   S   R                  U R                  :  a$  U R                  S-   nXR                  :  a  US-   nO U R                  nXR                  :  a  US-
  nXR                   S   R                  :  a  g S n[        U R                   5      nSnSn[	        S[        U R                   5      5       HR  nU R                   U   R                  U-   nX:  a  SnX-   nUnX:X  a  U R                   U   nUS-   n  OX:  d  MN  S nUn  O   U R                   S U2	 U$ )Nr   r   r   )r9   r   r0   rL   range)	rN   r   last_serialr   reqposadjlastr   rnos	            r   r   Display.get_waiting_request  sO   !! a ((4+>+>>--5K(((Ek --K(((Ek ##A&... T''(q#d0012A$$Q'//#5C ziDz((+Q# 3( ww'
r   c                     [        S[        U R                  5      5       HF  n[        U R                  U   S5      (       d  M#  U R                  U   nU R                  S US-   2	 Us  $    [	        S5      e)Nr   _replyr   z0Request reply to unknown request.  Can't happen!)r   rL   r9   hasattrr   )rN   r   r   s      r   r    Display.get_waiting_replyrequestF  so    q#d0012At))!,h77((+&&vAv.
	 3 QRRr   c                    U R                   S   n UR                  (       a  UR                  S   S-  n[        U R                  5      U:  a  gUR                  S   S:w  a*  U R                  SUR                  S    UR                  S'   OEUR                  R                  U R                  SU U SS	9u  p4UR                  R                  U5        U R                   S	 U R                  US U l        g[        U R                  5      S
:  a  gUR                  R                  U R                  SS
 U SS	9u  Ul        nU R                  S
S U l        GMB  )zCInternal function used to parse connection setup response.
        r   r   additional_lengthr   rG   Nreason_lengthrI   )rawdictr   )r9   _datarL   r<   _success_replyparse_binaryupdater  )rN   rW   alenr   ds        r   r   Display.parse_connection_setupQ  sE   
 q! wwww23a7 t~~&- 778$)(,7P8P(QAGGH% ++889N9= 9 LDAGGNN1%&&q)!%!6 t~~&*XX224>>"13E371 3 F
!%!3G r   )rE   r<   r;   r=   r%   r$   rA   r.   r,   r-   r6   r5   rJ   r@   r4   r:   r1   r/   r0   r8   r7   r>   r?   r3   r2   r9   r'   r+   r*   r   )NNNN)*__name__
__module____qualname____firstlineno__r   r   r   xerror_classcopyr   r   event_classr   rX   r\   r_   rc   ri   rn   rq   rv   rz   r   r   r   r   r   r   r   rb   r   ru   rh   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r   .   s     &&++-M%%**,MQQp!#$1f&
&%,0,0>65''*")"R&j.1b*Z:.>&D4l	S*4r   r   depthbits_per_pixelscanline_pad   	visual_idvisual_classbits_per_rgb_valuecolormap_entriesred_mask
green_mask	blue_maskr   visualsr   rootdefault_colormapwhite_pixelblack_pixelcurrent_input_maskwidth_in_pixelsheight_in_pixelswidth_in_mmsheight_in_mmsmin_installed_mapsmax_installed_mapsroot_visualbacking_storesave_unders
root_depthallowed_depthsc                      \ rS rSr\R
                  " \R                  " SSS5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " SS5      \R                  " S	S5      \R                  " S5      \R                  " S5      \R                  " S	5      5	      r\R
                  " \R                  " S
5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      5      r\R
                  " \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " SS5      \R                  " S5      \R                  " SS5      \R                  " SS5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S\5      \R                  " S\5      5      rS rSrg)rF   i  r   r   )r   r   r   r    r!   r   r"   rG   r  r  release_numberr   r}   motion_buffer_sizevendormax_request_lengthrM   pixmap_formatsimage_byte_orderbitmap_format_bit_orderbitmap_format_scanline_unitbitmap_format_scanline_padmin_keycodemax_keycoder   c                     U R                   R                  " U0 UD6U l        S U l        UR                  R                  U S45        UR                  R                  5         UR                  SS9  g )Nr   r   )r   )	_request	to_binaryr   r  r1   r   r2   rf   rh   )rN   rO   argskeyss       r   rX   ConnectionSetupRequest.__init__  sc    }}..==

 	$$dAY/
 	&&(+r   )r   r  N)r  r  r  r  r   StructSetPadCard16LengthOfString8r@  Card8r  Card32ListPixmapFormatScreenr	  rX   r  r   r   r   rF   rF     s   yy"&&q,?&&)))$45))$45++&6:++&6:&&)**%56**%569H YY(+/2#34#34#67	:F YY		*: ; "		*< = "		*< = "		*> ? "Ha 8 "		*> ? "GQ 7 ",<a @ "); < ")B C ")F G ")E F " 7 " 7 "q	 "

8 4 "(8, G " 8#"N*,r   rF   )r   r   r'   rB   r   Xlibr   Xlib.supportr   r    r   r   versionr   r   rE  rK  rG  rN  rL  rH  
VisualTyperI  rM  DepthWindowColormaprO  GetAttrDatarF   r   r   r   <module>rY     s?  ,     
  &  ;;q>SM4 M4f yy"((7+((#34((>2&&) YY;/.1"67#56:.<0;/
 			288G$66!9;;y!,66!9779j1		 
BIIf%KK 23IIm,IIm,II23II/0II01IIn-IIo.II23II23IIm,HH_-HH]+HH\*KK 0!4GG,e4!
(3,R^^ 3,r   