
    ^jE                      U d dl mZ d dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZmZ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 d dlmZmZ d dlZd dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d d	l(m)Z) d d
l*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 erd dl5m6Z6 d dl7m8Z8 	 d dl%m9Z9 dZ:n# e;$ r dZ:Y nw xY wej<        d         Z= G d de	          Z>e'j?        j@        Z@ee@_A         ee'jB                  e ee          ge@_C        daDdZEdZFdZGdZH ejI                    d         dk    ZJdeKd<   i e3jL        dfe3jM        e3jN        dfe3jO        e3jP        dfe3jQ        e3jR        dfe3jS        e3jN        dfe3jT        e3jR        dfe3jU        e3jV        dfe3jW        e3jX        dfe3jY        e3jZ        dfe3j[        e3j\        dfe3j]        e3jV        dfe3j^        e3jX        dfe3j_        e3j`        dfe3ja        e3jb        dfe3jc        e3jd        dfe3je        e3jf        dfe3jg        ZhdeKd<    G d de0          Zi G d d e.          Zje1Zke2Zl G d! d"e+          Zmd#d"gZndS )$    )annotationsN)POINTER	Structurebyrefc_bufferc_char_pc_intc_int32c_ubytec_uintc_uint32c_ulongc_void_pcastcreate_string_buffermemmovepointersizeof	string_at)	lru_cache)TYPE_CHECKINGSequence)
XlibCanvasXlibScreenXinerama)EventDispatcher)
cursorfontxlib)asbytes)

BaseWindowDefaultMouseCursorImageMouseCursorMouseCursorMouseCursorExceptionWindowException_PlatformEventHandler_ViewEventHandlerkeymouse)_Pointer)XlibDisplayConfig)xsyncTF	debug_x11c                  0    e Zd ZdefdefdefdefdefgZdS )
mwmhints_tflags	functionsdecorations
input_modestatusN)__name__
__module____qualname__r   r
   _fields_     V/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/window/xlib/__init__.pyr.   r.   >   s=        	(	h	!	w	8HHHr9   r.                  zUTF-8bool
_have_utf8zdict[tuple[int, bool], int]_motion_mapc                      e Zd ZdZdS )XlibExceptionzYAn X11-specific exception.

    This exception is probably a programming error in pyglet.N)r4   r5   r6   __doc__r8   r9   r:   rD   rD   k   s"        A A A Ar9   rD   c                  4    e Zd ZU dZded<   dZded<   dd
ZdS )XlibMouseCursorFr@   gl_drawableThw_drawablecursorxlib.CursorreturnNonec                    || _         d S N)rJ   )selfrJ   s     r:   __init__zXlibMouseCursor.__init__u   s    r9   N)rJ   rK   rL   rM   )r4   r5   r6   rH   __annotations__rI   rQ   r8   r9   r:   rG   rG   q   sL         KK     r9   rG   c                  d    e Zd ZU ded<   dZded<   dZded<   dZded	<   dZd
ed<   dZded<   dZ	ded<   dZ
ded<   dZded<   dgdz  Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZd!ed"<   dZded#<   d$ej         z  ej         z  ej         z  Zded%<   d fd(Zdd+Zdd.Zdd/Zdd1Zdd2Z dd3Z!dd5Z"dd6Z#d fd7Z$dd8Z%d9 Z&d fd;Z'dd>Z(dd@Z)ddAZ*d fdDZ+ddEZ,ddHZ-ddJZ.ddKZ/ddLZ0ddMZ1dd fdOZ2d fdPZ3d fdQZ4ddRZ5ddSZ6e7ddW            Z8e9dd[            Z:ddd]Z;dd^Z<dd_Z=dd fdaZ>dd fdbZ?dddZ@ddgZAddiZBddjZCddkZDdddnZEejF        fddrZGddtZHdduZIddvZJddyZKddzZLe7 e9            dd{                        ZM	 dd~ZNe7dd            ZOeP eQejR                   eQejS                  dd                                    ZT eQejR                   eQejS                  dd                        ZUeP eQejV                  dd                        ZW eQejV                  dd            ZX eQejY                  dd            ZZddZ[ddZ\ddZ]ddZ^ eQej_                  dd            Z`e7dd            ZaddZbe7 e9            dd                        ZceP eQejd                   eQeje                  dd                                    ZfeP eQejg                  dd                        ZheP eQeji                  dd                        ZjeP eQejk                  dd                        Zl eQejm                  dd            Zn eQejo                  dd            Zp eQejq                  dd            Zr eQejs                  dd            Zt eQeju                  dd            Zv eQejw                  dd            Zx eQejy                  dd            Zz xZ{S )
XlibWindowr*   configNzxlib.Display | None
_x_display
int | None_x_screen_idzxlib.XIC | None_x_iczxlib.Window | None_windowFr@   _override_redirectr   int_x_yztuple[int, int] | None_mouse_exclusive_clientr;   z
list[bool]_mouse_buttonsT_activebool | None_applied_mouse_exclusive_applied_keyboard_exclusive_mapped_lost_context_lost_context_state_enable_xsynczxsync.XSyncValue | None_current_sync_value_current_sync_valid_default_event_maskrL   rM   c                   i | _         i | _        | j        D ]R}t          | |          st	          | |          }|j        D ]'}t          |d          r|| j        |<   || j         |<   (S t                      j        |i | t          Ct                      }t          | j        j        t          d          t          |                    at          rt                      | _        d | _        d S )N_viewr?   )_event_handlers_view_event_handlers_platform_event_nameshasattrgetattr_platform_event_datasuperrQ   _can_detect_autorepeatr	   XkbSetDetectableAutoRepeatdisplay_displayr   setpressed_keys_clipboard_str)rP   argskwargsnamefuncmessagesupported_rtrn	__class__s          r:   rQ   zXlibWindow.__init__   s   !$&!. 	9 	9D4&& 4&&D4 9 94)) 99=D-g6648D(11	9 	$)&))) ")"WWN%?@UW\]^W_W_@En@U@U&W &W"! 	& #D +/r9   changesSequence[str]c                6   d|v sd|v rj| j                                          t          j        | j        | j                   | j        j        | j        = | j        j        | j        = d | _        d| _	        d|v rd| _
        d| _        |                                  d S )N
fullscreen	resizableFcontextT)r   detachr   XDestroyWindowrV   rZ   rx   _window_maprn   re   rf   rg   _create)rP   r   s     r:   	_recreatezXlibWindow._recreate   s     7""kW&<&<L!!!>>>(6(4DL DL !%D'+D$r9   rx   xlib.Displayc                   t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d          d          t          j        |t          d	          d          t          j        |t          d
          d          t          j        |t          d          d          d
| _        d S )N	XdndAwareF	XdndEnterXdndTypeListXdndDropXdndFinishedXdndSelectionXdndPosition
XdndStatusXdndActionCopytext/uri-list)
r   r   r   r   r   r   r   r   r   r   )r   XInternAtomr   _xdnd_atoms)rP   rx   s     r:   _create_xdnd_atomszXlibWindow._create_xdnd_atoms   s   )'7;3G3GOO)'7;3G3GOO ,Wgn6M6MuUU('*2E2EuMM ,Wgn6M6MuUU!-gw7O7OQVWW ,Wgn6M6MuUU*7GL4I4I5QQ".w@P8Q8QSXYY!-gw7O7OQVWW
 
r9   c                n   | j         r| j        r|                                  | j        j        | _        | j        j        | _        | j         sZt          j	        | j        | j                  }| j
                                        }|j        }t          j        |          }t          j        | j        | j                  }t          j        |          }t          j                    }||k    r,t          j        | j        ||t          j                  |_        n$t          j        | j        | j                  |_        t          j        |_        t          j        t          j        z  t          j        z  }| j                                        | _        t8          j        j        dk    r| j                                        nd| _         | j!        dv r|t          j"        z  }d|_#        d|_$        | j%        r=| j&        j'        | j&        j(        }
}	|	| j)        z
  dz  | _*        |
| j+        z
  dz  | _,        n| j)        | j+        }
}	dx| _*        | _,        t8          j        j        dv rS| -                                \  }}t]          || j/        z            x| _)        }	t]          || j/        z            x| _+        }
t          j0        | j        |dd|	|
d|j1        t          j2        ||tg          |                    | _         t          j0        | j        | j         | j*        | j,        | j)        | j+        d|j1        t          j2        ||tg          |                    | _4        t          j5        | j        | j4                   t          j6        | j        | j4        | j7                   | j8        | j        j9        | j         <   | j:        | j        j9        | j4        <   tw          | j        | j4                  | _<        | j=        >                    | j<                   | j=        ?                    | j@                   | j        jA        o| j
        jB        | _A        t                      }|D                    t          jE        | j        t          d          d                     | jA        r;|D                    t          jE        | j        t          d	          d                     t          t          |          z  | }t          jI        | j        | j         |t          |                     | jJ        d
