[evolution] Convert EMailParserExtension to an abstract class.



commit cab6eac8f14974ea1c2fedaf9143e98cf630c489
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Dec 7 12:32:32 2012 -0500

    Convert EMailParserExtension to an abstract class.
    
    With the previous changes, all parser extensions derive from
    GObjectClass and implement the EMailParserExtensionInterface.
    
    Simplify things further by making EMailParserExtension an abstract base
    class so parser extensions are now just direct subclasses and need not
    bother with implementing GObject interfaces.

 em-format/e-mail-format-extensions.c               |   10 +---
 em-format/e-mail-parser-application-mbox.c         |   34 ++++-----------
 em-format/e-mail-parser-application-smime.c        |   45 ++++++-------------
 em-format/e-mail-parser-attachment-bar.c           |   33 +++-----------
 em-format/e-mail-parser-extension.c                |   32 ++++++-------
 em-format/e-mail-parser-extension.h                |   46 ++++++++++++--------
 em-format/e-mail-parser-headers.c                  |   33 +++-----------
 em-format/e-mail-parser-image.c                    |   33 +++-----------
 em-format/e-mail-parser-inlinepgp-encrypted.c      |   33 +++-----------
 em-format/e-mail-parser-inlinepgp-signed.c         |   33 +++-----------
 em-format/e-mail-parser-message-deliverystatus.c   |   33 +++-----------
 em-format/e-mail-parser-message-external.c         |   33 +++-----------
 em-format/e-mail-parser-message-rfc822.c           |   35 ++++-----------
 em-format/e-mail-parser-message.c                  |   33 +++-----------
 em-format/e-mail-parser-multipart-alternative.c    |   33 +++-----------
 em-format/e-mail-parser-multipart-appledouble.c    |   33 +++-----------
 em-format/e-mail-parser-multipart-digest.c         |   35 ++++-----------
 em-format/e-mail-parser-multipart-encrypted.c      |   33 +++-----------
 em-format/e-mail-parser-multipart-mixed.c          |   34 ++++-----------
 em-format/e-mail-parser-multipart-related.c        |   33 +++-----------
 em-format/e-mail-parser-multipart-signed.c         |   32 +++----------
 em-format/e-mail-parser-secure-button.c            |   33 +++-----------
 em-format/e-mail-parser-source.c                   |   33 +++-----------
 em-format/e-mail-parser-text-enriched.c            |   33 +++-----------
 em-format/e-mail-parser-text-html.c                |   33 +++-----------
 em-format/e-mail-parser-text-plain.c               |   33 +++-----------
 modules/audio-inline/e-mail-parser-audio-inline.c  |   30 ++++---------
 modules/itip-formatter/e-mail-parser-itip.c        |   31 ++++---------
 modules/prefer-plain/e-mail-parser-prefer-plain.c  |   25 ++++-------
 .../text-highlight/e-mail-parser-text-highlight.c  |   28 ++++--------
 .../e-mail-parser-tnef-attachment.c                |   27 ++++-------
 modules/vcard-inline/e-mail-parser-vcard-inline.c  |   31 ++++---------
 32 files changed, 298 insertions(+), 738 deletions(-)
---
diff --git a/em-format/e-mail-format-extensions.c b/em-format/e-mail-format-extensions.c
index 117d51a..8ba3670 100644
--- a/em-format/e-mail-format-extensions.c
+++ b/em-format/e-mail-format-extensions.c
@@ -103,13 +103,9 @@ load (EMailExtensionRegistry *ereg,
 				extension_class)->mime_types;
 
 		interface_type = E_TYPE_MAIL_PARSER_EXTENSION;
-		if (g_type_is_a (extension_type, interface_type)) {
-			EMailParserExtensionInterface *interface;
-
-			interface = g_type_interface_peek (
-				extension_class, interface_type);
-			mime_types = interface->mime_types;
-		}
+		if (g_type_is_a (extension_type, interface_type))
+			mime_types = ((EMailParserExtensionClass *)
+				extension_class)->mime_types;
 
 		if (mime_types != NULL)
 			e_mail_extension_registry_add_extension (
diff --git a/em-format/e-mail-parser-application-mbox.c b/em-format/e-mail-parser-application-mbox.c
index 2821e98..d4ff6b1 100644
--- a/em-format/e-mail-parser-application-mbox.c
+++ b/em-format/e-mail-parser-application-mbox.c
@@ -34,24 +34,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserApplicationMBox {
-	GObject parent;
-} EMailParserApplicationMBox;
+typedef EMailParserExtension EMailParserApplicationMBox;
+typedef EMailParserExtensionClass EMailParserApplicationMBoxClass;
 
-typedef struct _EMailParserApplicationMBoxClass {
-	GObjectClass parent_class;
-} EMailParserApplicationMBoxClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserApplicationMBox,
 	e_mail_parser_application_mbox,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/mbox",
@@ -179,19 +168,14 @@ empe_app_mbox_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_application_mbox_class_init (EMailParserApplicationMBoxClass *class)
-{
-}
-
-static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *interface)
+e_mail_parser_application_mbox_class_init (EMailParserExtensionClass *class)
 {
-	interface->mime_types = parser_mime_types;
-	interface->parse = empe_app_mbox_parse;
-	interface->get_flags = empe_app_mbox_get_flags;
+	class->mime_types = parser_mime_types;
+	class->parse = empe_app_mbox_parse;
+	class->get_flags = empe_app_mbox_get_flags;
 }
 
 static void
-e_mail_parser_application_mbox_init (EMailParserApplicationMBox *self)
+e_mail_parser_application_mbox_init (EMailParserExtension *extension)
 {
 }
diff --git a/em-format/e-mail-parser-application-smime.c b/em-format/e-mail-parser-application-smime.c
index e5eab1b..29e623b 100644
--- a/em-format/e-mail-parser-application-smime.c
+++ b/em-format/e-mail-parser-application-smime.c
@@ -34,24 +34,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserApplicationSMIME {
-	GObject parent;
-} EMailParserApplicationSMIME;
+typedef EMailParserExtension EMailParserApplicationSMIME;
+typedef EMailParserExtensionClass EMailParserApplicationSMIMEClass;
 
-typedef struct _EMailParserAppplicationSMIMEClass {
-	GObjectClass parent_class;
-} EMailParserApplicationSMIMEClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserApplicationSMIME,
 	e_mail_parser_application_smime,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/xpkcs7mime",
