[evolution] Convert EMailFormatterExtension to an abstract class.



commit 00b211b0f515d6b6d9147c1ca568d0c4b42af699
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Dec 7 09:37:37 2012 -0500

    Convert EMailFormatterExtension to an abstract class.
    
    With the previous changes, all formatter extensions derive from
    GObjectClass and implement the EMailFormatterExtensionInterface.
    
    Simplify things further by making EMailFormatterExtension an abstract
    base class so formatter 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-formatter-attachment-bar.c        |   39 +++------
 em-format/e-mail-formatter-attachment.c            |   40 +++------
 em-format/e-mail-formatter-error.c                 |   37 ++------
 em-format/e-mail-formatter-extension.c             |   92 +++++++++-----------
 em-format/e-mail-formatter-extension.h             |   40 +++++----
 em-format/e-mail-formatter-headers.c               |   41 +++------
 em-format/e-mail-formatter-image.c                 |   45 +++-------
 em-format/e-mail-formatter-message-rfc822.c        |   45 +++-------
 em-format/e-mail-formatter-print-headers.c         |   42 +++-------
 em-format/e-mail-formatter-quote-attachment.c      |   38 ++------
 em-format/e-mail-formatter-quote-headers.c         |   38 ++------
 em-format/e-mail-formatter-quote-message-rfc822.c  |   37 ++------
 em-format/e-mail-formatter-quote-text-enriched.c   |   38 ++------
 em-format/e-mail-formatter-quote-text-html.c       |   38 ++------
 em-format/e-mail-formatter-quote-text-plain.c      |   38 ++------
 em-format/e-mail-formatter-secure-button.c         |   39 +++------
 em-format/e-mail-formatter-source.c                |   38 ++------
 em-format/e-mail-formatter-text-enriched.c         |   44 +++-------
 em-format/e-mail-formatter-text-html.c             |   45 +++-------
 em-format/e-mail-formatter-text-plain.c            |   45 +++-------
 .../audio-inline/e-mail-formatter-audio-inline.c   |   34 +++-----
 modules/itip-formatter/e-mail-formatter-itip.c     |   32 +++-----
 .../e-mail-formatter-text-highlight.c              |   32 +++-----
 .../vcard-inline/e-mail-formatter-vcard-inline.c   |   32 +++-----
 25 files changed, 320 insertions(+), 679 deletions(-)