k    r*| K                    d           | L                    d           | jA        rt          jN                    }t          jO        t          jP        | j        |                    | _Q        t          jE        | j        t          d          d          }t          | jQ                  }t          jS        | j        | j         |t          dt          jU        t          |t          t                              d           | Y                    | j                   t          jE        | j        t          d          d          | _Z        t          jE        | j        t          d          d          | _[        t          jE        | j        t          d          d          | _\        t          jE        | j        t          d          d          | _]        | j^        rd | __        d | _`        d | _a        d| _b        t          t]          t                              }t          |          }t          jS        | j        | j         | jd        d         t          dt          jU        t          |t          t                              d           t          j                    }d}| j%        r| L                    d           | j%        rLt          jf        | j        | j         | j&        jg        | j&        jh        | j&        j'        | j&        j(                   n+t          ji        | j        | j         | j)        | j+                   t          jj        | j        | j         |tg          |                     | jk        d| jl        d| jm        di}| jJ        |v r#| n                    d|| jJ                 f           n| jJ        | jo        | jp        fv rd}d}t                      }||_r        d|_s        t          jE        | j        t          d          d          }t          jS        | j        | j         ||dt          jU        t          t          |          t          t                              |           | jt        sG| j%        s@| u                    | j)        | j+                   | v                    | j)        | j+                   | w                    | jx                   | y                    | jx                   t          t]          | j%                            }t          jE        | j        t          d          d          }t          |          }t          jS        | j        | j         |t          dt          jU        t          |t          t                              d           t          r| j{        s| j        j|        sGt          j}        t          d                     t          j~        | j        d d d           | j        _|        t          j        | j                   t          j        t          t          t          t          j        t          t          j        t          gt          j        _        t          j        | j        j|        t          d          t          j        t          j        z  t          d           | j         t          d!          | j         d           | _{        t                      }t          j        | j{        d"tg          |          d            | xj7        |j        z  c_7        t          j        | j{                   |                                  | j        r|                     d           |                                  d | _        |                                  d S )#Nstretchg      ?)transparentoverlayr      )scaledr   WM_DELETE_WINDOWF_NET_WM_SYNC_REQUESTr   T_NET_WM_STATE_ABOVE_NET_WM_SYNC_REQUEST_COUNTER    r?   	CLIPBOARDUTF8_STRINGTARGETSINCR)r   r   r   _NET_WM_STATE_FULLSCREEN_NET_WM_WINDOW_TYPE_NORMAL_NET_WM_WINDOW_TYPE_DIALOG_NET_WM_WINDOW_TYPE_UTILITY_NET_WM_WINDOW_TYPEr>   _MOTIF_WM_HINTS_NET_WM_BYPASS_COMPOSITORz@im=none
inputStyleclientWindowfocusWindowfilterEvents)rZ   re   _unmaprx   ry   rV   x_screenrX   r   XRootWindowrU   get_visual_infovisualXVisualIDFromVisualXDefaultVisualXSetWindowAttributesXCreateColormap	AllocNonecolormapXDefaultColormapStaticGravitybit_gravity
CWColormapCWBitGravityCWBackPixel_screenget_dpi_dpipygletoptionsdpi_scaling	get_scale_scalestyleCWBorderPixelborder_pixelbackground_pixel_fullscreenscreenwidthheight_width_view_x_height_view_yget_requested_sizer\   scaleXCreateWindowdepthInputOutputr   rn   
XMapWindowXSelectInputrl   dispatch_platform_eventr   dispatch_platform_event_viewr   canvasr   attach	set_vsync_vsyncrh   double_bufferlistappendr   r   r   lenXSetWMProtocols_styleset_mouse_passthrough_set_wm_stater+   
XSyncValueXIDXSyncCreateCounter_sync_counterr   XChangePropertyXA_CARDINALPropModeReplacer   r   r   r   _clipboard_atom
_utf8_atom_target_atom
_incr_atom_file_drops_xdnd_source_xdnd_version_xdnd_format_xdnd_positionXDND_VERSIONr   XA_ATOMXMoveResizeWindowxyXResizeWindowXChangeWindowAttributesWINDOW_STYLE_DEFAULTWINDOW_STYLE_DIALOGWINDOW_STYLE_TOOL_set_atoms_propertyWINDOW_STYLE_BORDERLESSWINDOW_STYLE_OVERLAYr.   r/   r1   
_resizableset_minimum_sizeset_maximum_sizeset_caption_captionset_wm_classrA   rY   _x_imXSetLocaleModifiersXOpenIMXFlushXIMr   r	   Windowr   	XCreateICargtypesXIMPreeditNothingXIMStatusNothingXGetICValuesvalueXSetICFocus	switch_to_visibleset_visibleset_mouse_platform_visiblerc   _update_exclusivity)rP   rootvisual_infor   	visual_iddefault_visualdefault_visual_idwindow_attributesmaskr   r   wh	protocolsr   atomptr_version
attributesattributes_maskstylesMWM_HINTS_DECORATIONSPROP_MWM_HINTS_ELEMENTSmwmhintsr   !_NET_WM_BYPASS_COMPOSITOR_HINT_ONfilter_eventss                              r:   r   zXlibWindow._create   s   < 	DL 	KKMMM,/ L1 | u	E#DOT5FGGD+5577K 'F088I!0$BSTTN $ 8 H H $ 9 ; ;----1-A$/SWBH$..Z .Z!** .2-B4?CGCT.V .V!*,0,>) ?T%669IID,,..DI6<n6PT]6]6]$,00222cfDKz777**12!.56!2 
@ $ 14;3Ev % 39 & 5!; $T\v.//t|>-1FFF2244DAq*-a$*n*=*==DK%,/DJ,?,??DL6-dot./E61kFW.2.>.34E.F.FH HDL +DO,0L$,,0Kq+J[,0,<fd,12C,D,D	F FDJ
 ODOTZ888dotz4;STTT595QDL$T\2373TDL$TZ0$T\4:>>DKL,,,L""4;///!%!;!Y@YD IT-dowGY?Z?Z\abbccc! :  !1$/29:P2Q2Q27"9 "9 : : : !3y>>1I>I $,	3y>>ZZZ {i''**4000""#8999 ! 
E(**%)Xe.FtX].^.^%_%_"'(/0N(O(OQVX Xd011$T_dl%);%)%9%)#ww/?/?%@%@!E E E ##DO444 $(#3DOW[EYEY[`#a#aD ".t@V@VX]^^DO $ 0')BTBTV[ \ \D".tQVWWDO  E$(!%)"$(!&,#"3|#4#455h''$T_dl%)%5k%BGR%)%9%)#ww/?/?%@%@!E E E .00
 	;9::: 	Y"4?DL#';=$+-#';#4dk6HJ J J J tdk4<XXX$T_dl%4eJ6G6G	I 	I 	I
 %'C$&B"$A

 ;&  $$%:VDK=P<RSSSS[T94;TUUU$*!&'#!||H2HN#$H #DOW=N5O5OQVWWD $,!%tR1E!%gh&7&79I9I!J!J!8: : :  	=t'7 	=!!$+t|<<<!!$+t|<<< 	''' 	$-((( -4C8H4I4I,J,J)9T1U1UW\]]788T_dl!;!1!#ww'7'788!	= 	= 	=  	)dj 	)<% U()<)<===%)\$/4t%T%T"K((( (,x'/'/'/'/	'1DN#
 (:(/(=(=(,(>AV(V(/(?(?(/(>(>(,. .DJ $IIMdj.%:N:NPTUUU$$(;;$$TZ(((= 	#T"""'')))(,%  """""r9   statec           	     <   |rat          j                    }t          j        | j        | j        t          j        dd|t          j                   t          j        |           dS t          j	        | j        | j        t          j        dddt          j                   dS )zISets the clickable area in the application to an empty region if enabled.r   N)
r   XCreateRegionr+   XShapeCombineRegionrV   rZ   
ShapeInputShapeSetXDestroyRegionXShapeCombineMask)rP   r<  regions      r:   r   z XlibWindow.set_mouse_passthrough  s     	n'))F%dot|UEUWXZ[]cejesttt''''' #DOT\5CSUVXY[\^c^lmmmmmr9   c                   | j         rd S t          j        | j        | j        t          j                   t          j        | j        | j                   t          j                    }	 t          j        | j        |           |j	        t          j
        k    r#|j        j        | _        |j        j        | _        n|j	        t          j        k    rnit          j        | j        | j        | j                   d| _         |                                  |                     d| j        | j                   |                     d           |                     d           d S )NT_on_internal_resizeon_show	on_expose)re   r   r   rV   rZ   StructureNotifyMask
XMapRaisedXEvent
XNextEventtypeConfigureNotify
xconfigurer   r   r   r   	MapNotifyrl   _update_view_sizedispatch_eventrP   es     r:   _mapzXlibWindow._map  s,   < 	F 	$/4<9QRRR666KMM	ODOQ///v---l0 |24>))	 	$/4<9QRRR   14;MMMI&&&K(((((r9   c                   | j         sd S t          j        | j        | j        t          j                   t          j        | j        | j                   t          j                    }	 t          j        | j        |           |j	        t          j
        k    rn1t          j        | j        | j        | j                   d| _         d S )NTF)re   r   r   rV   rZ   rI  XUnmapWindowrK  rL  rM  UnmapNotifyrl   rS  s     r:   r   zXlibWindow._unmap  s    | 	F$/4<9QRRR$/4<888KMM	ODOQ///v)))	
 	$/4<9QRRRr9   xlib.Windowc                    t          j                    }t          j        | j        | j        t          |                     |j        S rO   )r   XWindowAttributesXGetWindowAttributesrV   rZ   r   r'  )rP   r4  s     r:   	_get_rootzXlibWindow._get_root  s9    +--