@@ -65,11 +54,11 @@ static const gchar *parser_mime_types[] = {
 
 static gboolean
 empe_app_smime_parse (EMailParserExtension *extension,
-                       EMailParser *parser,
-                       CamelMimePart *part,
-                       GString *part_id,
-                       GCancellable *cancellable,
-                       GQueue *out_mail_parts)
+                      EMailParser *parser,
+                      CamelMimePart *part,
+                      GString *part_id,
+                      GCancellable *cancellable,
+                      GQueue *out_mail_parts)
 {
 	CamelCipherContext *context;
 	CamelMimePart *opart;
@@ -168,20 +157,14 @@ empe_app_smime_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_application_smime_class_init (EMailParserApplicationSMIMEClass *class)
+e_mail_parser_application_smime_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_app_smime_parse;
+	class->get_flags = empe_app_smime_get_flags;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *interface)
+e_mail_parser_application_smime_init (EMailParserExtension *extension)
 {
-	interface->mime_types = parser_mime_types;
-	interface->parse = empe_app_smime_parse;
-	interface->get_flags = empe_app_smime_get_flags;
-}
-
-static void
-e_mail_parser_application_smime_init (EMailParserApplicationSMIME *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-attachment-bar.c b/em-format/e-mail-parser-attachment-bar.c
index 77a796c..8b4489e 100644
--- a/em-format/e-mail-parser-attachment-bar.c
+++ b/em-format/e-mail-parser-attachment-bar.c
@@ -42,24 +42,13 @@ mail_part_attachment_bar_free (EMailPart *part)
 
 /******************************************************************************/
 
-typedef struct _EMailParserAttachmentBar {
-	GObject parent;
-} EMailParserAttachmentBar;
+typedef EMailParserExtension EMailParserAttachmentBar;
+typedef EMailParserExtensionClass EMailParserAttachmentBarClass;
 
-typedef struct _EMailParserAttachmentBarClass {
-	GObjectClass parent_class;
-} EMailParserAttachmentBarClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserAttachmentBar,
 	e_mail_parser_attachment_bar,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init))
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/vnd.evolution.widget.attachment-bar",
@@ -92,19 +81,13 @@ empe_attachment_bar_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_attachment_bar_class_init (EMailParserAttachmentBarClass *class)
+e_mail_parser_attachment_bar_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_attachment_bar_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_attachment_bar_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_attachment_bar_parse;
-}
-
-static void
-e_mail_parser_attachment_bar_init (EMailParserAttachmentBar *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-extension.c b/em-format/e-mail-parser-extension.c
index 5497d3a..b20ae90 100644
--- a/em-format/e-mail-parser-extension.c
+++ b/em-format/e-mail-parser-extension.c
@@ -20,7 +20,7 @@
 
 #include "e-mail-parser-extension.h"
 
-G_DEFINE_INTERFACE (
+G_DEFINE_ABSTRACT_TYPE (
 	EMailParserExtension,
 	e_mail_parser_extension,
 	G_TYPE_OBJECT)
@@ -31,17 +31,15 @@ mail_parser_extension_get_flags (EMailParserExtension *extension)
 	return 0;
 }
 
-/**
- * EMailParserExtension:
- *
- * The #EMailParserExtension is an abstract interface for all extensions for
- * #EMailParser.
- */
+static void
+e_mail_parser_extension_class_init (EMailParserExtensionClass *class)
+{
+	class->get_flags = mail_parser_extension_get_flags;
+}
 
 static void
-e_mail_parser_extension_default_init (EMailParserExtensionInterface *interface)
+e_mail_parser_extension_init (EMailParserExtension *extension)
 {
-	interface->get_flags = mail_parser_extension_get_flags;
 }
 
 /**
@@ -85,19 +83,19 @@ e_mail_parser_extension_parse (EMailParserExtension *extension,
                                GCancellable *cancellable,
                                GQueue *out_mail_parts)
 {
-	EMailParserExtensionInterface *interface;
+	EMailParserExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_PARSER_EXTENSION (extension), FALSE);
 	g_return_val_if_fail (E_IS_MAIL_PARSER (parser), FALSE);
 
-	interface = E_MAIL_PARSER_EXTENSION_GET_INTERFACE (extension);
-	g_return_val_if_fail (interface->parse != NULL, FALSE);
+	class = E_MAIL_PARSER_EXTENSION_GET_CLASS (extension);
+	g_return_val_if_fail (class->parse != NULL, FALSE);
 
 	/* Check for cancellation before calling the method. */
 	if (g_cancellable_is_cancelled (cancellable))
 		return FALSE;
 
-	return interface->parse (
+	return class->parse (
 		extension, parser, mime_part, part_id,
 		cancellable, out_mail_parts);
 }
@@ -105,12 +103,12 @@ e_mail_parser_extension_parse (EMailParserExtension *extension,
 guint32
 e_mail_parser_extension_get_flags (EMailParserExtension *extension)
 {
-	EMailParserExtensionInterface *interface;
+	EMailParserExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_PARSER_EXTENSION (extension), 0);
 
-	interface = E_MAIL_PARSER_EXTENSION_GET_INTERFACE (extension);
-	g_return_val_if_fail (interface->get_flags != NULL, 0);
+	class = E_MAIL_PARSER_EXTENSION_GET_CLASS (extension);
+	g_return_val_if_fail (class->get_flags != NULL, 0);
 
-	return interface->get_flags (extension);
+	return class->get_flags (extension);
 }
diff --git a/em-format/e-mail-parser-extension.h b/em-format/e-mail-parser-extension.h
index 06128cf..e510a15 100644
--- a/em-format/e-mail-parser-extension.h
+++ b/em-format/e-mail-parser-extension.h
@@ -28,18 +28,18 @@
 #define E_MAIL_PARSER_EXTENSION(obj) \
 	(G_TYPE_CHECK_INSTANCE_CAST \
 	((obj), E_TYPE_MAIL_PARSER_EXTENSION, EMailParserExtension))
-#define E_MAIL_PARSER_EXTENSION_INTERFACE(cls) \
+#define E_MAIL_PARSER_EXTENSION_CLASS(cls) \
 	(G_TYPE_CHECK_CLASS_CAST \
-	((cls), E_TYPE_MAIL_PARSER_EXTENSION, EMailParserExtensionInterface))
+	((cls), E_TYPE_MAIL_PARSER_EXTENSION, EMailParserExtensionClass))
 #define E_IS_MAIL_PARSER_EXTENSION(obj) \
 	(G_TYPE_CHECK_INSTANCE_TYPE \
 	((obj), E_TYPE_MAIL_PARSER_EXTENSION))