---
diff --git a/em-format/e-mail-format-extensions.c b/em-format/e-mail-format-extensions.c
index 01162bc..117d51a 100644
--- a/em-format/e-mail-format-extensions.c
+++ b/em-format/e-mail-format-extensions.c
@@ -98,13 +98,9 @@ load (EMailExtensionRegistry *ereg,
 		extension_class = g_type_class_ref (extension_type);
 
 		interface_type = E_TYPE_MAIL_FORMATTER_EXTENSION;
-		if (g_type_is_a (extension_type, interface_type)) {
-			EMailFormatterExtensionInterface *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 = ((EMailFormatterExtensionClass *)
+				extension_class)->mime_types;
 
 		interface_type = E_TYPE_MAIL_PARSER_EXTENSION;
 		if (g_type_is_a (extension_type, interface_type)) {
diff --git a/em-format/e-mail-formatter-attachment-bar.c b/em-format/e-mail-formatter-attachment-bar.c
index 160c8af..57e6a72 100644
--- a/em-format/e-mail-formatter-attachment-bar.c
+++ b/em-format/e-mail-formatter-attachment-bar.c
@@ -28,24 +28,13 @@
 #include <em-format/e-mail-formatter-extension.h>
 #include <em-format/e-mail-formatter.h>
 
-typedef struct _EMailFormatterAttachmentBar {
-	GObject parent;
-} EMailFormatterAttachmentBar;
+typedef EMailFormatterExtension EMailFormatterAttachmentBar;
+typedef EMailFormatterExtensionClass EMailFormatterAttachmentBarClass;
 
-typedef struct _EMailFormatterAttachmentBarClass {
-	GObjectClass parent_class;
-} EMailFormatterAttachmentBarClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterAttachmentBar,
 	e_mail_formatter_attachment_bar,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.widget.attachment-bar",
@@ -122,22 +111,16 @@ emfe_attachment_bar_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_attachment_bar_class_init (EMailFormatterAttachmentBarClass *class)
+e_mail_formatter_attachment_bar_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_attachment_bar_format;
+	class->get_widget = emfe_attachment_bar_get_widget;
+	class->get_display_name = emfe_attachment_bar_get_display_name;
+	class->get_description = emfe_attachment_bar_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_attachment_bar_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_attachment_bar_format;
-	iface->get_widget = emfe_attachment_bar_get_widget;
-	iface->get_display_name = emfe_attachment_bar_get_display_name;
-	iface->get_description = emfe_attachment_bar_get_description;
-}
-
-static void
-e_mail_formatter_attachment_bar_init (EMailFormatterAttachmentBar *extension)
-{
-
 }
diff --git a/em-format/e-mail-formatter-attachment.c b/em-format/e-mail-formatter-attachment.c
index f637766..1e9565d 100644
--- a/em-format/e-mail-formatter-attachment.c
+++ b/em-format/e-mail-formatter-attachment.c
@@ -40,25 +40,13 @@
 
 #define d(x)
 
-typedef struct _EMailFormatterAttachment {
-	GObject parent;
-} EMailFormatterAttachment;
+typedef EMailFormatterExtension EMailFormatterAttachment;
+typedef EMailFormatterExtensionClass EMailFormatterAttachmentClass;
 
-typedef struct _EMailFormatterAttachmentClass {
-	GObjectClass parent_class;
-} EMailFormatterAttachmentClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterAttachment,
 	e_mail_formatter_attachment,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init)
-)
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.attachment",
@@ -387,22 +375,16 @@ emfe_attachment_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_attachment_class_init (EMailFormatterAttachmentClass *class)
+e_mail_formatter_attachment_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_attachment_format;
+	class->get_widget = emfe_attachment_get_widget;
+	class->get_display_name = emfe_attachment_get_display_name;
+	class->get_description = emfe_attachment_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_attachment_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_attachment_format;
-	iface->get_widget = emfe_attachment_get_widget;
-	iface->get_display_name = emfe_attachment_get_display_name;
-	iface->get_description = emfe_attachment_get_description;
-}
-
-static void
-e_mail_formatter_attachment_init (EMailFormatterAttachment *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-error.c b/em-format/e-mail-formatter-error.c
index 8c86156..441a86c 100644
--- a/em-format/e-mail-formatter-error.c
+++ b/em-format/e-mail-formatter-error.c
@@ -29,24 +29,13 @@
 
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterError {
-	GObject parent;
-} EMailFormatterError;
+typedef EMailFormatterExtension EMailFormatterError;
+typedef EMailFormatterExtensionClass EMailFormatterErrorClass;
 
-typedef struct _EMailFormatterErrorClass {
-	GObjectClass parent_class;
-} EMailFormatterErrorClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterError,
 	e_mail_formatter_error,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.error",
@@ -128,21 +117,15 @@ emfe_error_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_error_class_init (EMailFormatterErrorClass *class)
+e_mail_formatter_error_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_error_format;
+	class->get_display_name = emfe_error_get_display_name;
+	class->get_description = emfe_error_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_error_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_error_format;
-	iface->get_display_name = emfe_error_get_display_name;
-	iface->get_description = emfe_error_get_description;
-}
-
-static void
-e_mail_formatter_error_init (EMailFormatterError *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-extension.c b/em-format/e-mail-formatter-extension.c
index 3e10aa1..beee638 100644
--- a/em-format/e-mail-formatter-extension.c
+++ b/em-format/e-mail-formatter-extension.c
@@ -18,22 +18,19 @@
 
 #include "e-mail-formatter-extension.h"
 
-G_DEFINE_INTERFACE (
+G_DEFINE_ABSTRACT_TYPE (
 	EMailFormatterExtension,
 	e_mail_formatter_extension,
 	G_TYPE_OBJECT)
 
-/**
- * EMailFormatterExtension:
- *
- * The #EMailFormatterExtension is an abstract interface for all extensions for
- * #EmailFormatter.
- */
-
 static void
-e_mail_formatter_extension_default_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_extension_class_init (EMailFormatterExtensionClass *class)
 {
+}
 
+static void
+e_mail_formatter_extension_init (EMailFormatterExtension *extension)
+{
 }
 
 /**
@@ -45,18 +42,18 @@ e_mail_formatter_extension_default_init (EMailFormatterExtensionInterface *iface
  * @stream: a #CamelStream to which the output should be written
  * @cancellable: (allow-none) a #GCancellable
  *
- * A virtual function reimplemented in all mail formatter extensions. The function
- * formats @part, generated HTML (or other format that can be displayed to user)
- * and writes it to the @stream.
+ * A virtual function reimplemented in all mail formatter extensions. The
+ * function formats @part, generated HTML (or other format that can be
+ * displayed to user) and writes it to the @stream.
  *
  * When the function is unable to format the @part (either because it's broken
- * or because it is a different mimetype then the extension is specialized for), the
- * function will return @FALSE indicating the #EMailFormatter, that it should pick
- * another extension.
+ * or because it is a different mimetype then the extension is specialized
+ * for), the function will return @FALSE indicating the #EMailFormatter, that
+ * it should pick another extension.
  *
  * Implementation of this function must be thread-safe.
  *
- * Return value: Returns @TRUE when the @part was successfully formatted and
+ * Returns: Returns @TRUE when the @part was successfully formatted and
  * data were written to the @stream, @FALSE otherwise.
  */
 gboolean
@@ -67,7 +64,7 @@ e_mail_formatter_extension_format (EMailFormatterExtension *extension,
                                    CamelStream *stream,
                                    GCancellable *cancellable)
 {
-	EMailFormatterExtensionInterface *interface;
+	EMailFormatterExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER_EXTENSION (extension), FALSE);
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER (formatter), FALSE);
@@ -75,10 +72,10 @@ e_mail_formatter_extension_format (EMailFormatterExtension *extension,
 	g_return_val_if_fail (part != NULL, FALSE);
 	g_return_val_if_fail (CAMEL_IS_STREAM (stream), FALSE);
 
-	interface = E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE (extension);
-	g_return_val_if_fail (interface->format != NULL, FALSE);
+	class = E_MAIL_FORMATTER_EXTENSION_GET_CLASS (extension);
+	g_return_val_if_fail (class->format != NULL, FALSE);
 
-	return interface->format (extension, formatter, context, part, stream, cancellable);
+	return class->format (extension, formatter, context, part, stream, cancellable);
 }
 
 /**
@@ -87,19 +84,19 @@ e_mail_formatter_extension_format (EMailFormatterExtension *extension,
  *
  * Returns whether the extension can provide a GtkWidget.
  *
- * Return value: Returns %TRUE when @extension reimplements get_widget(), %FALSE
+ * Returns: Returns %TRUE when @extension reimplements get_widget(), %FALSE
  * otherwise.
  */
 gboolean
 e_mail_formatter_extension_has_widget (EMailFormatterExtension *extension)
 {
-	EMailFormatterExtensionInterface *interface;
+	EMailFormatterExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER_EXTENSION (extension), FALSE);
 
-	interface = E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE (extension);
+	class = E_MAIL_FORMATTER_EXTENSION_GET_CLASS (extension);
 
-	return (interface->get_widget != NULL);
+	return (class->get_widget != NULL);
 }
 
 /**
@@ -108,17 +105,17 @@ e_mail_formatter_extension_has_widget (EMailFormatterExtension *extension)
  * @part: an #EMailPart
  * @params: a #GHashTable
  *
- * A virtual function reimplemented in some mail formatter extensions. The function
- * should construct a #GtkWidget for given @part. The @params hash table can contain
- * additional parameters listed in the &lt;object&gt; HTML element that has requested
- * the widget.
+ * A virtual function reimplemented in some mail formatter extensions. The
+ * function should construct a #GtkWidget for given @part. The @params hash
+ * table can contain additional parameters listed in the &lt;object&gt; HTML
+ * element that has requested the widget.
  *
  * When @bind_dom_func is not %NULL, the callee will set a callback function
  * which should be called when the webpage is completely rendered to setup
  * bindings between DOM events and the widget.
  *
- * Return value: Returns a #GtkWidget or %NULL, when error occurs or given @extension
- * does not reimplement this method.
+ * Returns: Returns a #GtkWidget or %NULL, when error occurs or given
+ * @extension does not reimplement this method.
  */
 GtkWidget *
 e_mail_formatter_extension_get_widget (EMailFormatterExtension *extension,
@@ -126,20 +123,17 @@ e_mail_formatter_extension_get_widget (EMailFormatterExtension *extension,
                                        EMailPart *part,
                                        GHashTable *params)
 {
-	EMailFormatterExtensionInterface *interface;
-	GtkWidget *widget;
+	EMailFormatterExtensionClass *class;
+	GtkWidget *widget = NULL;
 
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER_EXTENSION (extension), NULL);
 	g_return_val_if_fail (part != NULL, NULL);
 	g_return_val_if_fail (params != NULL, NULL);
 
-	interface = E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE (extension);
+	class = E_MAIL_FORMATTER_EXTENSION_GET_CLASS (extension);
 
-	widget = NULL;
-	if (interface->get_widget) {
-		widget = interface->get_widget (
-				extension, context, part, params);
-	}
+	if (class->get_widget != NULL)
+		widget = class->get_widget (extension, context, part, params);
 
 	return widget;
 }
