[evolution-exchange] Remove E2K_MAKE_TYPE macros.



commit 870d1df18d7bfb0fafb16f55c772e2ae56da8aa3
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Aug 12 11:11:54 2011 -0400

    Remove E2K_MAKE_TYPE macros.
    
    Use G_DEFINE_TYPE instead.

 addressbook/e-book-backend-exchange.c         |    7 ++-
 addressbook/e-book-backend-gal.c              |   28 ++++----
 calendar/e-cal-backend-exchange-calendar.c    |   46 ++++++--------
 calendar/e-cal-backend-exchange-tasks.c       |   46 ++++++--------
 calendar/e-cal-backend-exchange.c             |   81 +++++++++++-------------
 eplugin/exchange-config-listener.c            |   32 ++++------
 eplugin/exchange-delegates-user.c             |   18 ++++--
 eplugin/exchange-permissions-dialog.c         |   21 +++----
 eplugin/exchange-send-options.c               |   16 ++---
 eplugin/exchange-user-dialog.c                |   23 ++++----
 server/lib/e2k-context.c                      |   44 +++++++-------
 server/lib/e2k-global-catalog.c               |   24 ++++----
 server/lib/e2k-security-descriptor.c          |   19 +++---
 server/lib/e2k-sid.c                          |   21 +++----
 server/lib/e2k-types.h                        |   56 -----------------
 server/storage/e-folder-exchange.c            |   24 ++++----
 server/storage/exchange-account.c             |   24 ++++----
 server/storage/exchange-hierarchy-favorites.c |   33 +++++-----
 server/storage/exchange-hierarchy-foreign.c   |   43 +++++++-------
 server/storage/exchange-hierarchy-gal.c       |   15 ++++-
 server/storage/exchange-hierarchy-somedav.c   |   29 ++++-----
 server/storage/exchange-hierarchy-webdav.c    |   39 ++++--------
 server/storage/exchange-hierarchy.c           |   42 +++++++------
 tools/exchange-share-config-listener.c        |   31 ++++------
 24 files changed, 334 insertions(+), 428 deletions(-)
---
diff --git a/addressbook/e-book-backend-exchange.c b/addressbook/e-book-backend-exchange.c
index 13587f0..7370bd7 100644
--- a/addressbook/e-book-backend-exchange.c
+++ b/addressbook/e-book-backend-exchange.c
@@ -63,7 +63,6 @@
 
 #define SUMMARY_FLUSH_TIMEOUT 5000
 
-#define PARENT_TYPE E_TYPE_BOOK_BACKEND_SYNC
 static EBookBackendClass *parent_class;
 
 struct EBookBackendExchangePrivate {
@@ -115,6 +114,11 @@ static GPtrArray *field_names_array;
 static const gchar **field_names;
 static gint n_field_names;
 
+G_DEFINE_TYPE (
+	EBookBackendExchange,
+	e_book_backend_exchange,
+	E_TYPE_BOOK_BACKEND_SYNC)
+
 static void
 http_status_to_error (E2kHTTPStatus status, GError **perror)
 {
@@ -2776,4 +2780,3 @@ e_book_backend_exchange_init (EBookBackendExchange *backend)
 	backend->priv		= priv;
 }
 
-E2K_MAKE_TYPE (e_book_backend_exchange, EBookBackendExchange, e_book_backend_exchange_class_init, e_book_backend_exchange_init, PARENT_TYPE)
diff --git a/addressbook/e-book-backend-gal.c b/addressbook/e-book-backend-gal.c
index c18a376..22d436f 100644
--- a/addressbook/e-book-backend-gal.c
+++ b/addressbook/e-book-backend-gal.c
@@ -84,9 +84,6 @@ static void build_query (EBookBackendGAL *bl, const gchar *query, const gchar *l
 #define EDB_ERROR_EX(_code, _msg) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, _msg)
 #define EDB_ERROR_MSG_TYPE(_msg_type) e_data_book_create_error_fmt (E_DATA_BOOK_STATUS_INVALID_ARG, "Incorrect msg type %d passed to %s", _msg_type, G_STRFUNC)
 
-#define PARENT_TYPE E_TYPE_BOOK_BACKEND
-static EBookBackendClass *parent_class;
-
 typedef struct LDAPOp LDAPOp;
 
 static const gchar **search_attrs;
@@ -223,6 +220,11 @@ struct prop_info {
 #undef GROUP_PROP
 };
 
+G_DEFINE_TYPE (
+	EBookBackendGAL,
+	e_book_backend_gal,
+	E_TYPE_BOOK_BACKEND)
+
 static gboolean
 can_browse (EBookBackend *backend)
 {
@@ -2800,7 +2802,7 @@ gal_get_backend_property (EBookBackend *backend, EDataBook *book, guint32 opid,
 	} else if (g_str_equal (prop_name, BOOK_BACKEND_PROPERTY_SUPPORTED_AUTH_METHODS)) {
 		e_data_book_respond_get_backend_property (book, opid, NULL, NULL);
 	} else {
-		(* E_BOOK_BACKEND_CLASS (parent_class)->get_backend_property) (backend, book, opid, cancellable, prop_name);
+		(* E_BOOK_BACKEND_CLASS (e_book_backend_gal_parent_class)->get_backend_property) (backend, book, opid, cancellable, prop_name);
 	}
 }
 
@@ -2886,19 +2888,20 @@ dispose (GObject *object)
 		bl->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_book_backend_gal_parent_class)->dispose (object);
 }
 
 static void
-class_init (EBookBackendGALClass *klass)
+e_book_backend_gal_class_init (EBookBackendGALClass *class)
 {
-	GObjectClass  *object_class = G_OBJECT_CLASS (klass);
-	EBookBackendClass *backend_class = E_BOOK_BACKEND_CLASS (klass);
+	GObjectClass *object_class;
+	EBookBackendClass *backend_class;
 	gint i;
 
-	parent_class = g_type_class_peek_parent (klass);
+	object_class = G_OBJECT_CLASS (class);
+	object_class->dispose = dispose;
 
-	/* Set the virtual methods. */
+	backend_class = E_BOOK_BACKEND_CLASS (class);
 	backend_class->open			= gal_open;
 	backend_class->remove			= gal_remove;
 	backend_class->get_backend_property	= gal_get_backend_property;
@@ -2913,8 +2916,6 @@ class_init (EBookBackendGALClass *klass)
 	backend_class->authenticate_user	= authenticate_user;
 	backend_class->set_online		= set_online;
 
-	object_class->dispose = dispose;
-
 	/* Set up static data */
 	search_attrs = g_new (const gchar *, G_N_ELEMENTS (prop_info) + 1);
 	for (i = 0; i < G_N_ELEMENTS (prop_info); i++)
@@ -2923,7 +2924,7 @@ class_init (EBookBackendGALClass *klass)
 }
 
 static void
-init (EBookBackendGAL *backend)
+e_book_backend_gal_init (EBookBackendGAL *backend)
 {
 	EBookBackendGALPrivate *priv;
 
@@ -2942,4 +2943,3 @@ init (EBookBackendGAL *backend)
 #endif
 }
 
-E2K_MAKE_TYPE (e_book_backend_gal, EBookBackendGAL, class_init, init, PARENT_TYPE)
diff --git a/calendar/e-cal-backend-exchange-calendar.c b/calendar/e-cal-backend-exchange-calendar.c
index b85e063..65d2229 100644
--- a/calendar/e-cal-backend-exchange-calendar.c
+++ b/calendar/e-cal-backend-exchange-calendar.c
@@ -52,9 +52,6 @@ enum {
 	EX_ALL
 };
 
-#define PARENT_TYPE E_TYPE_CAL_BACKEND_EXCHANGE
-static ECalBackendExchange *parent_class = NULL;
-
 #define d(x)
 
 static gboolean modify_object_with_href (ECalBackendSync *backend, EDataCal *cal, GCancellable *cancellable, const gchar *calobj, CalObjModType mod, gchar **old_object, gchar **new_object, const gchar *href, const gchar *rid_to_remove, GError **error);
