From: David Zeuthen Date: Fri, 15 Apr 2011 20:11:43 +0000 (-0400) Subject: gdbus-codegen: Never emit empty PropertiesChanged signals X-Git-Tag: 2.29.4~59 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a3fa748e54ec077a764a3045c92df59d00ba0edb;p=platform%2Fupstream%2Fglib.git gdbus-codegen: Never emit empty PropertiesChanged signals It's not that it's actually a bug to do so per se, strictly speaking, it's just pointless and wasteful. Signed-off-by: David Zeuthen --- diff --git a/gio/gdbus-codegen/codegen.py b/gio/gdbus-codegen/codegen.py index d86147d..67cf048 100644 --- a/gio/gdbus-codegen/codegen.py +++ b/gio/gdbus-codegen/codegen.py @@ -1705,9 +1705,10 @@ class CodeGenerator: self.c.write(' GList *l;\n' ' GVariantBuilder builder;\n' ' GVariantBuilder invalidated_builder;\n' + ' guint num_changes;\n' ' g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n' ' g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));\n' - ' for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)\n' + ' for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)\n' ' {\n' ' ChangedProperty *cp = l->data;\n' ' GVariant *variant;\n' @@ -1719,16 +1720,25 @@ class CodeGenerator: ' variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));\n' ' g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);\n' ' g_variant_unref (variant);\n' + ' num_changes++;\n' ' }\n' ' }\n' - ' g_dbus_connection_emit_signal (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)),\n' - ' NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),\n' - ' "org.freedesktop.DBus.Properties",\n' - ' "PropertiesChanged",\n' - ' g_variant_new ("(sa{sv}as)",\n' - ' "%s",\n' - ' &builder, &invalidated_builder),\n' - ' NULL);\n' + ' if (num_changes > 0)\n' + ' {\n' + ' g_dbus_connection_emit_signal (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)),\n' + ' NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),\n' + ' "org.freedesktop.DBus.Properties",\n' + ' "PropertiesChanged",\n' + ' g_variant_new ("(sa{sv}as)",\n' + ' "%s",\n' + ' &builder, &invalidated_builder),\n' + ' NULL);\n' + ' }\n' + ' else\n' + ' {\n' + ' g_variant_builder_clear (&builder);\n' + ' g_variant_builder_clear (&invalidated_builder);\n' + ' }\n' %(i.name)) self.c.write(' g_list_foreach (skeleton->priv->changed_properties, (GFunc) _changed_property_free, NULL);\n') self.c.write(' g_list_free (skeleton->priv->changed_properties);\n')