@@ -149,21 +143,21 @@ e_mail_formatter_extension_get_widget (EMailFormatterExtension *extension,
  * @extension: an #EMailFormatterExtension
  *
  * A virtual function reimplemented in all formatter extensions. It returns a
- * short name of the extension that can be displayed in user interface.
+ * short name of the extension that can be displayed in user class.
  *
- * Return value: A (localized) string with name of the extension
+ * Returns: A (localized) string with name of the extension
  */
 const gchar *
 e_mail_formatter_extension_get_display_name (EMailFormatterExtension *extension)
 {
-	EMailFormatterExtensionInterface *interface;
+	EMailFormatterExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER_EXTENSION (extension), NULL);
 
-	interface = E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE (extension);
-	g_return_val_if_fail (interface->get_display_name != NULL, NULL);
+	class = E_MAIL_FORMATTER_EXTENSION_GET_CLASS (extension);
+	g_return_val_if_fail (class->get_display_name != NULL, NULL);
 
-	return interface->get_display_name (extension);
+	return class->get_display_name (extension);
 }
 
 /**
@@ -173,17 +167,17 @@ e_mail_formatter_extension_get_display_name (EMailFormatterExtension *extension)
  * A virtual function reimplemented in all formatter extensions. It returns a
  * longer description of capabilities of the extension.
  *
- * Return value: A (localized) string with description of the extension.
+ * Returns: A (localized) string with description of the extension.
  */
 const gchar *
 e_mail_formatter_extension_get_description (EMailFormatterExtension *extension)
 {
-	EMailFormatterExtensionInterface *interface;
+	EMailFormatterExtensionClass *class;
 
 	g_return_val_if_fail (E_IS_MAIL_FORMATTER_EXTENSION (extension), NULL);
 
-	interface = E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE (extension);
-	g_return_val_if_fail (interface->get_description != NULL, NULL);
+	class = E_MAIL_FORMATTER_EXTENSION_GET_CLASS (extension);
+	g_return_val_if_fail (class->get_description != NULL, NULL);
 
-	return interface->get_description (extension);
+	return class->get_description (extension);
 }
diff --git a/em-format/e-mail-formatter-extension.h b/em-format/e-mail-formatter-extension.h
index 9a3f392..9111ad8 100644
--- a/em-format/e-mail-formatter-extension.h
+++ b/em-format/e-mail-formatter-extension.h
@@ -30,29 +30,41 @@
 #define E_MAIL_FORMATTER_EXTENSION(obj) \
 	(G_TYPE_CHECK_INSTANCE_CAST \
 	((obj), E_TYPE_MAIL_FORMATTER_EXTENSION, EMailFormatterExtension))
-#define E_MAIL_FORMATTER_EXTENSION_INTERFACE(cls) \
+#define E_MAIL_FORMATTER_EXTENSION_CLASS(cls) \
 	(G_TYPE_CHECK_CLASS_CAST \
-	((cls), E_TYPE_MAIL_FORMATTER_EXTENSION, EMailFormatterExtensionInterface))
+	((cls), E_TYPE_MAIL_FORMATTER_EXTENSION, EMailFormatterExtensionClass))
 #define E_IS_MAIL_FORMATTER_EXTENSION(obj) \
 	(G_TYPE_CHECK_INSTANCE_TYPE \
 	((obj), E_TYPE_MAIL_FORMATTER_EXTENSION))
-#define E_IS_MAIL_FORMATTER_EXTENSION_INTERFACE(cls) \
+#define E_IS_MAIL_FORMATTER_EXTENSION_CLASS(cls) \
 	(G_TYPE_CHECK_CLASS_TYPE \
 	((cls), E_TYPE_MAIL_FORMATTER_EXTENSION))
-#define E_MAIL_FORMATTER_EXTENSION_GET_INTERFACE(obj) \
-	(G_TYPE_INSTANCE_GET_INTERFACE \
-	((obj), E_TYPE_MAIL_FORMATTER_EXTENSION, EMailFormatterExtensionInterface))
+#define E_MAIL_FORMATTER_EXTENSION_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_MAIL_FORMATTER_EXTENSION, EMailFormatterExtensionClass))
 
 #define EMF_EXTENSION_GET_FORMATTER(e) \
 	E_MAIL_FORMATTER (e_extension_get_extensible (E_EXTENSION (e)))
 
 G_BEGIN_DECLS
 
+/**
+ * EMailFormatterExtension:
+ *
+ * The #EMailFormatterExtension is an abstract class for all extensions for
+ * #EMailFormatter.
+ */
 typedef struct _EMailFormatterExtension EMailFormatterExtension;
-typedef struct _EMailFormatterExtensionInterface EMailFormatterExtensionInterface;
+typedef struct _EMailFormatterExtensionClass EMailFormatterExtensionClass;
+typedef struct _EMailFormatterExtensionPrivate EMailFormatterExtensionPrivate;
+
+struct _EMailFormatterExtension {
+	GObject parent;
+	EMailFormatterExtensionPrivate *priv;
+};
 