@@ -66,6 +63,11 @@ static gboolean check_owner_partstatus_for_declined (ECalBackendSync *backend,
 gboolean check_for_send_options (icalcomponent *icalcomp, E2kProperties *props);
 static void update_x_properties (ECalBackendExchange *cbex, ECalComponent *comp);
 
+G_DEFINE_TYPE (
+	ECalBackendExchangeCalendar,
+	e_cal_backend_exchange_calendar,
+	E_TYPE_CAL_BACKEND_EXCHANGE)
+
 static void
 add_timezones_from_comp (ECalBackendExchange *cbex, icalcomponent *icalcomp)
 {
@@ -583,7 +585,7 @@ authenticate_user (ECalBackendSync *backend, GCancellable *cancellable, ECredent
 	ECalBackendExchangeCalendar *cbexc = E_CAL_BACKEND_EXCHANGE_CALENDAR (backend);
 
 	/* Do the generic part */
-	E_CAL_BACKEND_SYNC_CLASS (parent_class)->authenticate_user_sync (backend, cancellable, credentials, &error);
+	E_CAL_BACKEND_SYNC_CLASS (e_cal_backend_exchange_calendar_parent_class)->authenticate_user_sync (backend, cancellable, credentials, &error);
 	if (error) {
 		g_propagate_error (perror, error);
 		return;
@@ -2418,20 +2420,6 @@ get_free_busy (ECalBackendSync *backend, EDataCal *cal, GCancellable *cancellabl
 }
 
 static void
-init (ECalBackendExchangeCalendar *cbexc)
-{
-	cbexc->priv = g_new0 (ECalBackendExchangeCalendarPrivate, 1);
-	cbexc->priv->is_loaded = FALSE;
-	cbexc->priv->mutex = g_mutex_new ();
-}
-
-static void
-dispose (GObject *object)
-{
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
 finalize (GObject *object)
 {
 	ECalBackendExchangeCalendar *cbexc =
@@ -2444,17 +2432,19 @@ finalize (GObject *object)
 
 	g_free (cbexc->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cal_backend_exchange_calendar_parent_class)->finalize (object);
 }
 
 static void
-class_init (ECalBackendExchangeCalendarClass *klass)
+e_cal_backend_exchange_calendar_class_init (ECalBackendExchangeCalendarClass *class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	ECalBackendSyncClass *sync_class = E_CAL_BACKEND_SYNC_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (class);
+	ECalBackendSyncClass *sync_class = E_CAL_BACKEND_SYNC_CLASS (class);
 
-	parent_class = g_type_class_peek_parent (klass);
+	object_class = G_OBJECT_CLASS (class);
+	object_class->finalize = finalize;
 
+	sync_class = E_CAL_BACKEND_SYNC_CLASS (class);
 	sync_class->authenticate_user_sync = authenticate_user;
 	sync_class->refresh_sync = refresh_calendar;
 	sync_class->create_object_sync = create_object;
@@ -2464,9 +2454,13 @@ class_init (ECalBackendExchangeCalendarClass *klass)
 	sync_class->send_objects_sync = send_objects;
 	sync_class->get_free_busy_sync = get_free_busy;
 	sync_class->discard_alarm_sync = discard_alarm;
+}
 
-	object_class->dispose = dispose;
-	object_class->finalize = finalize;
+static void
+e_cal_backend_exchange_calendar_init (ECalBackendExchangeCalendar *cbexc)
+{
+	cbexc->priv = g_new0 (ECalBackendExchangeCalendarPrivate, 1);
+	cbexc->priv->is_loaded = FALSE;
+	cbexc->priv->mutex = g_mutex_new ();
 }
 
-E2K_MAKE_TYPE (e_cal_backend_exchange_calendar, ECalBackendExchangeCalendar, class_init, init, PARENT_TYPE)
diff --git a/calendar/e-cal-backend-exchange-tasks.c b/calendar/e-cal-backend-exchange-tasks.c
index 750ae1c..9d59c01 100644
--- a/calendar/e-cal-backend-exchange-tasks.c
+++ b/calendar/e-cal-backend-exchange-tasks.c
@@ -66,8 +66,10 @@ struct _ECalBackendExchangeTasksPrivate {
 	gint dummy;
 };
 
-#define PARENT_TYPE E_TYPE_CAL_BACKEND_EXCHANGE
-static ECalBackendExchange *parent_class = NULL;
+G_DEFINE_TYPE (
+	ECalBackendExchangeTasks,
+	e_cal_backend_exchange_tasks,
+	E_TYPE_CAL_BACKEND_EXCHANGE)
 
 static void
 get_from (ECalBackendSync *backend, ECalComponent *comp, gchar **from_name, gchar **from_addr)
@@ -999,7 +1001,7 @@ authenticate_user_task (ECalBackendSync *backend, GCancellable *cancellable, ECr
 	GError *error = NULL;
 	ECalBackendExchangeTasks *cbext = E_CAL_BACKEND_EXCHANGE_TASKS (backend);
 
-	E_CAL_BACKEND_SYNC_CLASS (parent_class)->authenticate_user_sync (backend, cancellable, credentials, &error);
+	E_CAL_BACKEND_SYNC_CLASS (e_cal_backend_exchange_tasks_parent_class)->authenticate_user_sync (backend, cancellable, credentials, &error);
 	if (error) {
 		g_propagate_error (perror, error);
 		return;
@@ -1475,21 +1477,6 @@ remove_task_object (ECalBackendSync *backend, EDataCal *cal, GCancellable *cance
 }
 
 static void
-init (ECalBackendExchangeTasks *cbext)
-{
-	cbext->priv = g_new0 (ECalBackendExchangeTasksPrivate, 1);
-
-	cbext->priv->mutex = g_mutex_new ();
-	cbext->priv->is_loaded = FALSE;
-}
-
-static void
-dispose (GObject *object)
-{
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
 finalize (GObject *object)
 {
 	ECalBackendExchangeTasks *cbext =
@@ -1502,26 +1489,33 @@ finalize (GObject *object)
 
 	g_free (cbext->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cal_backend_exchange_tasks_parent_class)->finalize (object);
 }
 
 static void
-class_init (ECalBackendExchangeTasksClass *klass)
+e_cal_backend_exchange_tasks_class_init (ECalBackendExchangeTasksClass *class)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	ECalBackendSyncClass *sync_class = E_CAL_BACKEND_SYNC_CLASS (klass);
+	GObjectClass *object_class;
+	ECalBackendSyncClass *sync_class;
 
-	parent_class = g_type_class_peek_parent (klass);
+	object_class = G_OBJECT_CLASS (class);
+	object_class->finalize = finalize;
 
+	sync_class = E_CAL_BACKEND_SYNC_CLASS (class);
 	sync_class->authenticate_user_sync = authenticate_user_task;
 	sync_class->refresh_sync = refresh_task;
 	sync_class->create_object_sync = create_task_object;
 	sync_class->modify_object_sync = modify_task_object;
 	sync_class->remove_object_sync = remove_task_object;
 	sync_class->receive_objects_sync = receive_task_objects;
+}
 
-	object_class->dispose = dispose;
-	object_class->finalize = finalize;
+static void
+e_cal_backend_exchange_tasks_init (ECalBackendExchangeTasks *cbext)
+{
+	cbext->priv = g_new0 (ECalBackendExchangeTasksPrivate, 1);
+
+	cbext->priv->mutex = g_mutex_new ();
+	cbext->priv->is_loaded = FALSE;
 }
 
-E2K_MAKE_TYPE (e_cal_backend_exchange_tasks, ECalBackendExchangeTasks, class_init, init, PARENT_TYPE)
diff --git a/calendar/e-cal-backend-exchange.c b/calendar/e-cal-backend-exchange.c
index a6e6e24..df1828a 100644
--- a/calendar/e-cal-backend-exchange.c
+++ b/calendar/e-cal-backend-exchange.c
@@ -75,14 +75,16 @@ struct ECalBackendExchangePrivate {
 	GHashTable *timezones;
 };
 
-#define PARENT_TYPE E_TYPE_CAL_BACKEND_SYNC
-static GObjectClass *parent_class = NULL;
-
 #define d(x)
 
 static icaltimezone *
 internal_get_timezone (ECalBackend *backend, const gchar *tzid);
 
+G_DEFINE_TYPE (
+	ECalBackendExchange,
+	e_cal_backend_exchange,
+	E_TYPE_CAL_BACKEND_SYNC)
+
 static gboolean
 get_backend_property (ECalBackendSync *backend, EDataCal *cal, GCancellable *cancellable, const gchar *prop_name, gchar **prop_value, GError **error)
 {
@@ -1950,8 +1952,8 @@ internal_get_timezone (ECalBackend *backend, const gchar *tzid)
 	zone = g_hash_table_lookup (cbex->priv->timezones, tzid);
 
 	/* if not found, chain up */
-	if (!zone && E_CAL_BACKEND_CLASS (parent_class)->internal_get_timezone)
-		zone = E_CAL_BACKEND_CLASS (parent_class)->internal_get_timezone (backend, tzid);
+	if (!zone && E_CAL_BACKEND_CLASS (e_cal_backend_exchange_parent_class)->internal_get_timezone)
+		zone = E_CAL_BACKEND_CLASS (e_cal_backend_exchange_parent_class)->internal_get_timezone (backend, tzid);
 
 	return zone;
 }
@@ -1993,33 +1995,6 @@ free_exchange_comp (gpointer value)
 }
 
 static void
-init (ECalBackendExchange *cbex)
-{
-	cbex->priv = g_new0 (ECalBackendExchangePrivate, 1);
-
-	cbex->priv->objects = g_hash_table_new_full (
-		g_str_hash, g_str_equal,
-		NULL, free_exchange_comp);
-
-	cbex->priv->timezones = g_hash_table_new_full (
-		g_str_hash, g_str_equal,
-		g_free, (GDestroyNotify) icaltimezone_free);
-
-	cbex->priv->set_lock = g_mutex_new ();
-	cbex->priv->open_lock = g_mutex_new ();
-	cbex->priv->cache_lock = g_mutex_new ();
-	cbex->priv->cache_unseen = NULL;
-
-	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbex), TRUE);
-}
-
-static void
-dispose (GObject *object)
-{
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
 finalize (GObject *object)
 {
 	ECalBackendExchange *cbex = E_CAL_BACKEND_EXCHANGE (object);
@@ -2055,20 +2030,25 @@ finalize (GObject *object)
 	g_free (cbex->priv);
 
 	/* Chain up to parent's finalize() method. */
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_cal_backend_exchange_parent_class)->finalize (object);
 }
 
 static void
-class_init (ECalBackendExchangeClass *klass)
+e_cal_backend_exchange_class_init (ECalBackendExchangeClass *class)
 {
 	GObjectClass *object_class;
-	ECalBackendClass *backend_class = E_CAL_BACKEND_CLASS (klass);
-	ECalBackendSyncClass *sync_class = E_CAL_BACKEND_SYNC_CLASS (klass);
+	ECalBackendClass *backend_class;
+	ECalBackendSyncClass *sync_class;
 
-	parent_class = g_type_class_peek_parent (klass);
+	object_class = G_OBJECT_CLASS (class);
+	object_class->finalize = finalize;
 
-	object_class = (GObjectClass *) klass;
+	backend_class = E_CAL_BACKEND_CLASS (class);
+	backend_class->start_view = start_view;
+	backend_class->set_online = set_online;
+	backend_class->internal_get_timezone = internal_get_timezone;
 
+	sync_class = E_CAL_BACKEND_SYNC_CLASS (class);
 	sync_class->get_backend_property_sync = get_backend_property;
 	sync_class->open_sync = open_calendar;
 	sync_class->authenticate_user_sync = authenticate_user;
@@ -2081,13 +2061,26 @@ class_init (ECalBackendExchangeClass *klass)
 	sync_class->get_free_busy_sync = get_freebusy;
 	sync_class->create_object_sync = create_object;
 	sync_class->modify_object_sync = modify_object;
+}
 
-	backend_class->start_view = start_view;
-	backend_class->set_online = set_online;
-	backend_class->internal_get_timezone = internal_get_timezone;
+static void
+e_cal_backend_exchange_init (ECalBackendExchange *cbex)
+{
+	cbex->priv = g_new0 (ECalBackendExchangePrivate, 1);
 
-	object_class->dispose = dispose;
-	object_class->finalize = finalize;
+	cbex->priv->objects = g_hash_table_new_full (
+		g_str_hash, g_str_equal,
+		NULL, free_exchange_comp);
+
+	cbex->priv->timezones = g_hash_table_new_full (
+		g_str_hash, g_str_equal,
+		g_free, (GDestroyNotify) icaltimezone_free);
+
+	cbex->priv->set_lock = g_mutex_new ();
+	cbex->priv->open_lock = g_mutex_new ();
+	cbex->priv->cache_lock = g_mutex_new ();
+	cbex->priv->cache_unseen = NULL;
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbex), TRUE);
 }
 
-E2K_MAKE_TYPE (e_cal_backend_exchange, ECalBackendExchange, class_init, init, PARENT_TYPE)
diff --git a/eplugin/exchange-config-listener.c b/eplugin/exchange-config-listener.c
index 7153a39..3d1fbe2 100644
--- a/eplugin/exchange-config-listener.c
+++ b/eplugin/exchange-config-listener.c
@@ -73,13 +73,9 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE E_TYPE_ACCOUNT_LIST
-
 #define CONF_KEY_SELECTED_CAL_SOURCES "/apps/evolution/calendar/display/selected_calendars"
 #define CONF_KEY_SELECTED_TASKS_SOURCES "/apps/evolution/calendar/tasks/selected_tasks"
 
-static EAccountListClass *parent_class = NULL;
-
 static void dispose (GObject *object);
 static void finalize (GObject *object);
 
@@ -97,18 +93,23 @@ static gboolean exchange_camel_urls_is_equal (const gchar *url1,
 					      const gchar *url2);
 static void remove_selected_non_offline_esources (ExchangeAccount *account,
 						  const gchar *gconf_key);
+
+G_DEFINE_TYPE (
+	ExchangeConfigListener,
+	exchange_config_listener,
+	E_TYPE_ACCOUNT_LIST)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_config_listener_class_init (ExchangeConfigListenerClass *class)
 {
-	EAccountListClass *e_account_list_class =
-		E_ACCOUNT_LIST_CLASS (object_class);
-
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
+	EAccountListClass *e_account_list_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 
+	e_account_list_class = E_ACCOUNT_LIST_CLASS (class);
 	e_account_list_class->account_added   = account_added;
 	e_account_list_class->account_changed = account_changed;
 	e_account_list_class->account_removed = account_removed;
@@ -135,11 +136,8 @@ class_init (GObjectClass *object_class)
 }
 
 static void
-init (GObject *object)
+exchange_config_listener_init (ExchangeConfigListener *config_listener)
 {
-	ExchangeConfigListener *config_listener =
-		EXCHANGE_CONFIG_LISTENER (object);
-
 	config_listener->priv = g_new0 (ExchangeConfigListenerPrivate, 1);
 }
 
@@ -159,7 +157,7 @@ dispose (GObject *object)
 		config_listener->priv->gconf = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (exchange_config_listener_parent_class)->dispose (object);
 }
 
 static void
@@ -172,11 +170,9 @@ finalize (GObject *object)
 	g_free (config_listener->priv->configured_uri);
 	g_free (config_listener->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_config_listener_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_config_listener, ExchangeConfigListener, class_init, init, PARENT_TYPE)
-
 #define EVOLUTION_URI_PREFIX     "evolution:/"
 #define EVOLUTION_URI_PREFIX_LEN (sizeof (EVOLUTION_URI_PREFIX) - 1)
 
diff --git a/eplugin/exchange-delegates-user.c b/eplugin/exchange-delegates-user.c
index 4258567..d822585 100644
--- a/eplugin/exchange-delegates-user.c
+++ b/eplugin/exchange-delegates-user.c
@@ -78,8 +78,10 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (
+	ExchangeDelegatesUser,
+	exchange_delegates_user,
+	G_TYPE_OBJECT)
 
 static void
 finalize (GObject *object)
@@ -95,14 +97,15 @@ finalize (GObject *object)
 	if (user->sid)
 		g_object_unref (user->sid);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_delegates_user_parent_class)->finalize (object);
 }
 
 static void