!$/4<zARARSSSr9   c           
     Z   t                      }t                      }t          t                                }t                      }t          j        | j        | j        t          |          t          |          t          |          t          |                     |j        |j        k    S rO   )	r   r   r   r   
XQueryTreerV   rZ   r   r   )rP   r'  parentchildren
n_childrens        r:   _is_reparentedzXlibWindow._is_reparented  s    yy799%%XX
dU6]]E(OOj))	+ 	+ 	+ zV\))r9   c                   | j         sd S | j                                         |                                  | j         rt	          j        | j        | j                    | j        j        | j         = | j        j        | j	        = d | _         | j
                                         | j                                         t          r t	          j        | j                   d | _        t!                                                       d S rO   )rZ   r   destroyr   r   r   rV   rx   r   rn   rp   clearro   rA   
XDestroyICrY   ru   close)rP   r   s    r:   rh  zXlibWindow.close  s    | 	F< 	?>>>L$T\2L$TZ0!'')))""$$$ 	ODJ'''DJr9   c                J    | j         r| j                                          d S d S rO   )r   set_currentrP   s    r:   r"  zXlibWindow.switch_to  s0    < 	'L$$&&&&&	' 	'r9   c                    |                                   | j        r| j                                         |                                  d S rO   )draw_mouse_cursorr   flip_sync_resizerk  s    r:   rn  zXlibWindow.flip  sL        < 	 Lr9   vsyncc                    t           j        d         t           j        d         }t                                          |           | j                            |           d S )Nrp  )r   r   ru   r   r   )rP   rp  r   s     r:   r   zXlibWindow.set_vsync  sP    >'".N7+E%   u%%%%%r9   captionstrc                    |d}|| _         |                     d|d           |                     d|d           |                     d|           |                     d|           d S )N WM_NAMEF)
allow_utf8WM_ICON_NAME_NET_WM_NAME_NET_WM_ICON_NAME)r  _set_text_property)rP   rr  s     r:   r  zXlibWindow.set_caption&  s|    ?G	7uEEEEJJJ888 3W=====r9   r   c                x   	 |                     d          }n# t          $ r d}Y nw xY wt          j                    }t	          |          |j        _        t	          |                                          |j        _        t          j	        | j
        | j        |j                   t          j        |           d S )Nasciir   )encodeUnicodeEncodeErrorr   XAllocClassHintr   contents	res_classlowerres_nameXSetClassHintrV   rZ   XFree)rP   r   hints      r:   r  zXlibWindow.set_wm_class/  s    	;;w''DD! 	 	 	DDD	 #%%")$--!(!6!64?DL$-HHH
4s    ''c                    | j         S rO   )r  rk  s    r:   get_captionzXlibWindow.get_caption<  s
    }r9   r   r   c                J   t                                          ||           | j        s,|                     ||           |                     ||           t          j        | j        | j        ||           | 	                                 | 
                    d||           d S )NrF  )ru   set_sizer  r  r  r   r  rV   rZ   rQ  rR  rP   r   r   r   s      r:   r  zXlibWindow.set_size?  s    ''' 	1!!%000!!%0004?DL%HHH   15&AAAAAr9   c                \    t          j        | j        | j        | j        | j                   d S rO   )r   r  rV   rn   r   r   rk  s    r:   rQ  zXlibWindow._update_view_sizeH  s'    4?DJT\RRRRRr9   r  r  c                   |                                  rTt          j                    }t          j        | j        | j        t          |                     ||j        z  }||j        z  }t          j	        | j        | j        ||           d S rO   )
rc  r   r[  r\  rV   rZ   r   r  r  XMoveWindow)rP   r  r  r4  s       r:   set_locationzXlibWindow.set_locationK  s       		
 /11J%dot|U:EVEVWWWAA$,1=====r9   tuple[int, int]c                8   t          j                    }t                      }t                      }t          j        | j        | j        |                                 ddt          |          t          |          t          |                     |j        |j        fS Nr   )	r   r  r	   XTranslateCoordinatesrV   rZ   r]  r   r   )rP   childr  r  s       r:   get_locationzXlibWindow.get_locationX  s{    GGGG"4?#'<#'>>#3#3#$a#(88#(88#(<<	1 	1 	1 wr9   c                    | j         | j        fS rO   )r   r   rk  s    r:   get_framebuffer_sizezXlibWindow.get_framebuffer_sizee  s    {DL((r9   c                    t           j        j        dk    r8t          | j        | j        z            t          | j        | j        z            fS | j        | j        fS )Nr   )r   r   r   r\   r   r   r   rk  s    r:   get_sizezXlibWindow.get_sizeh  sN    >%22t{TZ/00#dlTZ6O2P2PPP{DL((r9   c                    | j         r>| j        r9t          j        | j         | j        t          j        t          j                   d S d S d S rO   )rV   rZ   r   XSetInputFocusRevertToParentCurrentTimerk  s    r:   activatezXlibWindow.activaten  sW    ? 	ft| 	ft?RTXTdeeeee	f 	f 	f 	fr9   visiblec                    t                                          |           |r|                                  d S |                                  d S rO   )ru   r$  rU  r   )rP   r  r   s     r:   r$  zXlibWindow.set_visibles  sE    G$$$ 	IIKKKKKKKMMMMMr9   c                t    t                                          ||           |                                  d S rO   )ru   r  _set_wm_normal_hintsr  s      r:   r  zXlibWindow.set_minimum_size{  5      ///!!#####r9   c                t    t                                          ||           |                                  d S rO   )ru   r  r  r  s      r:   r  zXlibWindow.set_maximum_size  r  r9   c                P    t          j        | j        | j        | j                   d S rO   )r   XIconifyWindowrV   rZ   rX   rk  s    r:   minimizezXlibWindow.minimize  s$    DOT\4;LMMMMMr9   c                2    |                      dd           d S )N_NET_WM_STATE_MAXIMIZED_HORZ_NET_WM_STATE_MAXIMIZED_VERT)r   rk  s    r:   maximizezXlibWindow.maximize  s*    99	; 	; 	; 	; 	;r9   
pixelarrayr   bytesc                    g }d}t          |           D ]1\  }}|dz  }|r|d|z  z  }|dk    r|                    |           d}2t          |          S )Nr      r?      )	enumerater   r  )r  	byte_listr   ipixelindexs         r:   _downsample_1bitzXlibWindow._downsample_1bit  sw    	!*-- 	 	HAuEE $e#zz  '''Yr9   rJ   r!   rK   c           	     \   |j         }|j        }|j        }|                                                    d| dz            }|                     |ddd                   }|                     |ddd                   }t          j        | j        | j	        |||          }t          j        | j        | j	        |||          }	t          j
        ddd          }
t          j
                    }t          t          dt          | j        j                            |          }t          t          dt          || j        j        z
                      |          }t          j        | j        ||	|
