[almanah/wip/jtojnar/cleanups] Switch to G_DECLARE_{FINAL, DERIVABLE}_TYPE



commit 98163c336e4e62f18c6740bf28089f8f9968a4de
Author: Jan Tojnar <jtojnar gmail com>
Date:   Fri Mar 8 17:28:35 2019 +0100

    Switch to G_DECLARE_{FINAL,DERIVABLE}_TYPE
    
    https://blogs.gnome.org/desrt/2015/01/27/g_declare_finalderivable_type/

 src/application.c                       |  15 ++--
 src/application.h                       |  19 +----
 src/date-entry-dialog.c                 |  14 +--
 src/date-entry-dialog.h                 |  19 +----
 src/entry.c                             |  14 +--
 src/entry.h                             |  20 +----
 src/event-factories/calendar.c          |  17 ++--
 src/event-factories/calendar.h          |  21 +----
 src/event-factories/e-source-selector.c |   2 -
 src/event-factory.c                     |  10 +--
 src/event-factory.h                     |  21 +----
 src/event-manager.c                     |  20 +++--
 src/event-manager.h                     |  21 +----
 src/event.c                             |   1 -
 src/event.h                             |  20 +----
 src/events/calendar-appointment.c       |  16 ++--
 src/events/calendar-appointment.h       |  20 +----
 src/events/calendar-task.c              |  16 ++--
 src/events/calendar-task.h              |  20 +----
 src/export-operation.c                  |  13 +--
 src/export-operation.h                  |  21 +----
 src/import-export-dialog.c              |  29 ++++---
 src/import-export-dialog.h              |  42 +--------
 src/import-operation.c                  |  13 +--
 src/import-operation.h                  |  21 +----
 src/main-window.c                       |  13 +--
 src/main-window.h                       |  20 +----
 src/preferences-dialog.c                |  14 +--
 src/preferences-dialog.h                |  20 +----
 src/search-dialog.c                     |  13 +--
 src/search-dialog.h                     |  20 +----
 src/storage-manager.c                   |  18 ++--
 src/storage-manager.h                   |  18 +---
 src/uri-entry-dialog.c                  |  12 +--
 src/uri-entry-dialog.h                  |  21 +----
 src/widgets/calendar-button.c           | 100 +++++++++++++---------
 src/widgets/calendar-button.h           |  20 +----
 src/widgets/calendar.c                  |  13 +--
 src/widgets/calendar.h                  |  21 +----
 src/widgets/eggwrapbox.c                | 147 +++++++++++++++++++-------------
 src/widgets/eggwrapbox.h                |  22 +----
 src/widgets/entry-tags-area.c           |  13 +--
 src/widgets/entry-tags-area.h           |  18 +---
 src/widgets/hyperlink-tag.c             |  13 +--
 src/widgets/hyperlink-tag.h             |  21 +----
 src/widgets/tag-accessible.c            |  11 ++-
 src/widgets/tag-accessible.h            |  20 +----
 src/widgets/tag-entry.c                 |  13 +--
 src/widgets/tag-entry.h                 |  18 +---
 src/widgets/tag.c                       |  13 +--
 src/widgets/tag.h                       |  18 +---
 51 files changed, 382 insertions(+), 713 deletions(-)
---
diff --git a/src/application.c b/src/application.c
index 9b0adb8..15c1db5 100644
--- a/src/application.c
+++ b/src/application.c
@@ -57,7 +57,7 @@ static void action_quit_cb (GSimpleAction *action, GVariant *parameter, gpointer
 /* Some callbacks */
 void almanah_application_style_provider_parsing_error_cb (GtkCssProvider *provider, GtkCssSection *section, 
GError *error, gpointer user_data);
 
-struct _AlmanahApplicationPrivate {
+typedef struct {
        gboolean debug;
 
        GSettings *settings;
@@ -68,8 +68,15 @@ struct _AlmanahApplicationPrivate {
 
        GtkPrintSettings *print_settings;
        GtkPageSetup *page_setup;
+} AlmanahApplicationPrivate;
+
+struct _AlmanahApplication {
+       GtkApplication parent_instance;
+
+       AlmanahApplicationPrivate *priv;
 };
 
+
 enum {
        PROP_DEBUG = 1
 };
@@ -84,7 +91,7 @@ static GActionEntry app_entries[] = {
        {"quit", action_quit_cb, NULL, NULL, NULL },
 };
 
-G_DEFINE_TYPE (AlmanahApplication, almanah_application, GTK_TYPE_APPLICATION)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahApplication, almanah_application, GTK_TYPE_APPLICATION)
 
 static void
 almanah_application_class_init (AlmanahApplicationClass *klass)
@@ -93,8 +100,6 @@ almanah_application_class_init (AlmanahApplicationClass *klass)
        GApplicationClass *gapplication_class = G_APPLICATION_CLASS (klass);
        GtkApplicationClass *gtkapplication_class = GTK_APPLICATION_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahApplicationPrivate));
-
        gobject_class->constructed = constructed;
        gobject_class->dispose = dispose;
        gobject_class->get_property = get_property;
@@ -116,7 +121,7 @@ almanah_application_class_init (AlmanahApplicationClass *klass)
 static void
 almanah_application_init (AlmanahApplication *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_APPLICATION, AlmanahApplicationPrivate);
+       self->priv = almanah_application_get_instance_private (self);
        self->priv->debug = FALSE;
 }
 
diff --git a/src/application.h b/src/application.h
index cec5d09..2591de5 100644
--- a/src/application.h
+++ b/src/application.h
@@ -30,24 +30,7 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_APPLICATION               (almanah_application_get_type ())
-#define ALMANAH_APPLICATION(o)                 (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_APPLICATION, 
AlmanahApplication))
-#define ALMANAH_APPLICATION_CLASS(k)           (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_APPLICATION, 
AlmanahApplicationClass))
-#define ALMANAH_IS_APPLICATION(o)              (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_APPLICATION))
-#define ALMANAH_IS_APPLICATION_CLASS(k)                (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_APPLICATION))
-#define ALMANAH_APPLICATION_GET_CLASS(o)       (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_APPLICATION, 
AlmanahApplicationClass))
-
-typedef struct _AlmanahApplicationPrivate      AlmanahApplicationPrivate;
-
-typedef struct {
-       GtkApplication parent;
-       AlmanahApplicationPrivate *priv;
-} AlmanahApplication;
-
-typedef struct {
-       GtkApplicationClass parent;
-} AlmanahApplicationClass;
-
-GType almanah_application_get_type (void) G_GNUC_CONST;
+G_DECLARE_FINAL_TYPE (AlmanahApplication, almanah_application, ALMANAH, APPLICATION, GtkApplication)
 
 AlmanahApplication *almanah_application_new (void) G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
 
diff --git a/src/date-entry-dialog.c b/src/date-entry-dialog.c
index 72dabbc..17fd9d6 100644
--- a/src/date-entry-dialog.c
+++ b/src/date-entry-dialog.c
@@ -31,26 +31,28 @@ static void almanah_date_entry_dialog_set_property (GObject *object, guint prope
 /* GtkBuilder callbacks */
 void ded_date_entry_notify_text_cb (GObject *gobject, GParamSpec *pspec, AlmanahDateEntryDialog *self);
 
-struct _AlmanahDateEntryDialogPrivate {
+typedef struct {
        GDate date;
        GtkWidget *ok_button;
        GtkEntry *date_entry;
+} AlmanahDateEntryDialogPrivate;
+
+struct _AlmanahDateEntryDialog {
+       GtkDialog parent;
+       AlmanahDateEntryDialogPrivate *priv;
 };
 
 enum {
        PROP_DATE = 1
 };
 
-G_DEFINE_TYPE (AlmanahDateEntryDialog, almanah_date_entry_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_DATE_ENTRY_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_DATE_ENTRY_DIALOG, AlmanahDateEntryDialogPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahDateEntryDialog, almanah_date_entry_dialog, GTK_TYPE_DIALOG)
 
 static void
 almanah_date_entry_dialog_class_init (AlmanahDateEntryDialogClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahDateEntryDialogPrivate));
-
        gobject_class->set_property = almanah_date_entry_dialog_set_property;
        gobject_class->get_property = almanah_date_entry_dialog_get_property;
 
@@ -64,7 +66,7 @@ almanah_date_entry_dialog_class_init (AlmanahDateEntryDialogClass *klass)
 static void
 almanah_date_entry_dialog_init (AlmanahDateEntryDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_DATE_ENTRY_DIALOG, 
AlmanahDateEntryDialogPrivate);
+       self->priv = almanah_date_entry_dialog_get_instance_private (self);
 
        g_date_clear (&(self->priv->date), 1);
        g_signal_connect (self, "response", G_CALLBACK (gtk_widget_hide), self);
diff --git a/src/date-entry-dialog.h b/src/date-entry-dialog.h
index 918feb8..72ba99b 100644
--- a/src/date-entry-dialog.h
+++ b/src/date-entry-dialog.h
@@ -27,24 +27,7 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_DATE_ENTRY_DIALOG         (almanah_date_entry_dialog_get_type ())
-#define ALMANAH_DATE_ENTRY_DIALOG(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_DATE_ENTRY_DIALOG, AlmanahDateEntryDialog))
-#define ALMANAH_DATE_ENTRY_DIALOG_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_DATE_ENTRY_DIALOG, 
AlmanahDateEntryDialogClass))
-#define ALMANAH_IS_DATE_ENTRY_DIALOG(o)                (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_DATE_ENTRY_DIALOG))
-#define ALMANAH_IS_DATE_ENTRY_DIALOG_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_DATE_ENTRY_DIALOG))
-#define ALMANAH_DATE_ENTRY_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_DATE_ENTRY_DIALOG, AlmanahDateEntryDialogClass))
-
-typedef struct _AlmanahDateEntryDialogPrivate  AlmanahDateEntryDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahDateEntryDialogPrivate *priv;
-} AlmanahDateEntryDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahDateEntryDialogClass;
-
-GType almanah_date_entry_dialog_get_type (void);
+G_DECLARE_FINAL_TYPE (AlmanahDateEntryDialog, almanah_date_entry_dialog, ALMANAH, DATE_ENTRY_DIALOG, 
GtkDialog)
 
 AlmanahDateEntryDialog *almanah_date_entry_dialog_new (void);
 gboolean almanah_date_entry_dialog_run (AlmanahDateEntryDialog *self);
diff --git a/src/entry.c b/src/entry.c
index 8a705c9..452a218 100644
--- a/src/entry.c
+++ b/src/entry.c
@@ -49,7 +49,7 @@ static guint8 *serialise_entry_xml_2_0 (GtkTextBuffer *register_buffer, GtkTextB
 static gboolean deserialise_entry_xml_2_0 (GtkTextBuffer *register_buffer, GtkTextBuffer *content_buffer, 
GtkTextIter *iter, const guint8 *data,
                                            gsize length, gboolean create_tags, gpointer user_data, GError 
**error);
 
-struct _AlmanahEntryPrivate {
+typedef struct {
        GDate date;
        guint8 *data;
        gsize length;
@@ -57,6 +57,11 @@ struct _AlmanahEntryPrivate {
        gboolean is_empty;
        gboolean is_important;
        GDate last_edited; /* date the entry was last edited *in the database*; e.g. this isn't updated when 
almanah_entry_set_content() is called */
+} AlmanahEntryPrivate;
+
+struct _AlmanahEntry {
+       GObject parent;
+       AlmanahEntryPrivate *priv;
 };
 
 enum {
@@ -69,16 +74,13 @@ enum {
        PROP_LAST_EDITED_YEAR
 };
 
-G_DEFINE_TYPE (AlmanahEntry, almanah_entry, G_TYPE_OBJECT)
-#define ALMANAH_ENTRY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ALMANAH_TYPE_ENTRY, 
AlmanahEntryPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahEntry, almanah_entry, G_TYPE_OBJECT)
 
 static void
 almanah_entry_class_init (AlmanahEntryClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahEntryPrivate));
-
        gobject_class->set_property = almanah_entry_set_property;
        gobject_class->get_property = almanah_entry_get_property;
        gobject_class->finalize = almanah_entry_finalize;
@@ -122,7 +124,7 @@ almanah_entry_class_init (AlmanahEntryClass *klass)
 static void
 almanah_entry_init (AlmanahEntry *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_ENTRY, AlmanahEntryPrivate);
+       self->priv = almanah_entry_get_instance_private (self);
        self->priv->data = NULL;
        self->priv->length = 0;
        self->priv->version = DATA_FORMAT_UNSET;
diff --git a/src/entry.h b/src/entry.h
index 1245641..391a3a9 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -41,25 +41,9 @@ typedef enum {
 GQuark almanah_entry_error_quark (void) G_GNUC_CONST;
 #define ALMANAH_ENTRY_ERROR            (almanah_entry_error_quark ())
 
-#define ALMANAH_TYPE_ENTRY             (almanah_entry_get_type ())
-#define ALMANAH_ENTRY(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_ENTRY, AlmanahEntry))
-#define ALMANAH_ENTRY_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_ENTRY, AlmanahEntryClass))
-#define ALMANAH_IS_ENTRY(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_ENTRY))
-#define ALMANAH_IS_ENTRY_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_ENTRY))
-#define ALMANAH_ENTRY_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_ENTRY, 
AlmanahEntryClass))
+#define ALMANAH_TYPE_ENTRY      (almanah_entry_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahEntry, almanah_entry, ALMANAH, ENTRY, GObject)
 
-typedef struct _AlmanahEntryPrivate    AlmanahEntryPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahEntryPrivate *priv;
-} AlmanahEntry;
-
-typedef struct {
-       GObjectClass parent;
-} AlmanahEntryClass;
-
-GType almanah_entry_get_type (void);
 AlmanahEntry *almanah_entry_new (GDate *date);
 
 const guint8 *almanah_entry_get_data (AlmanahEntry *self, gsize *length, guint *version);
diff --git a/src/event-factories/calendar.c b/src/event-factories/calendar.c
index bbfe159..f807122 100644
--- a/src/event-factories/calendar.c
+++ b/src/event-factories/calendar.c
@@ -31,21 +31,22 @@ static void query_events (AlmanahEventFactory *event_factory, GDate *date);
 static GSList *get_events (AlmanahEventFactory *event_factory, GDate *date);
 static void events_changed_cb (CalendarClient *client, AlmanahCalendarEventFactory *self);
 
-struct _AlmanahCalendarEventFactoryPrivate {
+typedef struct {
        CalendarClient *client;
+} AlmanahCalendarEventFactoryPrivate;
+
+struct _AlmanahCalendarEventFactory {
+       AlmanahEventFactory parent;
+       AlmanahCalendarEventFactoryPrivate *priv;
 };
 
 G_DEFINE_TYPE (AlmanahCalendarEventFactory, almanah_calendar_event_factory, ALMANAH_TYPE_EVENT_FACTORY)
-#define ALMANAH_CALENDAR_EVENT_FACTORY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY, AlmanahCalendarEventFactoryPrivate))
-
 static void
 almanah_calendar_event_factory_class_init (AlmanahCalendarEventFactoryClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        AlmanahEventFactoryClass *event_factory_class = ALMANAH_EVENT_FACTORY_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahCalendarEventFactoryPrivate));
-
        gobject_class->dispose = almanah_calendar_event_factory_dispose;
 
        event_factory_class->type_id = ALMANAH_EVENT_FACTORY_CALENDAR;
