
    fW$                     H    S SK Jr   " S S\5      r " S S\5      rS rS rg)	   )_gic                       \ rS rSrSr " S S\5      rSS jrSS\R                  SSSSS4S jr
SS	 jrS
 rSS jrS rSrg)Signal   a   Object which gives a nice API for creating and binding signals.

:param name:
    Name of signal or callable closure when used as a decorator.
:type name: str or callable
:param callable func:
    Callable closure method.
:param GObject.SignalFlags flags:
    Flags specifying when to run closure.
:param type return_type:
    Return type of the Signal.
:param list arg_types:
    List of argument types specifying the signals function signature
:param str doc:
    Documentation of signal object.
:param callable accumulator:
    Accumulator method with the signature:
    func(ihint, return_accu, handler_return, accu_data) -> boolean
:param object accu_data:
    User data passed to the accumulator.

:Example:

.. code-block:: python

    class Spam(GObject.Object):
        velocity = 0

        @GObject.Signal
        def pushed(self):
            self.velocity += 1

        @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST)
        def pulled(self):
            self.velocity -= 1

        stomped = GObject.Signal('stomped', arg_types=(int,))

        @GObject.Signal
        def annotated_signal(self, a:int, b:str):
            "Python3 annotation support for parameter types.

    def on_pushed(obj):
        print(obj)

    spam = Spam()
    spam.pushed.connect(on_pushed)
    spam.pushed.emit()
