grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ÂÛ ^W$ã@s@ddlmZGdd„deƒZGdd„deƒZdd„Zdd „Zd S) é)Ú_gic@sjeZdZdZGdd„deƒZddd„Zddejdddddfdd „Z dd d „Z d d „Z ddd„Z dd„Z dS)Ú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@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)zSignal.BoundSignalz‘ Temporary binding object which can be used for connecting signals without specifying the signal name string to connect. cOs t ||¡S©N)ÚstrÚ__new__©ÚclsÚnameÚargsÚkargs©r ú6/usr/lib64/python3.9/site-packages/gi/_signalhelper.pyrNszSignal.BoundSignal.__new__cCst |¡||_||_dSr)rÚ__init__ÚsignalÚgobj)Úselfrrr r r rQs zSignal.BoundSignal.__init__cCsd|S)NzBoundSignal("%s")r ©rr r r Ú__repr__VszSignal.BoundSignal.__repr__cOs|jj|jg|¢Ri|¤ŽS)zCall the signals closure.)rÚfuncr©rr r r r r Ú__call__YszSignal.BoundSignal.__call__cOs|jj||g|¢Ri|¤Ž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]szSignal.BoundSignal.connectcOs$|jj|d||g|¢Ri|¤ŽS)a Same as GObject.Object.connect except there is no need to specify the signal name. In addition concats "::" to the signal name when connecting; for use with notifications like "notify" when a property changes. z::r)rrZdetailr r r r r Úconnect_detailedbsz#Signal.BoundSignal.connect_detailedcCs|j |¡dS)z"Same as GObject.Object.disconnect.N)rÚ disconnect)rZ handler_idr r r rjszSignal.BoundSignal.disconnectcOs|jjt|ƒg|¢Ri|¤ŽS)z[Same as GObject.Object.emit except there is no need to specify the signal name.)rÚemitrrr r r rnszSignal.BoundSignal.emitN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrrrrr r r r Ú BoundSignalIsr!ÚcOst|ƒr|j}t ||¡Sr)Úcallablerrrrr r r rsszSignal.__new__Nc Cs€|durt|ƒr|}|r"|s"|j}t |¡|rD|sD|sDt|ƒ\}}|durRtƒ}||_||_||_||_ ||_||_ ||_ dSr) r#r rrÚget_signal_annotationsÚtuplerÚflagsÚ return_typeÚ arg_typesÚ accumulatorÚ accu_data) rr rr&r'r(Údocr)r*r r r rxs    zSignal.__init__cCs|dur |S| ||¡S)z:Returns a BoundSignal when accessed on an object instance.N)r!)rÚinstanceÚownerr r r Ú__get__�szSignal.__get__c Osjt|tjƒr&|j|g|¢Ri|¤Žn@t|ƒr8t|ƒ}n|j}t|ƒ|||j|j|j |j |j |j d�SdS)zmAllows for instantiated Signals to be used as a decorator or calling of the underlying signal method.©r rr&r'r(r+r)r*N) Ú isinstancerZGObjectrrrÚtyper&r'r(r r)r*)rÚobjr r r r r r r•s   þzSignal.__call__c Cs*t|ƒ||j|j|j|j|j|j|jd�S)z%Returns a renamed copy of the Signal.r/)r1rr&r'r(r r)r*)rZnewNamer r r Úcopy©s þz Signal.copycCs|j|j|j|j|jfS)zKReturns a tuple of: (flags, return_type, arg_types, accumulator, accu_data))r&r'r(r)r*rr r r Úget_signal_args°szSignal.get_signal_args)r")N)N)rrrr rr!rrZSIGNAL_RUN_FIRSTrr.rr3r4r r r r rs1*  ÿ   rc@seZdZdZdd„ZdS)Ú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 cCsdS)zReturns the string 'override'.Úoverrider rr r r r4ÂszSignalOverride.get_signal_argsN)rrrr r4r r r r r5µs r5csZtƒ}d}t|dƒrRddl}| |¡‰t‡fdd„ˆjDƒƒ}dˆjvrRˆjd}||fS)aAttempt 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__éc3s"|]}|ˆjvrˆj|VqdSr)Ú annotations)Ú.0Úarg©Úspecr r Ú Ôs ÿz)get_signal_annotations..Úreturn)r%ÚhasattrÚinspectZgetfullargspecr r9)rr(r'rAr r<r r$Çs    r$cCsÌ|j di¡}i}|j ¡D]`\}}t|tƒrt|ƒ}|sT|}| |¡}t|||ƒ||vrhtd|ƒ‚|||<|  ¡||<q||_ | ¡D]:\}}|j durŒd|  dd¡}t ||ƒsŒt|||j ƒqŒdS)z”Adds 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.NZdo_ú-Ú_)Ú__dict__ÚgetÚitemsr0rrr3ÚsetattrÚ ValueErrorr4rBrÚreplacer@)rZgsignalsZ newsignalsr rZ signalNameZfuncNamer r r Úinstall_signalsÜs&      rKN)r"rrrr5r$rKr r r r Ús