@@ -56,7 +57,7 @@ almanah_calendar_event_factory_class_init (AlmanahCalendarEventFactoryClass *kla
 static void
 almanah_calendar_event_factory_init (AlmanahCalendarEventFactory *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_CALENDAR_EVENT_FACTORY, 
AlmanahCalendarEventFactoryPrivate);
+       self->priv = almanah_calendar_event_factory_get_instance_private (self);
        self->priv->client = calendar_client_new ();
 
        g_signal_connect (self->priv->client, "tasks-changed", G_CALLBACK (events_changed_cb), self);
@@ -66,7 +67,7 @@ almanah_calendar_event_factory_init (AlmanahCalendarEventFactory *self)
 static void
 almanah_calendar_event_factory_dispose (GObject *object)
 {
-       AlmanahCalendarEventFactoryPrivate *priv = ALMANAH_CALENDAR_EVENT_FACTORY_GET_PRIVATE (object);
+       AlmanahCalendarEventFactoryPrivate *priv = almanah_calendar_event_factory_get_instance_private 
(ALMANAH_CALENDAR_EVENT_FACTORY (object));
 
        if (priv->client != NULL)
                g_object_unref (priv->client);
@@ -109,7 +110,7 @@ static GSList *
 get_events (AlmanahEventFactory *event_factory, GDate *date)
 {
        GSList *calendar_events, *e, *events = NULL;
-       AlmanahCalendarEventFactoryPrivate *priv = ALMANAH_CALENDAR_EVENT_FACTORY_GET_PRIVATE (event_factory);
+       AlmanahCalendarEventFactoryPrivate *priv = almanah_calendar_event_factory_get_instance_private 
(ALMANAH_CALENDAR_EVENT_FACTORY (event_factory));
 
        calendar_events = calendar_client_get_events (priv->client, CALENDAR_EVENT_ALL);
 
diff --git a/src/event-factories/calendar.h b/src/event-factories/calendar.h
index 01beb0d..bfe7d94 100644
--- a/src/event-factories/calendar.h
+++ b/src/event-factories/calendar.h
@@ -27,25 +27,8 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_CALENDAR_EVENT_FACTORY            (almanah_calendar_event_factory_get_type ())
-#define ALMANAH_CALENDAR_EVENT_FACTORY(o)              (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY, AlmanahCalendarEventFactory))
-#define ALMANAH_CALENDAR_EVENT_FACTORY_CLASS(k)                (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY, AlmanahCalendarEventFactoryClass))
-#define ALMANAH_IS_CALENDAR_EVENT_FACTORY(o)           (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY))
-#define ALMANAH_IS_CALENDAR_EVENT_FACTORY_CLASS(k)     (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY))
-#define ALMANAH_CALENDAR_EVENT_FACTORY_GET_CLASS(o)    (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_CALENDAR_EVENT_FACTORY, AlmanahCalendarEventFactoryClass))
-
-typedef struct _AlmanahCalendarEventFactoryPrivate     AlmanahCalendarEventFactoryPrivate;
-
-typedef struct {
-       AlmanahEventFactory parent;
-       AlmanahCalendarEventFactoryPrivate *priv;
-} AlmanahCalendarEventFactory;
-
-typedef struct {
-       AlmanahEventFactoryClass parent;
-} AlmanahCalendarEventFactoryClass;
-
-GType almanah_calendar_event_factory_get_type (void);
+#define ALMANAH_TYPE_CALENDAR_EVENT_FACTORY     (almanah_calendar_event_factory_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahCalendarEventFactory, almanah_calendar_event_factory, ALMANAH, 
CALENDAR_EVENT_FACTORY, AlmanahEventFactory)
 
 G_END_DECLS
 
diff --git a/src/event-factories/e-source-selector.c b/src/event-factories/e-source-selector.c
index 0efdb19..3b051e2 100644
--- a/src/event-factories/e-source-selector.c
+++ b/src/event-factories/e-source-selector.c
@@ -1210,8 +1210,6 @@ e_source_selector_class_init (ESourceSelectorClass *class)
        GtkWidgetClass *widget_class;
        GtkTreeViewClass *tree_view_class;
 
-       g_type_class_add_private (class, sizeof (ESourceSelectorPrivate));
-
        object_class = G_OBJECT_CLASS (class);
        object_class->set_property = source_selector_set_property;
        object_class->get_property = source_selector_get_property;
diff --git a/src/event-factory.c b/src/event-factory.c
index 44a55e4..cc9f62e 100644
--- a/src/event-factory.c
+++ b/src/event-factory.c
@@ -24,9 +24,9 @@
 
 static void almanah_event_factory_get_property (GObject *object, guint property_id, GValue *value, 
GParamSpec *pspec);
 
-struct _AlmanahEventFactoryPrivate {
+typedef struct {
        GDate date;
-};
+} AlmanahEventFactoryPrivate;
 
 enum {
        PROP_TYPE_ID = 1
@@ -39,16 +39,13 @@ enum {
 
 static guint event_factory_signals[LAST_SIGNAL] = { 0, };
 
-G_DEFINE_ABSTRACT_TYPE (AlmanahEventFactory, almanah_event_factory, G_TYPE_OBJECT)
-#define ALMANAH_EVENT_FACTORY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_EVENT_FACTORY, AlmanahEventFactoryPrivate))
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (AlmanahEventFactory, almanah_event_factory, G_TYPE_OBJECT)
 
 static void
 almanah_event_factory_class_init (AlmanahEventFactoryClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahEventFactoryPrivate));
-
        gobject_class->get_property = almanah_event_factory_get_property;
 
        g_object_class_install_property (gobject_class, PROP_TYPE_ID,
@@ -68,7 +65,6 @@ almanah_event_factory_class_init (AlmanahEventFactoryClass *klass)
 static void
 almanah_event_factory_init (AlmanahEventFactory *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_EVENT_FACTORY, 
AlmanahEventFactoryPrivate);
 }
 
 static void
diff --git a/src/event-factory.h b/src/event-factory.h
index 7939d01..ba70435 100644
--- a/src/event-factory.h
+++ b/src/event-factory.h
@@ -31,30 +31,17 @@ typedef enum {
        ALMANAH_EVENT_FACTORY_CALENDAR
 } AlmanahEventFactoryType;
 
-#define ALMANAH_TYPE_EVENT_FACTORY             (almanah_event_factory_get_type ())
-#define ALMANAH_EVENT_FACTORY(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_EVENT_FACTORY, 
AlmanahEventFactory))
-#define ALMANAH_EVENT_FACTORY_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_EVENT_FACTORY, 
AlmanahEventFactoryClass))
-#define ALMANAH_IS_EVENT_FACTORY(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_EVENT_FACTORY))
-#define ALMANAH_IS_EVENT_FACTORY_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_EVENT_FACTORY))
-#define ALMANAH_EVENT_FACTORY_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_EVENT_FACTORY, 
AlmanahEventFactoryClass))
+#define ALMANAH_TYPE_EVENT_FACTORY      (almanah_event_factory_get_type ())
+G_DECLARE_DERIVABLE_TYPE (AlmanahEventFactory, almanah_event_factory, ALMANAH, EVENT_FACTORY, GObject)
 
-typedef struct _AlmanahEventFactoryPrivate     AlmanahEventFactoryPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahEventFactoryPrivate *priv;
-} AlmanahEventFactory;
-
-typedef struct {
+struct _AlmanahEventFactoryClass {
        GObjectClass parent;
 
        AlmanahEventFactoryType type_id;
 
        void (*query_events) (AlmanahEventFactory *event_factory, GDate *date);
        GSList *(*get_events) (AlmanahEventFactory *event_factory, GDate *date);
-} AlmanahEventFactoryClass;
-
-GType almanah_event_factory_get_type (void);
+};
 
 AlmanahEventFactoryType almanah_event_factory_get_type_id (AlmanahEventFactory *self);
 
diff --git a/src/event-manager.c b/src/event-manager.c
index 9f5334c..fb739b4 100644
--- a/src/event-manager.c
+++ b/src/event-manager.c
@@ -43,8 +43,13 @@ const EventFactoryType event_factory_types[] = {
 static void almanah_event_manager_dispose (GObject *object);
 static void events_updated_cb (AlmanahEventFactory *factory, AlmanahEventManager *self);
 
-struct _AlmanahEventManagerPrivate {
+typedef struct {
        AlmanahEventFactory **factories;
+} AlmanahEventManagerPrivate;
+
+struct _AlmanahEventManager {
+       GObject parent;
+       AlmanahEventManagerPrivate *priv;
 };
 
 enum {
@@ -54,16 +59,13 @@ enum {
 
 static guint event_manager_signals[LAST_SIGNAL] = { 0, };
 
-G_DEFINE_TYPE (AlmanahEventManager, almanah_event_manager, G_TYPE_OBJECT)
-#define ALMANAH_EVENT_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_EVENT_MANAGER, AlmanahEventManagerPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahEventManager, almanah_event_manager, G_TYPE_OBJECT)
 
 static void
 almanah_event_manager_class_init (AlmanahEventManagerClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahEventManagerPrivate));
-
        gobject_class->dispose = almanah_event_manager_dispose;
 
        event_manager_signals[SIGNAL_EVENTS_UPDATED] = g_signal_new ("events-updated",
@@ -79,7 +81,7 @@ almanah_event_manager_init (AlmanahEventManager *self)
 {
        guint i;
 
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_EVENT_MANAGER, 
AlmanahEventManagerPrivate);
+       self->priv = almanah_event_manager_get_instance_private (self);
 
        /* Set up the list of AlmanahEventFactories */
        self->priv->factories = g_new (AlmanahEventFactory*, G_N_ELEMENTS (event_factory_types) + 1);
@@ -94,7 +96,7 @@ static void
 almanah_event_manager_dispose (GObject *object)
 {
        guint i = 0;
-       AlmanahEventManagerPrivate *priv = ALMANAH_EVENT_MANAGER_GET_PRIVATE (object);
+       AlmanahEventManagerPrivate *priv = almanah_event_manager_get_instance_private (ALMANAH_EVENT_MANAGER 
(object));
 
        /* Free the factories */
        if (priv->factories != NULL) {
@@ -123,7 +125,7 @@ events_updated_cb (AlmanahEventFactory *factory, AlmanahEventManager *self)
 void
 almanah_event_manager_query_events (AlmanahEventManager *self, AlmanahEventFactoryType type_id, GDate *date)
 {
-       AlmanahEventManagerPrivate *priv = ALMANAH_EVENT_MANAGER_GET_PRIVATE (self);
+       AlmanahEventManagerPrivate *priv = almanah_event_manager_get_instance_private (self);
        guint i;
 
        g_debug ("almanah_event_manager_query_events called for factory %u and date %u-%u-%u.", type_id,
@@ -147,7 +149,7 @@ almanah_event_manager_query_events (AlmanahEventManager *self, AlmanahEventFacto
 GSList *
 almanah_event_manager_get_events (AlmanahEventManager *self, AlmanahEventFactoryType type_id, GDate *date)
 {
-       AlmanahEventManagerPrivate *priv = ALMANAH_EVENT_MANAGER_GET_PRIVATE (self);
+       AlmanahEventManagerPrivate *priv = almanah_event_manager_get_instance_private (self);
        GSList *list = NULL, *end = NULL;
        guint i;
 
diff --git a/src/event-manager.h b/src/event-manager.h
index 9980724..018b382 100644
--- a/src/event-manager.h
+++ b/src/event-manager.h
@@ -27,25 +27,8 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_EVENT_MANAGER             (almanah_event_manager_get_type ())
-#define ALMANAH_EVENT_MANAGER(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_EVENT_MANAGER, 
AlmanahEventManager))
-#define ALMANAH_EVENT_MANAGER_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_EVENT_MANAGER, 
AlmanahEventManagerClass))
-#define ALMANAH_IS_EVENT_MANAGER(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_EVENT_MANAGER))
-#define ALMANAH_IS_EVENT_MANAGER_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_EVENT_MANAGER))
-#define ALMANAH_EVENT_MANAGER_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_EVENT_MANAGER, 
AlmanahEventManagerClass))
-
-typedef struct _AlmanahEventManagerPrivate     AlmanahEventManagerPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahEventManagerPrivate *priv;
-} AlmanahEventManager;
-
-typedef struct {
-       GObjectClass parent;
-} AlmanahEventManagerClass;
-
-GType almanah_event_manager_get_type (void);
+#define ALMANAH_TYPE_EVENT_MANAGER      (almanah_event_manager_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahEventManager, almanah_event_manager, ALMANAH, EVENT_MANAGER, GObject)
 
 AlmanahEventManager *almanah_event_manager_new (void);
 
diff --git a/src/event.c b/src/event.c
index 42bd22b..8991089 100644
--- a/src/event.c
+++ b/src/event.c
@@ -33,7 +33,6 @@ enum {
 };
 
 G_DEFINE_ABSTRACT_TYPE (AlmanahEvent, almanah_event, G_TYPE_OBJECT)
-#define ALMANAH_EVENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ALMANAH_TYPE_EVENT, 
AlmanahEventPrivate))
 
 static void
 almanah_event_class_init (AlmanahEventClass *klass)
diff --git a/src/event.h b/src/event.h
index 2d2f539..0e89c2c 100644
--- a/src/event.h
+++ b/src/event.h
@@ -26,20 +26,10 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_EVENT             (almanah_event_get_type ())
-#define ALMANAH_EVENT(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_EVENT, AlmanahEvent))
-#define ALMANAH_EVENT_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_EVENT, AlmanahEventClass))
-#define ALMANAH_IS_EVENT(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_EVENT))
-#define ALMANAH_IS_EVENT_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_EVENT))
-#define ALMANAH_EVENT_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_EVENT, 
AlmanahEventClass))
+#define ALMANAH_TYPE_EVENT      (almanah_event_get_type ())
+G_DECLARE_DERIVABLE_TYPE (AlmanahEvent, almanah_event, ALMANAH, EVENT, GObject)
 
