Index: gobject/gobject.c
===================================================================
RCS file: /cvs/gnome/glib/gobject/gobject.c,v
retrieving revision 1.77
diff -u -d -p -r1.77 gobject.c
--- gobject/gobject.c	7 Mar 2006 16:15:20 -0000	1.77
+++ gobject/gobject.c	10 Apr 2006 20:41:15 -0000
@@ -1299,6 +1299,59 @@ g_object_get_property (GObject	   *objec
   g_object_unref (object);
 }
 
+void
+g_object_set_properties (GObject    *object,
+			 guint       n_parameters,
+			 GParameter *parameters)
+{
+  GObjectNotifyQueue *nqueue;
+  int i;
+
+  g_return_if_fail (G_IS_OBJECT (object));
+  
+  g_object_ref (object);
+  nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+  
+  for (i = 0; i < n_parameters; i++)
+    {
+      GValue *value = &parameters[i].value;
+      const gchar *name = parameters[i].name;
+      GParamSpec *pspec;
+      
+      pspec = g_param_spec_pool_lookup (pspec_pool,
+					name,
+					G_OBJECT_TYPE (object),
+					TRUE);
+      if (!pspec)
+	{
+	  g_warning ("%s: object class `%s' has no property named `%s'",
+		     G_STRFUNC,
+		     G_OBJECT_TYPE_NAME (object),
+		     name);
+	  break;
+	}
+      if (!(pspec->flags & G_PARAM_WRITABLE))
+	{
+	  g_warning ("%s: property `%s' of object class `%s' is not writable",
+		     G_STRFUNC,
+		     pspec->name,
+		     G_OBJECT_TYPE_NAME (object));
+	  break;
+	}
+      if (pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+        {
+          g_warning ("%s: construct property \"%s\" for object `%s' can't be set after construction",
+                     G_STRFUNC, pspec->name, G_OBJECT_TYPE_NAME (object));
+          break;
+        }
+
+      object_set_property (object, pspec, value, nqueue);
+    }
+
+  g_object_notify_queue_thaw (object, nqueue);
+  g_object_unref (object);
+}
+
 gpointer
 g_object_connect (gpointer     _object,
 		  const gchar *signal_spec,
Index: gobject/gobject.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gobject.h,v
retrieving revision 1.37
diff -u -d -p -r1.37 gobject.h
--- gobject/gobject.h	18 Jan 2006 16:03:57 -0000	1.37
+++ gobject/gobject.h	10 Apr 2006 20:41:15 -0000
@@ -174,6 +174,9 @@ void        g_object_set_property       
 void        g_object_get_property             (GObject        *object,
 					       const gchar    *property_name,
 					       GValue         *value);
+void        g_object_set_properties           (GObject        *object,
+					       guint	       n_parameters,
+					       GParameter     *properties);
 void        g_object_freeze_notify            (GObject        *object);
 void        g_object_notify                   (GObject        *object,
 					       const gchar    *property_name);
Index: gobject/gobject.symbols
===================================================================
RCS file: /cvs/gnome/glib/gobject/gobject.symbols,v
retrieving revision 1.16
diff -u -d -p -r1.16 gobject.symbols
--- gobject/gobject.symbols	6 Jan 2006 04:47:45 -0000	1.16
+++ gobject/gobject.symbols	10 Apr 2006 20:41:15 -0000
@@ -144,6 +144,7 @@ g_object_set G_GNUC_NULL_TERMINATED
 g_object_set_data
 g_object_set_data_full
 g_object_set_property
+g_object_set_properties
 g_object_set_qdata
 g_object_set_qdata_full
 g_object_set_valist