-class_init (GObjectClass *object_class)
+exchange_delegates_user_class_init (ExchangeDelegatesUserClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 
 	/* signals */
@@ -116,7 +119,10 @@ class_init (GObjectClass *object_class)
 			      G_TYPE_NONE, 0);
 }
 
-E2K_MAKE_TYPE (exchange_delegates_user, ExchangeDelegatesUser, class_init, NULL, PARENT_TYPE)
+static void
+exchange_delegates_user_init (ExchangeDelegatesUser *user)
+{
+}
 
 static inline gboolean
 is_delegate_role (E2kPermissionsRole role)
diff --git a/eplugin/exchange-permissions-dialog.c b/eplugin/exchange-permissions-dialog.c
index e183d27..671a122 100644
--- a/eplugin/exchange-permissions-dialog.c
+++ b/eplugin/exchange-permissions-dialog.c
@@ -81,8 +81,10 @@ enum {
 	EXCHANGE_PERMISSIONS_DIALOG_NUM_COLUMNS
 };
 
-#define PARENT_TYPE GTK_TYPE_DIALOG
-static GtkDialogClass *parent_class = NULL;
+G_DEFINE_TYPE (
+	ExchangePermissionsDialog,
+	exchange_permissions_dialog,
+	GTK_TYPE_DIALOG)
 
 static void
 finalize (GObject *object)