-typedef struct _AlmanahEventPrivate    AlmanahEventPrivate;
-
-typedef struct {
-       GObject parent;
-} AlmanahEvent;
-
-typedef struct {
+struct _AlmanahEventClass {
        GObjectClass parent;
 
        const gchar *name;
@@ -49,9 +39,7 @@ typedef struct {
        const gchar *(*format_value) (AlmanahEvent *event);
        const gchar *(*format_time) (AlmanahEvent *event);
        gboolean (*view) (AlmanahEvent *event, GtkWindow *parent_window);
-} AlmanahEventClass;
-
-GType almanah_event_get_type (void);
+};
 
 const gchar *almanah_event_format_value (AlmanahEvent *self);
 const gchar *almanah_event_format_time (AlmanahEvent *self);
diff --git a/src/events/calendar-appointment.c b/src/events/calendar-appointment.c
index 2a23dac..a63c51c 100644
--- a/src/events/calendar-appointment.c
+++ b/src/events/calendar-appointment.c
@@ -29,14 +29,18 @@ static const gchar *almanah_calendar_appointment_event_format_value (AlmanahEven
 static const gchar *almanah_calendar_appointment_event_format_time (AlmanahEvent *event);
 static gboolean almanah_calendar_appointment_event_view (AlmanahEvent *event, GtkWindow *parent_window);
 
-struct _AlmanahCalendarAppointmentEventPrivate {
+typedef struct {
        gchar *summary;
        gchar *time;
        GTime start_time;
+} AlmanahCalendarAppointmentEventPrivate;
+
+struct _AlmanahCalendarAppointmentEvent {
+       AlmanahEvent parent;
+       AlmanahCalendarAppointmentEventPrivate *priv;
 };
 
-G_DEFINE_TYPE (AlmanahCalendarAppointmentEvent, almanah_calendar_appointment_event, ALMANAH_TYPE_EVENT)
-#define ALMANAH_CALENDAR_APPOINTMENT_EVENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT, AlmanahCalendarAppointmentEventPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahCalendarAppointmentEvent, almanah_calendar_appointment_event, 
ALMANAH_TYPE_EVENT)
 
 static void
 almanah_calendar_appointment_event_class_init (AlmanahCalendarAppointmentEventClass *klass)
@@ -44,8 +48,6 @@ almanah_calendar_appointment_event_class_init (AlmanahCalendarAppointmentEventCl
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        AlmanahEventClass *event_class = ALMANAH_EVENT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahCalendarAppointmentEventPrivate));
-
        gobject_class->finalize = almanah_calendar_appointment_event_finalize;
 
        event_class->name = _("Calendar Appointment");
@@ -60,13 +62,13 @@ almanah_calendar_appointment_event_class_init (AlmanahCalendarAppointmentEventCl
 static void
 almanah_calendar_appointment_event_init (AlmanahCalendarAppointmentEvent *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT, 
AlmanahCalendarAppointmentEventPrivate);
+       self->priv = almanah_calendar_appointment_event_get_instance_private (self);
 }
 
 static void
 almanah_calendar_appointment_event_finalize (GObject *object)
 {
-       AlmanahCalendarAppointmentEventPrivate *priv = ALMANAH_CALENDAR_APPOINTMENT_EVENT_GET_PRIVATE 
(object);
+       AlmanahCalendarAppointmentEventPrivate *priv = 
almanah_calendar_appointment_event_get_instance_private (ALMANAH_CALENDAR_APPOINTMENT_EVENT (object));
 
        g_free (priv->summary);
        g_free (priv->time);
diff --git a/src/events/calendar-appointment.h b/src/events/calendar-appointment.h
index e4aa387..36b8109 100644
--- a/src/events/calendar-appointment.h
+++ b/src/events/calendar-appointment.h
@@ -27,25 +27,9 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT                (almanah_calendar_appointment_event_get_type 
())
-#define ALMANAH_CALENDAR_APPOINTMENT_EVENT(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT, AlmanahCalendarAppointmentEvent))
-#define ALMANAH_CALENDAR_APPOINTMENT_EVENT_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT, AlmanahCalendarAppointmentEventClass))
-#define ALMANAH_IS_CALENDAR_APPOINTMENT_EVENT(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT))
-#define ALMANAH_IS_CALENDAR_APPOINTMENT_EVENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT))
-#define ALMANAH_CALENDAR_APPOINTMENT_EVENT_GET_CLASS(o)        (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT, AlmanahCalendarAppointmentEventClass))
+#define ALMANAH_TYPE_CALENDAR_APPOINTMENT_EVENT     (almanah_calendar_appointment_event_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahCalendarAppointmentEvent, almanah_calendar_appointment_event, ALMANAH, 
CALENDAR_APPOINTMENT_EVENT, GObject)
 
-typedef struct _AlmanahCalendarAppointmentEventPrivate AlmanahCalendarAppointmentEventPrivate;
-
-typedef struct {
-       AlmanahEvent parent;
-       AlmanahCalendarAppointmentEventPrivate *priv;
-} AlmanahCalendarAppointmentEvent;
-
-typedef struct {
-       AlmanahEventClass parent;
-} AlmanahCalendarAppointmentEventClass;
-
-GType almanah_calendar_appointment_event_get_type (void);
 AlmanahCalendarAppointmentEvent *almanah_calendar_appointment_event_new (const gchar *summary, GTime 
start_time);
 
 G_END_DECLS
diff --git a/src/events/calendar-task.c b/src/events/calendar-task.c
index ea610ad..7b415e0 100644
--- a/src/events/calendar-task.c
+++ b/src/events/calendar-task.c
@@ -29,14 +29,18 @@ static const gchar *almanah_calendar_task_event_format_value (AlmanahEvent *even
 static const gchar *almanah_calendar_task_event_format_time (AlmanahEvent *event);
 static gboolean almanah_calendar_task_event_view (AlmanahEvent *event, GtkWindow *parent_window);
 
-struct _AlmanahCalendarTaskEventPrivate {
+typedef struct {
        gchar *uid;
        gchar *summary;
        gchar *time;
+} AlmanahCalendarTaskEventPrivate;
+
+struct _AlmanahCalendarTaskEvent {
+       AlmanahEvent parent;
+       AlmanahCalendarTaskEventPrivate *priv;
 };
 
-G_DEFINE_TYPE (AlmanahCalendarTaskEvent, almanah_calendar_task_event, ALMANAH_TYPE_EVENT)
-#define ALMANAH_CALENDAR_TASK_EVENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT, AlmanahCalendarTaskEventPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahCalendarTaskEvent, almanah_calendar_task_event, ALMANAH_TYPE_EVENT)
 
 static void
 almanah_calendar_task_event_class_init (AlmanahCalendarTaskEventClass *klass)
@@ -44,8 +48,6 @@ almanah_calendar_task_event_class_init (AlmanahCalendarTaskEventClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        AlmanahEventClass *event_class = ALMANAH_EVENT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahCalendarTaskEventPrivate));
-
        gobject_class->finalize = almanah_calendar_task_event_finalize;
 
        event_class->name = _("Calendar Task");
@@ -60,13 +62,13 @@ almanah_calendar_task_event_class_init (AlmanahCalendarTaskEventClass *klass)
 static void
 almanah_calendar_task_event_init (AlmanahCalendarTaskEvent *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_CALENDAR_TASK_EVENT, 
AlmanahCalendarTaskEventPrivate);
+       self->priv = almanah_calendar_task_event_get_instance_private (self);
 }
 
 static void
 almanah_calendar_task_event_finalize (GObject *object)
 {
-       AlmanahCalendarTaskEventPrivate *priv = ALMANAH_CALENDAR_TASK_EVENT_GET_PRIVATE (object);
+       AlmanahCalendarTaskEventPrivate *priv = almanah_calendar_task_event_get_instance_private 
(ALMANAH_CALENDAR_TASK_EVENT (object));
 
        g_free (priv->uid);
        g_free (priv->summary);
diff --git a/src/events/calendar-task.h b/src/events/calendar-task.h
index fdea4b1..d06d21b 100644
--- a/src/events/calendar-task.h
+++ b/src/events/calendar-task.h
@@ -27,25 +27,9 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_CALENDAR_TASK_EVENT               (almanah_calendar_task_event_get_type ())
-#define ALMANAH_CALENDAR_TASK_EVENT(o)                 (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT, AlmanahCalendarTaskEvent))
-#define ALMANAH_CALENDAR_TASK_EVENT_CLASS(k)           (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT, AlmanahCalendarTaskEventClass))
-#define ALMANAH_IS_CALENDAR_TASK_EVENT(o)              (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT))
-#define ALMANAH_IS_CALENDAR_TASK_EVENT_CLASS(k)                (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT))
-#define ALMANAH_CALENDAR_TASK_EVENT_GET_CLASS(o)       (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_CALENDAR_TASK_EVENT, AlmanahCalendarTaskEventClass))
+#define ALMANAH_TYPE_CALENDAR_TASK_EVENT        (almanah_calendar_task_event_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahCalendarTaskEvent, almanah_calendar_task_event, ALMANAH, CALENDAR_TASK_EVENT, 
AlmanahEvent)
 
-typedef struct _AlmanahCalendarTaskEventPrivate        AlmanahCalendarTaskEventPrivate;
-
-typedef struct {
-       AlmanahEvent parent;
-       AlmanahCalendarTaskEventPrivate *priv;
-} AlmanahCalendarTaskEvent;
-
-typedef struct {
-       AlmanahEventClass parent;
-} AlmanahCalendarTaskEventClass;
-
-GType almanah_calendar_task_event_get_type (void);
 AlmanahCalendarTaskEvent *almanah_calendar_task_event_new (const gchar *uid, const gchar *summary, GTime 
start_time);
 
 G_END_DECLS
diff --git a/src/export-operation.c b/src/export-operation.c
index f32293e..1c922fb 100644
--- a/src/export-operation.c
+++ b/src/export-operation.c
@@ -59,10 +59,15 @@ static void get_property (GObject *object, guint property_id, GValue *value, GPa
 static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
 static void almanah_export_operation_dispose (GObject *object);
 
-struct _AlmanahExportOperationPrivate {
+typedef struct {
        gint current_mode; /* index into export_modes */
        AlmanahStorageManager *storage_manager;
        GFile *destination;
+} AlmanahExportOperationPrivate;
+
+struct _AlmanahExportOperation {
+       GObject parent;
+       AlmanahExportOperationPrivate *priv;
 };
 
 enum {
@@ -70,15 +75,11 @@ enum {
 };
 
 G_DEFINE_TYPE (AlmanahExportOperation, almanah_export_operation, G_TYPE_OBJECT)
-#define ALMANAH_EXPORT_OPERATION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_EXPORT_OPERATION, AlmanahExportOperationPrivate))
-
 static void
 almanah_export_operation_class_init (AlmanahExportOperationClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahExportOperationPrivate));
-
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
        gobject_class->dispose = almanah_export_operation_dispose;
@@ -93,7 +94,7 @@ almanah_export_operation_class_init (AlmanahExportOperationClass *klass)
 static void
 almanah_export_operation_init (AlmanahExportOperation *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_EXPORT_OPERATION, 
AlmanahExportOperationPrivate);
+       self->priv = almanah_export_operation_get_instance_private (self);
        self->priv->current_mode = -1; /* no mode selected */
 }
 
diff --git a/src/export-operation.h b/src/export-operation.h
index 07cfd74..68ade38 100644
--- a/src/export-operation.h
+++ b/src/export-operation.h
@@ -31,25 +31,8 @@ typedef guint AlmanahExportOperationType;
 
 typedef void (*AlmanahExportProgressCallback) (const GDate *date, gpointer user_data);
 
-#define ALMANAH_TYPE_EXPORT_OPERATION          (almanah_export_operation_get_type ())
-#define ALMANAH_EXPORT_OPERATION(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_EXPORT_OPERATION, AlmanahExportOperation))
-#define ALMANAH_EXPORT_OPERATION_CLASS(k)      (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_EXPORT_OPERATION, 
AlmanahExportOperationClass))
-#define ALMANAH_IS_EXPORT_OPERATION(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_EXPORT_OPERATION))
-#define ALMANAH_IS_EXPORT_OPERATION_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_EXPORT_OPERATION))
-#define ALMANAH_EXPORT_OPERATION_GET_CLASS(o)  (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_EXPORT_OPERATION, AlmanahExportOperationClass))
-
-typedef struct _AlmanahExportOperationPrivate  AlmanahExportOperationPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahExportOperationPrivate *priv;
-} AlmanahExportOperation;
-
-typedef struct {
-       GObjectClass parent;
-} AlmanahExportOperationClass;
-
-GType almanah_export_operation_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_EXPORT_OPERATION       (almanah_export_operation_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahExportOperation, almanah_export_operation, ALMANAH, EXPORT_OPERATION, GObject)
 
 AlmanahExportOperation *almanah_export_operation_new (AlmanahExportOperationType type_id, 
AlmanahStorageManager *source_storage_manager,
                                                       GFile *destination) G_GNUC_WARN_UNUSED_RESULT 
G_GNUC_MALLOC;
diff --git a/src/import-export-dialog.c b/src/import-export-dialog.c
index 4fa4661..5490f68 100644
--- a/src/import-export-dialog.c
+++ b/src/import-export-dialog.c
@@ -35,7 +35,7 @@ void ied_mode_combo_box_changed_cb (GtkComboBox *combo_box, AlmanahImportExportD
 void ied_file_chooser_selection_changed_cb (GtkFileChooser *file_chooser, AlmanahImportExportDialog *self);
 void ied_file_chooser_file_activated_cb (GtkFileChooser *file_chooser, AlmanahImportExportDialog *self);
 
-struct _AlmanahImportExportDialogPrivate {
+typedef struct {
        AlmanahStorageManager *storage_manager;
        gboolean import; /* TRUE if we're in import mode, FALSE otherwise */
        GtkComboBox *mode_combo_box;
@@ -46,15 +46,18 @@ struct _AlmanahImportExportDialogPrivate {
        GtkLabel *description_label;
        GtkProgressBar *progress_bar;
        GCancellable *cancellable; /* non-NULL iff an operation is underway */
+} AlmanahImportExportDialogPrivate;
+
+struct _AlmanahImportExportDialog {
+       GtkDialog parent;
+       AlmanahImportExportDialogPrivate *priv;
 };
 
 enum {
        PROP_STORAGE_MANAGER = 1,
 };
 
-G_DEFINE_TYPE (AlmanahImportExportDialog, almanah_import_export_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_IMPORT_EXPORT_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG,\
-                                                       AlmanahImportExportDialogPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahImportExportDialog, almanah_import_export_dialog, GTK_TYPE_DIALOG)
 
 static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
 static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
@@ -65,8 +68,6 @@ almanah_import_export_dialog_class_init (AlmanahImportExportDialogClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahImportExportDialogPrivate));
-
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
        gobject_class->dispose = almanah_import_export_dialog_dispose;
@@ -82,7 +83,7 @@ almanah_import_export_dialog_class_init (AlmanahImportExportDialogClass *klass)
 static void
 almanah_import_export_dialog_init (AlmanahImportExportDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_IMPORT_EXPORT_DIALOG, 
AlmanahImportExportDialogPrivate);
+       self->priv = almanah_import_export_dialog_get_instance_private (self);
        self->priv->current_mode = -1; /* no mode selected */
 
        g_signal_connect (self, "response", G_CALLBACK (response_cb), self);
@@ -419,28 +420,30 @@ void ird_results_tree_view_row_activated_cb (GtkTreeView *tree_view, GtkTreePath
 void ird_view_button_clicked_cb (GtkButton *button, AlmanahImportResultsDialog *self);
 void ird_view_combo_box_changed_cb (GtkComboBox *combo_box, AlmanahImportResultsDialog *self);
 
-struct _AlmanahImportResultsDialogPrivate {
+typedef struct {
        GtkListStore *results_store;
        GtkTreeSelection *results_selection;
        GtkTreeModelFilter *filtered_results_store;
        GtkComboBox *view_combo_box;
        AlmanahImportStatus current_mode;
+} AlmanahImportResultsDialogPrivate;
+
+struct _AlmanahImportResultsDialog {
+       GtkDialog parent;
+       AlmanahImportResultsDialogPrivate *priv;
 };
 
-G_DEFINE_TYPE (AlmanahImportResultsDialog, almanah_import_results_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_IMPORT_RESULTS_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG,\
-                                                        AlmanahImportResultsDialogPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahImportResultsDialog, almanah_import_results_dialog, GTK_TYPE_DIALOG)
 
 static void
 almanah_import_results_dialog_class_init (AlmanahImportResultsDialogClass *klass)
 {
-       g_type_class_add_private (klass, sizeof (AlmanahImportResultsDialogPrivate));
 }
 
 static void
 almanah_import_results_dialog_init (AlmanahImportResultsDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_IMPORT_RESULTS_DIALOG, 
AlmanahImportResultsDialogPrivate);
+       self->priv = almanah_import_results_dialog_get_instance_private (self);
 
        g_signal_connect (self, "response", G_CALLBACK (response_cb), self);
        g_signal_connect (self, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), self);
diff --git a/src/import-export-dialog.h b/src/import-export-dialog.h
index 8601cc3..5e5adda 100644
--- a/src/import-export-dialog.h
+++ b/src/import-export-dialog.h
@@ -29,47 +29,13 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_IMPORT_EXPORT_DIALOG              (almanah_import_export_dialog_get_type ())
-#define ALMANAH_IMPORT_EXPORT_DIALOG(o)                        (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG, AlmanahImportExportDialog))
-#define ALMANAH_IMPORT_EXPORT_DIALOG_CLASS(k)          (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG, AlmanahImportExportDialogClass))
-#define ALMANAH_IS_IMPORT_EXPORT_DIALOG(o)             (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG))
-#define ALMANAH_IS_IMPORT_EXPORT_DIALOG_CLASS(k)       (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG))
-#define ALMANAH_IMPORT_EXPORT_DIALOG_GET_CLASS(o)      (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_IMPORT_EXPORT_DIALOG, AlmanahImportExportDialogClass))
-
-typedef struct _AlmanahImportExportDialogPrivate       AlmanahImportExportDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahImportExportDialogPrivate *priv;
-} AlmanahImportExportDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahImportExportDialogClass;
-
-GType almanah_import_export_dialog_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_IMPORT_EXPORT_DIALOG       (almanah_import_export_dialog_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahImportExportDialog, almanah_import_export_dialog, ALMANAH, 
IMPORT_EXPORT_DIALOG, GtkDialog)
 
 AlmanahImportExportDialog *almanah_import_export_dialog_new (AlmanahStorageManager *storage_manager, 
gboolean import) G_GNUC_WARN_UNUSED_RESULT;
 
-#define ALMANAH_TYPE_IMPORT_RESULTS_DIALOG             (almanah_import_results_dialog_get_type ())
-#define ALMANAH_IMPORT_RESULTS_DIALOG(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG, AlmanahImportResultsDialog))
-#define ALMANAH_IMPORT_RESULTS_DIALOG_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG, AlmanahImportResultsDialogClass))
-#define ALMANAH_IS_IMPORT_RESULTS_DIALOG(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG))
-#define ALMANAH_IS_IMPORT_RESULTS_DIALOG_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG))
-#define ALMANAH_IMPORT_RESULTS_DIALOG_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_IMPORT_RESULTS_DIALOG, AlmanahImportResultsDialogClass))
-
-typedef struct _AlmanahImportResultsDialogPrivate      AlmanahImportResultsDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahImportResultsDialogPrivate *priv;
-} AlmanahImportResultsDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahImportResultsDialogClass;
-
-GType almanah_import_results_dialog_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_IMPORT_RESULTS_DIALOG      (almanah_import_results_dialog_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahImportResultsDialog, almanah_import_results_dialog, ALMANAH, 
IMPORT_RESULTS_DIALOG, GtkDialog)
 
 AlmanahImportResultsDialog *almanah_import_results_dialog_new (void) G_GNUC_WARN_UNUSED_RESULT;
 void almanah_import_results_dialog_add_result (AlmanahImportResultsDialog *self, const GDate *date, 
AlmanahImportStatus status, const gchar *message);
diff --git a/src/import-operation.c b/src/import-operation.c
index 70770be..8ca6f65 100644
--- a/src/import-operation.c
+++ b/src/import-operation.c
@@ -57,10 +57,15 @@ static void get_property (GObject *object, guint property_id, GValue *value, GPa
 static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
 static void almanah_import_operation_dispose (GObject *object);
 
-struct _AlmanahImportOperationPrivate {
+typedef struct {
        gint current_mode; /* index into import_modes */
        GFile *source;
        AlmanahStorageManager *storage_manager;
+} AlmanahImportOperationPrivate;
+
+struct _AlmanahImportOperation {
+       GObject parent;
+       AlmanahImportOperationPrivate *priv;
 };
 
 enum {
@@ -68,15 +73,11 @@ enum {
 };
 
 G_DEFINE_TYPE (AlmanahImportOperation, almanah_import_operation, G_TYPE_OBJECT)
-#define ALMANAH_IMPORT_OPERATION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_IMPORT_OPERATION, AlmanahImportOperationPrivate))
-
 static void
 almanah_import_operation_class_init (AlmanahImportOperationClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahImportOperationPrivate));
-
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
        gobject_class->dispose = almanah_import_operation_dispose;
@@ -91,7 +92,7 @@ almanah_import_operation_class_init (AlmanahImportOperationClass *klass)
 static void
 almanah_import_operation_init (AlmanahImportOperation *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_IMPORT_OPERATION, 
AlmanahImportOperationPrivate);
+       self->priv = almanah_import_operation_get_instance_private (self);
        self->priv->current_mode = -1; /* no mode selected */
 }
 
diff --git a/src/import-operation.h b/src/import-operation.h
index 6b49207..026969b 100644
--- a/src/import-operation.h
+++ b/src/import-operation.h
@@ -39,25 +39,8 @@ typedef guint AlmanahImportOperationType;
 
 typedef void (*AlmanahImportProgressCallback) (const GDate *date, AlmanahImportStatus status, const gchar 
*message, gpointer user_data);
 
-#define ALMANAH_TYPE_IMPORT_OPERATION          (almanah_import_operation_get_type ())
-#define ALMANAH_IMPORT_OPERATION(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_IMPORT_OPERATION, AlmanahImportOperation))
-#define ALMANAH_IMPORT_OPERATION_CLASS(k)      (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_IMPORT_OPERATION, 
AlmanahImportOperationClass))
-#define ALMANAH_IS_IMPORT_OPERATION(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_IMPORT_OPERATION))
-#define ALMANAH_IS_IMPORT_OPERATION_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_IMPORT_OPERATION))
-#define ALMANAH_IMPORT_OPERATION_GET_CLASS(o)  (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_IMPORT_OPERATION, AlmanahImportOperationClass))
-
-typedef struct _AlmanahImportOperationPrivate  AlmanahImportOperationPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahImportOperationPrivate *priv;
-} AlmanahImportOperation;
-
-typedef struct {
-       GObjectClass parent;
-} AlmanahImportOperationClass;
-
-GType almanah_import_operation_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_IMPORT_OPERATION       (almanah_import_operation_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahImportOperation, almanah_import_operation, ALMANAH, IMPORT_OPERATION, GObject)
 
 AlmanahImportOperation *almanah_import_operation_new (AlmanahImportOperationType type_id, GFile *source,
                                                       AlmanahStorageManager *dest_storage_manager) 