|||          }t          j        | j        |           t          j        | j        |	           |S )z5Creates platform cursor from an ImageCursor instance.ALr   r   Nr?     )redgreenblue)texturer   r   get_image_dataget_datar  r   XCreateBitmapFromDatarV   rZ   XColorminmaxr\   _mouse_cursorhot_xhot_yXCreatePixmapCursorXFreePixmap)rP   rJ   r  r   r   alpha_luma_bytes	mask_databmp_databitmapr-  whiteblackr  r  s                 r:   _create_cursor_from_imagez$XlibWindow._create_cursor_from_image  s    ."1133<<TE6A:NN))*:14a4*@AA	(()9!$Q$)?@@+DOT\8UZ\bcc)$/4<TY[abbU??? C3t1788995AAC3v(:(@@AABBFKK)$/64PUW\^cdd&111$///r9   platform_visiblec           	     H   | j         sd S || j        o| j        j         }|du rt	          j                    }t	          j        | j        | j         t          d          dd          }t	          j	        | j        ||||dd          }t	          j
        | j        | j         |           t	          j        | j        |           t	          j        | j        |           d S t          | j        t                    rH| j        j        r<|                     | j                  }t	          j
        | j        | j         |           d S t          | j        t"                    r,t	          j
        | j        | j         | j        j                   d S t	          j        | j        | j                    d S )NFr  r   )rZ   _mouse_visibler  rH   r   r  r  rV   r  r  XDefineCursorXFreeCursorr  
