signals: Support after keyword

This commit is contained in:
Gregor Niehl 2024-05-30 22:34:05 +00:00 committed by James Westman
parent 07e824d8e7
commit 25d08e56cb
4 changed files with 14 additions and 6 deletions

View file

@ -166,11 +166,18 @@ class Signal(AstNode):
@decompiler("signal") @decompiler("signal")
def decompile_signal(ctx, gir, name, handler, swapped="false", object=None): def decompile_signal(
ctx, gir, name, handler, swapped="false", after="false", object=None
):
object_name = object or "" object_name = object or ""
name = name.replace("_", "-") name = name.replace("_", "-")
line = f"{name} => ${handler}({object_name})"
if decompile.truthy(swapped): if decompile.truthy(swapped):
ctx.print(f"{name} => ${handler}({object_name}) swapped;") line += " swapped"
else: if decompile.truthy(after):
ctx.print(f"{name} => ${handler}({object_name});") line += " after"
line += ";"
ctx.print(line)
return gir return gir

View file

@ -161,6 +161,7 @@ class XmlOutput(OutputFormat):
name=name, name=name,
handler=signal.handler, handler=signal.handler,
swapped=signal.is_swapped or None, swapped=signal.is_swapped or None,
after=signal.is_after or None,
object=( object=(
self._object_id(signal, signal.object_id) if signal.object_id else None self._object_id(signal, signal.object_id) if signal.object_id else None
), ),

View file

@ -5,6 +5,6 @@ Entry {
} }
Button button { Button button {
clicked => $on_button_clicked() swapped; clicked => $on_button_clicked() swapped after;
notify::visible => $on_button_notify_visible(); notify::visible => $on_button_notify_visible();
} }

View file

@ -10,7 +10,7 @@ corresponding .blp file and regenerate this file with blueprint-compiler.
<signal name="activate" handler="click" object="button"/> <signal name="activate" handler="click" object="button"/>
</object> </object>
<object class="GtkButton" id="button"> <object class="GtkButton" id="button">
<signal name="clicked" handler="on_button_clicked" swapped="True"/> <signal name="clicked" handler="on_button_clicked" swapped="True" after="True"/>
<signal name="notify::visible" handler="on_button_notify_visible"/> <signal name="notify::visible" handler="on_button_notify_visible"/>
</object> </object>
</interface> </interface>