G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
diff --git a/src/main-window.c b/src/main-window.c
index 62b0f2a..0b3262d 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -97,7 +97,7 @@ void mw_calendar_day_selected_cb (AlmanahCalendarButton *calendar, AlmanahMainWi
 void mw_calendar_select_date_clicked_cb (AlmanahCalendarButton *calendar, AlmanahMainWindow *main_window);
 void mw_desktop_interface_settings_changed (GSettings *settings, const gchar *key, gpointer user_data);
 
-struct _AlmanahMainWindowPrivate {
+typedef struct {
        GtkWidget *header_bar;
        GtkSourceView *entry_view;
        GtkSourceBuffer *entry_buffer;
@@ -125,10 +125,14 @@ struct _AlmanahMainWindowPrivate {
        GSettings *settings;
        gulong spell_checking_enabled_changed_id; /* signal handler for 
application->settings::changed::spell-checking-enabled */
 #endif /* ENABLE_SPELL_CHECKING */
+} AlmanahMainWindowPrivate;
+
+struct _AlmanahMainWindow {
+       GtkApplicationWindow parent;
+       AlmanahMainWindowPrivate *priv;
 };
 
-G_DEFINE_TYPE (AlmanahMainWindow, almanah_main_window, GTK_TYPE_APPLICATION_WINDOW)
-#define ALMANAH_MAIN_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ALMANAH_TYPE_MAIN_WINDOW, 
AlmanahMainWindowPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahMainWindow, almanah_main_window, GTK_TYPE_APPLICATION_WINDOW)
 
 static GActionEntry win_entries[] = {
        { "cut", mw_cut_activate_cb },
@@ -151,14 +155,13 @@ static void
 almanah_main_window_class_init (AlmanahMainWindowClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-       g_type_class_add_private (klass, sizeof (AlmanahMainWindowPrivate));
        gobject_class->dispose = almanah_main_window_dispose;
 }
 
 static void
 almanah_main_window_init (AlmanahMainWindow *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_MAIN_WINDOW, AlmanahMainWindowPrivate);
+       self->priv = almanah_main_window_get_instance_private (self);
 
        gtk_window_set_title (GTK_WINDOW (self), _("Almanah Diary"));
        g_signal_connect (self, "delete-event", G_CALLBACK (mw_delete_event_cb), NULL);
diff --git a/src/main-window.h b/src/main-window.h
index 0cfa43a..782e833 100644
--- a/src/main-window.h
+++ b/src/main-window.h
@@ -28,25 +28,9 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_MAIN_WINDOW               (almanah_main_window_get_type ())
-#define ALMANAH_MAIN_WINDOW(o)                 (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_MAIN_WINDOW, 
AlmanahMainWindow))
-#define ALMANAH_MAIN_WINDOW_CLASS(k)           (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_MAIN_WINDOW, 
AlmanahMainWindowClass))
-#define ALMANAH_IS_MAIN_WINDOW(o)              (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_MAIN_WINDOW))
-#define ALMANAH_IS_MAIN_WINDOW_CLASS(k)                (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_MAIN_WINDOW))
-#define ALMANAH_MAIN_WINDOW_GET_CLASS(o)       (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_MAIN_WINDOW, 
AlmanahMainWindowClass))
+#define ALMANAH_TYPE_MAIN_WINDOW        (almanah_main_window_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahMainWindow, almanah_main_window, ALMANAH, MAIN_WINDOW, GtkApplicationWindow)
 
-typedef struct _AlmanahMainWindowPrivate       AlmanahMainWindowPrivate;
-
-typedef struct {
-       GtkApplicationWindow parent;
-       AlmanahMainWindowPrivate *priv;
-} AlmanahMainWindow;
-
-typedef struct {
-       GtkApplicationWindowClass parent;
-} AlmanahMainWindowClass;
-
-GType almanah_main_window_get_type (void);
 AlmanahMainWindow *almanah_main_window_new (AlmanahApplication *application) G_GNUC_WARN_UNUSED_RESULT 
G_GNUC_MALLOC;
 
 void almanah_main_window_select_date (AlmanahMainWindow *self, GDate *date);
diff --git a/src/preferences-dialog.c b/src/preferences-dialog.c
index 6199eeb..c50bdb7 100644
--- a/src/preferences-dialog.c
+++ b/src/preferences-dialog.c
@@ -38,7 +38,7 @@ static void almanah_preferences_dialog_dispose (GObject *object);
 static void pd_key_combo_changed_cb (GtkComboBox *combo_box, AlmanahPreferencesDialog *preferences_dialog);
 static void pd_new_key_button_clicked_cb (GtkButton *button, AlmanahPreferencesDialog *preferences_dialog);
 
-struct _AlmanahPreferencesDialogPrivate {
+typedef struct {
        GSettings *settings;
        CryptUIKeyset *keyset;
        CryptUIKeyStore *key_store;
@@ -47,22 +47,24 @@ struct _AlmanahPreferencesDialogPrivate {
        guint spell_checking_enabled_id;
        GtkCheckButton *spell_checking_enabled_check_button;
 #endif /* ENABLE_SPELL_CHECKING */
+} AlmanahPreferencesDialogPrivate;
+
+struct _AlmanahPreferencesDialog {
+       GtkDialog parent;
+       AlmanahPreferencesDialogPrivate *priv;
 };
 
 enum {
        PROP_SETTINGS = 1,
 };
 
-G_DEFINE_TYPE (AlmanahPreferencesDialog, almanah_preferences_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_PREFERENCES_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_PREFERENCES_DIALOG, AlmanahPreferencesDialogPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahPreferencesDialog, almanah_preferences_dialog, GTK_TYPE_DIALOG)
 
 static void
 almanah_preferences_dialog_class_init (AlmanahPreferencesDialogClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahPreferencesDialogPrivate));
-
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
        gobject_class->dispose = almanah_preferences_dialog_dispose;
@@ -77,7 +79,7 @@ almanah_preferences_dialog_class_init (AlmanahPreferencesDialogClass *klass)
 static void
 almanah_preferences_dialog_init (AlmanahPreferencesDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_PREFERENCES_DIALOG, 
AlmanahPreferencesDialogPrivate);
+       self->priv = almanah_preferences_dialog_get_instance_private (self);
 
        gtk_window_set_modal (GTK_WINDOW (self), FALSE);
        gtk_window_set_title (GTK_WINDOW (self), _("Preferences"));
diff --git a/src/preferences-dialog.h b/src/preferences-dialog.h
index 865cf54..6713baa 100644
--- a/src/preferences-dialog.h
+++ b/src/preferences-dialog.h
@@ -25,25 +25,9 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_PREFERENCES_DIALOG                (almanah_preferences_dialog_get_type ())
-#define ALMANAH_PREFERENCES_DIALOG(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_PREFERENCES_DIALOG, AlmanahPreferencesDialog))
-#define ALMANAH_PREFERENCES_DIALOG_CLASS(k)            (G_TYPE_CHECK_CLASS_CAST((k), 
ALMANAH_TYPE_PREFERENCES_DIALOG, AlmanahPreferencesDialogClass))
-#define ALMANAH_IS_PREFERENCES_DIALOG(o)               (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_PREFERENCES_DIALOG))
-#define ALMANAH_IS_PREFERENCES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), 
ALMANAH_TYPE_PREFERENCES_DIALOG))
-#define ALMANAH_PREFERENCES_DIALOG_GET_CLASS(o)        (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_PREFERENCES_DIALOG, AlmanahPreferencesDialogClass))
+#define ALMANAH_TYPE_PREFERENCES_DIALOG     (almanah_preferences_dialog_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahPreferencesDialog, almanah_preferences_dialog, ALMANAH, PREFERENCES_DIALOG, 
GtkDialog)
 
-typedef struct _AlmanahPreferencesDialogPrivate        AlmanahPreferencesDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahPreferencesDialogPrivate *priv;
-} AlmanahPreferencesDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahPreferencesDialogClass;
-
-GType almanah_preferences_dialog_get_type (void);
 AlmanahPreferencesDialog *almanah_preferences_dialog_new (GSettings *settings) G_GNUC_WARN_UNUSED_RESULT 
G_GNUC_MALLOC;
 
 G_END_DECLS
diff --git a/src/search-dialog.c b/src/search-dialog.c
index dbe79c2..899a917 100644
--- a/src/search-dialog.c
+++ b/src/search-dialog.c
@@ -38,7 +38,7 @@ void sd_view_button_clicked_cb (GtkButton *self, AlmanahSearchDialog *search_dia
 static void sd_search_progress_cb (AlmanahStorageManager *storage_manager, AlmanahEntry *entry, 
AlmanahSearchDialog **search_dialog_weak_pointer);
 static void sd_search_ready_cb (AlmanahStorageManager *storage_manager, GAsyncResult *res, 
AlmanahSearchDialog **search_dialog_weak_pointer);
 
-struct _AlmanahSearchDialogPrivate {
+typedef struct {
        GtkEntry *sd_search_entry;
        GtkWidget *sd_search_button;
        GtkWidget *sd_cancel_button;
@@ -48,21 +48,24 @@ struct _AlmanahSearchDialogPrivate {
        GtkListStore *sd_results_store;
        GtkTreeSelection *sd_results_selection;
        GCancellable *sd_cancellable;
+} AlmanahSearchDialogPrivate;
+
+struct _AlmanahSearchDialog {
+       GtkDialog parent;
+       AlmanahSearchDialogPrivate *priv;
 };
 
-G_DEFINE_TYPE (AlmanahSearchDialog, almanah_search_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_SEARCH_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_SEARCH_DIALOG, AlmanahSearchDialogPrivate))
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahSearchDialog, almanah_search_dialog, GTK_TYPE_DIALOG)
 
 static void
 almanah_search_dialog_class_init (AlmanahSearchDialogClass *klass)
 {
-       g_type_class_add_private (klass, sizeof (AlmanahSearchDialogPrivate));
 }
 
 static void
 almanah_search_dialog_init (AlmanahSearchDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_SEARCH_DIALOG, 
AlmanahSearchDialogPrivate);
+       self->priv = almanah_search_dialog_get_instance_private (self);
 
        g_signal_connect (self, "response", G_CALLBACK (sd_response_cb), self);
        gtk_window_set_modal (GTK_WINDOW (self), FALSE);
diff --git a/src/search-dialog.h b/src/search-dialog.h
index 255ce61..1848270 100644
--- a/src/search-dialog.h
+++ b/src/search-dialog.h
@@ -25,25 +25,9 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_SEARCH_DIALOG             (almanah_search_dialog_get_type ())
-#define ALMANAH_SEARCH_DIALOG(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_SEARCH_DIALOG, 
AlmanahSearchDialog))
-#define ALMANAH_SEARCH_DIALOG_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_SEARCH_DIALOG, 
AlmanahSearchDialogClass))
-#define ALMANAH_IS_SEARCH_DIALOG(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_SEARCH_DIALOG))
-#define ALMANAH_IS_SEARCH_DIALOG_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_SEARCH_DIALOG))
-#define ALMANAH_SEARCH_DIALOG_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_SEARCH_DIALOG, 
AlmanahSearchDialogClass))
+#define ALMANAH_TYPE_SEARCH_DIALOG      (almanah_search_dialog_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahSearchDialog, almanah_search_dialog, ALMANAH, SEARCH_DIALOG, GtkDialog)
 