@@ -98,29 +100,24 @@ finalize (GObject *object)
 
 	g_free (dialog->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_permissions_dialog_parent_class)->finalize (object);
 }
 
 static void
-class_init (GObjectClass *object_class)
+exchange_permissions_dialog_class_init (ExchangePermissionsDialogClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 }
 
 static void
-init (GObject *object)
+exchange_permissions_dialog_init (ExchangePermissionsDialog *dialog)
 {
-	ExchangePermissionsDialog *dialog =
-		EXCHANGE_PERMISSIONS_DIALOG (object);
-
 	dialog->priv = g_new0 (ExchangePermissionsDialogPrivate, 1);
 }
 
-E2K_MAKE_TYPE (exchange_permissions_dialog, ExchangePermissionsDialog, class_init, init, PARENT_TYPE)
-
 static GtkWidget *create_permissions_vbox (ExchangePermissionsDialog *dialog);
 static void setup_user_list     (ExchangePermissionsDialog *dialog);
 static void display_permissions (ExchangePermissionsDialog *dialog);
diff --git a/eplugin/exchange-send-options.c b/eplugin/exchange-send-options.c
index 7900850..404a21e 100644
--- a/eplugin/exchange-send-options.c
+++ b/eplugin/exchange-send-options.c
@@ -69,7 +69,6 @@ struct _ExchangeSendOptionsDialogPrivate {
 static void exchange_sendoptions_dialog_finalize (GObject *object);
 static void exchange_sendoptions_dialog_dispose (GObject *object);
 
-static GObjectClass *parent_class = NULL;
 enum {
 	SOD_RESPONSE,
 	LAST_SIGNAL
@@ -503,17 +502,16 @@ exchange_sendoptions_dialog_run (ExchangeSendOptionsDialog *sod, GtkWidget *pare
 }
 
 static void
-exchange_sendoptions_dialog_class_init (ExchangeSendOptionsDialogClass *klass)
+exchange_sendoptions_dialog_class_init (ExchangeSendOptionsDialogClass *class)
 {
 	GObjectClass *object_class;
 
-	parent_class = g_type_class_peek_parent (klass);
-	object_class = G_OBJECT_CLASS (klass);
-
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = exchange_sendoptions_dialog_finalize;
 	object_class->dispose = exchange_sendoptions_dialog_dispose;
+
 	signals[SOD_RESPONSE] = g_signal_new ("sod_response",
-			G_TYPE_FROM_CLASS (klass),
+			G_TYPE_FROM_CLASS (class),
 			G_SIGNAL_RUN_FIRST,
 			G_STRUCT_OFFSET (ExchangeSendOptionsDialogClass, esod_response),
 			NULL, NULL,
@@ -573,8 +571,7 @@ exchange_sendoptions_dialog_finalize (GObject *object)
 		sod->priv = NULL;
 	}
 
-	if (parent_class->finalize)
-		(* parent_class->finalize) (object);
+	G_OBJECT_CLASS (exchange_sendoptions_dialog_parent_class)->finalize (object);
 
 }
 
@@ -585,8 +582,7 @@ exchange_sendoptions_dialog_dispose (GObject *object)
 
 	g_return_if_fail (EXCHANGE_IS_SENDOPTIONS_DIALOG (sod));
 
-	if (parent_class->dispose)
-		(* parent_class->dispose) (object);
+	G_OBJECT_CLASS (exchange_sendoptions_dialog_parent_class)->dispose (object);
 
 }
 
diff --git a/eplugin/exchange-user-dialog.c b/eplugin/exchange-user-dialog.c
index 817ab3c..9eb7485 100644
--- a/eplugin/exchange-user-dialog.c
+++ b/eplugin/exchange-user-dialog.c
@@ -32,11 +32,13 @@ struct _E2kUserDialogPrivate {
 	GtkWidget *entry, *parent_window;
 };
 
-#define PARENT_TYPE GTK_TYPE_DIALOG
-static GtkDialogClass *parent_class;
-
 static void parent_window_destroyed (gpointer dialog, GObject *where_parent_window_was);
 
+G_DEFINE_TYPE (
+	E2kUserDialog,
+	e2k_user_dialog,
+	GTK_TYPE_DIALOG)
+
 static void
 finalize (GObject *object)
 {
@@ -45,7 +47,7 @@ finalize (GObject *object)
 	g_free (dialog->priv->section_name);
 	g_free (dialog->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e2k_user_dialog_parent_class)->finalize (object);
 }
 
 static void
@@ -64,22 +66,21 @@ dispose (GObject *object)
 		dialog->priv->parent_window = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e2k_user_dialog_parent_class)->dispose (object);
 }
 
 static void
-class_init (E2kUserDialogClass *class)
+e2k_user_dialog_class_init (E2kUserDialogClass *class)
 {
-	GObjectClass *object_class = (GObjectClass *) class;
-
-	parent_class = g_type_class_ref (GTK_TYPE_DIALOG);
+	GObjectClass *object_class;
 
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 }
 
 static void
-init (E2kUserDialog *dialog)
+e2k_user_dialog_init (E2kUserDialog *dialog)
 {
 	GtkWidget *content_area;
 
@@ -89,8 +90,6 @@ init (E2kUserDialog *dialog)
 	gtk_box_set_spacing (GTK_BOX (content_area), 6);
 }
 