-#define E_IS_MAIL_PARSER_EXTENSION_INTERFACE(cls) \
+#define E_IS_MAIL_PARSER_EXTENSION_CLASS(cls) \
 	(G_TYPE_CHECK_CLASS_TYPE \
 	((cls), E_TYPE_MAIL_PARSER_EXTENSION))
-#define E_MAIL_PARSER_EXTENSION_GET_INTERFACE(obj) \
-	(G_TYPE_INSTANCE_GET_INTERFACE \
-	((obj), E_TYPE_MAIL_PARSER_EXTENSION, EMailParserExtensionInterface))
+#define E_MAIL_PARSER_EXTENSION_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_MAIL_PARSER_EXTENSION, EMailParserExtensionClass))
 
 #define EMP_EXTENSION_GET_PARSER(e) \
 	E_MAIL_PARSER (e_extension_get_extensible (E_EXTENSION (e)))
@@ -47,7 +47,8 @@
 G_BEGIN_DECLS
 
 typedef struct _EMailParserExtension EMailParserExtension;
-typedef struct _EMailParserExtensionInterface EMailParserExtensionInterface;
+typedef struct _EMailParserExtensionClass EMailParserExtensionClass;
+typedef struct _EMailParserExtensionPrivate EMailParserExtensionPrivate;
 
 /**
  * EMailParserExtensionFlags:
@@ -64,23 +65,32 @@ typedef enum {
 	E_MAIL_PARSER_EXTENSION_COMPOUND_TYPE		= 1 << 2
 } EMailParserExtensionFlags;
 
-struct _EMailParserExtensionInterface {
-	GTypeInterface parent_interface;
+/**
+ * EMailParserExtension:
+ *
+ * The #EMailParserExtension is an abstract interface for all extensions for
+ * #EMailParser.
+ */
+struct _EMailParserExtension {
+	GObject parent;
+	EMailParserExtensionPrivate *priv;
+};
+
+struct _EMailParserExtensionClass {
+	GObjectClass parent_class;
 
 	/* This is a NULL-terminated array of supported MIME types.
 	 * The MIME types can be exact (e.g. "text/plain") or use a
 	 * wildcard (e.g. "text/ *"). */
 	const gchar **mime_types;
 
-	gboolean	(*parse)	(EMailParserExtension *extension,
-					 EMailParser *parser,
-					 CamelMimePart *mime_part,
-					 GString *part_id,
-					 GCancellable *cancellable,
-					 GQueue *out_mail_parts);
-
-	guint32		(*get_flags)	(EMailParserExtension *extension);
-
+	gboolean	(*parse)		(EMailParserExtension *extension,
+						 EMailParser *parser,
+						 CamelMimePart *mime_part,
+						 GString *part_id,
+						 GCancellable *cancellable,
+						 GQueue *out_mail_parts);
+	guint32		(*get_flags)		(EMailParserExtension *extension);
 };
 
 GType		e_mail_parser_extension_get_type
diff --git a/em-format/e-mail-parser-headers.c b/em-format/e-mail-parser-headers.c
index e31f293..4646fd3 100644
--- a/em-format/e-mail-parser-headers.c
+++ b/em-format/e-mail-parser-headers.c
@@ -33,24 +33,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserHeaders {
-	GObject parent;
-} EMailParserHeaders;
+typedef EMailParserExtension EMailParserHeaders;
+typedef EMailParserExtensionClass EMailParserHeadersClass;
 
-typedef struct _EMailParserHeadersClass {
-	GObjectClass parent_class;
-} EMailParserHeadersClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserHeaders,
 	e_mail_parser_headers,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/vnd.evolution.headers",