-typedef struct _AlmanahSearchDialogPrivate     AlmanahSearchDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahSearchDialogPrivate *priv;
-} AlmanahSearchDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahSearchDialogClass;
-
-GType almanah_search_dialog_get_type (void);
 AlmanahSearchDialog *almanah_search_dialog_new (void);
 
 G_END_DECLS
diff --git a/src/storage-manager.c b/src/storage-manager.c
index 887a0f9..8f1ee9e 100644
--- a/src/storage-manager.c
+++ b/src/storage-manager.c
@@ -38,10 +38,15 @@ static void almanah_storage_manager_get_property (GObject *object, guint propert
 static void almanah_storage_manager_set_property (GObject *object, guint property_id, const GValue *value, 
GParamSpec *pspec);
 static gboolean simple_query (AlmanahStorageManager *self, const gchar *query, GError **error, ...);
 
-struct _AlmanahStorageManagerPrivate {
+typedef struct {
        gchar *filename;
        sqlite3 *connection;
        GSettings *settings;
+} AlmanahStorageManagerPrivate;
+
+struct _AlmanahStorageManager {
+       GObject parent;
+       AlmanahStorageManagerPrivate *priv;
 };
 
 enum {
@@ -62,7 +67,6 @@ enum {
 static guint storage_manager_signals[LAST_SIGNAL] = { 0, };
 
 G_DEFINE_TYPE (AlmanahStorageManager, almanah_storage_manager, G_TYPE_OBJECT)
-#define ALMANAH_STORAGE_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_STORAGE_MANAGER, AlmanahStorageManagerPrivate))
 
 GQuark
 almanah_storage_manager_error_quark (void)
@@ -75,8 +79,6 @@ almanah_storage_manager_class_init (AlmanahStorageManagerClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahStorageManagerPrivate));
-
        gobject_class->set_property = almanah_storage_manager_set_property;
        gobject_class->get_property = almanah_storage_manager_get_property;
        gobject_class->finalize = almanah_storage_manager_finalize;
@@ -134,7 +136,7 @@ almanah_storage_manager_class_init (AlmanahStorageManagerClass *klass)
 static void
 almanah_storage_manager_init (AlmanahStorageManager *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_STORAGE_MANAGER, 
AlmanahStorageManagerPrivate);
+       self->priv = almanah_storage_manager_get_instance_private (self);
        self->priv->filename = NULL;
 }
 
@@ -165,7 +167,7 @@ almanah_storage_manager_new (const gchar *filename, GSettings *settings)
 static void
 almanah_storage_manager_finalize (GObject *object)
 {
-       AlmanahStorageManagerPrivate *priv = ALMANAH_STORAGE_MANAGER (object)->priv;
+       AlmanahStorageManagerPrivate *priv = almanah_storage_manager_get_instance_private 
(ALMANAH_STORAGE_MANAGER (object));
 
        g_free (priv->filename);
 
@@ -176,7 +178,7 @@ almanah_storage_manager_finalize (GObject *object)
 static void
 almanah_storage_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
 {
-       AlmanahStorageManagerPrivate *priv = ALMANAH_STORAGE_MANAGER (object)->priv;
+       AlmanahStorageManagerPrivate *priv = almanah_storage_manager_get_instance_private 
(ALMANAH_STORAGE_MANAGER (object));
 
        switch (property_id) {
                case PROP_FILENAME:
@@ -195,7 +197,7 @@ almanah_storage_manager_get_property (GObject *object, guint property_id, GValue
 static void
 almanah_storage_manager_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec 
*pspec)
 {
-       AlmanahStorageManagerPrivate *priv = ALMANAH_STORAGE_MANAGER (object)->priv;
+       AlmanahStorageManagerPrivate *priv = almanah_storage_manager_get_instance_private 
(ALMANAH_STORAGE_MANAGER (object));
 
        switch (property_id) {
                case PROP_FILENAME:
diff --git a/src/storage-manager.h b/src/storage-manager.h
index 9a2551a..33afdd5 100644
--- a/src/storage-manager.h
+++ b/src/storage-manager.h
@@ -30,22 +30,7 @@ G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_STORAGE_MANAGER           (almanah_storage_manager_get_type ())
 #define ALMANAH_STORAGE_MANAGER_ERROR          (almanah_storage_manager_error_quark ())
-#define ALMANAH_STORAGE_MANAGER(o)             (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_STORAGE_MANAGER, AlmanahStorageManager))
-#define ALMANAH_STORAGE_MANAGER_CLASS(k)       (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_STORAGE_MANAGER, 
AlmanahStorageManagerClass))
-#define ALMANAH_IS_STORAGE_MANAGER(o)          (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_STORAGE_MANAGER))
-#define ALMANAH_IS_STORAGE_MANAGER_CLASS(k)    (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_STORAGE_MANAGER))
-#define ALMANAH_STORAGE_MANAGER_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_STORAGE_MANAGER, AlmanahStorageManagerClass))
-
-typedef struct _AlmanahStorageManagerPrivate   AlmanahStorageManagerPrivate;
-
-typedef struct {
-       GObject parent;
-       AlmanahStorageManagerPrivate *priv;
-} AlmanahStorageManager;
-
-typedef struct {
-       GObjectClass parent;
-} AlmanahStorageManagerClass;
+G_DECLARE_FINAL_TYPE (AlmanahStorageManager, almanah_storage_manager, ALMANAH, STORAGE_MANAGER, GObject)
 
 typedef enum {
        ALMANAH_STORAGE_MANAGER_ERROR_UNSUPPORTED,
@@ -67,7 +52,6 @@ typedef struct {
 
 typedef void (*AlmanahStorageManagerSearchCallback) (AlmanahStorageManager *storage_manager, AlmanahEntry 
*entry, gpointer user_data);
 
-GType almanah_storage_manager_get_type (void);
 GQuark almanah_storage_manager_error_quark (void);
 AlmanahStorageManager *almanah_storage_manager_new (const gchar *filename, GSettings *settings) 
G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
 
diff --git a/src/uri-entry-dialog.c b/src/uri-entry-dialog.c
index a8d6f78..f9f4c87 100644
--- a/src/uri-entry-dialog.c
+++ b/src/uri-entry-dialog.c
@@ -31,10 +31,15 @@ static void almanah_uri_entry_dialog_set_property (GObject *object, guint proper
 /* GtkBuilder callbacks */
 G_MODULE_EXPORT void ued_uri_entry_notify_text_cb (GObject *gobject, GParamSpec *pspec, 
AlmanahUriEntryDialog *self);
 
-struct _AlmanahUriEntryDialogPrivate {
+typedef struct {
        gchar *uri;
        GtkWidget *ok_button;
        GtkEntry *uri_entry;
+} AlmanahUriEntryDialogPrivate;
+
+struct _AlmanahUriEntryDialog {
+       GtkDialog parent;
+       AlmanahUriEntryDialogPrivate *priv;
 };
 
 enum {
@@ -42,15 +47,12 @@ enum {
 };
 
 G_DEFINE_TYPE (AlmanahUriEntryDialog, almanah_uri_entry_dialog, GTK_TYPE_DIALOG)
-#define ALMANAH_URI_ENTRY_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), 
ALMANAH_TYPE_URI_ENTRY_DIALOG, AlmanahUriEntryDialogPrivate))
 
 static void
 almanah_uri_entry_dialog_class_init (AlmanahUriEntryDialogClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahUriEntryDialogPrivate));
-
        gobject_class->set_property = almanah_uri_entry_dialog_set_property;
        gobject_class->get_property = almanah_uri_entry_dialog_get_property;
 
@@ -64,7 +66,7 @@ almanah_uri_entry_dialog_class_init (AlmanahUriEntryDialogClass *klass)
 static void
 almanah_uri_entry_dialog_init (AlmanahUriEntryDialog *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_URI_ENTRY_DIALOG, 
AlmanahUriEntryDialogPrivate);
+       self->priv = almanah_uri_entry_dialog_get_instance_private (self);
 
        g_signal_connect (self, "response", (GCallback) gtk_widget_hide, self);
        gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
diff --git a/src/uri-entry-dialog.h b/src/uri-entry-dialog.h
index c59165b..0cd1216 100644
--- a/src/uri-entry-dialog.h
+++ b/src/uri-entry-dialog.h
@@ -26,25 +26,8 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_URI_ENTRY_DIALOG          (almanah_uri_entry_dialog_get_type ())
-#define ALMANAH_URI_ENTRY_DIALOG(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_URI_ENTRY_DIALOG, AlmanahUriEntryDialog))
-#define ALMANAH_URI_ENTRY_DIALOG_CLASS(k)      (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_URI_ENTRY_DIALOG, 
AlmanahUriEntryDialogClass))
-#define ALMANAH_IS_URI_ENTRY_DIALOG(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_URI_ENTRY_DIALOG))
-#define ALMANAH_IS_URI_ENTRY_DIALOG_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_URI_ENTRY_DIALOG))
-#define ALMANAH_URI_ENTRY_DIALOG_GET_CLASS(o)  (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_URI_ENTRY_DIALOG, AlmanahUriEntryDialogClass))
-
-typedef struct _AlmanahUriEntryDialogPrivate   AlmanahUriEntryDialogPrivate;
-
-typedef struct {
-       GtkDialog parent;
-       AlmanahUriEntryDialogPrivate *priv;
-} AlmanahUriEntryDialog;
-
-typedef struct {
-       GtkDialogClass parent;
-} AlmanahUriEntryDialogClass;
-
-GType almanah_uri_entry_dialog_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_URI_ENTRY_DIALOG       (almanah_uri_entry_dialog_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahUriEntryDialog, almanah_uri_entry_dialog, ALMANAH, URI_ENTRY_DIALOG, GtkDialog)
 
 AlmanahUriEntryDialog *almanah_uri_entry_dialog_new (void) G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
 gboolean almanah_uri_entry_dialog_run (AlmanahUriEntryDialog *self);
diff --git a/src/widgets/calendar-button.c b/src/widgets/calendar-button.c
index f45d488..803e117 100644
--- a/src/widgets/calendar-button.c
+++ b/src/widgets/calendar-button.c
@@ -45,14 +45,14 @@ enum {
 
 static guint calendar_button_signals[LAST_SIGNAL] = { 0 };
 
-struct _AlmanahCalendarButtonPrivate {
+typedef struct {
        GtkWidget *dock;
        guchar user_event;
        AlmanahCalendar *calendar;
        GtkWidget *today_button;
        GtkWidget *select_date_button;
        AlmanahStorageManager *storage_manager;
-};
+} AlmanahCalendarButtonPrivate;
 
 static void almanah_calendar_button_get_property (GObject *object, guint property_id, GValue *value, 
GParamSpec *pspec);
 static void almanah_calendar_button_set_property (GObject *object, guint property_id, const GValue *value, 
GParamSpec *pspec);
@@ -70,7 +70,7 @@ static gboolean almanah_calendar_button_select_date_press_cb   (GtkWidget *widge
 
 static void dock_position_func (AlmanahCalendarButton *self, gint *x, gint *y);
 
-G_DEFINE_TYPE (AlmanahCalendarButton, almanah_calendar_button, GTK_TYPE_TOGGLE_BUTTON)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahCalendarButton, almanah_calendar_button, GTK_TYPE_TOGGLE_BUTTON)
 
 static void
 almanah_calendar_button_class_init (AlmanahCalendarButtonClass *klass)
@@ -78,8 +78,6 @@ almanah_calendar_button_class_init (AlmanahCalendarButtonClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        GtkToggleButtonClass *toggle_button_class = GTK_TOGGLE_BUTTON_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahCalendarButtonPrivate));
-
        gobject_class->get_property = almanah_calendar_button_get_property;
        gobject_class->set_property = almanah_calendar_button_set_property;
        gobject_class->finalize = almanah_calendar_button_finalize;
@@ -131,8 +129,8 @@ almanah_calendar_button_init (AlmanahCalendarButton *self)
                NULL
        };
 
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_CALENDAR_BUTTON, 
AlmanahCalendarButtonPrivate);
-       self->priv->user_event = FIRST_EVENT;
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+       priv->user_event = FIRST_EVENT;
 
        gtk_button_set_focus_on_click (GTK_BUTTON (self), TRUE);
 
@@ -147,33 +145,33 @@ almanah_calendar_button_init (AlmanahCalendarButton *self)
        }
 
        gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
-       self->priv->dock = GTK_WIDGET (gtk_builder_get_object (builder, "almanah_calendar_window"));
-       if (self->priv->dock == NULL) {
+       priv->dock = GTK_WIDGET (gtk_builder_get_object (builder, "almanah_calendar_window"));
+       if (priv->dock == NULL) {
                g_warning (_("Can't load calendar window object from UI file"));
                g_object_unref (builder);
 
                return;
        }
-       gtk_popover_set_relative_to (GTK_POPOVER (self->priv->dock), GTK_WIDGET (self));
+       gtk_popover_set_relative_to (GTK_POPOVER (priv->dock), GTK_WIDGET (self));
 
-       g_signal_connect (self->priv->dock, "hide", G_CALLBACK (almanah_calendar_button_dock_closed), self);
+       g_signal_connect (priv->dock, "hide", G_CALLBACK (almanah_calendar_button_dock_closed), self);
 
        /* The calendar widget */
-       self->priv->calendar = ALMANAH_CALENDAR (gtk_builder_get_object (builder, "almanah_cw_calendar"));
-       g_object_ref (self->priv->calendar);
-       g_signal_connect (self->priv->calendar, "day-selected", G_CALLBACK 
(almanah_calendar_button_day_selected_cb), self);
-       g_signal_connect (self->priv->calendar, "month_changed", G_CALLBACK 
(almanah_calendar_button_month_changed_cb), self);
+       priv->calendar = ALMANAH_CALENDAR (gtk_builder_get_object (builder, "almanah_cw_calendar"));
+       g_object_ref (priv->calendar);
+       g_signal_connect (priv->calendar, "day-selected", G_CALLBACK 
(almanah_calendar_button_day_selected_cb), self);
+       g_signal_connect (priv->calendar, "month_changed", G_CALLBACK 
(almanah_calendar_button_month_changed_cb), self);
 
        /* Today button */
-       self->priv->today_button = GTK_WIDGET (gtk_builder_get_object (builder, "almanah_cw_today_button"));
-       g_signal_connect (self->priv->today_button, "clicked", G_CALLBACK 
(almanah_calendar_button_today_clicked_cb), self);
-       g_signal_connect (self->priv->today_button, "button-press-event", G_CALLBACK 
(almanah_calendar_button_today_press_cb), self);
+       priv->today_button = GTK_WIDGET (gtk_builder_get_object (builder, "almanah_cw_today_button"));
+       g_signal_connect (priv->today_button, "clicked", G_CALLBACK 
(almanah_calendar_button_today_clicked_cb), self);
+       g_signal_connect (priv->today_button, "button-press-event", G_CALLBACK 
(almanah_calendar_button_today_press_cb), self);
 
        /* Select a day button */
        /* @TODO: No the button press event, instead the 'activate' action funcion (if not, the select day 
window dosn't showed... */
-       self->priv->select_date_button = GTK_WIDGET (gtk_builder_get_object (builder, 
"almanah_cw_select_date_button"));
-       g_signal_connect (self->priv->select_date_button, "clicked", G_CALLBACK 
(almanah_calendar_button_select_date_clicked_cb), self);
-       g_signal_connect (self->priv->select_date_button, "button-press-event", G_CALLBACK 
(almanah_calendar_button_select_date_press_cb), self);
+       priv->select_date_button = GTK_WIDGET (gtk_builder_get_object (builder, 
"almanah_cw_select_date_button"));
+       g_signal_connect (priv->select_date_button, "clicked", G_CALLBACK 
(almanah_calendar_button_select_date_clicked_cb), self);
+       g_signal_connect (priv->select_date_button, "button-press-event", G_CALLBACK 
(almanah_calendar_button_select_date_press_cb), self);
 
        g_object_unref (builder);
 }
@@ -181,7 +179,7 @@ almanah_calendar_button_init (AlmanahCalendarButton *self)
 static void
 almanah_calendar_button_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
 {
-       AlmanahCalendarButtonPrivate *priv = ALMANAH_CALENDAR_BUTTON (object)->priv;
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private 
(ALMANAH_CALENDAR_BUTTON (object));
 
        switch (property_id) {
                case PROP_STORAGE_MANAGER:
@@ -211,7 +209,7 @@ almanah_calendar_button_set_property (GObject *object, guint property_id, const
 static void
 almanah_calendar_button_finalize (GObject *object)
 {
-       AlmanahCalendarButtonPrivate *priv = ALMANAH_CALENDAR_BUTTON (object)->priv;
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private 
(ALMANAH_CALENDAR_BUTTON (object));
 
        g_clear_object (&priv->calendar);
        g_clear_object (&priv->storage_manager);
@@ -223,8 +221,10 @@ almanah_calendar_button_finalize (GObject *object)
 static void
 almanah_calendar_button_dock_closed (GtkWidget *dock, AlmanahCalendarButton *self)
 {
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private 
(ALMANAH_CALENDAR_BUTTON (self));
+
        /* Reset the calendar user event and toggle off the button */
-       ALMANAH_CALENDAR_BUTTON (self)->priv->user_event = NONE_EVENT;
+       priv->user_event = NONE_EVENT;
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self), FALSE);
 }
 
@@ -232,24 +232,28 @@ static void
 almanah_calendar_button_toggled (GtkToggleButton *togglebutton)
 {
        AlmanahCalendarButton *self;
+       AlmanahCalendarButtonPrivate *priv;
 
        self = ALMANAH_CALENDAR_BUTTON (togglebutton);
+       priv = almanah_calendar_button_get_instance_private (self);
        if (gtk_toggle_button_get_active (togglebutton)) {
                /* Show the dock */
-               gtk_widget_show_all (GTK_WIDGET (self->priv->dock));
+               gtk_widget_show_all (GTK_WIDGET (priv->dock));
        }
 }
 
 static void
 almanah_calendar_button_day_selected_cb (GtkCalendar *calendar, AlmanahCalendarButton *self)
 {
-       if (self->priv->user_event < DAY_EVENT) {
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       if (priv->user_event < DAY_EVENT) {
                /* Only hide the dock window when the user has clicked in a calendar day */
-               self->priv->user_event = DAY_EVENT;
-               gtk_widget_hide (GTK_WIDGET (self->priv->dock));
+               priv->user_event = DAY_EVENT;
+               gtk_widget_hide (GTK_WIDGET (priv->dock));
        }
 
-       self->priv->user_event = NONE_EVENT;
+       priv->user_event = NONE_EVENT;
 
        /* Emmits the signal at the end */
        g_signal_emit (self, calendar_button_signals[DAY_SELECTED_SIGNAL], 0);
@@ -258,18 +262,22 @@ almanah_calendar_button_day_selected_cb (GtkCalendar *calendar, AlmanahCalendarB
 static void
 almanah_calendar_button_month_changed_cb (GtkCalendar *calendar, AlmanahCalendarButton *self)
 {
-       if (self->priv->user_event != TODAY_EVENT) {
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       if (priv->user_event != TODAY_EVENT) {
                /* Save the month changed event just if the user hasn't click the today button
                 * beacuse the dock window should not hide in this case */
-               self->priv->user_event = MONTH_EVENT;
+               priv->user_event = MONTH_EVENT;
        }
 }
 
 static gboolean
 almanah_calendar_button_today_press_cb (GtkWidget *widget, GdkEvent *event, AlmanahCalendarButton *self)
 {
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
        /* Save this event to not hide the dock window */
-       self->priv->user_event = TODAY_EVENT;
+       priv->user_event = TODAY_EVENT;
 
        return FALSE;
 }
@@ -285,7 +293,9 @@ almanah_calendar_button_today_clicked_cb (__attribute__ ((unused)) GtkButton *bu
 static gboolean
 almanah_calendar_button_select_date_press_cb (GtkWidget *widget, GdkEvent *event, AlmanahCalendarButton 
*self)
 {
-       self->priv->user_event = NONE_EVENT;
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       priv->user_event = NONE_EVENT;
 
        return FALSE;
 }
@@ -311,12 +321,14 @@ almanah_calendar_button_set_storage_manager (AlmanahCalendarButton *self, Almana
        g_return_if_fail (ALMANAH_IS_CALENDAR_BUTTON (self));
        g_return_if_fail (ALMANAH_IS_STORAGE_MANAGER (storage_manager));
 
-       g_clear_object (&self->priv->storage_manager);
-       self->priv->storage_manager = storage_manager;
-       g_object_ref (self->priv->storage_manager);
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       g_clear_object (&priv->storage_manager);
+       priv->storage_manager = storage_manager;
+       g_object_ref (priv->storage_manager);
 
-       if (self->priv->calendar != NULL && ALMANAH_IS_CALENDAR (self->priv->calendar)) {
-               almanah_calendar_set_storage_manager (self->priv->calendar, self->priv->storage_manager);
+       if (priv->calendar != NULL && ALMANAH_IS_CALENDAR (priv->calendar)) {
+               almanah_calendar_set_storage_manager (priv->calendar, priv->storage_manager);
        }
 }
 
@@ -326,7 +338,9 @@ almanah_calendar_button_select_date (AlmanahCalendarButton *self, GDate *date)
        g_return_if_fail (ALMANAH_IS_CALENDAR_BUTTON (self));
        g_return_if_fail (date != NULL);
 
-       almanah_calendar_select_date (self->priv->calendar, date);
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       almanah_calendar_select_date (priv->calendar, date);
 }
 
 void
@@ -335,7 +349,9 @@ almanah_calendar_button_get_date (AlmanahCalendarButton *self, GDate *date)
        g_return_if_fail (ALMANAH_IS_CALENDAR_BUTTON (self));
        g_return_if_fail (date != NULL);
 
-       almanah_calendar_get_date (self->priv->calendar, date);
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       almanah_calendar_get_date (priv->calendar, date);
 }
 
 void
@@ -343,7 +359,9 @@ almanah_calendar_button_popdown (AlmanahCalendarButton *self)
 {
        g_return_if_fail (ALMANAH_IS_CALENDAR_BUTTON (self));
 
-       gtk_widget_hide (GTK_WIDGET (self->priv->dock));
+       AlmanahCalendarButtonPrivate *priv = almanah_calendar_button_get_instance_private (self);
+
+       gtk_widget_hide (GTK_WIDGET (priv->dock));
 }
 
 void
diff --git a/src/widgets/calendar-button.h b/src/widgets/calendar-button.h
index b92cf9c..3ff2956 100644
--- a/src/widgets/calendar-button.h
+++ b/src/widgets/calendar-button.h
@@ -29,27 +29,15 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_CALENDAR_BUTTON           (almanah_calendar_button_get_type ())
-#define ALMANAH_CALENDAR_BUTTON(o)             (G_TYPE_CHECK_INSTANCE_CAST ((o), 
ALMANAH_TYPE_CALENDAR_BUTTON, AlmanahCalendarButton))
-#define ALMANAH_CALENDAR_BUTTON_CLASS(k)       (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_CALENDAR_BUTTON, 
AlmanahCalendarButtonClass))
-#define ALMANAH_IS_CALENDAR_BUTTON(o)          (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
ALMANAH_TYPE_CALENDAR_BUTTON))
-#define ALMANAH_IS_CALENDAR_BUTTON_CLASS(k)    (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_CALENDAR_BUTTON))
-#define ALMANAH_CALENDAR_BUTTON_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), 
ALMANAH_TYPE_CALENDAR_BUTTON, AlmanahCalendarButtonClass))
+#define ALMANAH_TYPE_CALENDAR_BUTTON        (almanah_calendar_button_get_type ())
+G_DECLARE_DERIVABLE_TYPE (AlmanahCalendarButton, almanah_calendar_button, ALMANAH, CALENDAR_BUTTON, 
GtkToggleButton)
 