isinstancer!   rI   r  rG   rJ   XUndefineCursor)rP   r  r  r  rJ   s        r:   r%  z%XlibWindow.set_mouse_platform_visible  s   | 	F##2Y4;M;Y7Yu$$KMME/uUVxxYZ\]^^F-dovvuV[]^`abbFtfEEET_f555T_f55555*,<== 		D$BTB` 		D33D4FGGFtfEEEEE $,o>> D"4?DL$BTB[\\\\\$T_dlCCCCCr9   c                b    t          j        | j        d| j        dddd|| j        |z
  	  	         d S r  )r   XWarpPointerrV   rZ   r   )rP   r  r  s      r:   set_mouse_positionzXlibWindow.set_mouse_position  sC    $/,QQT\A-	/ 	/ 	/ 	/ 	/r9   c                P   | j         o| j        }| j         o| j        }|| j        k    r|r|                     d           t          j        | j        | j        ddt
          j	        t
          j	        | j        dt
          j
        	  	         | j        dz  }| j        dz  }||f| _        |                     ||           n| j        rt!          | j        t$                    r| j        j        rd S |                     dd           t          j        | j        | j        ddt
          j	        t
          j	        | j        dt
          j
        	  	        }|r	d | _        d S |                                  n8t          j        | j        t
          j
                   |                                  || _        || j        k    rq|rBt          j        | j        | j        dt
          j	        t
          j	        t
          j
                   n$t          j        | j        t
          j
                   || _        d S d S )NFTr   r   )ra   _mouse_exclusive_keyboard_exclusiverc   r%  r   XGrabPointerrV   rZ   GrabModeAsyncr  r   r   r_   r  r   r  r   r   	_xineramarn   XUngrabPointerrd   XGrabKeyboardXUngrabKeyboard)rP   mouse_exclusivekeyboard_exclusiver  r  rs         r:   r&  zXlibWindow._update_exclusivity  s+   ,@4+@!\Fd.Fd;;; '2//666 !$/4<"&"#"&"4"&"4"&,"#"&"24 4 4 K1$LA%/0!t,''1----! 2dk+=>> 4;CX F ''1---%dotz&*A&*&8&*&8&*j&'&*&68 8  48D1F//1111 #DOT5EFFF//111,;D)!AAA! H"4?#'<#(#'#5#'#5#'#35 5 5 5 $T_d6FGGG/AD,,, BAr9   	exclusivec                    || j         k    rd S t                                          |           |                                  d S rO   )r  ru   set_exclusive_mouser&  rP   r  r   s     r:   r  zXlibWindow.set_exclusive_mouse  sF    ---F##I...  """""r9   c                    || j         k    rd S t                                          |           |                                  d S rO   )r  ru   set_exclusive_keyboardr&  r  s     r:   r  z!XlibWindow.set_exclusive_keyboard  sF    000F&&y111  """""r9   $DefaultMouseCursor | XlibMouseCursorc                R   || j         k    rt                      S i | j        t          j        | j        t          j        | j        t          j        | j	        t          j
        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j         | j!        t          j"        | j#        t          j$        | j%        t          j$        i}||vrd| d}tM          |          tO          j(        | j)        ||                   }tU          |          S )NzUnknown cursor name "")+CURSOR_DEFAULTr    CURSOR_CROSSHAIRr   XC_crosshairCURSOR_HANDXC_hand2CURSOR_HELPXC_question_arrow	CURSOR_NO	XC_pirateCURSOR_SIZEXC_fleurCURSOR_SIZE_UPXC_top_sideCURSOR_SIZE_UP_RIGHTXC_top_right_cornerCURSOR_SIZE_RIGHTXC_right_sideCURSOR_SIZE_DOWN_RIGHTXC_bottom_right_cornerCURSOR_SIZE_DOWNXC_bottom_sideCURSOR_SIZE_DOWN_LEFTXC_bottom_left_cornerCURSOR_SIZE_LEFTXC_left_sideCURSOR_SIZE_UP_LEFTXC_top_left_cornerCURSOR_SIZE_UP_DOWNXC_sb_v_double_arrowCURSOR_SIZE_LEFT_RIGHTXC_sb_h_double_arrowCURSOR_TEXTXC_xtermCURSOR_WAITXC_watchCURSOR_WAIT_ARROWr#   r   XCreateFontCursorrV   rG   )rP   r   cursor_shapesmsgrJ   s        r:   get_system_mouse_cursorz"XlibWindow.get_system_mouse_cursor  s   4&&&%'''
!:#:
j1
 j:
 NJ0	

 j1
 !7
 %z'E
 "J$<
 ')J
 !:#<
 &
(H
 !:#:
 $j&C
 $j&E
 ')H
  j1!
" j1#
$ "J$7%
 
( }$$1$111C&s+++'t9LMMv&&&r9   imagespyglet.image.ImageDatac                   dd l }ddddd|j        t          t                    f         }t	          d          }|D ]}|                                }|j        t          |          z   }t          t          t                    dz            }t          |t          t          dz  |j        |j                  t          t                              t          |                     ||j        |                    ||          z   z  }t          t          |          z              }t          ||t          |                     t!          j        | j        t	          d	          d
          }	t!          j        | j        | j        |	t*          dt           j        |t          |          t          t                    z             d S )Nr   BGRABGRAAAAAARGBAAAAARGB))littler<   )r  r  )bigr<   )r   r  ru  r   _NET_WM_ICONFr   )sys	byteorderr   r   r   r  r   r   r   r   r   r   r   r   rawr  r   r   rV   r   rZ   r   r   )
rP   r  r"  fmtdataimagepitchsbufferr1  s
             r:   set_iconzXlibWindow.set_icon=  s   
 	


!%"	
 

 =&//
*, r{{ 	7 	7E((**EkCHH,-E1,--AAtWq[%+u|DDggFVFVWWY\]^Y_Y_```AEENN36666DDCII%((c$ii(((1H1H%PPT_dlD+!5vs4yyFSZOO?[	] 	] 	] 	] 	]r9   textc                   t          j        | j        | j        | j        t           j                   t          j        | j        | j                  | j        k    r|| _        |                    d          }t          |          }t          j
        | j        | j        | j        | j        dt           j        t          |z                      |          |           d S t          rt!          d           d S d S )Nutf-8r  z(X11: Couldn't become owner of clipboard.)r   XSetSelectionOwnerrV   r   rZ   r  XGetSelectionOwnerr|   r~  r   r   r   r   r   from_buffer_copy_debugprint)rP   r,  	str_bytessizes       r:   set_clipboard_textzXlibWindow.set_clipboard_textW  s     $ 4 $ $ 0	2 	2 	2
 "4?D4HIIT\YY"&DG,,Iy>>D $,!%!5t4K_")D.!B!B9!M!MtU U U U U  B@AAAAAB Br9   c                   | j         | j         S t          j        | j        | j                  }|sdS d}|| j        k    r,|                     | j        | j        | j                  \  }}}nt          j                    }t          j	        | j        | j        | j        | j        | j        t          j
                   t          j        | j        | j        t          j        t          |                    sM|                     |           t          j        | j        | j        t          j        t          |                    M|j        j        sdS |                     |j        j        |j        j        | j                  \  }}}|| j        k    rt&          rt)          d           n2|| j        k    r'|r%t+          ||          }|                    d          }t          j        |           |S )Nru  z2X11: Clipboard data is too large, not implemented.r.  )r|   r   r0  rV   r   rZ   get_single_propertyr   rK  XConvertSelectionr  XCheckTypedWindowEventSelectionNotifyr   r   
xselectionproperty	requestorr   r2  r3  r   decoder  )rP   ownerr,  r&  r5  actual_atomnotification
text_bytess           r:   get_clipboard_textzXlibWindow.get_clipboard_texti  s   *&&'9MNN 	2DL  &*&>&>t|TMa?C'P 'P#D$  ;==L "4?#'#7#'?#'#7#'<#'#35 5 5 1$/4<QUQe272E2EG G ;,,\::: 1$/4<QUQe272E2EG G ;  *3 r&*&>&>|?V?`?K?V?_?C'P 'P#D$ $/)) LJKKKDO+++"4..J$$W--D
4r9   c                d   t          j                    j        }| j        r.|xj        t           j        z  c_        | j        \  |_        |_        | j        r.|xj        t           j	        z  c_        | j        \  |_
        |_        t          j        | j        | j        t          |                     d S rO   )r   XAllocSizeHintsr  _minimum_sizer/   PMinSize	min_width
min_height_maximum_sizePMaxSize	max_width
max_heightXSetWMNormalHintsrV   rZ   r   )rP   hintss     r:   r  zXlibWindow._set_wm_normal_hints  s    $&&/ 	CKK4=(KK040B-EOU- 	CKK4=(KK040B-EOU-teEllKKKKKr9   r   rw  c           	     .   t          j        | j        t          |          d          }|sd| d}t	          |          t          j                    }t          r|rt          |                    d                    }t          j	        | j        t          t          |          t                    dt           j        t          |                    }|dk     rd}t	          |          n}t          |                    dd	                    }t          j        t          t          |          t                    dt          |                    }|dk     rd
}t	          |          t          j        | j        | j        t          |          |           d S )NFzUndefined atom "r  utf8r?   r   z#Could not create UTF8 text propertyr}  ignorezCould not create text property)r   r   rV   r   rD   XTextPropertyrA   r   r~  Xutf8TextListToTextPropertyr   r   r   XUTF8StringStyler   XStringListToTextPropertyXSetTextPropertyrZ   )	rP   r   r   rw  r1  r  text_propertybufresults	            r:   r{  zXlibWindow._set_text_property  sq   FF 	%,T,,,C$$$*,, 	)* 	)&u||F';';<<C5do6:73<<6R6R679N6;M6J6JL LF zz;#C(((  'u||GX'F'FGGC3WS\\8,,a}1E1EG GFzz6#C(((dot|U==Q=QSWXXXXXr9   values	list[str]modec                x    t          j         j        t          |          d          } fd|D             }t          j         j        t          d          d          }t	          |          rt          j        t	          |          z  | }t          j         j         j        ||d|t          t          |          t          t                              t	          |                     d S t          j         j        t          d          d          }|r"t          j         j         j        |           d S d S )NFc                `    g | ]*}t          j        j        t          |          d           +S Fr   r   rV   r   ).0r   rP   s     r:   
<listcomp>z2XlibWindow._set_atoms_property.<locals>.<listcomp>  0    ^^^e!$/75>>5II^^^r9   ATOMr   _NET_WM_STATE)r   r   rV   r   r   Atomr   rZ   r   r   r   r   XDeleteProperty)	rP   r   r\  r^  	name_atomatoms	atom_typeatoms_arnet_wm_states	   `        r:   r  zXlibWindow._set_atoms_property  s+   $T_gdmmUKK	^^^^W]^^^$T_gfoouMM	u:: 	R	CJJ.7H $,!*Ir4!%gh&7&79I9I!J!JCPUJJX X X X X  +DOW_=U=UW\]]L R$T_dlLQQQQQR Rr9   statesc                b    t          j         j        t          d          d          } fd|D             }t          j         j        t          d          d          }t	          |          rt          j        t	          |          z  | }t          j         j         j        ||dt           j        t          t          |          t          t                              t	          |                     n t          j         j         j        |           t          j                    }t           j        |j        _        ||j        _        t           j        t          t           j                            |j        _         j        |j        _        d|j        _        t           j        |j        j        j        d<   t3          |          D ]\  }}||j        j        j        |dz   <   t          j         j                                         dt           j        t;          |                     d S )Nrg  Fc                `    g | ]*}t          j        j        t          |          d           +S ra  rb  )rc  r<  rP   s     r:   rd  z,XlibWindow._set_wm_state.<locals>.<listcomp>  re  r9   rf  r   r   r?   )r   r   rV   r   r   rh  r   rZ   PropModePrependr   r   r   r   ri  rK  ClientMessagexclientrM  message_typeDisplayrx   windowformatr&  lr  
XSendEventr]  SubstructureRedirectMaskr   )	rP   ro  rn  rk  rl  rm  rT  r  r1  s	   `        r:   r   zXlibWindow._set_wm_state  s   '9Q9QSXYY^^^^W]^^^$T_gfoouMM	u:: 	N	CJJ.7H $,!-y"d>R!%gh&7&79I9I!J!JCPUJJX X X X  $,MMM KMM+	!-	 '$,2G2GHH	<		"2	 '' 	+ 	+GAt&*AINQU##)9)9t<eAhh	H 	H 	H 	H 	Hr9   c                   |                                   d| _        t          j                    }| j        }| j        }| j        }t          j        ||dt          |                    rs|j	        j
        t          j        t          j        fvrt          j        |d          r^|                     |           t          j        ||dt          |                    st          j        ||dt          |                    rs|j	        j
        t          j        t          j        fvrt          j        |d          r^|                     |           t          j        ||dt          |                    st          j        ||t          j        t          |                    rC|                     |           t          j        ||t          j        t          |                    Cd| _        d S )NTrk   r   F)dispatch_pending_events_allow_dispatch_eventr   rK  rV   rZ   rn   XCheckWindowEventr   xanyrM  KeyPress
KeyReleaseXFilterEventr   r   r:  rs  )rP   rT  rV   rZ   rn   s        r:   dispatch_eventszXlibWindow.dispatch_events  s   $$&&&%)"KMM _
,
 $Z)U1XXNN 	, v{4=$/"BBB$Q** ((+++ $Z)U1XXNN 	, $Z	588LL 	1 v{4=$/"BBB$Q** --a000 $Z	588LL 	1 )*gt?QSXYZS[S[\\ 	,((+++ )*gt?QSXYZS[S[\\ 	, &+"""r9   c                   | j         r0t          j        | g| j                                         R   | j         0| j        rd| _        t          j        | d           | j        rd| _        t          j        | d           d S d S )NFon_context_loston_context_state_lost)_event_queuer   rR  popleftrf   rg   rk  s    r:   r}  z"XlibWindow.dispatch_pending_events  s     	O*4N$2C2K2K2M2MNNNN  	O  	D!&D*41BCCC# 	J',D$*41HIIIII	J 	Jr9   rT  xlib.XEventc                    | j         |                                  | j                            |j                  }|r ||           d S d S rO   )rc   r&  ro   getrM  rP   rT  event_handlers      r:   r   z"XlibWindow.dispatch_platform_event  s]    (0$$&&&,0088 	M!	 	r9   c                b    | j                             |j                  }|r ||           d S d S rO   )rp   r  rM  r  s      r:   r   z'XlibWindow.dispatch_platform_event_view   sB    155af== 	M!	 	r9   c                   d}| t           j        z  r|t          j        z  }| t           j        z  r|t          j        z  }| t           j        z  r|t          j        z  }| t           j        z  r|t          j	        z  }| t           j
        z  r|t          j        z  }| t           j        z  r|t          j        z  }| t           j        z  r|t          j        z  }|S r  )r   	ShiftMaskr'   	MOD_SHIFTControlMaskMOD_CTRLLockMaskMOD_CAPSLOCKMod1MaskMOD_ALTMod2MaskMOD_NUMLOCKMod4MaskMOD_WINDOWSMod5MaskMOD_SCROLLLOCK)r<  	modifierss     r:   _translate_modifierszXlibWindow._translate_modifiers%  s     	4>! 	'&I4## 	&%I4=  	*))I4=  	%$I4=  	)(I4=  	)(I4=  	,++Ir9   evtuple[str | None, int]c           
     >   d }t          j                    }t          d          }t          j        |j        |t          |          dz
  t          |          d           }t          j        ||j        j	                  }|j
        t           j        k    r@|s=t                      }t          rtd}t          j        | j        |j        |t          |          dz
  t          |          t          |                    }|j        t           j        k    rt%          d          nOd}t          j        |j        |t          |          dz
  t          |          d           }|rt           j        |_        |j        t           j        t           j        z  z  r"|j        d |                             |          }|r t-          j        |          dk    r|dk    rd }|j        }|j        j        dk    r|sd }|r|t2          j        vr|j        j        r	 t7          t9          |                                                    }|t2          j        vrt3          j        |j        j                  }n.# t>          $ r! t3          j        |j        j                  }Y nw xY w|rd |fS ||fS )	N   r?   rR  zTODO: XIM buffer resizer}  Ccr   ) r   KeySymr   XLookupStringxkeyr   r   r  r  rw  rM  r  r	   rA   Xutf8LookupStringrY   r   XBufferOverflowNotImplementedErrorXLookupBothXLookupCharsr?  unicodedatacategorykeycoder'   
_key_namesordchrr  user_key
ValueError)	rP   r  r,  symbolr*  countfilteredr3   encodings	            r:   _event_text_symbolzXlibWindow._event_text_symbolG  sv   %c** "27FCKK!OU6]]TXYY $R887dm##H#WWF 4!.tz/1w/5s6{{Q/4V}}eFmmM M <4#777-.GHHH 8 #*27FCKK!OUSY]]\`aa 4#'#3FL|t043CCD =|FUF+228<<  ,T22d::tt||
 7?aF
  
	;fCN22rw2;S[[..0011 // \"'/::F  7 7 7bgo667  	  <V|s   .I' '(JJr  r  c                    |t           j        z  rd S |t           j        z  dk    }t                              | |fd           S r  )r'   r  r  rB   r  )r  r  ctrls      r:   _event_text_motionzXlibWindow._event_text_motion  s?    s{" 	43<'1,~t444r9   c                4   t           s|j        t          j        k    rg }	 t          j                    }t          j        | j        | j        t          j        t          j        z  t          |                    }|snX|
                    |           |j        t          j        k    r|j        j        |j        j        k    r|                     |          \  }}|                     |j        j                  }|t           j        t           j        z  z  }|                     ||          }	|	r=|t           j        z  r|                     d|	           n1|                     d|	           n|r|s|                     d|           |                                }
t/          |          D ])}t          j        | j        t          |                     *d S 	 t/          |          D ])}t          j        | j        t          |                     *|                     |          \  }}|                     |j        j                  }|t           j        t           j        z  z  }|                     ||          }	|j        t          j        k    r|rHt           r	|| j        vr8|                     d||           t           r| j                            |           |	r?|t           j        z  r|                     d|	           d S |                     d|	           d S |r|s|                     d|           d S d S d S |j        t          j        k    rE|rE|                     d||           t           r)|| j        v r"| j                            |           d S d S d S d S d S )NTon_text_motion_selecton_text_motionon_texton_key_presson_key_release)rv   rM  r   r  rK  r  rV   rZ   r  r   r   r  r  r  r  r<  r'   r  r  r  r  rR  popreversedXPutBackEventr{   addremove)rP   r  saved
auto_eventr[  r,  r  r  modifiers_ctrlmotionditcheds              r:   _event_key_viewzXlibWindow._event_key_view  s    & '	G"'T_*D*D E ![]]
/04dmdo>]05j0A0AC C  Z(((?do557?jo&===#'#:#::#F#FLD& $ 9 9"'- H HI%.#,2L%MN!44VYGGF =$s}4 J //0GPPPP //0@&IIII =n =++It<<<#iikkG&.uoo O O
*4?E*<M<MNNNNF &uoo G G
"4?E*4E4EFFFF..r22f--bgm<<	"clS[&@A((;;7dm## 25 2tGX9X9X##NFIFFF) 2%))&111 5s}, B''(?HHHHH''(8&AAAAA 5n 5##It444445 5 5 5W'' 5##$4fiHHH) 5f8I.I.I%,,V44444	 ('5 55 5.I.Ir9   c                ,    |                      |          S rO   )r  rP   r  s     r:   
_event_keyzXlibWindow._event_key  s     ##B'''r9   c                V   |j         j        | j        z  }| j        dz
  |j         j        | j        z  z
  }| j        r|| j        z
  }|| j        z
  }ndx}}| j        r1|j         j        |j         j        f| j	        k    r|| _        || _        d S | j        r0| j	        \  }}t          j        | j        d| j        dddd||	  	         || _        || _        d| _        d}|j         j        t          j        z  r|t           j        z  }|j         j        t          j        z  r|t           j        z  }|j         j        t          j        z  r|t           j        z  }|r<|                     |j         j                  }	|                     d||||||	           d S |                     d||||           d S )Nr?   r   Ton_mouse_dragon_mouse_motion)xmotionr  r   r   r  _mouse_in_window_mouse_x_mouse_yrc   r_   r   r  rV   rZ   r<  Button1MotionMaskr(   LEFTButton2MotionMaskMIDDLEButton3MotionMaskRIGHTr  rR  )