@@ -112,19 +101,13 @@ empe_headers_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_headers_class_init (EMailParserHeadersClass *class)
+e_mail_parser_headers_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_headers_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_headers_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_headers_parse;
-}
-
-static void
-e_mail_parser_headers_init (EMailParserHeaders *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-image.c b/em-format/e-mail-parser-image.c
index 18bc8ff..976cfe4 100644
--- a/em-format/e-mail-parser-image.c
+++ b/em-format/e-mail-parser-image.c
@@ -30,24 +30,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailParserImage {
-	GObject parent;
-} EMailParserImage;
+typedef EMailParserExtension EMailParserImage;
+typedef EMailParserExtensionClass EMailParserImageClass;
 
-typedef struct _EMailParserImageClass {
-	GObjectClass parent_class;
-} EMailParserImageClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserImage,
 	e_mail_parser_image,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"image/gif",
@@ -116,19 +105,13 @@ empe_image_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_image_class_init (EMailParserImageClass *class)
+e_mail_parser_image_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_image_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_image_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_image_parse;
-}
-
-static void
-e_mail_parser_image_init (EMailParserImage *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-inlinepgp-encrypted.c b/em-format/e-mail-parser-inlinepgp-encrypted.c
index 081ba15..709446c 100644
--- a/em-format/e-mail-parser-inlinepgp-encrypted.c
+++ b/em-format/e-mail-parser-inlinepgp-encrypted.c
@@ -32,24 +32,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserInlinePGPEncrypted {
-	GObject parent;
-} EMailParserInlinePGPEncrypted;
+typedef EMailParserExtension EMailParserInlinePGPEncrypted;
+typedef EMailParserExtensionClass EMailParserInlinePGPEncryptedClass;
 
-typedef struct _EMailParserInlinePGPEncryptedClass {
-	GObjectClass parent_class;
-} EMailParserInlinePGPEncryptedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserInlinePGPEncrypted,
 	e_mail_parser_inline_pgp_encrypted,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/x-inlinepgp-encrypted",
@@ -172,19 +161,13 @@ empe_inlinepgp_encrypted_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_inline_pgp_encrypted_class_init (EMailParserInlinePGPEncryptedClass *class)
+e_mail_parser_inline_pgp_encrypted_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_inlinepgp_encrypted_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_inline_pgp_encrypted_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_inlinepgp_encrypted_parse;
-}
-
-static void
-e_mail_parser_inline_pgp_encrypted_init (EMailParserInlinePGPEncrypted *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-inlinepgp-signed.c b/em-format/e-mail-parser-inlinepgp-signed.c
index c7a79b8..77df847 100644
--- a/em-format/e-mail-parser-inlinepgp-signed.c
+++ b/em-format/e-mail-parser-inlinepgp-signed.c
@@ -32,24 +32,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserInlinePGPSigned {
-	GObject parent;
-} EMailParserInlinePGPSigned;
+typedef EMailParserExtension EMailParserInlinePGPSigned;
+typedef EMailParserExtensionClass EMailParserInlinePGPSignedClass;
 
-typedef struct _EMailParserInlinePGPSignedClass {
-	GObjectClass parent_class;
-} EMailParserInlinePGPSignedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserInlinePGPSigned,
 	e_mail_parser_inline_pgp_signed,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/x-inlinepgp-signed",
@@ -196,19 +185,13 @@ empe_inlinepgp_signed_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_inline_pgp_signed_class_init (EMailParserInlinePGPSignedClass *class)
+e_mail_parser_inline_pgp_signed_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_inlinepgp_signed_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_inline_pgp_signed_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_inlinepgp_signed_parse;
-}
-
-static void
-e_mail_parser_inline_pgp_signed_init (EMailParserInlinePGPSigned *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-message-deliverystatus.c b/em-format/e-mail-parser-message-deliverystatus.c
index b7df31e..3acbff7 100644
--- a/em-format/e-mail-parser-message-deliverystatus.c
+++ b/em-format/e-mail-parser-message-deliverystatus.c
@@ -32,24 +32,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMessageDeliveryStatus {
-	GObject parent;
-} EMailParserMessageDeliveryStatus;
+typedef EMailParserExtension EMailParserMessageDeliveryStatus;
+typedef EMailParserExtensionClass EMailParserMessageDeliveryStatusClass;
 
-typedef struct _EMailParserMessageDeliveryStatusClass {
-	GObjectClass parent_class;
-} EMailParserMessageDeliveryStatusClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMessageDeliveryStatus,
 	e_mail_parser_message_delivery_status,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"message/delivery-status",
@@ -89,19 +78,13 @@ empe_msg_deliverystatus_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_message_delivery_status_class_init (EMailParserMessageDeliveryStatusClass *class)
+e_mail_parser_message_delivery_status_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_msg_deliverystatus_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_message_delivery_status_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_msg_deliverystatus_parse;
-}
-
-static void
-e_mail_parser_message_delivery_status_init (EMailParserMessageDeliveryStatus *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-message-external.c b/em-format/e-mail-parser-message-external.c
index c05ad0e..8c355fb 100644
--- a/em-format/e-mail-parser-message-external.c
+++ b/em-format/e-mail-parser-message-external.c
@@ -32,24 +32,13 @@
 #include <string.h>
 #include <ctype.h>
 
-typedef struct _EMailParserMessageExternal {
-	GObject parent;
-} EMailParserMessageExternal;
+typedef EMailParserExtension EMailParserMessageExternal;
+typedef EMailParserExtensionClass EMailParserMessageExternalClass;
 
-typedef struct _EMailParserMessageExternalClass {
-	GObjectClass parent_class;
-} EMailParserMessageExternalClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMessageExternal,
 	e_mail_parser_message_external,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"message/external-body",
@@ -179,19 +168,13 @@ addPart:
 }
 
 static void