-typedef struct _AlmanahCalendarButtonPrivate   AlmanahCalendarButtonPrivate;
-
-typedef struct {
-       GtkToggleButton parent;
-       AlmanahCalendarButtonPrivate *priv;
-} AlmanahCalendarButton;
-
-typedef struct {
+struct _AlmanahCalendarButtonClass {
        GtkToggleButtonClass parent;
        void (* day_selected) (AlmanahCalendarButton *self);
        void (* select_date_clicked) (AlmanahCalendarButton *self);
-} AlmanahCalendarButtonClass;
+};
 
-GType almanah_calendar_button_get_type (void) G_GNUC_CONST;
 GtkWidget *almanah_calendar_button_new (AlmanahStorageManager *storage_manager) G_GNUC_MALLOC 
G_GNUC_WARN_UNUSED_RESULT;
 void almanah_calendar_button_set_storage_manager (AlmanahCalendarButton *self, AlmanahStorageManager 
*storage_manager);
 void almanah_calendar_button_select_date (AlmanahCalendarButton *self, GDate *date);
diff --git a/src/widgets/calendar.c b/src/widgets/calendar.c
index 1696f36..07dc57a 100644
--- a/src/widgets/calendar.c
+++ b/src/widgets/calendar.c
@@ -32,19 +32,24 @@ static gchar *almanah_calendar_detail_func (GtkCalendar *calendar, guint year, g
 static void entry_added_cb (AlmanahStorageManager *storage_manager, AlmanahEntry *entry, AlmanahCalendar 
*calendar);
 static void entry_removed_cb (AlmanahStorageManager *storage_manager, GDate *date, AlmanahCalendar 
*calendar);
 
-struct _AlmanahCalendarPrivate {
+typedef struct {
        AlmanahStorageManager *storage_manager;
        gulong entry_added_signal;
        gulong entry_removed_signal;
 
        gboolean *important_days;
+} AlmanahCalendarPrivate;
+
+struct _AlmanahCalendar {
+       GtkCalendar parent;
+       AlmanahCalendarPrivate *priv;
 };
 
 enum {
        PROP_STORAGE_MANAGER = 1,
 };
 
-G_DEFINE_TYPE (AlmanahCalendar, almanah_calendar, GTK_TYPE_CALENDAR)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahCalendar, almanah_calendar, GTK_TYPE_CALENDAR)
 
 static void
 almanah_calendar_class_init (AlmanahCalendarClass *klass)
@@ -52,8 +57,6 @@ almanah_calendar_class_init (AlmanahCalendarClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        GtkCalendarClass *calendar_class = GTK_CALENDAR_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahCalendarPrivate));
-
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
        gobject_class->dispose = dispose;
@@ -71,7 +74,7 @@ almanah_calendar_class_init (AlmanahCalendarClass *klass)
 static void
 almanah_calendar_init (AlmanahCalendar *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_CALENDAR, AlmanahCalendarPrivate);
+       self->priv = almanah_calendar_get_instance_private (self);
        gtk_calendar_set_detail_func (GTK_CALENDAR (self), almanah_calendar_detail_func, NULL, NULL);
 }
 
diff --git a/src/widgets/calendar.h b/src/widgets/calendar.h
index a281b84..6c98984 100644
--- a/src/widgets/calendar.h
+++ b/src/widgets/calendar.h
@@ -28,25 +28,8 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_CALENDAR          (almanah_calendar_get_type ())
-#define ALMANAH_CALENDAR(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_CALENDAR, 
AlmanahCalendar))
-#define ALMANAH_CALENDAR_CLASS(k)      (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_CALENDAR, 
AlmanahCalendarClass))
-#define ALMANAH_IS_CALENDAR(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_CALENDAR))
-#define ALMANAH_IS_CALENDAR_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_CALENDAR))
-#define ALMANAH_CALENDAR_GET_CLASS(o)  (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_CALENDAR, 
AlmanahCalendarClass))
-
-typedef struct _AlmanahCalendarPrivate AlmanahCalendarPrivate;
-
-typedef struct {
-       GtkCalendar parent;
-       AlmanahCalendarPrivate *priv;
-} AlmanahCalendar;
-
-typedef struct {
-       GtkCalendarClass parent;
-} AlmanahCalendarClass;
-
-GType almanah_calendar_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_CALENDAR       (almanah_calendar_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahCalendar, almanah_calendar, ALMANAH, CALENDAR, GtkCalendar)
 
 GtkWidget *almanah_calendar_new (AlmanahStorageManager *storage_manager) G_GNUC_MALLOC 
G_GNUC_WARN_UNUSED_RESULT;
 
diff --git a/src/widgets/eggwrapbox.c b/src/widgets/eggwrapbox.c
index 11d6964..9f64d4e 100644
--- a/src/widgets/eggwrapbox.c
+++ b/src/widgets/eggwrapbox.c
@@ -67,8 +67,7 @@ enum
   CHILD_PROP_PACKING
 };
 
-struct _EggWrapBoxPrivate
-{
+typedef struct {
   GtkOrientation        orientation;
   EggWrapAllocationMode mode;
   EggWrapBoxSpreading   horizontal_spreading;
@@ -81,7 +80,7 @@ struct _EggWrapBoxPrivate
   guint16               natural_line_children;
 
   GList                *children;
-};
+} EggWrapBoxPrivate;
 
 struct _EggWrapBoxChild
 {
@@ -145,18 +144,25 @@ static void egg_wrap_box_get_preferred_width_for_height (GtkWidget           *bo
 
 
 G_DEFINE_TYPE_WITH_CODE (EggWrapBox, egg_wrap_box, GTK_TYPE_CONTAINER,
-                         G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL))
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL) \
+                         G_ADD_PRIVATE (EggWrapBox))
+
 
+guint16 egg_wrap_box_get_orientation_spreading (EggWrapBox *box) {
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private(box);
 
-#define ORIENTATION_SPREADING(box)                                     \
-  (((EggWrapBox *)(box))->priv->orientation == GTK_ORIENTATION_HORIZONTAL ? \
-   ((EggWrapBox *)(box))->priv->horizontal_spreading :                 \
-   ((EggWrapBox *)(box))->priv->vertical_spreading)
+  return priv->orientation == GTK_ORIENTATION_HORIZONTAL ?
+   priv->horizontal_spreading :
+   priv->vertical_spreading;
+}
+
+guint16 egg_wrap_box_get_opposing_orientation_spreading (EggWrapBox *box) {
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private(box);
 
-#define OPPOSING_ORIENTATION_SPREADING(box)                            \
-  (((EggWrapBox *)(box))->priv->orientation == GTK_ORIENTATION_HORIZONTAL ? \
-   ((EggWrapBox *)(box))->priv->vertical_spreading :                   \
-   ((EggWrapBox *)(box))->priv->horizontal_spreading)
+  return priv->orientation == GTK_ORIENTATION_HORIZONTAL ?
+   priv->vertical_spreading :
+   priv->horizontal_spreading;
+}
 
 
 
@@ -318,17 +324,12 @@ egg_wrap_box_class_init (EggWrapBoxClass *class)
                                                P_("The packing options to use for this child"),
                                                EGG_TYPE_WRAP_BOX_PACKING, 0,
                                                GTK_PARAM_READWRITE));