-struct _EMailFormatterExtensionInterface {
-	GTypeInterface parent_interface;
+struct _EMailFormatterExtensionClass {
+	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
@@ -65,23 +77,19 @@ struct _EMailFormatterExtensionInterface {
 					 EMailPart *part,
 					 CamelStream *stream,
 					 GCancellable *cancellable);
-
 	GtkWidget *	(*get_widget)	(EMailFormatterExtension *extension,
 					 EMailPartList *context,
 					 EMailPart *part,
 					 GHashTable *params);
-
 	const gchar *	(*get_display_name)
 					(EMailFormatterExtension *extension);
-
 	const gchar *	(*get_description)
 					(EMailFormatterExtension *extension);
 
 };
 
 GType		e_mail_formatter_extension_get_type
-						(void);
-
+						(void) G_GNUC_CONST;
 gboolean	e_mail_formatter_extension_format
 						(EMailFormatterExtension *extension,
 						 EMailFormatter *formatter,
@@ -89,19 +97,15 @@ gboolean	e_mail_formatter_extension_format
 						 EMailPart *part,
 						 CamelStream *stream,
 						 GCancellable *cancellable);
-
 gboolean	e_mail_formatter_extension_has_widget
 						(EMailFormatterExtension *extension);
-
 GtkWidget *	e_mail_formatter_extension_get_widget
 						(EMailFormatterExtension *extension,
 						 EMailPartList *context,
 						 EMailPart *part,
 						 GHashTable *params);
-
 const gchar *	e_mail_formatter_extension_get_display_name
 						(EMailFormatterExtension *extension);
-
 const gchar *	e_mail_formatter_extension_get_description
 						(EMailFormatterExtension *extension);
 
diff --git a/em-format/e-mail-formatter-headers.c b/em-format/e-mail-formatter-headers.c
index 855f6a6..135b24f 100644
--- a/em-format/e-mail-formatter-headers.c
+++ b/em-format/e-mail-formatter-headers.c
@@ -37,30 +37,19 @@
 
 #include <string.h>
 
-typedef struct _EMailFormatterHeaders {
-	GObject parent;
-} EMailFormatterHeaders;
+typedef EMailFormatterExtension EMailFormatterHeaders;
+typedef EMailFormatterExtensionClass EMailFormatterHeadersClass;
 
-typedef struct _EMailFormatterHeadersClass {
-	GObjectClass parent_class;
-} EMailFormatterHeadersClass;
+G_DEFINE_TYPE (
+	EMailFormatterHeaders,
+	e_mail_formatter_headers,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.headers",
 	NULL
 };
 
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterHeaders,
-	e_mail_formatter_headers,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init))
-
 static void
 format_short_headers (EMailFormatter *formatter,
                       GString *buffer,
@@ -583,21 +572,15 @@ emfe_headers_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_headers_class_init (EMailFormatterHeadersClass *class)
+e_mail_formatter_headers_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_headers_format;
+	class->get_display_name = emfe_headers_get_display_name;
+	class->get_description = emfe_headers_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_headers_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_headers_format;
-	iface->get_display_name = emfe_headers_get_display_name;
-	iface->get_description = emfe_headers_get_description;
-}
-
-static void
-e_mail_formatter_headers_init (EMailFormatterHeaders *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-image.c b/em-format/e-mail-formatter-image.c
index cd4d2e1..2dbccf5 100644
--- a/em-format/e-mail-formatter-image.c
+++ b/em-format/e-mail-formatter-image.c
@@ -33,6 +33,14 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
+typedef EMailFormatterExtension EMailFormatterImage;
+typedef EMailFormatterExtensionClass EMailFormatterImageClass;
+
+G_DEFINE_TYPE (
+	EMailFormatterImage,
+	e_mail_formatter_image,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"image/gif",
 	"image/jpeg",
@@ -54,25 +62,6 @@ static const gchar *formatter_mime_types[] = {
 	NULL
 };
 
-typedef struct _EMailFormatterImage {
-	GObject parent;
-} EMailFormatterImage;
-
-typedef struct _EMailFormatterImageClass {
-	GObjectClass parent_class;
-} EMailFormatterImageClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterImage,
-	e_mail_formatter_image,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
-
 static gboolean
 emfe_image_format (EMailFormatterExtension *extension,
                    EMailFormatter *formatter,
@@ -163,21 +152,15 @@ emfe_image_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_image_class_init (EMailFormatterImageClass *class)
+e_mail_formatter_image_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_image_format;
+	class->get_display_name = emfe_image_get_display_name;
+	class->get_description = emfe_image_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_image_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_image_format;
-	iface->get_display_name = emfe_image_get_display_name;
-	iface->get_description = emfe_image_get_description;
-}
-
-static void
-e_mail_formatter_image_init (EMailFormatterImage *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-message-rfc822.c b/em-format/e-mail-formatter-message-rfc822.c
index dea737d..1d243f0 100644
--- a/em-format/e-mail-formatter-message-rfc822.c
+++ b/em-format/e-mail-formatter-message-rfc822.c
@@ -35,31 +35,20 @@
 
 #include <string.h>
 
+typedef EMailFormatterExtension EMailFormatterMessageRFC822;
+typedef EMailFormatterExtensionClass EMailFormatterMessageRFC822Class;
+
+G_DEFINE_TYPE (
+	EMailFormatterMessageRFC822,
+	e_mail_formatter_message_rfc822,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"message/rfc822",
 	"application/vnd.evolution.rfc822.end",
 	NULL
 };
 
-typedef struct _EMailFormatterMessageRFC822 {
-	GObject parent;
-} EMailFormatterMessageRFC822;
-
-typedef struct _EMailFormatterMessageRFC822Class {
-	GObjectClass parent_class;
-} EMailFormatterMessageRFC822Class;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterMessageRFC822,
-	e_mail_formatter_message_rfc822,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
-
 static gboolean
 emfe_message_rfc822_format (EMailFormatterExtension *extension,
                             EMailFormatter *formatter,
@@ -254,21 +243,15 @@ emfe_message_rfc822_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_message_rfc822_class_init (EMailFormatterMessageRFC822Class *class)
+e_mail_formatter_message_rfc822_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_message_rfc822_format;
+	class->get_display_name = emfe_message_rfc822_get_display_name;
+	class->get_description = emfe_message_rfc822_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_message_rfc822_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_message_rfc822_format;
-	iface->get_display_name = emfe_message_rfc822_get_display_name;
-	iface->get_description = emfe_message_rfc822_get_description;
-}
-
-static void
-e_mail_formatter_message_rfc822_init (EMailFormatterMessageRFC822 *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-print-headers.c b/em-format/e-mail-formatter-print-headers.c
index 1821268..9ab4079 100644
--- a/em-format/e-mail-formatter-print-headers.c
+++ b/em-format/e-mail-formatter-print-headers.c
@@ -35,31 +35,19 @@
 
 #include <string.h>
 
-typedef struct _EMailFormatterPrintHeaders {
-	GObject parent;
-} EMailFormatterPrintHeaders;
+typedef EMailFormatterExtension EMailFormatterPrintHeaders;
+typedef EMailFormatterExtensionClass EMailFormatterPrintHeadersClass;
 
-typedef struct _EMailFormatterPrintHeadersClass {
-	GObjectClass parent_class;
-} EMailFormatterPrintHeadersClass;
+G_DEFINE_TYPE (
+	EMailFormatterPrintHeaders,
+	e_mail_formatter_print_headers,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.headers",
 	NULL
 };
 
-static void e_mail_formatter_print_formatter_extension_interface_init
-					(EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterPrintHeaders,
-	e_mail_formatter_print_headers,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_print_formatter_extension_interface_init))
-
 static gboolean
 emfpe_headers_format (EMailFormatterExtension *extension,
                       EMailFormatter *formatter,
@@ -231,21 +219,15 @@ emfpe_headers_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_print_headers_class_init (EMailFormatterPrintHeadersClass *class)
+e_mail_formatter_print_headers_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfpe_headers_format;
+	class->get_display_name = emfpe_headers_get_display_name;
+	class->get_description = emfpe_headers_get_description;
 }
 
 static void
-e_mail_formatter_print_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_print_headers_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfpe_headers_format;
-	iface->get_display_name = emfpe_headers_get_display_name;
-	iface->get_description = emfpe_headers_get_description;
-}
-
-static void
-e_mail_formatter_print_headers_init (EMailFormatterPrintHeaders *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-attachment.c b/em-format/e-mail-formatter-quote-attachment.c
index 0dcf5f0..4a48a84 100644
--- a/em-format/e-mail-formatter-quote-attachment.c
+++ b/em-format/e-mail-formatter-quote-attachment.c
@@ -33,25 +33,13 @@
 
 #define d(x)
 
-typedef struct _EMailFormatterQuoteAttachment {
-	GObject parent;
-} EMailFormatterQuoteAttachment;
+typedef EMailFormatterExtension EMailFormatterQuoteAttachment;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteAttachmentClass;
 
-typedef struct _EMailFormatterQuoteAttachmentClass {
-	GObjectClass parent_class;
-} EMailFormatterQuoteAttachmentClass;
-
-static void e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteAttachment,
 	e_mail_formatter_quote_attachment,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interface_init)
-)
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.attachment",
@@ -132,21 +120,15 @@ emfqe_attachment_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_attachment_class_init (EMailFormatterQuoteAttachmentClass *class)
+e_mail_formatter_quote_attachment_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfqe_attachment_format;
+	class->get_display_name = emfqe_attachment_get_display_name;
+	class->get_description = emfqe_attachment_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_attachment_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfqe_attachment_format;
-	iface->get_display_name = emfqe_attachment_get_display_name;
-	iface->get_description = emfqe_attachment_get_description;
-}
-
-static void
-e_mail_formatter_quote_attachment_init (EMailFormatterQuoteAttachment *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-headers.c b/em-format/e-mail-formatter-quote-headers.c
index 3f059dc..4e13cab 100644
--- a/em-format/e-mail-formatter-quote-headers.c
+++ b/em-format/e-mail-formatter-quote-headers.c
@@ -35,25 +35,13 @@
 
 #include <string.h>
 
-typedef struct _EMailFormatterQuoteHeaders {
-	GObject parent;
-} EMailFormatterQuoteHeaders;
+typedef EMailFormatterExtension EMailFormatterQuoteHeaders;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteHeadersClass;
 
-typedef struct _EMailFormatterQuoteHeadersClass {
-	GObjectClass parent_class;
-} EMailFormatterQuoteHeadersClass;
-
-static void e_mail_formatter_quote_formatter_extension_interface_init
-					(EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteHeaders,
 	e_mail_formatter_quote_headers,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interface_init))
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.headers",
@@ -257,21 +245,15 @@ emqfe_headers_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_headers_class_init (EMailFormatterQuoteHeadersClass *class)
+e_mail_formatter_quote_headers_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emqfe_headers_format;
+	class->get_display_name = emqfe_headers_get_display_name;
+	class->get_description = emqfe_headers_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_headers_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emqfe_headers_format;
-	iface->get_display_name = emqfe_headers_get_display_name;
-	iface->get_description = emqfe_headers_get_description;
-}
-
-static void
-e_mail_formatter_quote_headers_init (EMailFormatterQuoteHeaders *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-message-rfc822.c b/em-format/e-mail-formatter-quote-message-rfc822.c
index 19f77c0..93e4caa 100644
--- a/em-format/e-mail-formatter-quote-message-rfc822.c
+++ b/em-format/e-mail-formatter-quote-message-rfc822.c
@@ -35,24 +35,13 @@
 
 #include <string.h>
 
-typedef struct _EMailFormatterQuoteMessageRFC822 {
-	GObject parent;
-} EMailFormatterQuoteMessageRFC822;
+typedef EMailFormatterExtension EMailFormatterQuoteMessageRFC822;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteMessageRFC822Class;
 
-typedef struct _EMailFormatterQuoteMessageRFC822Class {
-	GObjectClass parent_class;
-} EMailFormatterQuoteMessageRFC822Class;
-
-static void e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteMessageRFC822,
 	e_mail_formatter_quote_message_rfc822,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"message/rfc822",
@@ -160,21 +149,15 @@ emfqe_message_rfc822_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_message_rfc822_class_init (EMailFormatterQuoteMessageRFC822Class *class)
+e_mail_formatter_quote_message_rfc822_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfqe_message_rfc822_format;
+	class->get_display_name = emfqe_message_rfc822_get_display_name;
+	class->get_description = emfqe_message_rfc822_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_message_rfc822_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfqe_message_rfc822_format;
-	iface->get_display_name = emfqe_message_rfc822_get_display_name;
-	iface->get_description = emfqe_message_rfc822_get_description;
-}
-
-static void
-e_mail_formatter_quote_message_rfc822_init (EMailFormatterQuoteMessageRFC822 *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-text-enriched.c b/em-format/e-mail-formatter-quote-text-enriched.c
index ba991db..fc7febb 100644
--- a/em-format/e-mail-formatter-quote-text-enriched.c
+++ b/em-format/e-mail-formatter-quote-text-enriched.c
@@ -30,25 +30,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterQuoteTextEnriched {
-	GObject parent;
-} EMailFormatterQuoteTextEnriched;
+typedef EMailFormatterExtension EMailFormatterQuoteTextEnriched;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteTextEnrichedClass;
 
-typedef struct _EMailFormatterQuoteTextEnrichedClass {
-	GObjectClass parent_class;
-} EMailFormatterQuoteTextEnrichedClass;
-
-static void e_mail_formatter_quote_formatter_extension_interace_init
-					(EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteTextEnriched,
 	e_mail_formatter_quote_text_enriched,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interace_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"text/enriched",
@@ -106,21 +94,15 @@ emqfe_text_enriched_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_text_enriched_class_init (EMailFormatterQuoteTextEnrichedClass *class)
+e_mail_formatter_quote_text_enriched_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emqfe_text_enriched_format;
+	class->get_display_name = emqfe_text_enriched_get_display_name;
+	class->get_description = emqfe_text_enriched_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_text_enriched_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emqfe_text_enriched_format;
-	iface->get_display_name = emqfe_text_enriched_get_display_name;
-	iface->get_description = emqfe_text_enriched_get_description;
-}
-
-static void
-e_mail_formatter_quote_text_enriched_init (EMailFormatterQuoteTextEnriched *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-text-html.c b/em-format/e-mail-formatter-quote-text-html.c
index bbc8190..84425ac 100644
--- a/em-format/e-mail-formatter-quote-text-html.c
+++ b/em-format/e-mail-formatter-quote-text-html.c
@@ -33,25 +33,13 @@
 
 #include <string.h>
 
-typedef struct _EMailFormatterQuoteTextHTML {
-	GObject parent;
-} EMailFormatterQuoteTextHTML;
+typedef EMailFormatterExtension EMailFormatterQuoteTextHTML;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteTextHTMLClass;
 
-typedef struct _EMailFormatterQuoteTextHTMLClass {
-	GObjectClass parent_class;
-} EMailFormatterQuoteTextHTMLClass;
-
-static void e_mail_formatter_quote_formatter_extension_interface_init
-					(EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteTextHTML,
 	e_mail_formatter_quote_text_html,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"text/html",
@@ -109,21 +97,15 @@ emqfe_text_html_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_text_html_class_init (EMailFormatterQuoteTextHTMLClass *class)
+e_mail_formatter_quote_text_html_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emqfe_text_html_format;
+	class->get_display_name = emqfe_text_html_get_display_name;
+	class->get_description = emqfe_text_html_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_text_html_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emqfe_text_html_format;
-	iface->get_display_name = emqfe_text_html_get_display_name;
-	iface->get_description = emqfe_text_html_get_description;
-}
-
-static void
-e_mail_formatter_quote_text_html_init (EMailFormatterQuoteTextHTML *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-quote-text-plain.c b/em-format/e-mail-formatter-quote-text-plain.c
index 7deb9eb..62715ff 100644
--- a/em-format/e-mail-formatter-quote-text-plain.c
+++ b/em-format/e-mail-formatter-quote-text-plain.c
@@ -31,25 +31,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterQuoteTextPlain {
-	GObject parent;
-} EMailFormatterQuoteTextPlain;
+typedef EMailFormatterExtension EMailFormatterQuoteTextPlain;
+typedef EMailFormatterExtensionClass EMailFormatterQuoteTextPlainClass;
 
-typedef struct _EMailFormatterQuoteTextPlainClass {
-	GObjectClass parent_class;
-} EMailFormatterQuoteTextPlainClass;
-
-static void e_mail_formatter_quote_formatter_extension_interface_init
-					(EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterQuoteTextPlain,
 	e_mail_formatter_quote_text_plain,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_quote_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"text/plain",
@@ -128,21 +116,15 @@ emqfe_text_plain_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_quote_text_plain_class_init (EMailFormatterQuoteTextPlainClass *class)
+e_mail_formatter_quote_text_plain_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emqfe_text_plain_format;
+	class->get_display_name = emqfe_text_plain_get_display_name;
+	class->get_description = emqfe_text_plain_get_description;
 }
 
 static void
-e_mail_formatter_quote_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_quote_text_plain_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emqfe_text_plain_format;
-	iface->get_display_name = emqfe_text_plain_get_display_name;
-	iface->get_description = emqfe_text_plain_get_description;
-}
-
-static void
-e_mail_formatter_quote_text_plain_init (EMailFormatterQuoteTextPlain *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-secure-button.c b/em-format/e-mail-formatter-secure-button.c
index b31c6fb..be1331a 100644
--- a/em-format/e-mail-formatter-secure-button.c
+++ b/em-format/e-mail-formatter-secure-button.c
@@ -34,24 +34,13 @@
 
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterSecureButton {
-	GObject parent;
-} EMailFormatterSecureButton;
+typedef EMailFormatterExtension EMailFormatterSecureButton;
+typedef EMailFormatterExtensionClass EMailFormatterSecureButtonClass;
 
-typedef struct _EMailFormatterSecureButtonClass {
-	GObjectClass parent_class;
-} EMailFormatterSecureButtonClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterSecureButton,
 	e_mail_formatter_secure_button,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.widget.secure-button",
@@ -483,22 +472,16 @@ emfe_secure_button_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_secure_button_class_init (EMailFormatterSecureButtonClass *class)
+e_mail_formatter_secure_button_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_secure_button_format;
+	class->get_widget = emfe_secure_button_get_widget;
+	class->get_display_name = emfe_secure_button_get_display_name;
+	class->get_description = emfe_secure_button_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_secure_button_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_secure_button_format;
-	iface->get_widget = emfe_secure_button_get_widget;
-	iface->get_display_name = emfe_secure_button_get_display_name;
-	iface->get_description = emfe_secure_button_get_description;
-}
-
-static void
-e_mail_formatter_secure_button_init (EMailFormatterSecureButton *extension)
-{
-
 }
diff --git a/em-format/e-mail-formatter-source.c b/em-format/e-mail-formatter-source.c
index ce9fc36..8c5242c 100644
--- a/em-format/e-mail-formatter-source.c
+++ b/em-format/e-mail-formatter-source.c
@@ -30,25 +30,13 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
-typedef struct _EMailFormatterSource {
-	GObject parent;
-} EMailFormatterSource;
+typedef EMailFormatterExtension EMailFormatterSource;
+typedef EMailFormatterExtensionClass EMailFormatterSourceClass;
 
-typedef struct _EMailFormatterSourceClass {
-	GObjectClass parent_class;
-} EMailFormatterSourceClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
+G_DEFINE_TYPE (
 	EMailFormatterSource,
 	e_mail_formatter_source,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init)
-)
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static const gchar *formatter_mime_types[] = {
 	"application/vnd.evolution.source",
@@ -146,21 +134,15 @@ emfe_source_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_source_class_init (EMailFormatterSourceClass *class)
+e_mail_formatter_source_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_source_format;
+	class->get_display_name = emfe_source_get_display_name;
+	class->get_description = emfe_source_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_source_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_source_format;
-	iface->get_display_name = emfe_source_get_display_name;
-	iface->get_description = emfe_source_get_description;
-}
-
-static void
-e_mail_formatter_source_init (EMailFormatterSource *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-text-enriched.c b/em-format/e-mail-formatter-text-enriched.c
index 7a358bd..342228d 100644
--- a/em-format/e-mail-formatter-text-enriched.c
+++ b/em-format/e-mail-formatter-text-enriched.c
@@ -30,31 +30,20 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
+typedef EMailFormatterExtension EMailFormatterTextEnriched;
+typedef EMailFormatterExtensionClass EMailFormatterTextEnrichedClass;
+
+G_DEFINE_TYPE (
+	EMailFormatterTextEnriched,
+	e_mail_formatter_text_enriched,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"text/enriched",
 	"text/richtext",
 	NULL
 };
 
-typedef struct _EMailFormatterTextEnriched {
-	GObject parent;
-} EMailFormatterTextEnriched;
-
-typedef struct _EMailFormatterTextEnrichedClass {
-	GObjectClass parent_class;
-} EMailFormatterTextEnrichedClass;
-
-static void e_mail_formatter_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterTextEnriched,
-	e_mail_formatter_text_enriched,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interace_init));
-
 static gboolean
 emfe_text_enriched_format (EMailFormatterExtension *extension,
                            EMailFormatter *formatter,
@@ -121,20 +110,15 @@ emfe_text_enriched_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_text_enriched_class_init (EMailFormatterTextEnrichedClass *class)
-{
-}
-
-static void
-e_mail_formatter_formatter_extension_interace_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_text_enriched_class_init (EMailFormatterExtensionClass *class)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_text_enriched_format;
-	iface->get_display_name = emfe_text_enriched_get_display_name;
-	iface->get_description = emfe_text_enriched_get_description;
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_text_enriched_format;
+	class->get_display_name = emfe_text_enriched_get_display_name;
+	class->get_description = emfe_text_enriched_get_description;
 }
 
 static void