rP   r  r  r  dxdyexeybuttonsr  s
             r:   _event_motionnotify_viewz#XlibWindow._event_motionnotify_view  s    JL4;&K!ObjlT[88  	T]"BT]"BBKB( 	bjlBJL-ITMi-i-iDMDMF( 	&1FBdo"l "& & &  $:d44 	"uz!G:d44 	$u|#G:d44 	#u{"G  	A11"*2BCCIAr2w	RRRRR  11aR@@@@@r9   c           	     X   d}|j         j        t          j        z  r|t          j        z  }|j         j        t          j        z  r|t          j        z  }|j         j        t          j        z  r|t          j	        z  }|r|j         j
        | j        z
  | j        z  }| j        dz
  | j        z
  |j         j        | j        z  z
  }| j        r|| j        z
  }|| j        z
  }ndx}}|| _        || _        |                     |j         j                  }|                     d||||||           d S d S )Nr   r?   r  )r  r<  r   r  r(   r  r  r  r  r  r  r   r   r   r   r  r  r  r  r  rR  )rP   r  r  r  r  r  r  r  s           r:   _event_motionnotifyzXlibWindow._event_motionnotify  s7    :d44 	"uz!G:d44 	$u|#G:d44 	#u{"G  	S,;Aq 4</"*,2LLA$ &&RDMDM11"*2BCCIAr2w	RRRRR	S 	Sr9   c                   |j         j        j        d         }|t          j        |j         j        t          d          d          k    r|                     d           d S | j        r{|t          j        |j         j        t          d          d          k    rJ|j         j        j        d         }|j         j        j        d         }t          j
        ||          | _        d S |j         j        | j        d         k    r|                     |           d S |j         j        | j        d	         k    r|                     |           d S |j         j        | j        d
         k    r|                     |           d S d S )Nr   r   Fon_closer   r      r   r   r   )rt  r&  ry  r   r   rx   r   rR  rh   r+   r   ri   ru  r   _event_drag_position_event_drag_drop_event_drag_enter)rP   r  r1  lohis        r:   _event_clientmessagezXlibWindow._event_clientmessage*  sr   z #4#BJ$6@R8S8SUZ[[[[
+++++  	'd&rz'9'./E'F'FO O O O"1%B"1%B','7B'?'?D$$$Z$(8(HHH%%b)))))Z$(8(DDD!!"%%%%%Z$(8(EEE""2&&&&& FEr9   c           	        | j         t          k    rd S t          j        }| j        r{| j         dk    r|j        j        j        d         }t          j        | j	        | j
        d         | j        | j
        d         | j        |           t          j        | j	                   d S | j         dk    r(t          j                    }t          j        |j        _        | j
        d         |j        _        t#          | j	        t%          t          j                            |j        _        | j        |j        _        d|j        _        | j        |j        j        j        d<   d|j        j        j        d<   d |j        j        j        d<   t          j        | j	        | j        dt          j        t5          |                     t          j        | j	                   d S d S )Nr?   r   r   r   r   r   F)r   r  r   r  r   rt  r&  ry  r9  rV   r   rZ   r  rK  rs  rM  ru  r   r   rv  rx   rw  rx  rz  r   NoEventMaskr   )rP   r  timerT  s       r:   r  zXlibWindow._event_drag_drop?  s   ,,F 	)!Q&&z(+ "4?#'#3O#D#'#4#'#3O#D#'<#') ) ) K(((((1$$A!/AIN%)%5n%EAI" $T_gdl6K6K L LAI#|AI!AI"&,AINQ"#AINQ"&AINQODOT->!4#3U1XX? ? ? K((((( %$r9   c                   | j         t          k    rd S |j        j        j        d         dz	  dz  }|j        j        j        d         dz  }t          j                    }t                      }t                      }t          j        | j	        | 
                                | j        ||t          |          t          |          t          |                     |j        |j        f| _        t          j                    }t
          j        |j        _        | j        d         |j        _        t)          | j	        t+          t
          j                            |j        _        |j        j        j        d         |j        _        d|j        _        | j        |j        j        j        d<   d|j        j        j        d<   d|j        j        j        d<   | j        r>d|j        j        j        d<   | j         dk    r| j        d	         |j        j        j        d