-
-  g_type_class_add_private (class, sizeof (EggWrapBoxPrivate));
 }
 
 static void
 egg_wrap_box_init (EggWrapBox *box)
 {
-  EggWrapBoxPrivate *priv;
-
-  box->priv = priv =
-    G_TYPE_INSTANCE_GET_PRIVATE (box, EGG_TYPE_WRAP_BOX, EggWrapBoxPrivate);
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
 
   priv->orientation          = GTK_ORIENTATION_HORIZONTAL;
   priv->mode                 = EGG_WRAP_ALLOCATE_FREE;
@@ -351,7 +352,7 @@ egg_wrap_box_get_property (GObject      *object,
                            GParamSpec   *pspec)
 {
   EggWrapBox        *box  = EGG_WRAP_BOX (object);
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
 
   switch (prop_id)
     {
@@ -392,7 +393,7 @@ egg_wrap_box_set_property (GObject      *object,
                            GParamSpec   *pspec)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (object);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
 
   switch (prop_id)
     {
@@ -436,7 +437,7 @@ egg_wrap_box_set_property (GObject      *object,
 static gint
 get_visible_children (EggWrapBox  *box)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
   gint               i = 0;
 
@@ -488,7 +489,7 @@ get_average_item_size (EggWrapBox      *box,
                        gint            *min_size,
                        gint            *nat_size)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
   gint               max_min_size = 0;
   gint               max_nat_size = 0;
@@ -527,7 +528,7 @@ get_largest_size_for_opposing_orientation (EggWrapBox         *box,
                                            gint               *min_item_size,
                                            gint               *nat_item_size)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
   gint               max_min_size = 0;
   gint               max_nat_size = 0;
@@ -590,7 +591,7 @@ get_largest_size_for_line_in_opposing_orientation (EggWrapBox       *box,
       /* Distribute the extra pixels to the first children in the line
        * (could be fancier and spread them out more evenly) */
       this_item_size = item_sizes[i].minimum_size;
-      if (extra_pixels > 0 && ORIENTATION_SPREADING (box) == EGG_WRAP_BOX_SPREAD_EXPAND)
+      if (extra_pixels > 0 && egg_wrap_box_get_orientation_spreading (box) == EGG_WRAP_BOX_SPREAD_EXPAND)
         {
           this_item_size++;
           extra_pixels--;
@@ -636,7 +637,7 @@ get_largest_size_for_free_line_in_opposing_orientation (EggWrapBox      *box,
                                                         gint            *extra_pixels,
                                                         GArray         **ret_array)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GtkRequestedSize  *sizes;
   GList             *list;
   GArray            *array;
@@ -719,7 +720,7 @@ get_largest_size_for_free_line_in_opposing_orientation (EggWrapBox      *box,
     *extra_pixels = size;
 
   /* Cut out any expand space if we're not distributing any */
-  if (ORIENTATION_SPREADING (box) != EGG_WRAP_BOX_SPREAD_EXPAND)
+  if (egg_wrap_box_get_orientation_spreading (box) != EGG_WRAP_BOX_SPREAD_EXPAND)
     size = 0;
 
   /* Count how many children are going to expand... */
@@ -800,7 +801,7 @@ allocate_child (EggWrapBox      *box,
                 gint             item_size,
                 gint             line_size)
 {
-  EggWrapBoxPrivate  *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GtkAllocation       widget_allocation;
   GtkAllocation       child_allocation;
 
@@ -833,7 +834,7 @@ gather_aligned_item_requests (EggWrapBox       *box,
                               gint              n_children,
                               GtkRequestedSize *item_sizes)
 {
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
   gint               i;
   gint               extra_items, natural_line_size = 0;
@@ -859,7 +860,7 @@ gather_aligned_item_requests (EggWrapBox       *box,
       /* Get the index and push it over for the last line when spreading to the end */
       position = i % line_length;
 
-      if (ORIENTATION_SPREADING (box) == EGG_WRAP_BOX_SPREAD_END && i >= n_children - extra_items)
+      if (egg_wrap_box_get_orientation_spreading (box) == EGG_WRAP_BOX_SPREAD_END && i >= n_children - 
extra_items)
         position += line_length - extra_items;
 
       /* Round up the size of every column/row */
@@ -929,7 +930,7 @@ egg_wrap_box_size_allocate (GtkWidget     *widget,
                             GtkAllocation *allocation)
 {
   EggWrapBox         *box  = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate  *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   gint                avail_size, avail_other_size, min_items, item_spacing, line_spacing;
   EggWrapBoxSpreading item_spreading;
   EggWrapBoxSpreading line_spreading;
@@ -953,8 +954,8 @@ egg_wrap_box_size_allocate (GtkWidget     *widget,
       line_spacing     = priv->horizontal_spacing;
     }
 
-  item_spreading = ORIENTATION_SPREADING (box);
-  line_spreading    = OPPOSING_ORIENTATION_SPREADING (box);
+  item_spreading = egg_wrap_box_get_orientation_spreading (box);
+  line_spreading    = egg_wrap_box_get_opposing_orientation_spreading (box);
 
 
   /*********************************************************
@@ -1428,7 +1429,7 @@ egg_wrap_box_remove (GtkContainer *container,
                      GtkWidget    *widget)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (container);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
 
   list = g_list_find_custom (priv->children, widget,
@@ -1456,7 +1457,7 @@ egg_wrap_box_forall (GtkContainer *container,
                      gpointer      callback_data)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (container);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   EggWrapBoxChild   *child;
   GList             *list;
 
@@ -1485,7 +1486,7 @@ egg_wrap_box_set_child_property (GtkContainer    *container,
                                  GParamSpec      *pspec)
 {
   EggWrapBox        *box  = EGG_WRAP_BOX (container);
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   EggWrapBoxChild   *child;
   GList             *list;
 
@@ -1518,7 +1519,7 @@ egg_wrap_box_get_child_property (GtkContainer    *container,
                                  GParamSpec      *pspec)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (container);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   EggWrapBoxChild   *child;
   GList             *list;
 
@@ -1548,7 +1549,7 @@ static GtkSizeRequestMode
 egg_wrap_box_get_request_mode (GtkWidget      *widget)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
 
   return (priv->orientation == GTK_ORIENTATION_HORIZONTAL) ?
     GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH : GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT;
@@ -1563,7 +1564,7 @@ get_largest_line_length (EggWrapBox      *box,
                          gint            *min_size,
                          gint            *nat_size)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list, *l;
   gint               max_min_size = 0;
   gint               max_nat_size = 0;
@@ -1626,7 +1627,7 @@ get_largest_aligned_line_length (EggWrapBox      *box,
                                 gint            *min_size,
                                 gint            *nat_size)
 {
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   GList             *list;
   gint               max_min_size = 0;
   gint               max_nat_size = 0;
@@ -1692,7 +1693,7 @@ egg_wrap_box_get_preferred_width (GtkWidget           *widget,
                                   gint                *natural_size)
 {
   EggWrapBox        *box  = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   gint               min_item_width, nat_item_width;
   gint               min_items, nat_items;
   gint               min_width, nat_width;
@@ -1783,7 +1784,7 @@ egg_wrap_box_get_preferred_height (GtkWidget           *widget,
                                    gint                *natural_size)
 {
   EggWrapBox        *box  = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate *priv = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   gint               min_item_height, nat_item_height;
   gint               min_items, nat_items;
   gint               min_height, nat_height;
@@ -1875,7 +1876,7 @@ egg_wrap_box_get_preferred_height_for_width (GtkWidget           *widget,
                                              gint                *natural_height)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   gint               min_item_width, nat_item_width;
   gint               min_items;
   gint               min_height, nat_height;
@@ -2051,7 +2052,7 @@ egg_wrap_box_get_preferred_width_for_height (GtkWidget           *widget,
                                              gint                *natural_width)
 {
   EggWrapBox        *box = EGG_WRAP_BOX (widget);
-  EggWrapBoxPrivate *priv   = box->priv;
+  EggWrapBoxPrivate *priv = egg_wrap_box_get_instance_private (box);
   gint               min_item_height, nat_item_height;
   gint               min_items;
   gint               min_width, nat_width;
@@ -2266,7 +2267,7 @@ egg_wrap_box_set_allocation_mode (EggWrapBox           *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->mode != mode)
     {
@@ -2289,9 +2290,13 @@ egg_wrap_box_set_allocation_mode (EggWrapBox           *box,
 EggWrapAllocationMode
 egg_wrap_box_get_allocation_mode (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->mode;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->mode;
 }
 
 
@@ -2310,7 +2315,7 @@ egg_wrap_box_set_horizontal_spreading (EggWrapBox          *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->horizontal_spreading != spreading)
     {
@@ -2333,9 +2338,13 @@ egg_wrap_box_set_horizontal_spreading (EggWrapBox          *box,
 EggWrapBoxSpreading
 egg_wrap_box_get_horizontal_spreading (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->horizontal_spreading;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->horizontal_spreading;
 }
 
 
@@ -2354,7 +2363,7 @@ egg_wrap_box_set_vertical_spreading (EggWrapBox          *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->vertical_spreading != spreading)
     {
@@ -2377,9 +2386,13 @@ egg_wrap_box_set_vertical_spreading (EggWrapBox          *box,
 EggWrapBoxSpreading
 egg_wrap_box_get_vertical_spreading (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->vertical_spreading;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->vertical_spreading;
 }
 
 
@@ -2398,7 +2411,7 @@ egg_wrap_box_set_vertical_spacing  (EggWrapBox    *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->vertical_spacing != spacing)
     {
@@ -2421,9 +2434,13 @@ egg_wrap_box_set_vertical_spacing  (EggWrapBox    *box,
 guint
 egg_wrap_box_get_vertical_spacing  (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->vertical_spacing;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->vertical_spacing;
 }
 
 /**
@@ -2441,7 +2458,7 @@ egg_wrap_box_set_horizontal_spacing (EggWrapBox    *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->horizontal_spacing != spacing)
     {
@@ -2464,9 +2481,13 @@ egg_wrap_box_set_horizontal_spacing (EggWrapBox    *box,
 guint
 egg_wrap_box_get_horizontal_spacing (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->horizontal_spacing;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->horizontal_spacing;
 }
 
 /**
@@ -2485,7 +2506,7 @@ egg_wrap_box_set_minimum_line_children (EggWrapBox *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->minimum_line_children != n_children)
     {
@@ -2508,9 +2529,13 @@ egg_wrap_box_set_minimum_line_children (EggWrapBox *box,
 guint
 egg_wrap_box_get_minimum_line_children (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->minimum_line_children;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->minimum_line_children;
 }
 
 /**
@@ -2533,7 +2558,7 @@ egg_wrap_box_set_natural_line_children (EggWrapBox *box,
 
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   if (priv->natural_line_children != n_children)
     {
@@ -2556,9 +2581,13 @@ egg_wrap_box_set_natural_line_children (EggWrapBox *box,
 guint
 egg_wrap_box_get_natural_line_children (EggWrapBox *box)
 {
+  EggWrapBoxPrivate *priv;
+
   g_return_val_if_fail (EGG_IS_WRAP_BOX (box), FALSE);
 
-  return box->priv->natural_line_children;
+  priv = egg_wrap_box_get_instance_private (box);
+
+  return priv->natural_line_children;
 }
 
 
@@ -2585,7 +2614,7 @@ egg_wrap_box_insert_child (EggWrapBox        *box,
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   list = g_list_find_custom (priv->children, widget,
                              (GCompareFunc)find_child_in_list);
@@ -2620,7 +2649,7 @@ egg_wrap_box_reorder_child (EggWrapBox *box,
   g_return_if_fail (EGG_IS_WRAP_BOX (box));
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  priv = box->priv;
+  priv = egg_wrap_box_get_instance_private (box);
 
   list = g_list_find_custom (priv->children, widget,
                              (GCompareFunc)find_child_in_list);
diff --git a/src/widgets/eggwrapbox.h b/src/widgets/eggwrapbox.h
index 74b7cda..aa61998 100644
--- a/src/widgets/eggwrapbox.h
+++ b/src/widgets/eggwrapbox.h
@@ -27,16 +27,7 @@ G_BEGIN_DECLS
 
 
 #define EGG_TYPE_WRAP_BOX                  (egg_wrap_box_get_type ())
-#define EGG_WRAP_BOX(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_WRAP_BOX, 
EggWrapBox))
-#define EGG_WRAP_BOX_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_WRAP_BOX, 
EggWrapBoxClass))
-#define EGG_IS_WRAP_BOX(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_WRAP_BOX))
-#define EGG_IS_WRAP_BOX_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_WRAP_BOX))
-#define EGG_WRAP_BOX_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_WRAP_BOX, 
EggWrapBoxClass))
-
-typedef struct _EggWrapBox            EggWrapBox;
-typedef struct _EggWrapBoxPrivate     EggWrapBoxPrivate;
-typedef struct _EggWrapBoxClass       EggWrapBoxClass;
-
+G_DECLARE_DERIVABLE_TYPE (EggWrapBox, egg_wrap_box, EGG, WRAP_BOX, GtkContainer)
 
 /**
  * EggWrapAllocationMode:
@@ -91,22 +82,11 @@ typedef enum
   EGG_WRAP_BOX_V_EXPAND = 1 << 1
 } EggWrapBoxPacking;
 
-
-struct _EggWrapBox
-{
-  GtkContainer container;
-
-  /*< private >*/
-  EggWrapBoxPrivate *priv;
-};
-
 struct _EggWrapBoxClass
 {
   GtkContainerClass parent_class;
 };
 
-GType                 egg_wrap_box_get_type                  (void) G_GNUC_CONST;
-
 GtkWidget            *egg_wrap_box_new                       (EggWrapAllocationMode mode,
                                                               EggWrapBoxSpreading   horizontal_spreading,
                                                              EggWrapBoxSpreading   vertical_spreading,
diff --git a/src/widgets/entry-tags-area.c b/src/widgets/entry-tags-area.c
index 64179e5..0cef498 100644
--- a/src/widgets/entry-tags-area.c
+++ b/src/widgets/entry-tags-area.c
@@ -31,12 +31,17 @@ enum {
        PROP_BACK_WIDGET
 };
 
-struct _AlmanahEntryTagsAreaPrivate {
+typedef struct {
        AlmanahEntry *entry;
        AlmanahStorageManager *storage_manager;
        GtkWidget *back_widget;
        guint tags_number;
        AlmanahTagEntry *tag_entry;
+} AlmanahEntryTagsAreaPrivate;
+
+struct _AlmanahEntryTagsArea {
+       EggWrapBox parent;
+       AlmanahEntryTagsAreaPrivate *priv;
 };
 
 static void almanah_entry_tags_area_get_property (GObject *object, guint property_id, GValue *value, 
GParamSpec *pspec);
@@ -52,7 +57,7 @@ void        tag_entry_activate_cb              (GtkEntry *entry, AlmanahEntryTag
 void        entry_tags_area_remove_foreach_cb  (GtkWidget *tag_widget, AlmanahEntryTagsArea *self);
 static void tag_remove                         (AlmanahTag *tag_widget, AlmanahEntryTagsArea *self);
 
-G_DEFINE_TYPE (AlmanahEntryTagsArea, almanah_entry_tags_area, EGG_TYPE_WRAP_BOX)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahEntryTagsArea, almanah_entry_tags_area, EGG_TYPE_WRAP_BOX)
 
 static void
 almanah_entry_tags_area_class_init (AlmanahEntryTagsAreaClass *klass)
@@ -60,8 +65,6 @@ almanah_entry_tags_area_class_init (AlmanahEntryTagsAreaClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahEntryTagsAreaPrivate));
-
        gobject_class->get_property = almanah_entry_tags_area_get_property;
        gobject_class->set_property = almanah_entry_tags_area_set_property;
        gobject_class->finalize = almanah_entry_tags_area_finalize;
@@ -90,7 +93,7 @@ almanah_entry_tags_area_class_init (AlmanahEntryTagsAreaClass *klass)
 static void
 almanah_entry_tags_area_init (AlmanahEntryTagsArea *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_ENTRY_TAGS_AREA, 
AlmanahEntryTagsAreaPrivate);
+       self->priv = almanah_entry_tags_area_get_instance_private (self);
 
        /* There is no tags showed right now. */
        self->priv->tags_number = 0;
diff --git a/src/widgets/entry-tags-area.h b/src/widgets/entry-tags-area.h
index df8fd0c..af1a617 100644
--- a/src/widgets/entry-tags-area.h
+++ b/src/widgets/entry-tags-area.h
@@ -28,24 +28,8 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_ENTRY_TAGS_AREA         (almanah_entry_tags_area_get_type ())
-#define ALMANAH_ENTRY_TAGS_AREA(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_ENTRY_TAGS_AREA, 
AlmanahEntryTagsArea))
-#define ALMANAH_ENTRY_TAGS_AREA_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_ENTRY_TAGS_AREA, 
AlmanahEntryTagsAreaClass))
-#define ALMANAH_IS_ENTRY_TAGS_AREA(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_ENTRY_TAGS_AREA))
-#define ALMANAH_IS_ENTRY_TAGS_AREA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_ENTRY_TAGS_AREA))
-#define ALMANAH_ENTRY_TAGS_AREA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_ENTRY_TAGS_AREA, 
AlmanahEntryTagsAreaClass))
+G_DECLARE_FINAL_TYPE (AlmanahEntryTagsArea, almanah_entry_tags_area, ALMANAH, ENTRY_TAGS_AREA, EggWrapBox)
 
-typedef struct _AlmanahEntryTagsAreaPrivate AlmanahEntryTagsAreaPrivate;
-
-typedef struct {
-       EggWrapBox parent;
-       AlmanahEntryTagsAreaPrivate *priv;
-} AlmanahEntryTagsArea;
-
-typedef struct {
-       EggWrapBoxClass parent;
-} AlmanahEntryTagsAreaClass;
-
-GType almanah_entry_tags_area_get_type  (void) G_GNUC_CONST;
 void  almanah_entry_tags_area_set_entry (AlmanahEntryTagsArea *entry_tags_area, AlmanahEntry *entry);
 void  almanah_entry_tags_area_set_storage_manager (AlmanahEntryTagsArea *entry_tags_area, 
AlmanahStorageManager *storage_manager);
 void  almanah_entry_tags_area_set_back_widget (AlmanahEntryTagsArea *entry_tags_area, GtkWidget 
*back_widget);
diff --git a/src/widgets/hyperlink-tag.c b/src/widgets/hyperlink-tag.c
index 05230bd..72afcbb 100644
--- a/src/widgets/hyperlink-tag.c
+++ b/src/widgets/hyperlink-tag.c
@@ -27,23 +27,26 @@ static void get_property (GObject *object, guint property_id, GValue *value, GPa
 static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
 static void finalize (GObject *object);
 
-struct _AlmanahHyperlinkTagPrivate {
+typedef struct {
        gchar *uri;
+} AlmanahHyperlinkTagPrivate;
+
+struct _AlmanahHyperlinkTag {
+       GtkTextTag parent;
+       AlmanahHyperlinkTagPrivate *priv;
 };
 
 enum {
        PROP_URI = 1
 };
 
-G_DEFINE_TYPE (AlmanahHyperlinkTag, almanah_hyperlink_tag, GTK_TYPE_TEXT_TAG)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahHyperlinkTag, almanah_hyperlink_tag, GTK_TYPE_TEXT_TAG)
 
 static void
 almanah_hyperlink_tag_class_init (AlmanahHyperlinkTagClass *klass)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahHyperlinkTagPrivate));
-
        gobject_class->constructed = constructed;
        gobject_class->get_property = get_property;
        gobject_class->set_property = set_property;
@@ -59,7 +62,7 @@ almanah_hyperlink_tag_class_init (AlmanahHyperlinkTagClass *klass)
 static void
 almanah_hyperlink_tag_init (AlmanahHyperlinkTag *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_HYPERLINK_TAG, 
AlmanahHyperlinkTagPrivate);
+       self->priv = almanah_hyperlink_tag_get_instance_private (self);
        self->priv->uri = NULL;
 }
 
diff --git a/src/widgets/hyperlink-tag.h b/src/widgets/hyperlink-tag.h
index 1c66e76..d86cf3a 100644
--- a/src/widgets/hyperlink-tag.h
+++ b/src/widgets/hyperlink-tag.h
@@ -26,25 +26,8 @@
 
 G_BEGIN_DECLS
 
-#define ALMANAH_TYPE_HYPERLINK_TAG             (almanah_hyperlink_tag_get_type ())
-#define ALMANAH_HYPERLINK_TAG(o)               (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_HYPERLINK_TAG, 
AlmanahHyperlinkTag))
-#define ALMANAH_HYPERLINK_TAG_CLASS(k)         (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_HYPERLINK_TAG, 
AlmanahHyperlinkTagClass))
-#define ALMANAH_IS_HYPERLINK_TAG(o)            (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_HYPERLINK_TAG))
-#define ALMANAH_IS_HYPERLINK_TAG_CLASS(k)      (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_HYPERLINK_TAG))
-#define ALMANAH_HYPERLINK_TAG_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_HYPERLINK_TAG, 
AlmanahHyperlinkTagClass))
-
-typedef struct _AlmanahHyperlinkTagPrivate     AlmanahHyperlinkTagPrivate;
-
-typedef struct {
-       GtkTextTag parent;
-       AlmanahHyperlinkTagPrivate *priv;
-} AlmanahHyperlinkTag;
-
-typedef struct {
-       GtkTextTagClass parent;
-} AlmanahHyperlinkTagClass;
-
-GType almanah_hyperlink_tag_get_type (void) G_GNUC_CONST;
+#define ALMANAH_TYPE_HYPERLINK_TAG      (almanah_hyperlink_tag_get_type ())
+G_DECLARE_FINAL_TYPE (AlmanahHyperlinkTag, almanah_hyperlink_tag, ALMANAH, HYPERLINK_TAG, GtkTextTag)
 
 AlmanahHyperlinkTag *almanah_hyperlink_tag_new (const gchar *uri) G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
 
