<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
<_r&                 @   sj   d dl Z ddlmZ de j  ko(dk n  r6dd ZG dd	 d	eZG d
d deZdd Zdd Z	dS )    N   )_gi      c             C   s
   t | dS )N__call__)hasattr)fn r	   %/usr/lib64/python3.6/_signalhelper.pycallable   s    r   c               @   sj   e Zd ZdZG dd deZdddZddejdddddfdd	Z	dd
dZ
dd ZdddZdd ZdS )Signala  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               @   sP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )zSignal.BoundSignalz
        Temporary binding object which can be used for connecting signals
        without specifying the signal name string to connect.
        c             O   s   t j| |S )N)str__new__)clsnameargskargsr	   r	   r
   r   X   s    zSignal.BoundSignal.__new__c             C   s   t j|  || _|| _d S )N)r   __init__signalgobj)selfr   r   r	   r	   r
   r   [   s    
zSignal.BoundSignal.__init__c             C   s   d|  S )NzBoundSignal("%s")r	   )r   r	   r	   r
   __repr__`   s    zSignal.BoundSignal.__repr__c             O   s   | j j| jf||S )zCall the signals closure.)r   funcr   )r   r   r   r	   r	   r
   r   c   s    zSignal.BoundSignal.__call__c             O   s   | j j| |f||S )z^Same as GObject.Object.connect except there is no need to specify
            the signal name.)r   connect)r   callbackr   r   r	   r	   r
   r   g   s    zSignal.BoundSignal.connectc             O   s   | j j| d | |f||S )a
  Same 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   r   Zdetailr   r   r	   r	   r
   connect_detailedl   s    z#Signal.BoundSignal.connect_detailedc             C   s   | j j| dS )z"Same as GObject.Object.disconnect.N)instance
disconnect)r   Z
handler_idr	   r	   r
   r   t   s    zSignal.BoundSignal.disconnectc             O   s   | j jt| f||S )z[Same as GObject.Object.emit except there is no need to specify
            the signal name.)r   emitr   )r   r   r   r	   r	   r
   r   x   s    zSignal.BoundSignal.emitN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r	   r	   r	   r
   BoundSignalS   s   r#    c             O   s   t |r|j}tj| |S )N)r   r   r   r   )r   r   r   r   r	   r	   r
   r   }   s    zSignal.__new__Nc	       	      C   s   |r| r|j }nt|r$|}|j }|r4| r4|j}tj|  |rX|pH| rXt|\}}|d krft }|| _|| _|| _	|| _
|| _|| _|| _d S )N)r   r   r"   r   r   get_signal_annotationstupler   flagsreturn_type	arg_typesaccumulator	accu_data)	r   r   r   r'   r(   r)   docr*   r+   r	   r	   r
   r      s&    


zSignal.__init__c             C   s   |dkr| S | j | |S )z:Returns a BoundSignal when accessed on an object instance.N)r#   )r   r   ownerr	   r	   r
   __get__   s    zSignal.__get__c          
   O   sd   t |tjr | j|f|| n@t| r2t| }n|j}t| ||| j| j| j	| j
| j| jdS dS )zmAllows for instantiated Signals to be used as a decorator or calling
        of the underlying signal method.)r   r   r'   r(   r)   r,   r*   r+   N)
isinstancer   ZGObjectr   r   r   typer'   r(   r)   r"   r*   r+   )r   objr   r   r   r	   r	   r
   r      s    
zSignal.__call__c          
   C   s8   |dkr| j }t| || j| j| j| j| j| j| jdS )z%Returns a renamed copy of the Signal.N)r   r   r'   r(   r)   r,   r*   r+   )	r   r0   r   r'   r(   r)   r"   r*   r+   )r   ZnewNamer	   r	   r
   copy   s
    zSignal.copyc             C   s   | j | j| j| j| jfS )zKReturns a tuple of: (flags, return_type, arg_types, accumulator, accu_data))r'   r(   r)   r*   r+   )r   r	   r	   r
   get_signal_args   s    zSignal.get_signal_args)r$   )N)N)r   r    r!   r"   r   r#   r   r   ZSIGNAL_RUN_FIRSTr   r.   r   r2   r3   r	   r	   r	   r
   r   !   s   1*


r   c               @   s   e Zd ZdZdd ZdS )SignalOverridea&  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             C   s   dS )zReturns the string 'override'.overrider	   )r   r	   r	   r
   r3      s    zSignalOverride.get_signal_argsN)r   r    r!   r"   r3   r	   r	   r	   r
   r4      s   r4   c                sZ   t  }d}t| drRddl}|j|  t  fdd jD }d jkrR jd }||fS )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__r   c             3   s"   | ]}| j kr j | V  qd S )N)annotations).0arg)specr	   r
   	<genexpr>   s    z)get_signal_annotations.<locals>.<genexpr>return)r&   r   inspectZgetfullargspecr   r7   )r   r)   r(   r=   r	   )r:   r
   r%      s    



r%   c             C   s   | j jdi }i }xn| j j D ]`\}}t|trt|}|sV|}|j|}t| || ||krjtd| |||< |j	 ||< qW || _
xF|j D ]:\}}|jdk	rd|jdd }t| |st| ||j qW dS )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.NZdo_-_)__dict__getitemsr/   r   r   r2   setattr
ValueErrorr3   r>   r   replacer   )r   ZgsignalsZ
newsignalsr   r   Z
signalNameZfuncNamer	   r	   r
   install_signals   s&    



rG   )r   r   )r   r   )
sysr$   r   version_infor   r   r   r4   r%   rG   r	   r	   r	   r
   <module>   s    "