<   t          j        | j	        | j        dt
          j        t          |                     t          j        | j	                   d S )Nr      r  r   r   r   r  r?   r   r<   F)r   r  rt  r&  ry  r   r  r	   r  rV   r]  rZ   r   r   r  rK  rs  rM  r   ru  r   r   rv  rx   rw  rx  r   rz  r   r  r  )rP   r  xoffyoffr  r  r  rT  s           r:   r  zXlibWindow._event_drag_positiond  s   ,,F
!!$*f4
!!$. GGGG"4?#'>>#3#3#'<#'#(88#(88#(<<	1 	1 	1  !w0KMM+	!%!1,!?	 '$,2G2GHH	:?,Q/		"l			 	I"#AINQ!Q&&&*&67G&H	 #):t/q	; 	; 	; 	DO$$$$$r9   c                l   |j         j        j        d         | _        |j         j        j        d         dz	  | _        d | _        | j        t          k    rd S |j         j        j        d         dz  }|rX|                     | j        | j        d         t                    \  }}}t          |t          t          j                            }nd}|j         j        j        dz   }t          |          D ]-}||         | j        d         k    r| j        d         | _         n.|rt          j        |           d S d S )Nr   r?      r   r  r   r   )rt  r&  ry  r   r   r   r  r8  r   r  r   r   r   rh  ranger  )rP   r  three_or_morer&  r  _r  s          r:   r  zXlibWindow._event_drag_enter  s9   JO-a0Z_.q1R7 ,,F
)!,q0  	)!55d6GIYZhIikrssND%gdi0011DD E:?$q(D u 	 	AAw$*?;;;$($4_$E! <  	Jt	 	r9   rw  atom_property	xlib.Atomrl  "tuple[_Pointer[c_ubyte], int, int]c                   t          j                    }t                      }t                      }t                      } t	          t
                                }t          j        | j        ||ddd|t          |          t          |          t          |          t          |          |           ||j	        |j	        fS )zA Returns the length, data, and actual atom of a window property. r   iF)
r   rh  r	   r   r   r   XGetWindowPropertyrV   r   r   )	rP   rw  r  rl  
actualAtomactualFormat	itemCount
bytesAfterr&  s	            r:   r8  zXlibWindow.get_single_property  s     Y[[
wwII	YY
ww!! -q*eY %j 1 1 %l 3 3 %i 0 0 %j 1 1 $	& 	& 	& Y_j&666r9   c           	        |j         j        dk    r3|j         j        | j        d         k    r| j        r|                     |j         j        |j         j        |j         j                  \  }}}t          |          }t          |||           | 
                    |j                                                  }t          j                    }t          j        |j        _        | j        d         |j        _        t'          | j        t+          t          j                            |j        _        | j        |j        _        d|j        _        | j        |j        j        j        d<   d|j        j        j        d<   | j        d         |j        j        j        d<   t          j        | j        |                                 dt          j         tC          |                     t          j"        | j                   t          j#        |           | $                    d	| j%        d         | j&        | j%        d         z
  |           d S d S d S d S )
Nr   r   r   r   r?   r   r   Fon_file_drop)'r<  r=  	selectionr   r   r8  r>  targetr   r   parse_filenamesr   r?  r   rK  rs  rt  rM  ru  r   rV   r   rv  rx   rZ   rw  rx  r   r&  ry  rz  r]  r  r   r  r  rR  r  r   )rP   r  r&  r  r  r*  formatted_pathsrT  s           r:   _event_selection_notificationz(XlibWindow._event_selection_notification  s    =!Q&&2=+BdFVWfFg+g+g  5!%!9!9"-:Q:<-:P:<-:N"P "PeQ .e44e,,,"&"6"6v|7J7J7L7L"M"MKMM!%!3	)-)9.)I	&$('$,:O:O$P$P	!#'<	 #%	 &*&7	 #&'	 #&*&67G&H	 #1A1A %t'7qC C C DO,,,
4   ##ND4G4JDL[_[nop[qLq$35 5 5 5 5; '&+g+g5 5r9   decoded_stringc                   |                                  }g }t          j                    }|D ][}|rWt          j                            |          j        }|                    t          j                            ||                     \|S )zAll of the filenames from file drops come as one big string with
            some special characters (%20), this will parse them out.
        )	
splitlinesr"  getfilesystemencodingurllibparseurlsplitpathr   unquote)r  different_filesparsedr  filenameparsed_filenames         r:   r
  zXlibWindow.parse_filenames  s    
 )3355,..' 	O 	OH O"(,"7"7"A"A"Ffl22?HMMNNNr9   c                    | j         r^| j        rYt          j        | j                  r	d| _        d S t          j        | j        | j        | j                   d | _        d| _        d S d S d S )NF)rh   rj   r+   XSyncValueIsZerori   XSyncSetCounterrV   r   rk  s    r:   ro  zXlibWindow._sync_resize  s     	-$": 	-%d&>?? +0(!$/"&"4"&":< < < (,D$',D$$$	- 	- 	- 	-r9   c                ,    | dz
  }| dk    r|dz  }d|z  S )a@  Translate mouse button values to match mouse constants.

        Given a Xevent.xbutton.button value, convert it to the mouse
        contents defined in :py:module:`~pyglet.window.mouse`. This
        means shifting the value, and also skipping over values of
        4~7, which are used for boolean scrolling.
        r?   r  r<   r8   )r   	new_values     r:   _translate_buttonzXlibWindow._translate_button  s)     AI	199NII~r9   c                v   |j         j        | j        z  }| j        dz
  |j         j        | j        z  z
  }|                     |j         j                  }|j        t          j	        k    r| j
        r| j        s|                                  |j         j        dk    r|                     d||dd           d S |j         j        dk    r|                     d||dd           d S |j         j        dk    r|                     d||dd           d S |j         j        dk    r|                     d||dd           d S |                     |j         j                  }|                     d	||||           d S |j         j        d
vr:|                     |j         j                  }|                     d||||           d S d S )Nr?   r<   on_mouse_scrollr   r>   r;   r  on_mouse_press)r<   r>   r;   r  on_mouse_release)xbuttonr  r   r   r  r  r<  rM  r   ButtonPressr[   ra   r  buttonrR  r  )rP   r  r  r  r  r'  s         r:   _event_buttonzXlibWindow._event_button	  s    JL4;&K!ObjlT[88--bj.>??	7d&&&&  t|  z A%%##$5q!QBBBBB"a''##$5q!QCCCCC"a''##$5q!RCCCCC"a''##$5q!QBBBBB//
0ABB##$4aFINNNNNZl22++BJ,=>>F 2Aq&)LLLLL 32r9   c                T    |j         j        dk    rd S |                     d           d S )Nr   rH  )xexposer  rR  r  s     r:   _event_exposezXlibWindow._event_expose'  s3     :aFK(((((r9   c                    |j         j        | j        z  x}| _        | j        dz
  |j         j        | j        z  z
  x}| _        d| _        |                     d||           d S )Nr?   Ton_mouse_enter		xcrossingr  r   r  r   r  r  r  rR  rP   r  r  r  s       r:   _event_enternotifyzXlibWindow._event_enternotify1  sf     LNT[88DM K!Oblnt{.JJJDM $ 	,a33333r9   c                    |j         j        | j        z  x}| _        | j        dz
  |j         j        | j        z  z
  x}| _        d| _        |                     d||           d S )Nr?   Fon_mouse_leaver.  r0  s       r:   _event_leavenotifyzXlibWindow._event_leavenotify<  sd     LNT[88DM K!Oblnt{.JJJDM %,a33333r9   c                .   | j         r| j        rd| _        | j        rd S |                                  |j        j        |j        j        }}|j        j        |j        j	        }}| j
        |k    s| j        |k    r_t          d|          | _
        t          d|          | _        |                                  |                     d| j
        | j                   | j        |k    s| j        |k    r'|                     d||           || _        || _        d S d S )NTr?   rF  on_move)rh   ri   rj   r   r"  rO  r   r   r  r  r   r   r  rQ  rR  r]   r^   )rP   r  r.  r/  r  r  s         r:   _event_configurenotifyz!XlibWindow._event_configurenotifyD  s    	,$": 	,'+D$ 	F}"BM$81}1;!t|q00a))DKq!99DL""$$$ 5t{DLQQQ7a<<47a<<	1a000DGDGGG (<r9   c                    d| _         |                                  |                     d           t          rt	          j        | j                   d S d S )NTon_activate)ra   r&  rR  rA   r   r!  rY   r  s     r:   _event_focusinzXlibWindow._event_focusinZ  sZ      """M*** 	)TZ(((((	) 	)r9   c                    d| _         |                                  |                     d           t          rt	          j        | j                   d S d S )NFon_deactivate)ra   r&  rR  rA   r   XUnsetICFocusrY   r  s     r:   _event_focusoutzXlibWindow._event_focusoutb  sZ      """O,,, 	+tz*****	+ 	+r9   c                f    d| _         |                     d           |                                  d S )NTrG  )re   rR  r&  r  s     r:   _event_mapnotifyzXlibWindow._event_mapnotifyj  s5    I&&&  """""r9   c                >    d| _         |                     d           d S )NFon_hide)re   rR  r  s     r:   _event_unmapnotifyzXlibWindow._event_unmapnotifyp  s#    I&&&&&r9   c                B    |j         j        | j        k    r	d | _        d S d S rO   )xselectionclearr  r   r|   r  s     r:   _event_selection_clearz!XlibWindow._event_selection_clearu  s-    '4+???"&D @?r9   c                   |j         }t          rbt          j        | j        |j                  }t          j        | j        |j                  }t          d|            t          d|            t          j                    }t          j	        |j
        _        |j        |j        _        |j        |j        _        d|j        _        d|j        _        |j        |j        _        |j        |j        _        t          j        | j        | j                  | j        k    r|j        j        | j        k    r|j        | j        k    rt          j        dz  | j                  }t/          t1          |          t3          t4                              }t          j        | j        |j        |j        t8          dt          j        |t=          |          t=          t>                    z             |j        |j        _        |j        |j        _        n|j        | j        k    r| j         !                    d          }tE          | j                   }	t          j        | j        |j        |j        |j        dt          j        t4          |	z  #                    |          |	           |j        |j        _        |j        |j        _        t          j$        | j        |j        ddtK          |                     d S )NzX11 debug: request target zX11 debug: request property r   r?   r   r.  r  )&xselectionrequestr2  r   XGetAtomNamerV   r	  r=  r3  rK  r;  r  rM  r  r<  rx   r>  r  r0  r   rZ   r   rh  r   r   r   r   r   r   r  r   r   r   r|   r~  r   r1  rz  r   )
