diff options
author | Philip Withnall <philip@tecnocode.co.uk> | 2018-12-21 12:34:55 +0000 |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2018-12-21 12:34:55 +0000 |
commit | 87ea4ce1ffb42e341e18e36e7049a64d127bb68e (patch) | |
tree | 4e4221f3408a93e244759fdddbe76361d07e7d7e /gio/gdbus-2.0/codegen | |
parent | ac974a721fc5f00bd65c62f8bf823717926d4d19 (diff) | |
parent | 5731f065414394c1c9f04c38c884bc475590af80 (diff) | |
download | glib-87ea4ce1ffb42e341e18e36e7049a64d127bb68e.tar.gz |
Merge branch 'gdbus-codegen-propemitschanged' into 'master'
honor "Property.EmitsChangedSignal" annotations
Closes #542
See merge request GNOME/glib!532
Diffstat (limited to 'gio/gdbus-2.0/codegen')
-rw-r--r-- | gio/gdbus-2.0/codegen/codegen.py | 18 | ||||
-rw-r--r-- | gio/gdbus-2.0/codegen/dbustypes.py | 7 |
2 files changed, 20 insertions, 5 deletions
diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py index df3dfb723..8dabc1448 100644 --- a/gio/gdbus-2.0/codegen/codegen.py +++ b/gio/gdbus-2.0/codegen/codegen.py @@ -959,7 +959,8 @@ class CodeGenerator: '{\n' ' GDBusPropertyInfo parent_struct;\n' ' const gchar *hyphen_name;\n' - ' gboolean use_gvariant;\n' + ' guint use_gvariant : 1;\n' + ' guint emits_changed_signal : 1;\n' '} _ExtendedGDBusPropertyInfo;\n' '\n') @@ -1254,9 +1255,13 @@ class CodeGenerator: ' "%s",\n' %(p.name_hyphen)) if not utils.lookup_annotation(p.annotations, 'org.gtk.GDBus.C.ForceGVariant'): - self.outfile.write(' FALSE\n') + self.outfile.write(' FALSE,\n') else: + self.outfile.write(' TRUE,\n') + if p.emits_changed_signal: self.outfile.write(' TRUE\n') + else: + self.outfile.write(' FALSE\n') self.outfile.write('};\n' '\n') @@ -2892,14 +2897,17 @@ class CodeGenerator: ' const GValue *value,\n' ' GParamSpec *pspec)\n' '{\n'%(i.name_lower)) - self.outfile.write(' %sSkeleton *skeleton = %s%s_SKELETON (object);\n' + self.outfile.write(' const _ExtendedGDBusPropertyInfo *info;\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (object);\n' ' g_assert (prop_id != 0 && prop_id - 1 < %d);\n' + ' info = (const _ExtendedGDBusPropertyInfo *) _%s_property_info_pointers[prop_id - 1];\n' ' g_mutex_lock (&skeleton->priv->lock);\n' ' g_object_freeze_notify (object);\n' ' if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))\n' ' {\n' - ' if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)\n' - ' _%s_schedule_emit_changed (skeleton, (const _ExtendedGDBusPropertyInfo *) _%s_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);\n' + ' if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL &&\n' + ' info->emits_changed_signal)\n' + ' _%s_schedule_emit_changed (skeleton, info, prop_id, &skeleton->priv->properties[prop_id - 1]);\n' ' g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);\n' ' g_object_notify_by_pspec (object, pspec);\n' ' }\n' diff --git a/gio/gdbus-2.0/codegen/dbustypes.py b/gio/gdbus-2.0/codegen/dbustypes.py index 2ff736a5e..60c53c4be 100644 --- a/gio/gdbus-2.0/codegen/dbustypes.py +++ b/gio/gdbus-2.0/codegen/dbustypes.py @@ -354,6 +354,7 @@ class Property: self.doc_string = '' self.since = '' self.deprecated = False + self.emits_changed_signal = True def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): if len(self.doc_string) == 0: @@ -386,6 +387,12 @@ class Property: for a in self.annotations: a.post_process(interface_prefix, cns, cns_upper, cns_lower, self) + # FIXME: for now we only support 'false' and 'const' on the signal itself, see #674913 and + # http://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format + # for details + if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Property.EmitsChangedSignal') in ('false', 'const'): + self.emits_changed_signal = False + class Interface: def __init__(self, name): self.name = name |