c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)Signal.BoundSignalI   zy
Temporary binding object which can be used for connecting signals
without specifying the signal name string to connect.
c                 ,    [         R                  X5      $ N)str__new__clsnameargskargss       2/usr/lib/python3/dist-packages/gi/_signalhelper.pyr   Signal.BoundSignal.__new__N   s    ;;s))    c                 F    [         R                  U 5        Xl        X l        g r   )r   __init__signalgobj)selfr   r   s      r   r   Signal.BoundSignal.__init__Q   s    LL KIr   c                     SU -  $ )NzBoundSignal("%s") r   s    r   __repr__Signal.BoundSignal.__repr__V   s    &--r   c                 V    U R                   R                  " U R                  /UQ70 UD6$ )zCall the signals closure.)r   funcr   r   r   r   s      r   __call__Signal.BoundSignal.__call__Y   s%    ;;##DII>>>>r   c                 B    U R                   R                  " X/UQ70 UD6$ )zRSame as GObject.Object.connect except there is no need to specify
the signal name.r   connect)r   callbackr   r   s       r   r(   Signal.BoundSignal.connect]   s#     99$$TDdDeDDr   c                 P    U R                   R                  " U S-   U-   U/UQ70 UD6$ )zSame as GObject.Object.connect except there is no need to specify
the signal name. In addition concats "::<detail>" to the signal name
when connecting; for use with notifications like "notify" when a property
changes.
z::r'   )r   r)   detailr   r   s        r   connect_detailed#Signal.BoundSignal.connect_detailedb   s.     99$$TD[6%98TdTeTTr   c                 :    U R                   R                  U5        g)z"Same as GObject.Object.disconnect.N)r   
disconnect)r   
handler_ids     r   r0   Signal.BoundSignal.disconnectj   s    II  ,r   c                 T    U R                   R                  " [        U 5      /UQ70 UD6$ )zOSame as GObject.Object.emit except there is no need to specify
the signal name.)r   emitr   r#   s      r   r4   Signal.BoundSignal.emitn   s%     99>>#d)<d<e<<r   )r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r$   r(   r-   r0   r4   __static_attributes__r   r   r   BoundSignalr   I   s1    		*	
	.	?	E
	U	-	=r   r<    c                 d    [        U5      (       a  UR                  n[        R                  X5      $ r   )callabler6   r   r   r   s       r   r   Signal.__new__s   s#    D>>==D{{3%%r   Nc	                 >   Uc  [        U5      (       a  UnU(       a  U(       d  UR                  n[        R                  U 5        U(       a  U(       d  U(       d  [	        U5      u  pEUc
  [        5       nX l        X0l        X@l        XPl	        X`l        Xpl
        Xl        g r   )r?   r:   r   r   get_signal_annotationstupler"   flagsreturn_type	arg_typesaccumulator	accu_data)	r   r   r"   rD   rE   rF   docrG   rH   s	            r   r   Signal.__init__x   st    <HTNND,,CT	%;D%A"KI	
&"&"r   c                 .    Uc  U $ U R                  X5      $ )z:Returns a BoundSignal when accessed on an object instance.)r<   )r   instanceowners      r   __get__Signal.__get__   s    K//r   c                 `   [        U[        R                  5      (       a  U R                  " U/UQ70 UD6  g[	        U 5      (       a  [	        U 5      nOUR
                  n[        U 5      " XAU R                  U R                  U R                  U R                  U R                  U R                  S9$ )zeAllows for instantiated Signals to be used as a decorator or calling
of the underlying signal method.r   r"   rD   rE   rF   rI   rG   rH   N)
isinstancer   GObjectr"   r   r6   typerD   rE   rF   r:   rG   rH   )r   objr   r   r   s        r   r$   Signal.__call__   s     c3;;''IIc*D*E* 4yy4y||:4*.*:*:dnn"&,,D<L<LX\XfXfh hr   c                     [        U 5      " XR                  U R                  U R                  U R                  U R
                  U R                  U R                  S9$ )z%Returns a renamed copy of the Signal.rQ   )rT   r"   rD   rE   rF   r:   rG   rH   )r   newNames     r   copySignal.copy   sJ     DzwYYdjj&*&6&6$.."ll8H8HTXTbTbd 	dr   c                 t    U R                   U R                  U R                  U R                  U R                  4$ )zKReturns a tuple of: (flags, return_type, arg_types, accumulator, accu_data))rD   rE   rF   rG   rH   r   s    r   get_signal_argsSignal.get_signal_args   s.    

D,,dnnd>N>NPTP^P^__r   )r:   rH   rG   rF   rD   r"   rE   )r=   r   )r6   r7   r8   r9   r:   r   r<   r   r   SIGNAL_RUN_FIRSTr   rN   r$   rY   r\   r;   r   r   r   r   r      sQ    0b(=c (=T&
 T1E1E!TrtW[#.0h(d`r   r   c                       \ rS rSrSrS rSrg)SignalOverride   a  Specialized sub-class of Signal which can be used as a decorator for overriding
existing signals on GObjects.

:Example:

.. code-block:: python

    class MyWidget(Gtk.Widget):
        @GObject.SignalOverride
        def configure_event(self):
            pass
c                     g)zReturns the string 'override'.overrider   r   s    r   r\   SignalOverride.get_signal_args   s    r   r   N)r6   r7   r8   r9   r:   r\   r;   r   r   r   r`   r`      s    r   r`   c                    ^ [        5       nSn[        U S5      (       aS  SSKnUR                  U 5      m[        U4S jTR                   5       5      nSTR
                  ;   a  TR
                  S   nX!4$ )a  Attempt pulling python 3 function annotations off of 'func' for
use as a signals type information. Returns an ordered nested tuple
of (return_type, (arg_type1, arg_type2, ...)). If the given function
does not have annotations then (None, tuple()) is returned.
N__annotations__    c              3   f   >#    U  H&  nUTR                   ;   d  M  TR                   U   v   M(     g 7fr   )annotations).0argspecs     r   	<genexpr>)get_signal_annotations.<locals>.<genexpr>   s1      69C D$4$44 0$**3/9s   11return)rC   hasattrinspectgetfullargspecr   ri   )r"   rF   rE   rq   rl   s       @r   rB   rB      ss     IKt&''%%d+ 6499 6 6	t'''**84K!!r   c                 >   U R                   R                  S0 5      n0 nU R                   R                  5        Hv  u  p4[        U[        5      (       d  M  [        U5      nU(       d  UnUR                  U5      n[        XU5        XQ;   a  [        SU-  5      eXBU'   UR                  5       X'   Mx     Xl
        UR                  5        HQ  u  p4UR                  c  M  SUR                  SS5      -   n[        X5      (       a  M;  [        XUR                  5        MS     g)zAdds Signal instances on a GObject derived class into the '__gsignals__'
dictionary to be picked up and registered as real GObject signals.
__gsignals__z(Signal "%s" has already been registered.Ndo_-_)__dict__getitemsrR   r   r   rY   setattr
ValueErrorr\   rt   r"   replacerp   )r   gsignals
newsignalsr   r   
signalNamefuncNames          r   install_signalsr      s     ||3HJ**,ff%%VJ !
T*6*% !Kd!RSS%+z"#)#9#9#;H  -   #((*;;"t||C55H3))v{{3	 +r   N)r=   r   r   r   r`   rB   r   r   r   r   <module>r      s1   ( [`S [`|V $"*4r   