-e_mail_parser_message_external_class_init (EMailParserMessageExternalClass *class)
+e_mail_parser_message_external_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_msg_external_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_message_external_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_msg_external_parse;
-}
-
-static void
-e_mail_parser_message_external_init (EMailParserMessageExternal *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-message-rfc822.c b/em-format/e-mail-parser-message-rfc822.c
index ad50f59..d2cd7ee 100644
--- a/em-format/e-mail-parser-message-rfc822.c
+++ b/em-format/e-mail-parser-message-rfc822.c
@@ -35,24 +35,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMessageRFC822 {
-	GObject parent;
-} EMailParserMessageRFC822;
+typedef EMailParserExtension EMailParserMessageRFC822;
+typedef EMailParserExtensionClass EMailParserMessageRFC822Class;
 
-typedef struct _EMailParserMessageRFC822Class {
-	GObjectClass parent_class;
-} EMailParserMessageRFC822Class;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMessageRFC822,
 	e_mail_parser_message_rfc822,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"message/rfc822",
@@ -142,20 +131,14 @@ empe_msg_rfc822_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_message_rfc822_class_init (EMailParserMessageRFC822Class *class)
+e_mail_parser_message_rfc822_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_msg_rfc822_parse;
+	class->get_flags = empe_msg_rfc822_get_flags;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_message_rfc822_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_msg_rfc822_parse;
-	iface->get_flags = empe_msg_rfc822_get_flags;
-}
-
-static void
-e_mail_parser_message_rfc822_init (EMailParserMessageRFC822 *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-message.c b/em-format/e-mail-parser-message.c
index a481839..1039d9a 100644
--- a/em-format/e-mail-parser-message.c
+++ b/em-format/e-mail-parser-message.c
@@ -34,24 +34,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMessage {
-	GObject parent;
-} EMailParserMessage;
+typedef EMailParserExtension EMailParserMessage;
+typedef EMailParserExtensionClass EMailParserMessageClass;
 
-typedef struct _EMailParserMessageClass {
-	GObjectClass parent_class;
-} EMailParserMessageClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMessage,
 	e_mail_parser_message,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/vnd.evolution.message",
@@ -109,19 +98,13 @@ empe_message_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_message_class_init (EMailParserMessageClass *class)
+e_mail_parser_message_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_message_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_message_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_message_parse;
-}
-
-static void
-e_mail_parser_message_init (EMailParserMessage *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-alternative.c b/em-format/e-mail-parser-multipart-alternative.c
index cc06f41..d19137b 100644
--- a/em-format/e-mail-parser-multipart-alternative.c
+++ b/em-format/e-mail-parser-multipart-alternative.c
@@ -31,24 +31,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMultipartAlternative {
-	GObject parent;
-} EMailParserMultipartAlternative;
+typedef EMailParserExtension EMailParserMultipartAlternative;
+typedef EMailParserExtensionClass EMailParserMultipartAlternativeClass;
 
-typedef struct _EMailParserMultipartAlternativeClass {
-	GObjectClass parent_class;
-} EMailParserMultipartAlternativeClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartAlternative,
 	e_mail_parser_multipart_alternative,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/alternative",
@@ -158,19 +147,13 @@ empe_mp_alternative_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_multipart_alternative_class_init (EMailParserMultipartAlternativeClass *class)
+e_mail_parser_multipart_alternative_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_alternative_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_alternative_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_alternative_parse;
-}
-
-static void
-e_mail_parser_multipart_alternative_init (EMailParserMultipartAlternative *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-appledouble.c b/em-format/e-mail-parser-multipart-appledouble.c
index 3f47280..3fe0181 100644
--- a/em-format/e-mail-parser-multipart-appledouble.c
+++ b/em-format/e-mail-parser-multipart-appledouble.c
@@ -27,24 +27,13 @@
 
 #include <camel/camel.h>
 
-typedef struct _EMailParserMultipartAppleDouble {
-	GObject parent;
-} EMailParserMultipartAppleDouble;
+typedef EMailParserExtension EMailParserMultipartAppleDouble;
+typedef EMailParserExtensionClass EMailParserMultipartAppleDoubleClass;
 
-typedef struct _EMailParserMultipartAppleDoubleClass {
-	GObjectClass parent_class;
-} EMailParserMultipartAppleDoubleClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartAppleDouble,
 	e_mail_parser_multipart_apple_double,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/appledouble",
@@ -96,19 +85,13 @@ empe_mp_appledouble_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_multipart_apple_double_class_init (EMailParserMultipartAppleDoubleClass *class)
+e_mail_parser_multipart_apple_double_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_appledouble_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_apple_double_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_appledouble_parse;
-}
-
-static void
-e_mail_parser_multipart_apple_double_init (EMailParserMultipartAppleDouble *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-digest.c b/em-format/e-mail-parser-multipart-digest.c
index 7ca643d..2097b0c 100644
--- a/em-format/e-mail-parser-multipart-digest.c
+++ b/em-format/e-mail-parser-multipart-digest.c
@@ -30,24 +30,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMultipartDigest {
-	GObject parent;
-} EMailParserMultipartDigest;
+typedef EMailParserExtension EMailParserMultipartDigest;
+typedef EMailParserExtensionClass EMailParserMultipartDigestClass;
 
-typedef struct _EMailParserMultipartDigestClass {
-	GObjectClass parent_class;
-} EMailParserMultipartDigestClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartDigest,
 	e_mail_parser_multipart_digest,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/digest",
@@ -135,20 +124,14 @@ empe_mp_digest_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_multipart_digest_class_init (EMailParserMultipartDigestClass *class)
+e_mail_parser_multipart_digest_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_digest_parse;
+	class->get_flags = empe_mp_digest_get_flags;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_digest_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_digest_parse;
-	iface->get_flags = empe_mp_digest_get_flags;
-}
-
-static void
-e_mail_parser_multipart_digest_init (EMailParserMultipartDigest *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-encrypted.c b/em-format/e-mail-parser-multipart-encrypted.c
index 05b192b..6a08adc 100644
--- a/em-format/e-mail-parser-multipart-encrypted.c
+++ b/em-format/e-mail-parser-multipart-encrypted.c
@@ -30,24 +30,13 @@
 #include <camel/camel.h>
 #include <libedataserver/libedataserver.h>
 
-typedef struct _EMailParserMultipartEncrypted {
-	GObject parent;
-} EMailParserMultipartEncrypted;
+typedef EMailParserExtension EMailParserMultipartEncrypted;
+typedef EMailParserExtensionClass EMailParserMultipartEncryptedClass;
 
-typedef struct _EMailParserMultipartEncryptedClass {
-	GObjectClass parent_class;
-} EMailParserMultipartEncryptedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartEncrypted,
 	e_mail_parser_multipart_encrypted,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init))
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/encrypted",
@@ -182,19 +171,13 @@ empe_mp_encrypted_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_multipart_encrypted_class_init (EMailParserMultipartEncryptedClass *class)
+e_mail_parser_multipart_encrypted_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_encrypted_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_encrypted_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_encrypted_parse;
-}
-
-static void
-e_mail_parser_multipart_encrypted_init (EMailParserMultipartEncrypted *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-mixed.c b/em-format/e-mail-parser-multipart-mixed.c
index 9127a51..67671af 100644
--- a/em-format/e-mail-parser-multipart-mixed.c
+++ b/em-format/e-mail-parser-multipart-mixed.c
@@ -31,24 +31,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMultipartMixed {
-	GObject parent;
-} EMailParserMultipartMixed;
+typedef EMailParserExtension EMailParserMultipartMixed;
+typedef EMailParserExtensionClass EMailParserMultipartMixedClass;
 
-typedef struct _EMailParserMultipartMixedClass {
-	GObjectClass parent_class;
-} EMailParserMultipartMixedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartMixed,
 	e_mail_parser_multipart_mixed,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/mixed",
@@ -133,19 +122,14 @@ empe_mp_mixed_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_multipart_mixed_class_init (EMailParserMultipartMixedClass *class)
-{
-}
-
-static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_mixed_class_init (EMailParserExtensionClass *class)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_mixed_parse;
-	iface->get_flags = empe_mp_mixed_get_flags;
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_mixed_parse;
+	class->get_flags = empe_mp_mixed_get_flags;
 }
 
 static void
-e_mail_parser_multipart_mixed_init (EMailParserMultipartMixed *parser)
+e_mail_parser_multipart_mixed_init (EMailParserExtension *extension)
 {
 }
diff --git a/em-format/e-mail-parser-multipart-related.c b/em-format/e-mail-parser-multipart-related.c
index 1fca096..a9ae149 100644
--- a/em-format/e-mail-parser-multipart-related.c
+++ b/em-format/e-mail-parser-multipart-related.c
@@ -31,24 +31,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserMultipartRelated {
-	GObject parent;
-} EMailParserMultipartRelated;
+typedef EMailParserExtension EMailParserMultipartRelated;
+typedef EMailParserExtensionClass EMailParserMultipartRelatedClass;
 
-typedef struct _EMailParserMultipartRelatedClass {
-	GObjectClass parent_class;
-} EMailParserMultipartRelatedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartRelated,
 	e_mail_parser_multipart_related,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/related",
