Ë
    oj•  ã                   óÀ   — d Z ddlmZmZ 	 ddlmZmZm	Z
 ddlmZ ddlmZmZ  G d„ de
«      Z G d	„ d
ej&                  «      Zd„ ZdgZy# e$ r ddlmZmZm
Z
 Y ŒFw xY w)aa  
This module provides wxPython event loop support for Twisted.

In order to use this support, simply do the following::

    |  from twisted.internet import wxreactor
    |  wxreactor.install()

Then, when your root wxApp has been created::

    | from twisted.internet import reactor
    | reactor.registerWxApp(yourApp)
    | reactor.run()

Then use twisted.internet APIs as usual. Stop the event loop using
reactor.stop(), not yourApp.ExitMainLoop().

IMPORTANT: tests will fail when run under this reactor. This is
expected and probably does not reflect on the reactor's ability to run
real applications.
é    )ÚEmptyÚQueue)Ú	CallAfterÚPySimpleAppÚTimer)ÚwxPySimpleAppÚwxCallAfterÚwxTimer)Ú_threadedselect)ÚlogÚruntimec                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProcessEventsTimerzË
    Timer that tells wx to process pending events.

    This is necessary on macOS, probably due to a bug in wx, if we want
    wxCallAfters to be handled when modal dialogs, menus, etc.  are open.
    c                 ó<   — t        j                  | «       || _        y ©N)r
   Ú__init__Úwxapp©Úselfr   s     ú</usr/lib/python3/dist-packages/twisted/internet/wxreactor.pyr   zProcessEventsTimer.__init__2   s   € Ü×Ñ˜ÔØˆ�
ó    c                 ó8   — | j                   j                  «        y)z5
        Called repeatedly by wx event loop.
        N)r   ÚProcessPendingEvents©r   s    r   ÚNotifyzProcessEventsTimer.Notify6   s   € ð 	�
‰
×'Ñ'Õ)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r   *   s   „ ñòó*r   r   c                   ó:   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d
d„Z
y	)Ú	WxReactorz[
    wxPython reactor.

    wxPython drives the event loop, select() runs in a thread.
    Fc                 ó   — || _         y)z;
        Register wxApp instance with the reactor.
        N)r   r   s     r   ÚregisterWxAppzWxReactor.registerWxAppF   s   € ð ˆ�
r   c                 ó¬   — 	 ddl }|j                  |j                  |j                  «       | j                  j                  «        y# t        $ r Y yw xY w)zO
        wx sometimes removes our own signal handlers, so re-add them.
        r   N)ÚsignalÚSIGINTÚdefault_int_handlerÚImportErrorÚ_signalsÚinstall)r   r&   s     r   Ú_installSignalHandlersAgainz%WxReactor._installSignalHandlersAgainL   sH   € ð	ãà�M‰M˜&Ÿ-™-¨×)CÑ)CÔDð 	�‰×ÑÕøô ò 	Ùð	ús   ‚*A Á	AÁAc                 ój   — | j                   ryd| _         t        j                  j                  | «       y)z#
        Stop the reactor.
        NT)Ú	_stoppingr   ÚThreadedSelectReactorÚstopr   s    r   r0   zWxReactor.stopY   s)   € ð �>Š>ØØˆŒÜ×-Ñ-×2Ñ2°4Õ8r   c                 ój   — t        | d«      rt        |«       y| j                  j                  |«       y)zm
        Schedule function to run in main wx/Twisted thread.

        Called by the select() thread.
        r   N)Úhasattrr	   Ú
_postQueueÚput)r   Úfs     r   Ú_runInMainThreadzWxReactor._runInMainThreadb   s)   € ô �4˜Ô!Ü˜�Nð �O‰O×Ñ Õ"r   c                 óR   — t        | d«      r| j                  j                  «        yy)z
        Stop the wx event loop if it hasn't already been stopped.

        Called during Twisted event loop shutdown.
        r   N)r2   r   ÚExitMainLoopr   s    r   Ú_stopWxzWxReactor._stopWxn   s#   € ô �4˜Ô!Ø�J‰J×#Ñ#Õ%ð "r   c                 ó\  ‡ — t        «       ‰ _        t        ‰ d«      s.t        j                  d«       ‰ j                  t        «       «       ‰ j                  ‰ j                  |¬«       |r‰ j                  d‰ j                  «       ‰ j                  dd‰ j                  «       ‰ j                  ddˆ fd„«       t        j                  j                  «       r&t!        ‰ j"                  «      }|j%                  d«       ‰ j"                  j'                  «        ‰ j"                  }‰ `‰ j(                  sJ‰ j+                  «        |j-                  «        	 	 ‰ j                  j/                  d	¬
«      }|€y	  |«        Œ)y# t0        $ r t        j2                  «        Y Œ!w xY w# t4        $ r Y ŒYw xY w)z$
        Start the reactor.
        r   zMregisterWxApp() was not called on reactor, registering my own wxApp instance.)ÚinstallSignalHandlersr   ÚafterÚshutdownc                  ó:   •— ‰ j                   j                  d «      S r   )r3   r4   r   s   €r   ú<lambda>zWxReactor.run.<locals>.<lambda>�   s   ø€ ¨¯©×)<Ñ)<¸TÓ)B€ r   é   g{®Gáz„?)ÚtimeoutN)r   r3   r2   r   Úmsgr$   r   Ú
interleaver6   Ú	callLaterr,   ÚaddSystemEventTriggerr9   r   ÚplatformÚisMacOSXr   r   ÚStartÚMainLoopr.   r0   r   ÚgetÚBaseExceptionÚerrr   )r   r;   Útr   r5   s   `    r   ÚrunzWxReactor.runw   st  ø€ ô  ›'ˆŒÜ�t˜WÔ%Ü�G‰Gð5ôð ×Ñœ}›Ô/ð 	�‰Ø×!Ñ!Ð9Nð 	ô 	
ñ !Ø�N‰N˜1˜d×>Ñ>Ô?ð 	×"Ñ" 7¨J¸¿¹ÔEØ×"Ñ"Ø�ZÓ!Bô	
ô ×Ñ×$Ñ$Ô&Ü" 4§:¡:Ó.ˆAØ�G‰G�AŒJà�
‰
×ÑÔØ—
‘
ˆØˆJà�~Š~ð �I‰IŒKØ×&Ñ&Ô(Øð
"ØŸ™×+Ñ+°DÐ+Ó9�Að �yØð"Ùœð ð øô$ )ò "ÜŸ™ž	ð"ûô ò Ùðús$   ÅF Å3E< Å<FÆFÆ	F+Æ*F+N)T)r   r   r   r   r.   r$   r,   r0   r6   r9   rN   r    r   r   r"   r"   =   s,   „ ñð €Iòò ò9ò
#ò&ô7"r   r"   c                  ó6   — t        «       } ddlm}  || «       | S )zP
    Configure the twisted mainloop to be run inside the wxPython mainloop.
    r   )ÚinstallReactor)r"   Útwisted.internet.mainrP   )ÚreactorrP   s     r   r+   r+   ±   s   € ô ‹k€GÝ4á�7ÔØ€Nr   r+   N)r   Úqueuer   r   Úwxr   r	   r   r   r   r
   r)   ÚwxPython.wxÚtwisted.internetr   Útwisted.pythonr   r   r   r/   r"   r+   Ú__all__r    r   r   ú<module>rY      sp   ðñ÷, ð@÷ñ õ -ß 'ô*˜ô *ô&q"�×5Ñ5ô q"òhð ˆ+�øðu ò @ç?Ó?ð@ús   Œ
A ÁAÁA