diff --git a/src/widgets/tag-accessible.c b/src/widgets/tag-accessible.c
index cda2918..0fa0c15 100644
--- a/src/widgets/tag-accessible.c
+++ b/src/widgets/tag-accessible.c
@@ -22,9 +22,14 @@
 #include "tag-accessible.h"
 #include "tag.h"
 
-struct _AlmanahTagAccessiblePrivate
-{
+typedef struct {
         gint test;
+} AlmanahTagAccessiblePrivate;
+
+struct _AlmanahTagAccessible {
+       GtkWidgetAccessible parent;
+
+       AlmanahTagAccessiblePrivate *priv;
 };
 
 static void  almanah_tag_accessible_initialize                    (AtkObject *obj, gpointer data);
@@ -48,8 +53,6 @@ almanah_tag_accessible_class_init (AlmanahTagAccessibleClass *klass)
 {
         AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
 
-        g_type_class_add_private (klass, sizeof (AlmanahTagAccessiblePrivate));
-
        class->get_name = almanah_tag_accessible_get_name;
         class->initialize = almanah_tag_accessible_initialize;
 }
diff --git a/src/widgets/tag-accessible.h b/src/widgets/tag-accessible.h
index 30efc3d..6aa389a 100644
--- a/src/widgets/tag-accessible.h
+++ b/src/widgets/tag-accessible.h
@@ -26,25 +26,7 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_TAG_ACCESSIBLE         (almanah_tag_accessible_get_type ())
-#define ALMANAH_TAG_ACCESSIBLE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_TAG_ACCESSIBLE, 
AlmanahTagAccessible))
-#define ALMANAH_TAG_ACCESSIBLE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_TAG_ACCESSIBLE, 
AlmanahTagAccessibleClass))
-#define ALMANAH_IS_TAG_ACCESSIBLE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_TAG_ACCESSIBLE))
-#define ALMANAH_IS_TAG_ACCESSIBLE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_TAG_ACCESSIBLE))
-#define ALMANAH_TAG_ACCESSIBLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_TAG_ACCESSIBLE, 
AlmanahTagAccessibleClass))
-
-typedef struct _AlmanahTagAccessiblePrivate AlmanahTagAccessiblePrivate;
-
-typedef struct {
-       GtkWidgetAccessible parent;
-
-       AlmanahTagAccessiblePrivate *priv;
-} AlmanahTagAccessible;
-
-typedef struct {
-       GtkWidgetAccessibleClass parent;
-} AlmanahTagAccessibleClass;
-
-GType almanah_tag_accessible_get_type  (void) G_GNUC_CONST;
+G_DECLARE_FINAL_TYPE (AlmanahTagAccessible, almanah_tag_accessible, ALMANAH, TAG_ACCESSIBLE, 
GtkWidgetAccessible)
 
 G_END_DECLS
 
diff --git a/src/widgets/tag-entry.c b/src/widgets/tag-entry.c
index a5f1606..93a76a5 100644
--- a/src/widgets/tag-entry.c
+++ b/src/widgets/tag-entry.c
@@ -27,9 +27,14 @@ enum {
        PROP_STORAGE_MANAGER = 1
 };
 
-struct _AlmanahTagEntryPrivate {
+typedef struct {
        GtkListStore *tags_store;
        AlmanahStorageManager *storage_manager;
+} AlmanahTagEntryPrivate;
+
+struct _AlmanahTagEntry {
+       GtkEntry parent;
+       AlmanahTagEntryPrivate *priv;
 };
 
 static void almanah_tag_entry_get_property       (GObject *object, guint property_id, GValue *value, 
GParamSpec *pspec);
@@ -41,7 +46,7 @@ gboolean    almanah_tag_entry_focus_out_event   (GtkWidget *self, GdkEventFocus
 gboolean    almanah_tag_entry_focus_in_event     (GtkWidget *self, GdkEventFocus *event);
 gboolean    almanah_tag_entry_match_selected     (GtkEntryCompletion *widget, GtkTreeModel *model, 
GtkTreeIter *iter, AlmanahTagEntry *self);
 
-G_DEFINE_TYPE (AlmanahTagEntry, almanah_tag_entry, GTK_TYPE_ENTRY)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahTagEntry, almanah_tag_entry, GTK_TYPE_ENTRY)
 
 static void
 almanah_tag_entry_class_init (AlmanahTagEntryClass *klass)
@@ -49,8 +54,6 @@ almanah_tag_entry_class_init (AlmanahTagEntryClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahTagEntryPrivate));
-
        gobject_class->get_property = almanah_tag_entry_get_property;
        gobject_class->set_property = almanah_tag_entry_set_property;
        gobject_class->finalize = almanah_tag_entry_finalize;
@@ -72,7 +75,7 @@ almanah_tag_entry_init (AlmanahTagEntry *self)
        GtkEntryCompletion *completion;
        AtkObject *self_atk_object;
 
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_TAG_ENTRY, AlmanahTagEntryPrivate);
+       self->priv = almanah_tag_entry_get_instance_private (self);
 
        self->priv->tags_store = gtk_list_store_new (1, G_TYPE_STRING);
        completion = gtk_entry_completion_new ();
diff --git a/src/widgets/tag-entry.h b/src/widgets/tag-entry.h
index 7e5bacc..fded166 100644
--- a/src/widgets/tag-entry.h
+++ b/src/widgets/tag-entry.h
@@ -27,24 +27,8 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_TAG_ENTRY         (almanah_tag_entry_get_type ())
-#define ALMANAH_TAG_ENTRY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_TAG_ENTRY, 
AlmanahTagEntry))
-#define ALMANAH_TAG_ENTRY_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_TAG_ENTRY, 
AlmanahTagEntryClass))
-#define ALMANAH_IS_TAG_ENTRY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_TAG_ENTRY))
-#define ALMANAH_IS_TAG_ENTRY_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_TAG_ENTRY))
-#define ALMANAH_TAG_ENTRY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_TAG_ENTRY, 
AlmanahTagEntryClass))
+G_DECLARE_FINAL_TYPE (AlmanahTagEntry, almanah_tag_entry, ALMANAH, TAG_ENTRY, GtkEntry)
 
-typedef struct _AlmanahTagEntryPrivate AlmanahTagEntryPrivate;
-
-typedef struct {
-        GtkEntry parent;
-       AlmanahTagEntryPrivate *priv;
-} AlmanahTagEntry;
-
-typedef struct {
-       GtkEntryClass parent;
-} AlmanahTagEntryClass;
-
-GType almanah_tag_entry_get_type            (void) G_GNUC_CONST;
 void  almanah_tag_entry_set_storage_manager (AlmanahTagEntry *tag_entry, AlmanahStorageManager 
*storage_manager);
 
 G_END_DECLS
diff --git a/src/widgets/tag.c b/src/widgets/tag.c
index 97b2320..6a61826 100644
--- a/src/widgets/tag.c
+++ b/src/widgets/tag.c
@@ -37,7 +37,7 @@ enum {
        PROP_TAG = 1
 };
 
-struct _AlmanahTagPrivate {
+typedef struct {
        gchar *tag;
        PangoLayout *layout;
 
@@ -54,6 +54,11 @@ struct _AlmanahTagPrivate {
        /* The close button state */
        gboolean close_highlighted;
        gboolean close_pressed;
+} AlmanahTagPrivate;
+
+struct _AlmanahTag {
+       GtkDrawingArea parent;
+       AlmanahTagPrivate *priv;
 };
 
 enum {
@@ -75,7 +80,7 @@ gboolean    almanah_tag_button_release_event (GtkWidget *widget, GdkEventButton
 gboolean    almanah_tag_draw                 (GtkWidget *widget, cairo_t *cr, gpointer data);
 gboolean    almanah_tag_query_tooltip        (GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, 
GtkTooltip *tooltip);
 
-G_DEFINE_TYPE (AlmanahTag, almanah_tag, GTK_TYPE_DRAWING_AREA)
+G_DEFINE_TYPE_WITH_PRIVATE (AlmanahTag, almanah_tag, GTK_TYPE_DRAWING_AREA)
 
 static void
 almanah_tag_class_init (AlmanahTagClass *klass)
@@ -83,8 +88,6 @@ almanah_tag_class_init (AlmanahTagClass *klass)
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-       g_type_class_add_private (klass, sizeof (AlmanahTagPrivate));
-
        gobject_class->get_property = almanah_tag_get_property;
        gobject_class->set_property = almanah_tag_set_property;
        gobject_class->finalize = almanah_tag_finalize;
@@ -114,7 +117,7 @@ almanah_tag_class_init (AlmanahTagClass *klass)
 static void
 almanah_tag_init (AlmanahTag *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ALMANAH_TYPE_TAG, AlmanahTagPrivate);
+       self->priv = almanah_tag_get_instance_private (self);
        g_signal_connect (G_OBJECT (self), "draw", G_CALLBACK (almanah_tag_draw), NULL);
 
        gtk_widget_add_events (GTK_WIDGET  (self),
diff --git a/src/widgets/tag.h b/src/widgets/tag.h
index 3628230..2a7cce2 100644
--- a/src/widgets/tag.h
+++ b/src/widgets/tag.h
@@ -25,24 +25,8 @@
 G_BEGIN_DECLS
 
 #define ALMANAH_TYPE_TAG         (almanah_tag_get_type ())
-#define ALMANAH_TAG(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), ALMANAH_TYPE_TAG, AlmanahTag))
-#define ALMANAH_TAG_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), ALMANAH_TYPE_TAG, AlmanahTagClass))
-#define ALMANAH_IS_TAG(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), ALMANAH_TYPE_TAG))
-#define ALMANAH_IS_TAG_CLASS(k)         (G_TYPE_CHECK_CLASS_TYPE ((k), ALMANAH_TYPE_TAG))
-#define ALMANAH_TAG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ALMANAH_TYPE_TAG, AlmanahTagClass))
+G_DECLARE_FINAL_TYPE (AlmanahTag, almanah_tag, ALMANAH, TAG, GtkDrawingArea)
 
-typedef struct _AlmanahTagPrivate AlmanahTagPrivate;
-
-typedef struct {
-       GtkDrawingArea parent;
-       AlmanahTagPrivate *priv;
-} AlmanahTag;
-
-typedef struct {
-       GtkDrawingAreaClass parent;
-} AlmanahTagClass;
-
-GType        almanah_tag_get_type (void) G_GNUC_CONST;
 GtkWidget   *almanah_tag_new      (const gchar *tag);
 const gchar *almanah_tag_get_tag  (AlmanahTag *tag_widget);
 void         almanah_tag_remove   (AlmanahTag *tag_widget);


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