@@ -127,19 +116,13 @@ empe_mp_related_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_multipart_related_class_init (EMailParserMultipartRelatedClass *class)
+e_mail_parser_multipart_related_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_related_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_related_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_related_parse;
-}
-
-static void
-e_mail_parser_multipart_related_init (EMailParserMultipartRelated *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-multipart-signed.c b/em-format/e-mail-parser-multipart-signed.c
index a57053f..20a2577 100644
--- a/em-format/e-mail-parser-multipart-signed.c
+++ b/em-format/e-mail-parser-multipart-signed.c
@@ -30,24 +30,13 @@
 #include <camel/camel.h>
 #include <libedataserver/libedataserver.h>
 
-typedef struct _EMailParserMultipartSigned {
-	GObject parent;
-} EMailParserMultipartSigned;
+typedef EMailParserExtension EMailParserMultipartSigned;
+typedef EMailParserExtensionClass EMailParserMultipartSignedClass;
 
-typedef struct _EMailParserMultipartSignedClass {
-	GObjectClass parent_class;
-} EMailParserMultipartSignedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserMultipartSigned,
 	e_mail_parser_multipart_signed,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"multipart/signed",
@@ -216,18 +205,13 @@ empe_mp_signed_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_multipart_signed_class_init (EMailParserMultipartSignedClass *class)
-{
-}
-
-static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_multipart_signed_class_init (EMailParserExtensionClass *class)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_mp_signed_parse;
+	class->mime_types = parser_mime_types;
+	class->parse = empe_mp_signed_parse;
 }
 
 static void
-e_mail_parser_multipart_signed_init (EMailParserMultipartSigned *parser)
+e_mail_parser_multipart_signed_init (EMailParserExtension *extension)
 {
 }
diff --git a/em-format/e-mail-parser-secure-button.c b/em-format/e-mail-parser-secure-button.c
index ca38021..c590fba 100644
--- a/em-format/e-mail-parser-secure-button.c
+++ b/em-format/e-mail-parser-secure-button.c
@@ -29,24 +29,13 @@
 
 #include <camel/camel.h>
 
-typedef struct _EMailParserSecureButton {
-	GObject parent;
-} EMailParserSecureButton;
+typedef EMailParserExtension EMailParserSecureButton;
+typedef EMailParserExtensionClass EMailParserSecureButtonClass;
 
-typedef struct _EMailParserSecureButtonClass {
-	GObjectClass parent_class;
-} EMailParserSecureButtonClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserSecureButton,
 	e_mail_parser_secure_button,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init))
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/vnd.evolution.widget.secure-button",
@@ -76,19 +65,13 @@ empe_secure_button_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_secure_button_class_init (EMailParserSecureButtonClass *class)
+e_mail_parser_secure_button_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_secure_button_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_secure_button_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_secure_button_parse;
-}
-
-static void
-e_mail_parser_secure_button_init (EMailParserSecureButton *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-source.c b/em-format/e-mail-parser-source.c
index 1aef5fc..b41fdcc 100644
--- a/em-format/e-mail-parser-source.c
+++ b/em-format/e-mail-parser-source.c
@@ -29,24 +29,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailParserSource {
-	GObject parent;
-} EMailParserSource;
+typedef EMailParserExtension EMailParserSource;
+typedef EMailParserExtensionClass EMailParserSourceClass;
 
-typedef struct _EMailParserSourceClass {
-	GObjectClass parent_class;
-} EMailParserSourceClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserSource,
 	e_mail_parser_source,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"application/vnd.evolution.source",
@@ -77,19 +66,13 @@ empe_source_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_source_class_init (EMailParserSourceClass *class)
+e_mail_parser_source_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_source_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_source_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_source_parse;
-}
-
-static void
-e_mail_parser_source_init (EMailParserSource *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-text-enriched.c b/em-format/e-mail-parser-text-enriched.c
index b666704..bc5ab75 100644
--- a/em-format/e-mail-parser-text-enriched.c
+++ b/em-format/e-mail-parser-text-enriched.c
@@ -30,24 +30,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailParserTextEnriched {
-	GObject parent;
-} EMailParserTextEnriched;
+typedef EMailParserExtension EMailParserTextEnriched;
+typedef EMailParserExtensionClass EMailParserTextEnrichedClass;
 
-typedef struct _EMailParserTextEnrichedClass {
-	GObjectClass parent_class;
-} EMailParserTextEnrichedClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserTextEnriched,
 	e_mail_parser_text_enriched,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"text/richtext",
@@ -97,19 +86,13 @@ empe_text_enriched_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_text_enriched_class_init (EMailParserTextEnrichedClass *class)
+e_mail_parser_text_enriched_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_text_enriched_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_text_enriched_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_text_enriched_parse;
-}
-
-static void
-e_mail_parser_text_enriched_init (EMailParserTextEnriched *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-text-html.c b/em-format/e-mail-parser-text-html.c
index 5edce60..0b28416 100644
--- a/em-format/e-mail-parser-text-html.c
+++ b/em-format/e-mail-parser-text-html.c
@@ -32,24 +32,13 @@
 
 #include <string.h>
 
-typedef struct _EMailParserTextHTML {
-	GObject parent;
-} EMailParserTextHTML;
+typedef EMailParserExtension EMailParserTextHTML;
+typedef EMailParserExtensionClass EMailParserTextHTMLClass;
 
-typedef struct _EMailParserTextHTMLClass {
-	GObjectClass parent_class;
-} EMailParserTextHTMLClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserTextHTML,
 	e_mail_parser_text_html,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"text/html",
@@ -108,19 +97,13 @@ empe_text_html_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_text_html_class_init (EMailParserTextHTMLClass *class)
+e_mail_parser_text_html_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_text_html_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_text_html_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_text_html_parse;
-}
-
-static void
-e_mail_parser_text_html_init (EMailParserTextHTML *parser)
-{
-
 }
diff --git a/em-format/e-mail-parser-text-plain.c b/em-format/e-mail-parser-text-plain.c
index 3d79901..354937a 100644
--- a/em-format/e-mail-parser-text-plain.c
+++ b/em-format/e-mail-parser-text-plain.c
@@ -32,24 +32,13 @@
 #include <camel/camel.h>
 #include <ctype.h>
 
-typedef struct _EMailParserTextPlain {
-	GObject parent;
-} EMailParserTextPlain;
+typedef EMailParserExtension EMailParserTextPlain;
+typedef EMailParserExtensionClass EMailParserTextPlainClass;
 