rP   r  requestrtrp	out_eventrm  r2  r,  r5  s
             r:   _event_selection_requestz#XlibWindow._event_selection_request{  sy   & 	7"4?GNCCB"4?G4DEEB3r33444555666KMM	"2	)0):	&'.	$&'	#()	%)0):	&$+L	!#DOT5IJJdlZZ$(<<<~!222 IM4?;;78,,gg.>.>??$T_g6G%,%5w%)%9%(&*:*:fWoo*MO O O 180@	$-.5n	$++4?22*11'::4.//$T_g6G%,%5w~q%)%9&-n%F%Ft%L%LdT T T
 180@	$-.5n	$+ 	):Aq%	BRBRSSSSSr9   )rL   rM   )r   r   rL   rM   )rx   r   rL   rM   )r<  r@   rL   rM   )rL   rY  )rL   r@   )rp  r@   rL   rM   )rr  rs  rL   rM   )r   rs  rL   rM   )rL   rs  )r   r\   r   r\   rL   rM   )r  r\   r  r\   rL   rM   )rL   r  )T)r  r@   rL   rM   )r  r   rL   r  )rJ   r!   rL   rK   rO   )r  rb   rL   rM   )r  r@   rL   rM   )r   rs  rL   r  )r  r  rL   rM   )r,  rs  rL   rM   )r   rs  r   rs  rw  r@   rL   rM   )r   rs  r\  r]  r^  r\   rL   rM   )ro  rs  rL   rM   )rT  r  rL   rM   )r<  r\   rL   r\   )r  r  rL   r  )r  r\   r  r\   rL   rW   )r  r  rL   rM   )rw  rY  r  r  rl  r\   rL   r  )r  rs  rL   r]  )r   r\   rL   r\   )|r4   r5   r6   rR   rV   rX   rY   rZ   r[   r]   r^   r_   r`   ra   rc   rd   re   rf   rg   rh   ri   rj   r   PointerMotionHintMaskResizeRedirectMaskSubstructureNotifyMaskrl   rQ   r   r   r   r   rU  r   r]  rc  rh  r"  rn  r   r  r  r  r  rQ  r  r  r  r  r  r$  r  r  r  r  staticmethodr  r   r  r%  r  r&  r  r  r  r+  r6  rD  r  r{  r   r  r   r  r}  r   r   r  r  r  ViewEventHandlerXlibEventHandlerr  r  r  r  MotionNotifyr  r  rs  r  r  r  r  r8  r;  r  r
  ro  r  r&  ButtonReleaser(  Exposer+  EnterNotifyr1  LeaveNotifyr4  rN  r7  FocusInr:  FocusOutr>  rP  r@  rX  rC  SelectionClearrF  SelectionRequestrN  __classcell__)r   s   @r:   rT   rT   ~   s        &*J****#L####!E!!!!"&G&&&&$$$$$BKKKKBKKKK6:::::"'1N,,,,G,11111(-----GM %%%%%M377777 %%%%% )T-G,G G#'#:":!;#'#>">!? @ @ @ @/ / / / / /6   2
 
 
 
]# ]# ]# ]#~n n n n) ) ) )0      

* 
* 
* 
*     ,' ' ' '  & & & & & &> > > >      B B B B B BS S S S> > > >       ) ) ) )) ) ) )f f f f
      $ $ $ $ $ $$ $ $ $ $ $N N N N; ; ; ;       \     Y0D D D D D2/ / / /:B :B :B :Bx# # # # # # ## # # # # # #' ' ' '@] ] ] ]4B B B B$. . . .dL L L LY Y Y Y Y4 MQL` R R R R RH H H H8"+ "+ "+ "+H
J 
J 
J 
J      
 Y[[   [ \&@ @ @ @D 5 5 5 \5 dm$$do&&B5 B5 B5 '& %$ B5H dm$$do&&( ( ( '& %$( d'((-A -A -A )( -A^ d'((S S S )(S8 d())' ' ' *)'(#) #) #) #)J'% '% '% '%R   :7 7 7 7& d*++5 5 5 ,+5B    \	- 	- 	- 	- Y[[   [ \ d&''d())M M M *) (' M6 dk"") ) ) #" ) d&''4 4 4 (' 4 d&''4 4 4 (' 4 d*++   ,+* dl##) ) ) $#) dm$$+ + + %$+ dn%%# # # &%#
 d&''' ' ' ('' d)**' ' ' +*'
 d+,,,T ,T ,T -,,T ,T ,T ,T ,Tr9   rT   rT  )o
__future__r   localer"  r  urllib.parser  ctypesr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   	functoolsr   typingr   r   r   pyglet.display.xlibr   r   pyglet.eventr   pyglet.libs.x11r   r   pyglet.utilr   pyglet.windowr   r    r!   r"   r#   r$   r%   r&   r'   r(   _ctypesr)   pyglet.gl.xlibr*   r+   _have_xsyncImportErrorr   r2  r.   _librw   restyperv  r  rv   r   r  	XA_STRINGr  	getlocalerA   rR   UP	MOTION_UPr  MOTION_RIGHTDOWNMOTION_DOWNr  MOTION_LEFTMOTION_NEXT_WORDMOTION_PREVIOUS_WORDHOMEMOTION_BEGINNING_OF_LINEENDMOTION_END_OF_LINEPAGEUPMOTION_PREVIOUS_PAGEPAGEDOWNMOTION_NEXT_PAGEMOTION_BEGINNING_OF_FILEMOTION_END_OF_FILE	BACKSPACEMOTION_BACKSPACEDELETEMOTION_DELETECMOTION_COPYVMOTION_PASTErB   rD   rG   rT  rS  rT   __all__r8   r9   r:   <module>r     sS   " " " " " " "  



                                               (        * * * * * * * *  > > > > > > > > ( ( ( ( ( ( , , , , , , , ,                               1      000000%%%%%%KK   KKK 
	$        "YA %*  "'.wt|'<'<eWWU^^&T  # 
	#6#%%a(G3
 3 3 3 3,VUOS],Y(, 	Xus, 	Xus	,
 	Ys+, 	Xtc., 	Xus3, 	Wec,, 	Z1, 	\53/, 	Xtc2, 	WdOS+, 	]EC0, 	Z*, 	UDM3?,  	UDM3#!,    (A A A A AO A A A    k    ) $ jT jT jT jT jT jT jT jT`1 |
,s   B B('B(