-e_mail_formatter_text_enriched_init (EMailFormatterTextEnriched *formatter)
+e_mail_formatter_text_enriched_init (EMailFormatterExtension *extension)
 {
 }
diff --git a/em-format/e-mail-formatter-text-html.c b/em-format/e-mail-formatter-text-html.c
index 08c4012..9a1883e 100644
--- a/em-format/e-mail-formatter-text-html.c
+++ b/em-format/e-mail-formatter-text-html.c
@@ -34,30 +34,19 @@
 #include <ctype.h>
 #include <string.h>
 
+typedef EMailFormatterExtension EMailFormatterTextHTML;
+typedef EMailFormatterExtensionClass EMailFormatterTextHTMLClass;
+
+G_DEFINE_TYPE (
+	EMailFormatterTextHTML,
+	e_mail_formatter_text_html,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"text/html",
 	NULL
 };
 
-typedef struct _EMailFormatterTextHTML {
-	GObject parent;
-} EMailFormatterTextHTML;
-
-typedef struct _EMailFormatterTextHTMLClass {
-	GObjectClass parent_class;
-} EMailFormatterTextHTMLClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterTextHTML,
-	e_mail_formatter_text_html,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
-
 static gchar *
 get_tag (const gchar *utf8_string,
          const gchar *tag_name,
@@ -360,21 +349,15 @@ emfe_text_html_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_text_html_class_init (EMailFormatterTextHTMLClass *class)
+e_mail_formatter_text_html_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_text_html_format;
+	class->get_display_name = emfe_text_html_get_display_name;
+	class->get_description = emfe_text_html_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_text_html_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_text_html_format;
-	iface->get_display_name = emfe_text_html_get_display_name;
-	iface->get_description = emfe_text_html_get_description;
-}
-
-static void
-e_mail_formatter_text_html_init (EMailFormatterTextHTML *formatter)
-{
-
 }
