diff --git a/gtkblueprinttool/ast.py b/gtkblueprinttool/ast.py index 027f73a..3d9c63e 100644 --- a/gtkblueprinttool/ast.py +++ b/gtkblueprinttool/ast.py @@ -287,7 +287,7 @@ class ObjectContent(AstNode): class Property(AstNode): child_type = "properties" - def __init__(self, name, value=None, translatable=False, bind_source=None, bind_property=None, objects=None): + def __init__(self, name, value=None, translatable=False, bind_source=None, bind_property=None, objects=None, sync_create=None, after=None): super().__init__() self.name = name self.value = value @@ -296,6 +296,13 @@ class Property(AstNode): self.bind_property = bind_property self.objects = objects + bind_flags = [] + if sync_create: + bind_flags.append("sync-create") + if after: + bind_flags.append("after") + self.bind_flags = "|".join(bind_flags) or None + @validate() def gir_property(self): @@ -338,6 +345,7 @@ class Property(AstNode): "translatable": "yes" if self.translatable else None, "bind-source": self.bind_source, "bind-property": self.bind_property, + "bind-flags": self.bind_flags, } if self.objects is not None: xml.start_tag("property", **props) diff --git a/gtkblueprinttool/parser.py b/gtkblueprinttool/parser.py index 841cbcf..fe4d7c5 100644 --- a/gtkblueprinttool/parser.py +++ b/gtkblueprinttool/parser.py @@ -103,6 +103,10 @@ def parse(tokens) -> ast.UI: UseIdent("bind_source").expected("the ID of a source object to bind from"), Op("."), UseIdent("bind_property").expected("a property name to bind from"), + AnyOf( + Sequence(Keyword("sync-create"), UseLiteral("sync_create", True)), + Sequence(Keyword("after"), UseLiteral("after", True)), + ), StmtEnd().expected("`;`"), ) ).recover()