o
    œhÆ  ã                   @   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	   úPc:\Users\shubh\Videos\agent\nova\Lib\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   ÚcdllÚLoadLibraryÚutilZfind_libraryr   Úc_void_pr   r   Úrestyper   r   r   r   r   r   r   r(   Úc_doubler#   r+   r"   r   r'   Úc_intr*   Úin_dllr   r   r   r    r&   Ú	CFUNCTYPEZ_c_callback_func_typer)   r-   r3   r	   r	   r	   r
   Ú<module>   s^    
ÿù
#