diff --git a/em-format/e-mail-formatter-text-plain.c b/em-format/e-mail-formatter-text-plain.c
index ce62001..8a29a90 100644
--- a/em-format/e-mail-formatter-text-plain.c
+++ b/em-format/e-mail-formatter-text-plain.c
@@ -31,6 +31,14 @@
 #include <glib/gi18n-lib.h>
 #include <camel/camel.h>
 
+typedef EMailFormatterExtension EMailFormatterTextPlain;
+typedef EMailFormatterExtensionClass EMailFormatterTextPlainClass;
+
+G_DEFINE_TYPE (
+	EMailFormatterTextPlain,
+	e_mail_formatter_text_plain,
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
+
 static const gchar *formatter_mime_types[] = {
 	"text/plain",
 	"text/*",
@@ -39,25 +47,6 @@ static const gchar *formatter_mime_types[] = {
 	NULL
 };
 
-typedef struct _EMailFormatterTextPlain {
-	GObject parent;
-} EMailFormatterTextPlain;
-
-typedef struct _EMailFormatterTextPlainClass {
-	GObjectClass parent_class;
-} EMailFormatterTextPlainClass;
-
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
-
-G_DEFINE_TYPE_EXTENDED (
-	EMailFormatterTextPlain,
-	e_mail_formatter_text_plain,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
-
 static gboolean
 emfe_text_plain_format (EMailFormatterExtension *extension,
                         EMailFormatter *formatter,
@@ -195,21 +184,15 @@ emfe_text_plain_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_text_plain_class_init (EMailFormatterTextPlainClass *class)
+e_mail_formatter_text_plain_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_text_plain_format;
+	class->get_display_name = emfe_text_plain_get_display_name;
+	class->get_description = emfe_text_plain_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_text_plain_init (EMailFormatterExtension *extension)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_text_plain_format;
-	iface->get_display_name = emfe_text_plain_get_display_name;
-	iface->get_description = emfe_text_plain_get_description;
-}
-
-static void
-e_mail_formatter_text_plain_init (EMailFormatterTextPlain *formatter)
-{
-
 }
diff --git a/modules/audio-inline/e-mail-formatter-audio-inline.c b/modules/audio-inline/e-mail-formatter-audio-inline.c
index 461a3ab..f93bf67 100644
--- a/modules/audio-inline/e-mail-formatter-audio-inline.c
+++ b/modules/audio-inline/e-mail-formatter-audio-inline.c
@@ -38,24 +38,19 @@
 
 #define d(x)
 
-typedef GObject EMailFormatterAudioInline;
-typedef GObjectClass EMailFormatterAudioInlineClass;
+typedef EMailFormatterExtension EMailFormatterAudioInline;
+typedef EMailFormatterExtensionClass EMailFormatterAudioInlineClass;
 
 typedef EExtension EMailFormatterAudioInlineLoader;
 typedef EExtensionClass EMailFormatterAudioInlineLoaderClass;
 
 GType e_mail_formatter_audio_inline_get_type (void);
 GType e_mail_formatter_audio_inline_loader_get_type (void);
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterAudioInline,
 	e_mail_formatter_audio_inline,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterAudioInlineLoader,
@@ -329,27 +324,22 @@ emfe_audio_inline_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_audio_inline_class_init (EMailFormatterAudioInlineClass *class)
-{
-}
-
-static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_audio_inline_class_init (EMailFormatterExtensionClass *class)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_audio_inline_format;
-	iface->get_widget = emfe_audio_inline_get_widget;
-	iface->get_display_name = emfe_audio_inline_get_display_name;
-	iface->get_description = emfe_audio_inline_get_description;
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_audio_inline_format;
+	class->get_widget = emfe_audio_inline_get_widget;
+	class->get_display_name = emfe_audio_inline_get_display_name;
+	class->get_description = emfe_audio_inline_get_description;
 }
 
 static void
-e_mail_formatter_audio_inline_init (EMailFormatterAudioInline *formatter)
+e_mail_formatter_audio_inline_class_finalize (EMailFormatterExtensionClass *class)
 {
 }
 
 static void
-e_mail_formatter_audio_inline_class_finalize (EMailFormatterAudioInlineClass *class)
+e_mail_formatter_audio_inline_init (EMailFormatterExtension *extension)
 {
 }
 
diff --git a/modules/itip-formatter/e-mail-formatter-itip.c b/modules/itip-formatter/e-mail-formatter-itip.c
index 2aab012..41bf368 100644
--- a/modules/itip-formatter/e-mail-formatter-itip.c
+++ b/modules/itip-formatter/e-mail-formatter-itip.c
@@ -34,24 +34,19 @@
 
 #define d(x)
 
-typedef GObject EMailFormatterItip;
-typedef GObjectClass EMailFormatterItipClass;
+typedef EMailFormatterExtension EMailFormatterItip;
+typedef EMailFormatterExtensionClass EMailFormatterItipClass;
 
 typedef EExtension EMailFormatterItipLoader;
 typedef EExtensionClass EMailFormatterItipLoaderClass;
 
 GType e_mail_formatter_itip_get_type (void);
 GType e_mail_formatter_itip_loader_get_type (void);
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterItip,
 	e_mail_formatter_itip,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterItipLoader,
@@ -154,26 +149,21 @@ emfe_itip_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_itip_class_init (EMailFormatterItipClass *class)
-{
-}
-
-static void
-e_mail_formatter_itip_class_finalize (EMailFormatterItipClass *class)
+e_mail_formatter_itip_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_itip_format;
+	class->get_display_name = emfe_itip_get_display_name;
+	class->get_description = emfe_itip_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_itip_class_finalize (EMailFormatterExtensionClass *class)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_itip_format;
-	iface->get_display_name = emfe_itip_get_display_name;
-	iface->get_description = emfe_itip_get_description;
 }
 
 static void
-e_mail_formatter_itip_init (EMailFormatterItip *formatter)
+e_mail_formatter_itip_init (EMailFormatterExtension *extension)
 {
 }
 
diff --git a/modules/text-highlight/e-mail-formatter-text-highlight.c b/modules/text-highlight/e-mail-formatter-text-highlight.c
index 4655d31..f927eaf 100644
--- a/modules/text-highlight/e-mail-formatter-text-highlight.c
+++ b/modules/text-highlight/e-mail-formatter-text-highlight.c
@@ -38,24 +38,19 @@
 #include <X11/Xlib.h>
 #include <camel/camel.h>
 
-typedef GObject EMailFormatterTextHighlight;
-typedef GObjectClass EMailFormatterTextHighlightClass;
+typedef EMailFormatterExtension EMailFormatterTextHighlight;
+typedef EMailFormatterExtensionClass EMailFormatterTextHighlightClass;
 
 typedef EExtension EMailFormatterTextHighlightLoader;
 typedef EExtensionClass EMailFormatterTextHighlightLoaderClass;
 
 GType e_mail_formatter_text_highlight_get_type (void);
 GType e_mail_formatter_text_highlight_loader_get_type (void);
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterTextHighlight,
 	e_mail_formatter_text_highlight,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterTextHighlightLoader,
@@ -374,26 +369,21 @@ emfe_text_highlight_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_text_highlight_class_init (EMailFormatterTextHighlightClass *class)
-{
-}
-
-static void
-e_mail_formatter_text_highlight_class_finalize (EMailFormatterTextHighlightClass *class)
+e_mail_formatter_text_highlight_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = get_mime_types ();
+	class->format = emfe_text_highlight_format;
+	class->get_display_name = emfe_text_highlight_get_display_name;
+	class->get_description = emfe_text_highlight_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_text_highlight_class_finalize (EMailFormatterExtensionClass *class)
 {
-	iface->mime_types = get_mime_types ();
-	iface->format = emfe_text_highlight_format;
-	iface->get_display_name = emfe_text_highlight_get_display_name;
-	iface->get_description = emfe_text_highlight_get_description;
 }
 
 static void
-e_mail_formatter_text_highlight_init (EMailFormatterTextHighlight *object)
+e_mail_formatter_text_highlight_init (EMailFormatterExtension *extension)
 {
 }
 
diff --git a/modules/vcard-inline/e-mail-formatter-vcard-inline.c b/modules/vcard-inline/e-mail-formatter-vcard-inline.c
index 8c88729..b3e2b83 100644
--- a/modules/vcard-inline/e-mail-formatter-vcard-inline.c
+++ b/modules/vcard-inline/e-mail-formatter-vcard-inline.c
@@ -36,24 +36,19 @@
 
 #define d(x)
 
-typedef GObject EMailFormatterVCardInline;
-typedef GObjectClass EMailFormatterVCardInlineClass;
+typedef EMailFormatterExtension EMailFormatterVCardInline;
+typedef EMailFormatterExtensionClass EMailFormatterVCardInlineClass;
 
 typedef EExtension EMailFormatterVCardInlineLoader;
 typedef EExtensionClass EMailFormatterVCardInlineLoaderClass;
 
 GType e_mail_formatter_vcard_inline_get_type (void);
 GType e_mail_formatter_vcard_inline_loader_get_type (void);
-static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
 
-G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterVCardInline,
 	e_mail_formatter_vcard_inline,
-	G_TYPE_OBJECT,
-	0,
-	G_IMPLEMENT_INTERFACE_DYNAMIC (
-		E_TYPE_MAIL_FORMATTER_EXTENSION,
-		e_mail_formatter_formatter_extension_interface_init));
+	E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 G_DEFINE_DYNAMIC_TYPE (
 	EMailFormatterVCardInlineLoader,
@@ -212,26 +207,21 @@ emfe_vcard_inline_get_description (EMailFormatterExtension *extension)
 }
 
 static void
-e_mail_formatter_vcard_inline_class_init (EMailFormatterVCardInlineClass *class)
-{
-}
-
-static void
-e_mail_formatter_vcard_inline_class_finalize (EMailFormatterVCardInlineClass *class)
+e_mail_formatter_vcard_inline_class_init (EMailFormatterExtensionClass *class)
 {
+	class->mime_types = formatter_mime_types;
+	class->format = emfe_vcard_inline_format;
+	class->get_display_name = emfe_vcard_inline_get_display_name;
+	class->get_description = emfe_vcard_inline_get_description;
 }
 
 static void
-e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+e_mail_formatter_vcard_inline_class_finalize (EMailFormatterExtensionClass *class)
 {
-	iface->mime_types = formatter_mime_types;
-	iface->format = emfe_vcard_inline_format;
-	iface->get_display_name = emfe_vcard_inline_get_display_name;
-	iface->get_description = emfe_vcard_inline_get_description;
 }
 
 static void
-e_mail_formatter_vcard_inline_init (EMailFormatterVCardInline *formatter)
+e_mail_formatter_vcard_inline_init (EMailFormatterExtension *extension)
 {
 }
 



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