-E2K_MAKE_TYPE (e2k_user_dialog, E2kUserDialog, class_init, init, PARENT_TYPE)
-
 static void
 parent_window_destroyed (gpointer user_data, GObject *where_parent_window_was)
 {
diff --git a/server/lib/e2k-context.c b/server/lib/e2k-context.c
index 4c848c5..15190f5 100644
--- a/server/lib/e2k-context.c
+++ b/server/lib/e2k-context.c
@@ -73,9 +73,6 @@
 #define BIND_STATUS_IS_ADDRINUSE() (errno == EADDRINUSE)
 #endif
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class;
-
 enum {
 	REDIRECT,
 	LAST_SIGNAL
@@ -136,6 +133,11 @@ static gboolean do_notification (GIOChannel *source, GIOCondition condition, gpo
 static void setup_message (SoupSession *session, SoupMessage *msg, SoupSocket *socket, gpointer user_data);
 static void proxy_settings_changed (EProxy *proxy, gpointer user_data);
 
+G_DEFINE_TYPE (
+	E2kContext,
+	e2k_context,
+	G_TYPE_OBJECT)
+
 static void
 proxy_settings_changed (EProxy *proxy, gpointer user_data)
 {
@@ -160,21 +162,6 @@ proxy_settings_changed (EProxy *proxy, gpointer user_data)
 }
 
 static void
-init (GObject *object)
-{
-	E2kContext *ctx = E2K_CONTEXT (object);
-
-	ctx->priv = g_new0 (E2kContextPrivate, 1);
-	ctx->priv->subscriptions_by_id =
-		g_hash_table_new (g_str_hash, g_str_equal);
-	ctx->priv->subscriptions_by_uri =
-		g_hash_table_new (g_str_hash, g_str_equal);
-	ctx->priv->proxy = e_proxy_new ();
-	e_proxy_setup_proxy (ctx->priv->proxy);
-	g_signal_connect (ctx->priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), ctx);
-}
-
-static void
 destroy_sub_list (gpointer uri, gpointer sub_list, gpointer ctx)
 {
 	unsubscribe_internal (ctx, uri, sub_list, TRUE);
@@ -240,15 +227,15 @@ dispose (GObject *object)
 
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e2k_context_parent_class)->dispose (object);
 }
 
 static void
-class_init (GObjectClass *object_class)
+e2k_context_class_init (E2kContextClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 
 	signals[REDIRECT] =
@@ -270,7 +257,18 @@ class_init (GObjectClass *object_class)
 #endif
 }
 
-E2K_MAKE_TYPE (e2k_context, E2kContext, class_init, init, PARENT_TYPE)
+static void
+e2k_context_init (E2kContext *ctx)
+{
+	ctx->priv = g_new0 (E2kContextPrivate, 1);
+	ctx->priv->subscriptions_by_id =
+		g_hash_table_new (g_str_hash, g_str_equal);
+	ctx->priv->subscriptions_by_uri =
+		g_hash_table_new (g_str_hash, g_str_equal);
+	ctx->priv->proxy = e_proxy_new ();
+	e_proxy_setup_proxy (ctx->priv->proxy);
+	g_signal_connect (ctx->priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), ctx);
+}
 
 static void
 renew_sub_list (gpointer key, gpointer value, gpointer data)
diff --git a/server/lib/e2k-global-catalog.c b/server/lib/e2k-global-catalog.c
index 4b8d53a..1e02474 100644
--- a/server/lib/e2k-global-catalog.c
+++ b/server/lib/e2k-global-catalog.c
@@ -53,15 +53,19 @@ struct _E2kGlobalCatalogPrivate {
 	E2kAutoconfigGalAuthPref auth;
 };
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
 static void finalize (GObject *);
 static gint get_gc_connection (E2kGlobalCatalog *gc, E2kOperation *op);
 
+G_DEFINE_TYPE (
+	E2kGlobalCatalog,
+	e2k_global_catalog,
+	G_TYPE_OBJECT)
+
 static void
-class_init (GObjectClass *object_class)
+e2k_global_catalog_class_init (E2kGlobalCatalogClass *class)
 {
+	GObjectClass *object_class;
+
 #ifdef E2K_DEBUG
 	gchar *e2k_debug = getenv ("E2K_DEBUG");
 
@@ -75,17 +79,13 @@ class_init (GObjectClass *object_class)
 	 */
 	g_setenv ("SASL_PATH", "", TRUE);
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 }
 
 static void
-init (GObject *object)
+e2k_global_catalog_init (E2kGlobalCatalog *gc)
 {
-	E2kGlobalCatalog *gc = E2K_GLOBAL_CATALOG (object);
-
 	gc->priv = g_new0 (E2kGlobalCatalogPrivate, 1);
 	gc->priv->ldap_lock = g_mutex_new ();
 	gc->priv->entries = g_ptr_array_new ();
@@ -163,11 +163,9 @@ finalize (GObject *object)
 	g_free (gc->domain);
 	gc->domain = NULL;
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e2k_global_catalog_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (e2k_global_catalog, E2kGlobalCatalog, class_init, init, PARENT_TYPE)
-
 static gint
 gc_ldap_result (LDAP *ldap, E2kOperation *op,
 		gint msgid, LDAPMessage **msg)
diff --git a/server/lib/e2k-security-descriptor.c b/server/lib/e2k-security-descriptor.c
index e6885d8..26a73cd 100644
--- a/server/lib/e2k-security-descriptor.c
+++ b/server/lib/e2k-security-descriptor.c
@@ -120,21 +120,24 @@ static const guint32 container_permissions_all = LE (0x1fc9bf);
 static const guint32 object_permissions_all    = LE (0x1f0fbf);
 #undef LE
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
 static void dispose (GObject *object);
 
+G_DEFINE_TYPE (
+	E2kSecurityDescriptor,
+	e2k_security_descriptor,
+	G_TYPE_OBJECT)
+
 static void
-class_init (GObjectClass *object_class)
+e2k_security_descriptor_class_init (E2kSecurityDescriptorClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 }
 
 static void
-init (E2kSecurityDescriptor *sd)
+e2k_security_descriptor_init (E2kSecurityDescriptor *sd)
 {
 	sd->priv = g_new0 (E2kSecurityDescriptorPrivate, 1);
 
@@ -169,11 +172,9 @@ dispose (GObject *object)
 		sd->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e2k_security_descriptor_parent_class)->dispose (object);
 }
 
-E2K_MAKE_TYPE (e2k_security_descriptor, E2kSecurityDescriptor, class_init, init, PARENT_TYPE)
-
 /* This determines the relative ordering of any two ACEs in a SID.
  * See docs/security for details.
  */
diff --git a/server/lib/e2k-sid.c b/server/lib/e2k-sid.c
index e696a68..ecfa2a2 100644
--- a/server/lib/e2k-sid.c
+++ b/server/lib/e2k-sid.c
@@ -44,24 +44,25 @@ struct _E2kSidPrivate {
 	gchar *display_name;
 };
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
 static void dispose (GObject *object);
 
+G_DEFINE_TYPE (
+	E2kSid,
+	e2k_sid,
+	G_TYPE_OBJECT)
+
 static void
-class_init (GObjectClass *object_class)
+e2k_sid_class_init (E2kSidClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 }
 
 static void
-init (GObject *object)
+e2k_sid_init (E2kSid *sid)
 {
-	E2kSid *sid = E2K_SID (object);
-
 	sid->priv = g_new0 (E2kSidPrivate, 1);
 }
 
@@ -81,11 +82,9 @@ dispose (GObject *object)
 		sid->priv = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e2k_sid_parent_class)->dispose (object);
 }
 
-E2K_MAKE_TYPE (e2k_sid, E2kSid, class_init, init, PARENT_TYPE)
-
 static E2kSid *
 sid_new_internal (E2kSidType type, const gchar *display_name,
 		  const gchar *string_sid, const guint8 *binary_sid)
diff --git a/server/lib/e2k-types.h b/server/lib/e2k-types.h
index a843b86..f8f88f9 100644
--- a/server/lib/e2k-types.h
+++ b/server/lib/e2k-types.h
@@ -31,62 +31,6 @@ typedef struct _E2kSid                        E2kSid;
 typedef struct _E2kSidPrivate                 E2kSidPrivate;
 typedef struct _E2kSidClass                   E2kSidClass;
 
