o
    Zh                     @   sV  d Z ddlZddlZddlmZ ejejdZ	ej
Zee	j_ee	j_ee	j_e	jZdd Zdd Zd	d
 ZejejdZejZeje_ejZee_ejZee_ejZde_ege_ejZee_eejejejejeege_ejZde_eeege_eedZdd Z dd Z!e Z"dddZ#e$deeZ%e%e#Z&dd Z'dddZ(dS )zGEventloop hook for OS X

Calls NSApp / CoreFoundation APIs via ctypes.
    N)Eventobjcc                 C   s   t | ts
| d} | S )zensure utf8 bytesutf8)
isinstancebytesencode)s r	   Q/var/www/html/lang_env/lib/python3.10/site-packages/ipykernel/_eventloop_macos.py_utf8   s   

r   c                 C      t t| S )z)create a selector name (for ObjC methods))r   sel_registerNamer   )namer	   r	   r
   n      r   c                 C   r   )zget an ObjC Class by name)r   objc_getClassr   )	classnamer	   r	   r
   C$   r   r   CoreFoundationkCFRunLoopCommonModesc                   C   s   t t gtj_ttdtdS )z0Return the global NSApplication instance (NSApp)ZNSApplicationZsharedApplicationvoid_pr   objc_msgSendargtypesmsgr   r   r	   r	   r	   r
   _NSAppP   s   r   c                 C   sl   t t t t t t t t t t t gtj_ttdtdddddddddd}t t t t gtj_t| tdt |d dS )zWake the ApplicationZNSEventz]otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:   r   NzpostEvent:atStart:Tr   )NSAppeventr	   r	   r
   _wakeV   s:   r   c                 C   s`   t   t }ttgtj_t|tdr)tttgtj_t|td| t	| dS t
t  dS )z.Callback to fire when there's input to be readZ	isRunningzstop:N)
_triggeredsetr   r   r   r   r   r   r   r   CFRunLoopStopCFRunLoopGetCurrent)timerloopr   r	   r	   r
   stop|   s   r&   c                 C   s,   t dt |  dddtd}tt |t dS )z1Register callback to stop eventloop after a delayNr   )CFRunLoopTimerCreateCFAbsoluteTimeGetCurrent_c_stop_callbackCFRunLoopAddTimerCFRunLoopGetMainr   )delayr$   r	   r	   r
   _stop_after   s   	r-      c                 C   sH   t   t }t|  ttgtj_t|t	d t 
 s"t  dS dS )z<run the Cocoa eventloop for the specified duration (seconds)runN)r    clearr   r-   r   r   r   r   r   r   is_setr   ZCFRunLoopRun)durationr   r	   r	   r
   mainloop   s   r3   )NN)r.   ))__doc__ctypesZctypes.util	threadingr   ZcdllZLoadLibraryutilZfind_libraryr   Zc_void_pr   r   restyper   r   r   r   r   r   r   r(   Zc_doubler#   r+   r"   r   r'   c_intr*   Zin_dllr   r   r   r    r&   Z	CFUNCTYPEZ_c_callback_func_typer)   r-   r3   r	   r	   r	   r
   <module>   s^    

#
