Index: gobject/gobject.c
===================================================================
--- gobject/gobject.c	(Revision 7358)
+++ gobject/gobject.c	(Arbeitskopie)
@@ -1579,6 +1579,255 @@ g_object_get (gpointer     _object,
   va_end (var_args);
 }
 
+static gchar *
+lcopy (GValue *value, ...)
+{
+  gchar *error;
+  va_list var_args;
+
+  error = NULL;
+
+  va_start (var_args, value);
+  G_VALUE_LCOPY (value, var_args, 0, &error);
+  va_end (var_args);
+
+  return error;
+}
+
+static void
+g_object_get_generic (gpointer     object,
+                      const gchar *property_name,
+                      const gchar *str_func,
+                      GType        gtype,
+                      gpointer     value)
+{
+  GParamSpec *pspec;
+  GValue gvalue = { 0, };
+  gchar *error;
+
+  if (!G_IS_OBJECT (object))
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "G_IS_OBJECT");
+      return;
+    }
+  if (property_name == NULL)
+    {
+      g_return_if_fail_warning ("Glib-Object",
+                                str_func, "property_name != NULL");
+      return;
+    }
+
+  g_object_ref (object);
+
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+                                    property_name,
+                                    G_OBJECT_TYPE (object),
+                                    TRUE);
+
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+               str_func,
+               G_OBJECT_TYPE_NAME (object),
+               property_name);
+  else if (!g_type_is_a (pspec->value_type, gtype))
+    g_warning ("%s: property `%s' of object class `%s' is not '%s'",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object),
+               g_type_name (gtype));
+  else if (!(pspec->flags & G_PARAM_READABLE))
+    g_warning ("%s: property `%s' of object class `%s' is not readable",
+               str_func,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else
+    {
+      g_value_init (&gvalue, G_PARAM_SPEC_VALUE_TYPE (pspec));
+
+      object_get_property (object, pspec, &gvalue);
+
+      error = lcopy (&gvalue, value);
+      if (error)
+        {
+          g_warning ("%s: %s", str_func, error);
+          g_free (error);
+        }
+
+      g_value_unset (&gvalue);
+    }
+
+  g_object_unref (object);
+}
+
+/**
+ * g_object_get_boolean:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the boolean value of the specified property.
+ *
+ * Return value: an integer
+ */
+gboolean
+g_object_get_boolean (gpointer     object,
+                      const gchar *property_name)
+{
+  gboolean value = FALSE;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOOLEAN, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_boxed:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the boxed value of the specified property.
+ *
+ * Return value: a boxed value
+ */
+gpointer
+g_object_get_boxed (gpointer     object,
+                    const gchar *property_name)
+{
+  gpointer value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_BOXED, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_char:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the character value of the specified property.
+ *
+ * Return value: a character
+ */
+gchar
+g_object_get_char (gpointer     object,
+                   const gchar *property_name)
+{
+  gchar value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_CHAR, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_double:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the double value of the specified property.
+ *
+ * Return value: a double
+ */
+gdouble
+g_object_get_double (gpointer     object,
+                     const gchar *property_name)
+{
+  gdouble value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_DOUBLE, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_int:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the integer value of the specified property.
+ *
+ * Return value: an integer
+ */
+gint
+g_object_get_int (gpointer     object,
+                  const gchar *property_name)
+{
+  gint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_INT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_uint:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the unsigned integer value of the specified property.
+ *
+ * Return value: an unsigned integer
+ */
+guint
+g_object_get_uint (gpointer     object,
+                   const gchar *property_name)
+{
+  guint value = 0;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_UINT, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_string:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the string value of the specified property.
+ *
+ * Return value: a newly allocated string
+ */
+gchar *
+g_object_get_string (gpointer     object,
+                     const gchar *property_name)
+{
+  gchar* value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_STRING, &value);
+
+  return value;
+}
+
+/**
+ * g_object_get_object:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ *
+ * Retrieve the object value of the specified property.
+ *
+ * Return value: an object
+ */
+gpointer
+g_object_get_object (gpointer     object,
+                     const gchar *property_name)
+{
+  gpointer value = NULL;
+
+  g_object_get_generic (object, property_name,
+                        G_STRFUNC, G_TYPE_OBJECT, &value);
+
+  return value;
+}
+
 /**
  * g_object_set_property:
  * @object: a #GObject
Index: gobject/gobject.h
===================================================================
--- gobject/gobject.h	(Revision 7358)
+++ gobject/gobject.h	(Arbeitskopie)
@@ -411,6 +411,22 @@ void	    g_object_set                   
 void        g_object_get                      (gpointer        object,
 					       const gchar    *first_property_name,
 					       ...) G_GNUC_NULL_TERMINATED;
+gboolean    g_object_get_boolean              (gpointer        object,
+                                               const gchar    *property_name);
+gpointer    g_object_get_boxed                (gpointer        object,
+                                               const gchar    *property_name);
+gchar       g_object_get_char                 (gpointer        object,
+                                               const gchar    *property_name);
+gdouble     g_object_get_double               (gpointer        object,
+                                               const gchar    *property_name);
+gint        g_object_get_int                  (gpointer        object,
+                                               const gchar    *property_name);
+guint       g_object_get_uint                 (gpointer        object,
+                                               const gchar    *property_name);
+gchar*      g_object_get_string               (gpointer        object,
+                                               const gchar    *property_name);
+gpointer    g_object_get_object               (gpointer        object,
+                                               const gchar    *property_name);
 gpointer    g_object_connect                  (gpointer	       object,
 					       const gchar    *signal_spec,
 					       ...) G_GNUC_NULL_TERMINATED;
Index: gobject/gobject.symbols
===================================================================
--- gobject/gobject.symbols	(Revision 7358)
+++ gobject/gobject.symbols	(Arbeitskopie)
@@ -123,6 +123,14 @@ g_object_connect G_GNUC_NULL_TERMINATED
 g_object_disconnect G_GNUC_NULL_TERMINATED
 g_object_freeze_notify
 g_object_get G_GNUC_NULL_TERMINATED
+g_object_get_boolean
+g_object_get_boxed
+g_object_get_char
+g_object_get_double
+g_object_get_int
+g_object_get_uint
+g_object_get_string
+g_object_get_object
 g_object_get_data
 g_object_get_property
 g_object_get_qdata