-#define E2K_MAKE_TYPE(type_name,TypeName,class_init,init,parent) \
-GType type_name##_get_type (void)			\
-{							\
-	static volatile gsize type_id__volatile = 0;	\
-	if (g_once_init_enter (&type_id__volatile)) {	\
-		static GTypeInfo const object_info = {	\
-			sizeof (TypeName##Class),	\
-							\
-			(GBaseInitFunc) NULL,		\
-			(GBaseFinalizeFunc) NULL,	\
-							\
-			(GClassInitFunc) class_init,	\
-			(GClassFinalizeFunc) NULL,	\
-			NULL,	/* class_data */	\
-							\
-			sizeof (TypeName),		\
-			0,	/* n_preallocs */	\
-			(GInstanceInitFunc) init,	\
-		};					\
-		GType type = g_type_register_static (parent, #TypeName, &object_info, 0); \
-		g_once_init_leave (&type_id__volatile, type);	\
-	}						\
-	return type_id__volatile;			\
-}
-
-#define E2K_MAKE_TYPE_WITH_IFACE(type_name,TypeName,class_init,init,parent,iface_init,iparent) \
-GType type_name##_get_type (void)			\
-{							\
-	static volatile gsize type_id__volatile = 0;	\
-	if (g_once_init_enter (&type_id__volatile)) {	\
-		static GTypeInfo const object_info = {	\
-			sizeof (TypeName##Class),	\
-							\
-			(GBaseInitFunc) NULL,		\
-			(GBaseFinalizeFunc) NULL,	\
-							\
-			(GClassInitFunc) class_init,	\
-			(GClassFinalizeFunc) NULL,	\
-			NULL,	/* class_data */	\
-							\
-			sizeof (TypeName),		\
-			0,	/* n_preallocs */	\
-			(GInstanceInitFunc) init,	\
-		};					\
-		static GInterfaceInfo const iface_info = {	\
-			(GInterfaceInitFunc) iface_init,	\
-			NULL,					\
-			NULL					\
-		};						\
-		GType type = g_type_register_static (parent, #TypeName, &object_info, 0);	\
-		g_type_add_interface_static (type, iparent, &iface_info);		\
-		g_once_init_leave (&type_id__volatile, type);	\
-	}						\
-	return type_id__volatile;					\
-}
-
 /* Put "E2K_KEEP_PRECEDING_COMMENT_OUT_OF_PO_FILES;" on a line to
  * separate a _() from a comment that doesn't go with it.
  */
diff --git a/server/storage/e-folder-exchange.c b/server/storage/e-folder-exchange.c
index a14460e..819220d 100644
--- a/server/storage/e-folder-exchange.c
+++ b/server/storage/e-folder-exchange.c
@@ -58,29 +58,29 @@ struct _EFolderExchangePrivate {
 	gboolean rescan_tree;
 };
 
-#define PARENT_TYPE E_TYPE_FOLDER
-static EFolderClass *parent_class = NULL;
-
 #define EF_CLASS(hier) (E_FOLDER_CLASS (G_OBJECT_GET_CLASS (hier)))
 
 static void dispose (GObject *object);
 static void finalize (GObject *object);
 
+G_DEFINE_TYPE (
+	EFolderExchange,
+	e_folder_exchange,
+	E_TYPE_FOLDER)
+
 static void
-class_init (GObjectClass *object_class)
+e_folder_exchange_class_init (EFolderExchangeClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
-	/* methods */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 }
 
 static void
-init (GObject *object)
+e_folder_exchange_init (EFolderExchange *folder)
 {
-	EFolderExchange *folder = E_FOLDER_EXCHANGE (object);
-
 	folder->priv = g_new0 (EFolderExchangePrivate, 1);
 	folder->priv->rescan_tree = TRUE;
 }
@@ -95,7 +95,7 @@ dispose (GObject *object)
 		folder->priv->hier = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (e_folder_exchange_parent_class)->dispose (object);
 }
 
 static void
@@ -110,11 +110,9 @@ finalize (GObject *object)
 	g_free (folder->priv->path);
 	g_free (folder->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (e_folder_exchange_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (e_folder_exchange, EFolderExchange, class_init, init, PARENT_TYPE)
-
 static gchar *
 sanitize_path (const gchar *path)
 {
diff --git a/server/storage/exchange-account.c b/server/storage/exchange-account.c
index 80a1d0f..0fb3454 100644
--- a/server/storage/exchange-account.c
+++ b/server/storage/exchange-account.c
@@ -95,19 +95,21 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
 static void dispose (GObject *);
 static void finalize (GObject *);
 static void remove_hierarchy (ExchangeAccount *account, ExchangeHierarchy *hier);
 
+G_DEFINE_TYPE (
+	ExchangeAccount,
+	exchange_account,
+	G_TYPE_OBJECT)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_account_class_init (ExchangeAccountClass *class)
 {
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 
@@ -142,10 +144,8 @@ class_init (GObjectClass *object_class)
 }
 
 static void
-init (GObject *object)
+exchange_account_init (ExchangeAccount *account)
 {
-	ExchangeAccount *account = EXCHANGE_ACCOUNT (object);
-
 	account->priv = g_new0 (ExchangeAccountPrivate, 1);
 	account->priv->connect_lock = g_mutex_new ();
 	account->priv->hierarchies = g_ptr_array_new ();
@@ -225,7 +225,7 @@ dispose (GObject *object)
 
 	g_static_rec_mutex_unlock (&account->priv->folders_lock);
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (exchange_account_parent_class)->dispose (object);
 }
 
 static void
@@ -304,11 +304,9 @@ finalize (GObject *object)
 
 	g_free (account->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_account_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_account, ExchangeAccount, class_init, init, PARENT_TYPE)
-
 void
 exchange_account_rescan_tree (ExchangeAccount *account)
 {
diff --git a/server/storage/exchange-hierarchy-favorites.c b/server/storage/exchange-hierarchy-favorites.c
index 05753d8..cb00801 100644
--- a/server/storage/exchange-hierarchy-favorites.c
+++ b/server/storage/exchange-hierarchy-favorites.c
@@ -44,35 +44,36 @@ struct _ExchangeHierarchyFavoritesPrivate {
 	GHashTable *shortcuts;
 };
 
-#define PARENT_TYPE EXCHANGE_TYPE_HIERARCHY_SOMEDAV
-static ExchangeHierarchySomeDAVClass *parent_class = NULL;
-
 static GPtrArray *get_hrefs (ExchangeHierarchySomeDAV *hsd);
 static ExchangeAccountFolderResult remove_folder (ExchangeHierarchy *hier,
 						  EFolder *folder);
 static void finalize (GObject *object);
 
+G_DEFINE_TYPE (
+	ExchangeHierarchyFavorites,
+	exchange_hierarchy_favorites,
+	EXCHANGE_TYPE_HIERARCHY_SOMEDAV)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_hierarchy_favorites_class_init (ExchangeHierarchyFavoritesClass *class)
 {
-	ExchangeHierarchySomeDAVClass *somedav_class =
-		EXCHANGE_HIERARCHY_SOMEDAV_CLASS (object_class);
-	ExchangeHierarchyClass *hier_class =
-		EXCHANGE_HIERARCHY_CLASS (object_class);
+	GObjectClass *object_class;
+	ExchangeHierarchyClass *hier_class;
+	ExchangeHierarchySomeDAVClass *somedav_class;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
+
+	hier_class = EXCHANGE_HIERARCHY_CLASS (class);
 	hier_class->remove_folder = remove_folder;
+
+	somedav_class = EXCHANGE_HIERARCHY_SOMEDAV_CLASS (class);
 	somedav_class->get_hrefs = get_hrefs;
 }
 
 static void
-init (GObject *object)
+exchange_hierarchy_favorites_init (ExchangeHierarchyFavorites *hfav)
 {
-	ExchangeHierarchyFavorites *hfav = EXCHANGE_HIERARCHY_FAVORITES (object);
-
 	hfav->priv = g_new0 (ExchangeHierarchyFavoritesPrivate, 1);
 	hfav->priv->shortcuts = g_hash_table_new_full (g_str_hash, g_str_equal,
 						       g_free, g_free);
@@ -88,11 +89,9 @@ finalize (GObject *object)
 	g_free (hfav->priv->shortcuts_uri);
 	g_free (hfav->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_hierarchy_favorites_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_hierarchy_favorites, ExchangeHierarchyFavorites, class_init, init, PARENT_TYPE)
-
 static void
 add_hrefs (ExchangeHierarchy *hier, EFolder *folder, gpointer hrefs)
 {
diff --git a/server/storage/exchange-hierarchy-foreign.c b/server/storage/exchange-hierarchy-foreign.c
index 951da23..4dad96e 100644
--- a/server/storage/exchange-hierarchy-foreign.c
+++ b/server/storage/exchange-hierarchy-foreign.c
@@ -53,9 +53,6 @@ struct _ExchangeHierarchyForeignPrivate {
 
 extern const gchar *exchange_localfreebusy_path;
 
-#define PARENT_TYPE EXCHANGE_TYPE_HIERARCHY_SOMEDAV
-static ExchangeHierarchySomeDAVClass *parent_class = NULL;
-
 static GPtrArray *get_hrefs (ExchangeHierarchySomeDAV *hsd);
 static ExchangeAccountFolderResult create_folder (ExchangeHierarchy *hier,
 						  EFolder *parent,
@@ -68,34 +65,38 @@ static ExchangeAccountFolderResult scan_subtree (ExchangeHierarchy *hier,
 						 gint mode);
 static void finalize (GObject *object);
 
+G_DEFINE_TYPE (
+	ExchangeHierarchyForeign,
+	exchange_hierarchy_foreign,
+	EXCHANGE_TYPE_HIERARCHY_SOMEDAV)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_hierarchy_foreign_class_init (ExchangeHierarchyForeignClass *class)
 {
-	ExchangeHierarchyClass *hierarchy_class =
-		EXCHANGE_HIERARCHY_CLASS (object_class);
-	ExchangeHierarchySomeDAVClass *somedav_class =
-		EXCHANGE_HIERARCHY_SOMEDAV_CLASS (object_class);
-
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
+	ExchangeHierarchyClass *hierarchy_class;
+	ExchangeHierarchySomeDAVClass *somedav_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 
-	hierarchy_class->create_folder  = create_folder;
-	hierarchy_class->remove_folder  = remove_folder;
-	hierarchy_class->scan_subtree   = scan_subtree;
+	hierarchy_class = EXCHANGE_HIERARCHY_CLASS (class);
+	hierarchy_class->create_folder = create_folder;
+	hierarchy_class->remove_folder = remove_folder;
+	hierarchy_class->scan_subtree = scan_subtree;
 
-	somedav_class->get_hrefs        = get_hrefs;
+	somedav_class = EXCHANGE_HIERARCHY_SOMEDAV_CLASS (class);
+	somedav_class->get_hrefs = get_hrefs;
 }
 
 static void
-init (GObject *object)
+exchange_hierarchy_foreign_init (ExchangeHierarchyForeign *hfor)
 {
-	ExchangeHierarchyForeign *hfor = EXCHANGE_HIERARCHY_FOREIGN (object);
-	ExchangeHierarchy *hier = EXCHANGE_HIERARCHY (object);
+	ExchangeHierarchy *hier = EXCHANGE_HIERARCHY (hfor);
 
 	hfor->priv = g_new0 (ExchangeHierarchyForeignPrivate, 1);
 	hfor->priv->hide_private_lock = g_mutex_new ();
+
 	hier->hide_private_items = TRUE;
 }
 
@@ -107,11 +108,9 @@ finalize (GObject *object)
 	g_mutex_free (hfor->priv->hide_private_lock);
 	g_free (hfor->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_hierarchy_foreign_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_hierarchy_foreign, ExchangeHierarchyForeign, class_init, init, PARENT_TYPE)
-
 static const gchar *privacy_props[] = {
 	PR_DELEGATES_ENTRYIDS,
 	PR_DELEGATES_SEE_PRIVATE,
@@ -382,7 +381,7 @@ scan_subtree (ExchangeHierarchy *hier, EFolder *folder, gint mode)
 
 	check_hide_private (hier);
 
-	folder_result = EXCHANGE_HIERARCHY_CLASS (parent_class)->scan_subtree (hier, folder, mode);
+	folder_result = EXCHANGE_HIERARCHY_CLASS (exchange_hierarchy_foreign_parent_class)->scan_subtree (hier, folder, mode);
 
 	if (exchange_hierarchy_is_empty (hier))
 		hierarchy_foreign_cleanup (hier);
diff --git a/server/storage/exchange-hierarchy-gal.c b/server/storage/exchange-hierarchy-gal.c
index 32b8443..6ce0a02 100644
--- a/server/storage/exchange-hierarchy-gal.c
+++ b/server/storage/exchange-hierarchy-gal.c
@@ -33,9 +33,20 @@
 
 #include <libedataserver/e-source-list.h>
 
-#define PARENT_TYPE EXCHANGE_TYPE_HIERARCHY
+G_DEFINE_TYPE (
+	ExchangeHierarchyGAL,
+	exchange_hierarchy_gal,
+	EXCHANGE_TYPE_HIERARCHY)
 
-E2K_MAKE_TYPE (exchange_hierarchy_gal, ExchangeHierarchyGAL, NULL, NULL, PARENT_TYPE)
+static void
+exchange_hierarchy_gal_class_init (ExchangeHierarchyGALClass *class)
+{
+}
+
+static void
+exchange_hierarchy_gal_init (ExchangeHierarchyGAL *hierarchy)
+{
+}
 
 ExchangeHierarchy *
 exchange_hierarchy_gal_new (ExchangeAccount *account,
diff --git a/server/storage/exchange-hierarchy-somedav.c b/server/storage/exchange-hierarchy-somedav.c
index 94d6253..a9d880d 100644
--- a/server/storage/exchange-hierarchy-somedav.c
+++ b/server/storage/exchange-hierarchy-somedav.c
@@ -49,26 +49,27 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE EXCHANGE_TYPE_HIERARCHY_WEBDAV
-static ExchangeHierarchyWebDAVClass *parent_class = NULL;
-
 static ExchangeAccountFolderResult scan_subtree (ExchangeHierarchy *hier,
 						 EFolder *folder,
 						 gint mode);
 static void finalize (GObject *object);
 
+G_DEFINE_TYPE (
+	ExchangeHierarchySomeDAV,
+	exchange_hierarchy_somedav,
+	EXCHANGE_TYPE_HIERARCHY_WEBDAV)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_hierarchy_somedav_class_init (ExchangeHierarchySomeDAVClass *class)
 {
-	ExchangeHierarchyClass *exchange_hierarchy_class =
-		EXCHANGE_HIERARCHY_CLASS (object_class);
-
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
+	ExchangeHierarchyClass *exchange_hierarchy_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 
-	exchange_hierarchy_class->scan_subtree   = scan_subtree;
+	exchange_hierarchy_class = EXCHANGE_HIERARCHY_CLASS (class);
+	exchange_hierarchy_class->scan_subtree = scan_subtree;
 
 	/* signals */
 	signals[HREF_UNREADABLE] =
@@ -83,10 +84,8 @@ class_init (GObjectClass *object_class)
 }
 
 static void
-init (GObject *object)
+exchange_hierarchy_somedav_init (ExchangeHierarchySomeDAV *hsd)
 {
-	ExchangeHierarchySomeDAV *hsd = EXCHANGE_HIERARCHY_SOMEDAV (object);
-
 	hsd->priv = g_new0 (ExchangeHierarchySomeDAVPrivate, 1);
 }
 
@@ -97,11 +96,9 @@ finalize (GObject *object)
 
 	g_free (hsd->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_hierarchy_somedav_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_hierarchy_somedav, ExchangeHierarchySomeDAV, class_init, init, PARENT_TYPE)
-
 static inline gboolean
 folder_is_unreadable (E2kProperties *props)
 {
diff --git a/server/storage/exchange-hierarchy-webdav.c b/server/storage/exchange-hierarchy-webdav.c
index 101f22f..10ff6ff 100644
--- a/server/storage/exchange-hierarchy-webdav.c
+++ b/server/storage/exchange-hierarchy-webdav.c
@@ -59,12 +59,8 @@ struct _ExchangeHierarchyWebDAVPrivate {
 	gdouble total_folder_size;
 };
 
-#define PARENT_TYPE EXCHANGE_TYPE_HIERARCHY
-static ExchangeHierarchyClass *parent_class = NULL;
-
 static void folder_type_map_init (void);
 
-static void dispose (GObject *object);
 static void finalize (GObject *object);
 static gboolean is_empty (ExchangeHierarchy *hier);
 static void rescan (ExchangeHierarchy *hier);
@@ -88,20 +84,23 @@ static void hierarchy_new_folder (ExchangeHierarchy *hier, EFolder *folder,
 static void hierarchy_removed_folder (ExchangeHierarchy *hier, EFolder *folder,
 				      gpointer user_data);
 
+G_DEFINE_TYPE (
+	ExchangeHierarchyWebDAV,
+	exchange_hierarchy_webdav,
+	EXCHANGE_TYPE_HIERARCHY)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_hierarchy_webdav_class_init (ExchangeHierarchyWebDAVClass *class)
 {
-	ExchangeHierarchyClass *exchange_hierarchy_class =
-		EXCHANGE_HIERARCHY_CLASS (object_class);
+	GObjectClass *object_class;
+	ExchangeHierarchyClass *exchange_hierarchy_class;
 
 	folder_type_map_init ();
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
-	/* virtual method override */
-	object_class->dispose = dispose;
+	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = finalize;
 
+	exchange_hierarchy_class = EXCHANGE_HIERARCHY_CLASS (class);
 	exchange_hierarchy_class->is_empty = is_empty;
 	exchange_hierarchy_class->rescan = rescan;
 	exchange_hierarchy_class->scan_subtree = scan_subtree;
@@ -111,27 +110,19 @@ class_init (GObjectClass *object_class)
 }
 
 static void
-init (GObject *object)
+exchange_hierarchy_webdav_init (ExchangeHierarchyWebDAV *hwd)
 {
-	ExchangeHierarchyWebDAV *hwd = EXCHANGE_HIERARCHY_WEBDAV (object);
-
 	hwd->priv = g_new0 (ExchangeHierarchyWebDAVPrivate, 1);
 	hwd->priv->folders_by_internal_path = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_object_unref);
 	hwd->priv->total_folder_size = 0;
 
-	g_signal_connect (object, "new_folder",
+	g_signal_connect (hwd, "new_folder",
 			  G_CALLBACK (hierarchy_new_folder), NULL);
-	g_signal_connect (object, "removed_folder",
+	g_signal_connect (hwd, "removed_folder",
 			  G_CALLBACK (hierarchy_removed_folder), NULL);
 }
 
 static void
-dispose (GObject *object)
-{
-	G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
 finalize (GObject *object)
 {
 	ExchangeHierarchyWebDAV *hwd = EXCHANGE_HIERARCHY_WEBDAV (object);
@@ -140,11 +131,9 @@ finalize (GObject *object)
 	g_free (hwd->priv->trash_path);
 	g_free (hwd->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_hierarchy_webdav_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_hierarchy_webdav, ExchangeHierarchyWebDAV, class_init, init, PARENT_TYPE)
-
 typedef struct {
 	const gchar *contentclass, *component;
 	gboolean offline_supported;
diff --git a/server/storage/exchange-hierarchy.c b/server/storage/exchange-hierarchy.c
index b152ea1..31d62c9 100644
--- a/server/storage/exchange-hierarchy.c
+++ b/server/storage/exchange-hierarchy.c
@@ -38,9 +38,6 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
 #define HIER_CLASS(hier) (EXCHANGE_HIERARCHY_CLASS (G_OBJECT_GET_CLASS (hier)))
 
 static void dispose (GObject *object);
@@ -63,25 +60,27 @@ static ExchangeAccountFolderResult xfer_folder   (ExchangeHierarchy *hier,
 						  const gchar *dest_name,
 						  gboolean remove_source);
 
+G_DEFINE_TYPE (
+	ExchangeHierarchy,
+	exchange_hierarchy,
+	G_TYPE_OBJECT)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_hierarchy_class_init (ExchangeHierarchyClass *class)
 {
-	ExchangeHierarchyClass *exchange_hierarchy_class =
-		EXCHANGE_HIERARCHY_CLASS (object_class);
+	GObjectClass *object_class;
 
-	parent_class = g_type_class_ref (PARENT_TYPE);
-
-	/* methods */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 
-	exchange_hierarchy_class->is_empty = is_empty;
-	exchange_hierarchy_class->add_to_storage = add_to_storage;
-	exchange_hierarchy_class->rescan = rescan;
-	exchange_hierarchy_class->scan_subtree = scan_subtree;
-	exchange_hierarchy_class->create_folder = create_folder;
-	exchange_hierarchy_class->remove_folder = remove_folder;
-	exchange_hierarchy_class->xfer_folder = xfer_folder;
+	class->is_empty = is_empty;
+	class->add_to_storage = add_to_storage;
+	class->rescan = rescan;
+	class->scan_subtree = scan_subtree;
+	class->create_folder = create_folder;
+	class->remove_folder = remove_folder;
+	class->xfer_folder = xfer_folder;
 
 	/* signals */
 	signals[NEW_FOLDER] =
@@ -105,6 +104,11 @@ class_init (GObjectClass *object_class)
 }
 
 static void
+exchange_hierarchy_init (ExchangeHierarchy *hierarchy)
+{
+}
+
+static void
 dispose (GObject *object)
 {
 	ExchangeHierarchy *hier = EXCHANGE_HIERARCHY (object);
@@ -114,7 +118,7 @@ dispose (GObject *object)
 		hier->toplevel = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (exchange_hierarchy_parent_class)->dispose (object);
 }
 
 static void
@@ -126,11 +130,9 @@ finalize (GObject *object)
 	g_free (hier->owner_email);
 	g_free (hier->source_uri);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_hierarchy_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_hierarchy, ExchangeHierarchy, class_init, NULL, PARENT_TYPE)
-
 /**
  * exchange_hierarchy_new_folder:
  * @hier: the hierarchy
diff --git a/tools/exchange-share-config-listener.c b/tools/exchange-share-config-listener.c
index 3385214..6558da2 100644
--- a/tools/exchange-share-config-listener.c
+++ b/tools/exchange-share-config-listener.c
@@ -70,15 +70,11 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-#define PARENT_TYPE E_TYPE_ACCOUNT_LIST
-
 #define CONF_KEY_SELECTED_CAL_SOURCES "/apps/evolution/calendar/display/selected_calendars"
 #define CONF_KEY_SELECTED_TASKS_SOURCES "/apps/evolution/calendar/tasks/selected_tasks"
 
 static GStaticMutex ecl_mutex = G_STATIC_MUTEX_INIT;
 
-static EAccountListClass *parent_class = NULL;
-
 static void dispose (GObject *object);
 static void finalize (GObject *object);
 
@@ -92,18 +88,22 @@ static void account_removed (EAccountList *account_listener,
 static gboolean exchange_camel_urls_is_equal (const gchar *url1,
 					      const gchar *url2);
 
+G_DEFINE_TYPE (
+	ExchangeShareConfigListener,
+	exchange_share_config_listener,
+	E_TYPE_ACCOUNT_LIST)
+
 static void
-class_init (GObjectClass *object_class)
+exchange_share_config_listener_class_init (ExchangeShareConfigListenerClass *class)
 {
-	EAccountListClass *e_account_list_class =
-		E_ACCOUNT_LIST_CLASS (object_class);
-
-	parent_class = g_type_class_ref (PARENT_TYPE);
+	GObjectClass *object_class;
+	EAccountListClass *e_account_list_class;
 
-	/* virtual method override */
+	object_class = G_OBJECT_CLASS (class);
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
 
+	e_account_list_class = E_ACCOUNT_LIST_CLASS (class);
 	e_account_list_class->account_added   = account_added;
 	e_account_list_class->account_changed = account_changed;
 	e_account_list_class->account_removed = account_removed;
@@ -130,11 +130,8 @@ class_init (GObjectClass *object_class)
 }
 
 static void
-init (GObject *object)
+exchange_share_config_listener_init (ExchangeShareConfigListener *config_listener)
 {
-	ExchangeShareConfigListener *config_listener =
-		EXCHANGE_SHARE_CONFIG_LISTENER (object);
-
 	config_listener->priv = g_new0 (ExchangeShareConfigListenerPrivate, 1);
 }
 
@@ -149,7 +146,7 @@ dispose (GObject *object)
 		config_listener->priv->gconf = NULL;
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (exchange_share_config_listener_parent_class)->dispose (object);
 }
 
 static void
@@ -162,11 +159,9 @@ finalize (GObject *object)
 	g_free (config_listener->priv->configured_uri);
 	g_free (config_listener->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (exchange_share_config_listener_parent_class)->finalize (object);
 }
 
-E2K_MAKE_TYPE (exchange_share_config_listener, ExchangeShareConfigListener, class_init, init, PARENT_TYPE)
-
 #define EVOLUTION_URI_PREFIX     "evolution:/"
 #define EVOLUTION_URI_PREFIX_LEN (sizeof (EVOLUTION_URI_PREFIX) - 1)
 



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