-typedef struct _EMailParserTextPlainClass {
-	GObjectClass parent_class;
-} EMailParserTextPlainClass;
-
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailParserTextPlain,
 	e_mail_parser_text_plain,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 static const gchar *parser_mime_types[] = {
 	"text/plain",
@@ -235,19 +224,13 @@ empe_text_plain_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_text_plain_class_init (EMailParserTextPlainClass *class)
+e_mail_parser_text_plain_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_text_plain_parse;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_text_plain_init (EMailParserExtension *extension)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_text_plain_parse;
-}
-
-static void
-e_mail_parser_text_plain_init (EMailParserTextPlain *parser)
-{
-
 }
diff --git a/modules/audio-inline/e-mail-parser-audio-inline.c b/modules/audio-inline/e-mail-parser-audio-inline.c
index 7fc025e..519f6ce 100644
--- a/modules/audio-inline/e-mail-parser-audio-inline.c
+++ b/modules/audio-inline/e-mail-parser-audio-inline.c
@@ -38,24 +38,19 @@
 
 #define d(x)
 
-typedef GObject EMailParserAudioInline;
-typedef GObjectClass EMailParserAudioInlineClass;
+typedef EMailParserExtension EMailParserAudioInline;
+typedef EMailParserExtensionClass EMailParserAudioInlineClass;
 
 typedef EExtension EMailParserAudioInlineLoader;
 typedef EExtensionClass EMailParserAudioInlineLoaderClass;
 
 GType e_mail_parser_audio_inline_get_type (void);
 GType e_mail_parser_audio_inline_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserAudioInline,
 	e_mail_parser_audio_inline,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserAudioInlineLoader,
@@ -157,26 +152,21 @@ empe_audio_inline_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_audio_inline_parse;
-	iface->get_flags = empe_audio_inline_get_flags;
-}
-
-static void
-e_mail_parser_audio_inline_class_init (EMailParserAudioInlineClass *class)
+e_mail_parser_audio_inline_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_audio_inline_parse;
+	class->get_flags = empe_audio_inline_get_flags;
 }
 
 static void
-e_mail_parser_audio_inline_class_finalize (EMailParserAudioInlineClass *class)
+e_mail_parser_audio_inline_class_finalize (EMailParserExtensionClass *class)
 {
 
 }
 
 static void
-e_mail_parser_audio_inline_init (EMailParserAudioInline *self)
+e_mail_parser_audio_inline_init (EMailParserExtension *extension)
 {
 }
 
diff --git a/modules/itip-formatter/e-mail-parser-itip.c b/modules/itip-formatter/e-mail-parser-itip.c
index 2894b52..a63fc2f 100644
--- a/modules/itip-formatter/e-mail-parser-itip.c
+++ b/modules/itip-formatter/e-mail-parser-itip.c
@@ -44,24 +44,19 @@
 
 #define d(x)
 
-typedef GObject EMailParserItip;
-typedef GObjectClass EMailParserItipClass;
+typedef EMailParserExtension EMailParserItip;
+typedef EMailParserExtensionClass EMailParserItipClass;
 
 typedef EExtension EMailParserItipLoader;
 typedef EExtensionClass EMailParserItipLoaderClass;
 
 GType e_mail_parser_itip_get_type (void);
 GType e_mail_parser_itip_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserItip,
 	e_mail_parser_itip,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserItipLoader,
