Blame SOURCES/evolution-data-server-3.12.11-glib2-rebase-fix.patch

0da626
diff -up evolution-data-server-3.12.11/libedataserver/e-source-camel.c.glib2-rebase-fix evolution-data-server-3.12.11/libedataserver/e-source-camel.c
0da626
--- evolution-data-server-3.12.11/libedataserver/e-source-camel.c.glib2-rebase-fix	2014-07-17 12:13:22.000000000 +0200
0da626
+++ evolution-data-server-3.12.11/libedataserver/e-source-camel.c	2016-04-07 22:45:29.954493016 +0200
0da626
@@ -126,12 +126,7 @@ G_DEFINE_ABSTRACT_TYPE (
0da626
 	e_source_camel,
0da626
 	E_TYPE_SOURCE_EXTENSION)
0da626
 
0da626
-/* XXX A function like this belongs in GObject.  I may yet propose it,
0da626
- *     GParamSpecClass still has some reserved slots.  This fiddles with
0da626
- *     GParamSpec fields that are supposed to be private to GObject, but
0da626
- *     I have no other choice.
0da626
- *
0da626
- * XXX Historical note, originally I tried (ab)using override properties
0da626
+/* XXX Historical note, originally I tried (ab)using override properties
0da626
  *     in ESourceCamel, which redirected to the equivalent CamelSettings
0da626
  *     property.  Seemed to work at first, and I was proud of my clever
0da626
  *     hack, but it turns out g_object_class_list_properties() excludes
0da626
@@ -140,54 +135,158 @@ G_DEFINE_ABSTRACT_TYPE (
0da626
 static GParamSpec *
0da626
 param_spec_clone (GParamSpec *pspec)
0da626
 {
0da626
-	GParamSpec *clone;
0da626
-	GTypeQuery query;
0da626
-
0da626
-	/* Query the instance size. */
0da626
-	g_type_query (G_PARAM_SPEC_TYPE (pspec), &query);
0da626
-
0da626
-	/* Start with a memcpy()'d buffer. */
0da626
-	clone = g_slice_alloc0 (query.instance_size);
0da626
-	memcpy (clone, pspec, query.instance_size);
0da626
-
0da626
-	/* This sort of mimics g_param_spec_init(). */
0da626
-
0da626
-#define PARAM_FLOATING_FLAG 0x2  /* from gparam.c */
0da626
-	g_datalist_set_flags (&clone->qdata, PARAM_FLOATING_FLAG);
0da626
-	clone->ref_count = 1;
0da626
-
0da626
-	/* Clear the owner_type. */
0da626
-	clone->owner_type = G_TYPE_INVALID;
0da626
-
0da626
-	/* Clear the param_id. */
0da626
-	clone->param_id = 0;
0da626
-
0da626
-	/* This sort of mimics g_param_spec_internal(). */
0da626
-
0da626
-	/* Param name should already be canonicalized and interned. */
0da626
-
0da626
-	/* Always copy the nickname. */
0da626
-	clone->flags &= ~G_PARAM_STATIC_NICK;
0da626
-	clone->_nick = g_strdup (g_param_spec_get_nick (pspec));
0da626
-
0da626
-	/* Always copy the blurb. */
0da626
-	clone->flags &= ~G_PARAM_STATIC_BLURB;
0da626
-	clone->_blurb = g_strdup (g_param_spec_get_blurb (pspec));
0da626
-
0da626
-	/* Handle special cases. */
0da626
-
0da626
-	if (G_IS_PARAM_SPEC_STRING (clone)) {
0da626
-		GParamSpecString *clone_s;
0da626
-
0da626
-		clone_s = (GParamSpecString *) clone;
0da626
-		clone_s->default_value = g_strdup (clone_s->default_value);
0da626
+	GParamSpec *clone = NULL;
0da626
+	GParamFlags flags;
0da626
+	const gchar *name, *nick, *blurb;
0da626
+
0da626
+	name = g_param_spec_get_name (pspec);
0da626
+	nick = g_param_spec_get_nick (pspec);
0da626
+	blurb = g_param_spec_get_blurb (pspec);
0da626
+	flags = (pspec->flags & ~(G_PARAM_STATIC_STRINGS));
0da626
+
0da626
+	if (G_IS_PARAM_SPEC_BOOLEAN (pspec)) {
0da626
+		GParamSpecBoolean *pspec_boolean = G_PARAM_SPEC_BOOLEAN (pspec);
0da626
+
0da626
+		clone = g_param_spec_boolean (name, nick, blurb,
0da626
+			pspec_boolean->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_CHAR (pspec)) {
0da626
+		GParamSpecChar *pspec_char = G_PARAM_SPEC_CHAR (pspec);
0da626
+
0da626
+		clone = g_param_spec_char (name, nick, blurb,
0da626
+			pspec_char->minimum,
0da626
+			pspec_char->maximum,
0da626
+			pspec_char->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_UCHAR (pspec)) {
0da626
+		GParamSpecUChar *pspec_uchar = G_PARAM_SPEC_UCHAR (pspec);
0da626
+
0da626
+		clone = g_param_spec_uchar (name, nick, blurb,
0da626
+			pspec_uchar->minimum,
0da626
+			pspec_uchar->maximum,
0da626
+			pspec_uchar->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_INT (pspec)) {
0da626
+		GParamSpecInt *pspec_int = G_PARAM_SPEC_INT (pspec);
0da626
+
0da626
+		clone = g_param_spec_int (name, nick, blurb,
0da626
+			pspec_int->minimum,
0da626
+			pspec_int->maximum,
0da626
+			pspec_int->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_UINT (pspec)) {
0da626
+		GParamSpecUInt *pspec_uint = G_PARAM_SPEC_UINT (pspec);
0da626
+
0da626
+		clone = g_param_spec_uint (name, nick, blurb,
0da626
+			pspec_uint->minimum,
0da626
+			pspec_uint->maximum,
0da626
+			pspec_uint->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_LONG (pspec)) {
0da626
+		GParamSpecLong *pspec_long = G_PARAM_SPEC_LONG (pspec);
0da626
+
0da626
+		clone = g_param_spec_long (name, nick, blurb,
0da626
+			pspec_long->minimum,
0da626
+			pspec_long->maximum,
0da626
+			pspec_long->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_ULONG (pspec)) {
0da626
+		GParamSpecULong *pspec_ulong = G_PARAM_SPEC_ULONG (pspec);
0da626
+
0da626
+		clone = g_param_spec_ulong (name, nick, blurb,
0da626
+			pspec_ulong->minimum,
0da626
+			pspec_ulong->maximum,
0da626
+			pspec_ulong->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_INT64 (pspec)) {
0da626
+		GParamSpecInt64 *pspec_int64 = G_PARAM_SPEC_INT64 (pspec);
0da626
+
0da626
+		clone = g_param_spec_int64 (name, nick, blurb,
0da626
+			pspec_int64->minimum,
0da626
+			pspec_int64->maximum,
0da626
+			pspec_int64->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_UINT64 (pspec)) {
0da626
+		GParamSpecUInt64 *pspec_uint64 = G_PARAM_SPEC_UINT64 (pspec);
0da626
+
0da626
+		clone = g_param_spec_uint64 (name, nick, blurb,
0da626
+			pspec_uint64->minimum,
0da626
+			pspec_uint64->maximum,
0da626
+			pspec_uint64->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_FLOAT (pspec)) {
0da626
+		GParamSpecFloat *pspec_float = G_PARAM_SPEC_FLOAT (pspec);
0da626
+
0da626
+		clone = g_param_spec_float (name, nick, blurb,
0da626
+			pspec_float->minimum,
0da626
+			pspec_float->maximum,
0da626
+			pspec_float->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_DOUBLE (pspec)) {
0da626
+		GParamSpecDouble *pspec_double = G_PARAM_SPEC_DOUBLE (pspec);
0da626
+
0da626
+		clone = g_param_spec_double (name, nick, blurb,
0da626
+			pspec_double->minimum,
0da626
+			pspec_double->maximum,
0da626
+			pspec_double->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_ENUM (pspec)) {
0da626
+		GParamSpecEnum *pspec_enum = G_PARAM_SPEC_ENUM (pspec);
0da626
+
0da626
+		clone = g_param_spec_enum (name, nick, blurb,
0da626
+			pspec->value_type,
0da626
+			pspec_enum->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_FLAGS (pspec)) {
0da626
+		GParamSpecFlags *pspec_flags = G_PARAM_SPEC_FLAGS (pspec);
0da626
+
0da626
+		clone = g_param_spec_flags (name, nick, blurb,
0da626
+			pspec->value_type,
0da626
+			pspec_flags->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_STRING (pspec)) {
0da626
+		GParamSpecString *pspec_string = G_PARAM_SPEC_STRING (pspec);
0da626
+
0da626
+		clone = g_param_spec_string (name, nick, blurb,
0da626
+			pspec_string->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_PARAM (pspec)) {
0da626
+		clone = g_param_spec_param (name, nick, blurb,
0da626
+			pspec->value_type,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_BOXED (pspec)) {
0da626
+		clone = g_param_spec_boxed (name, nick, blurb,
0da626
+			pspec->value_type,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_POINTER (pspec)) {
0da626
+		clone = g_param_spec_pointer (name, nick, blurb, flags);
0da626
+	} else if (G_IS_PARAM_SPEC_OBJECT (pspec)) {
0da626
+		clone = g_param_spec_object (name, nick, blurb,
0da626
+			pspec->value_type,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_UNICHAR (pspec)) {
0da626
+		GParamSpecUnichar *pspec_unichar = G_PARAM_SPEC_UNICHAR (pspec);
0da626
+
0da626
+		clone = g_param_spec_unichar (name, nick, blurb,
0da626
+			pspec_unichar->default_value,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_GTYPE (pspec)) {
0da626
+		GParamSpecGType *pspec_gtype = G_PARAM_SPEC_GTYPE (pspec);
0da626
+
0da626
+		clone = g_param_spec_gtype (name, nick, blurb,
0da626
+			pspec_gtype->is_a_type,
0da626
+			flags);
0da626
+	} else if (G_IS_PARAM_SPEC_VARIANT (pspec)) {
0da626
+		GParamSpecVariant *pspec_variant = G_PARAM_SPEC_VARIANT (pspec);
0da626
+
0da626
+		clone = g_param_spec_variant (name, nick, blurb,
0da626
+			pspec_variant->type,
0da626
+			pspec_variant->default_value,
0da626
+			flags);
0da626
+	} else {
0da626
+		g_warn_if_reached ();
0da626
 	}
0da626
 
0da626
-	/* Some types we don't handle but shouldn't need to. */
0da626
-	g_warn_if_fail (!G_IS_PARAM_SPEC_VALUE_ARRAY (clone));
0da626
-	g_warn_if_fail (!G_IS_PARAM_SPEC_OVERRIDE (clone));
0da626
-	g_warn_if_fail (!G_IS_PARAM_SPEC_VARIANT (clone));
0da626
-
0da626
 	return clone;
0da626
 }
0da626
 
0da626
@@ -279,6 +378,9 @@ subclass_class_init (gpointer g_class,
0da626
 			continue;
0da626
 
0da626
 		pspec = param_spec_clone (properties[ii]);
0da626
+		if (!pspec)
0da626
+			continue;
0da626
+
0da626
 		pspec->flags |= E_SOURCE_PARAM_SETTING;
0da626
 
0da626
 		/* Clear the G_PARAM_CONSTRUCT flag.  We apply default