@@ -260,26 +255,20 @@ empe_itip_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_itip_class_init (EMailParserItipClass *class)
-{
-}
-
-static void
-e_mail_parser_itip_class_finalize (EMailParserItipClass *class)
+e_mail_parser_itip_class_init (EMailParserExtensionClass *class)
 {
-
+	class->mime_types = parser_mime_types;
+	class->parse = empe_itip_parse;
+	class->get_flags = empe_itip_get_flags;
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+e_mail_parser_itip_class_finalize (EMailParserExtensionClass *class)
 {
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_itip_parse;
-	iface->get_flags = empe_itip_get_flags;
 }
 
 static void
-e_mail_parser_itip_init (EMailParserItip *self)
+e_mail_parser_itip_init (EMailParserExtension *class)
 {
 }
 
diff --git a/modules/prefer-plain/e-mail-parser-prefer-plain.c b/modules/prefer-plain/e-mail-parser-prefer-plain.c
index eea1d28..d434c20 100644
--- a/modules/prefer-plain/e-mail-parser-prefer-plain.c
+++ b/modules/prefer-plain/e-mail-parser-prefer-plain.c
@@ -39,7 +39,7 @@ typedef EExtension EMailParserPreferPlainLoader;
 typedef EExtensionClass EMailParserPreferPlainLoaderClass;
 
 struct _EMailParserPreferPlain {
-	GObject parent;
+	EMailParserExtension parent;
 
 	GSettings *settings;
 	gint mode;
@@ -47,12 +47,11 @@ struct _EMailParserPreferPlain {
 };
 
 struct _EMailParserPreferPlainClass {
-	GObjectClass parent_class;
+	EMailParserExtensionClass parent_class;
 };
 
 GType e_mail_parser_prefer_plain_get_type (void);
 GType e_mail_parser_prefer_plain_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
 enum {
 	PREFER_HTML,
@@ -60,14 +59,10 @@ enum {
 	ONLY_PLAIN
 };
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserPreferPlain,
 	e_mail_parser_prefer_plain,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserPreferPlainLoader,
@@ -332,13 +327,6 @@ empe_prefer_plain_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_prefer_plain_parse;
-}
-
-static void
 e_mail_parser_prefer_plain_get_property (GObject *object,
                                          guint property_id,
                                          GValue *value,
@@ -400,12 +388,17 @@ static void
 e_mail_parser_prefer_plain_class_init (EMailParserPreferPlainClass *class)
 {
 	GObjectClass *object_class;
+	EMailParserExtensionClass *extension_class;
 
 	object_class = G_OBJECT_CLASS (class);
 	object_class->get_property = e_mail_parser_prefer_plain_get_property;
 	object_class->set_property = e_mail_parser_prefer_plain_set_property;
 	object_class->dispose = e_mail_parser_prefer_plain_dispose;
 
+	extension_class = E_MAIL_PARSER_EXTENSION_CLASS (class);
+	extension_class->mime_types = parser_mime_types;
+	extension_class->parse = empe_prefer_plain_parse;
+
 	g_object_class_install_property (
 		object_class,
 		PROP_MODE,
diff --git a/modules/text-highlight/e-mail-parser-text-highlight.c b/modules/text-highlight/e-mail-parser-text-highlight.c
index cf8ff5f..99d920f 100644
--- a/modules/text-highlight/e-mail-parser-text-highlight.c
+++ b/modules/text-highlight/e-mail-parser-text-highlight.c
@@ -34,24 +34,19 @@
 
 #define d(x)
 
-typedef GObject EMailParserTextHighlight;
-typedef GObjectClass EMailParserTextHighlightClass;
+typedef EMailParserExtension EMailParserTextHighlight;
+typedef EMailParserExtensionClass EMailParserTextHighlightClass;
 
 typedef EExtension EMailParserTextHighlightLoader;
 typedef EExtensionClass EMailParserTextHighlightLoaderClass;
 
 GType e_mail_parser_text_highlight_get_type (void);
 GType e_mail_parser_text_highlight_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserTextHighlight,
 	e_mail_parser_text_highlight,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserTextHighlightLoader,
@@ -99,24 +94,19 @@ empe_text_highlight_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
-{
-	iface->mime_types = get_mime_types ();
-	iface->parse = empe_text_highlight_parse;
-}
-
-static void
-e_mail_parser_text_highlight_class_init (EMailParserTextHighlightClass *class)
+e_mail_parser_text_highlight_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = get_mime_types ();
+	class->parse = empe_text_highlight_parse;
 }
 
 void
-e_mail_parser_text_highlight_class_finalize (EMailParserTextHighlightClass *class)
+e_mail_parser_text_highlight_class_finalize (EMailParserExtensionClass *class)
 {
 }
 
 static void
-e_mail_parser_text_highlight_init (EMailParserTextHighlight *parser)
+e_mail_parser_text_highlight_init (EMailParserExtension *extension)
 {
 }
 
diff --git a/modules/tnef-attachment/e-mail-parser-tnef-attachment.c b/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
index 27d8c70..f2619ae 100644
--- a/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
+++ b/modules/tnef-attachment/e-mail-parser-tnef-attachment.c
@@ -50,7 +50,7 @@
 #define d(x)
 
 typedef struct _EMailParserTnefAttachment {
-	GObject parent;
+	EMailParserExtension parent;
 
 	GSettings *settings;
 	gint mode;
@@ -58,7 +58,7 @@ typedef struct _EMailParserTnefAttachment {
 } EMailParserTnefAttachment;
 
 typedef struct _EMailParserTnefAttachmentClass {
-	GObjectClass parent_class;
+	EMailParserExtensionClass parent_class;
 } EMailParserTnefAttachmentClass;
 
 typedef EExtension EMailParserTnefAttachmentLoader;
@@ -66,16 +66,11 @@ typedef EExtensionClass EMailParserTnefAttachmentLoaderClass;
 
 GType e_mail_parser_tnef_attachment_get_type (void);
 GType e_mail_parser_tnef_attachment_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserTnefAttachment,
 	e_mail_parser_tnef_attachment,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserTnefAttachmentLoader,
@@ -267,15 +262,13 @@ empe_tnef_attachment_parse (EMailParserExtension *extension,
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_tnef_attachment_parse;
-}
-
-static void
 e_mail_parser_tnef_attachment_class_init (EMailParserTnefAttachmentClass *class)
 {
+	EMailParserExtensionClass *extension_class;
+
+	extension_class = E_MAIL_PARSER_EXTENSION_CLASS (class);
+	extension_class->mime_types = parser_mime_types;
+	extension_class->parse = empe_tnef_attachment_parse;
 }
 
 void
@@ -284,7 +277,7 @@ e_mail_parser_tnef_attachment_class_finalize (EMailParserTnefAttachmentClass *cl
 }
 
 static void
-e_mail_parser_tnef_attachment_init (EMailParserTnefAttachment *parser)
+e_mail_parser_tnef_attachment_init (EMailParserTnefAttachment *extension)
 {
 }
 
diff --git a/modules/vcard-inline/e-mail-parser-vcard-inline.c b/modules/vcard-inline/e-mail-parser-vcard-inline.c
index c3998c7..1328e50 100644
--- a/modules/vcard-inline/e-mail-parser-vcard-inline.c
+++ b/modules/vcard-inline/e-mail-parser-vcard-inline.c
@@ -48,24 +48,19 @@
 
 #define d(x)
 
-typedef GObject EMailParserVCardInline;
-typedef GObjectClass EMailParserVCardInlineClass;
+typedef EMailParserExtension EMailParserVCardInline;
+typedef EMailParserExtensionClass EMailParserVCardInlineClass;
 
 typedef EExtension EMailParserVCardInlineLoader;
 typedef EExtensionClass EMailParserVCardInlineLoaderClass;
 
 GType e_mail_parser_vcard_inline_get_type (void);
 GType e_mail_parser_vcard_inline_loader_get_type (void);
-static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailParserVCardInline,
 	e_mail_parser_vcard_inline,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_PARSER_EXTENSION,
-		e_mail_parser_parser_extension_interface_init));
+	E_TYPE_MAIL_PARSER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailParserVCardInlineLoader,
@@ -381,26 +376,20 @@ empe_vcard_inline_get_flags (EMailParserExtension *extension)
 }
 
 static void
-e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
-{
-	iface->mime_types = parser_mime_types;
-	iface->parse = empe_vcard_inline_parse;
-	iface->get_flags = empe_vcard_inline_get_flags;
-}
-
-static void
-e_mail_parser_vcard_inline_class_init (EMailParserVCardInlineClass *class)
+e_mail_parser_vcard_inline_class_init (EMailParserExtensionClass *class)
 {
+	class->mime_types = parser_mime_types;
+	class->parse = empe_vcard_inline_parse;
+	class->get_flags = empe_vcard_inline_get_flags;
 }
 
 static void
-e_mail_parser_vcard_inline_class_finalize (EMailParserVCardInlineClass *class)
+e_mail_parser_vcard_inline_class_finalize (EMailParserExtensionClass *class)
 {
-
 }
 
 static void
-e_mail_parser_vcard_inline_init (EMailParserVCardInline *self)
+e_mail_parser_vcard_inline_init (EMailParserExtension *extension)
 {
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]