summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--user/ayatana-ido/APKBUILD15
-rw-r--r--user/ayatana-ido/remove-private.patch2295
2 files changed, 2302 insertions, 8 deletions
diff --git a/user/ayatana-ido/APKBUILD b/user/ayatana-ido/APKBUILD
index dbc939270..fd0aaf9db 100644
--- a/user/ayatana-ido/APKBUILD
+++ b/user/ayatana-ido/APKBUILD
@@ -2,26 +2,26 @@
# Maintainer: Kiyoshi Aman <adelie@aerdan.vulpine.house>
pkgname=ayatana-ido
pkgver=0.4.4
-pkgrel=0
+pkgrel=1
pkgdesc="Indicator display object library for the Gnome desktop environment"
url="https://ayatanaindicators.github.io/"
arch="all"
license="GPL-3.0-only AND (LGPL-2.1-only OR LGPL-3.0-only) AND LGPL-2.0+"
depends=""
makedepends="glib-dev gobject-introspection-dev gtest-dev gtk+3.0-dev
- mate-common-dev vala-dev xorg-gtest-dev"
+ mate-common-dev vala-dev xorg-gtest-dev autoconf automake"
subpackages="$pkgname-dev"
source="ayatana-ido-$pkgver.tar.gz::https://github.com/AyatanaIndicators/ayatana-ido/archive/$pkgver.tar.gz
- gtk-doc-fix.patch"
+ gtk-doc-fix.patch
+ remove-private.patch
+ "
prepare() {
- cd "$builddir"
default_prepare
autoreconf -vif
}
build() {
- cd "$builddir"
./configure \
--build=$CBUILD \
--host=$CHOST \
@@ -33,14 +33,13 @@ build() {
}
check() {
- cd "$builddir"
make check
}
package() {
- cd "$builddir"
DESTDIR="$pkgdir" make install
}
sha512sums="ef04b0b6c959d209e88b1de322ac64ea33fdd043a73980bf3b043380603b6a448ea7bf43ba8e2750e1a0a9bef704a7099f7ae9b92a97d3ce0be2e9f48ba16703 ayatana-ido-0.4.4.tar.gz
-92ddc4f09c5ed7800357a76e2276c07db682408f259e22d6511696df032d6712ecd295d0775db36ad6ace5d3f352ce7d59cd9f1b24e899b7accaf680c0e4488d gtk-doc-fix.patch"
+92ddc4f09c5ed7800357a76e2276c07db682408f259e22d6511696df032d6712ecd295d0775db36ad6ace5d3f352ce7d59cd9f1b24e899b7accaf680c0e4488d gtk-doc-fix.patch
+a28c4cbfb5f386a9ee42ec50011bce603191b901760e6f9799a58b9ff2b223d03c15df00bd6fab6e13b9b9d5b70ecedef245665ebf4e240df1f1321e658b38fa remove-private.patch"
diff --git a/user/ayatana-ido/remove-private.patch b/user/ayatana-ido/remove-private.patch
new file mode 100644
index 000000000..848b1b026
--- /dev/null
+++ b/user/ayatana-ido/remove-private.patch
@@ -0,0 +1,2295 @@
+Required to build against newer GLib, else:
+
+idocalendarmenuitem.c: In function ‘ido_calendar_menu_item_init’:
+idocalendarmenuitem.c:109:13: error: G_ADD_PRIVATE [-Werror]
+ priv = item->priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
+ ^~~~~~~~~~~~~~~
+idocalendarmenuitem.c: In function ‘ido_calendar_menu_item_finalize’:
+idocalendarmenuitem.c:139:13: error: G_ADD_PRIVATE [-Werror]
+ IdoCalendarMenuItemPrivate *priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
+ ^~~~~~~~~~~~~~~
+
+
+From 0ab4079b28220f4051f8d0935a976e550514ad7f Mon Sep 17 00:00:00 2001
+From: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+Date: Tue, 3 Dec 2019 22:14:51 +0000
+Subject: [PATCH] Avoid deprecated g_type_class_add_private.
+
+---
+ src/idobasicmenuitem.c | 33 ++++-------
+ src/idobasicmenuitem.h | 2 -
+ src/idocalendarmenuitem.c | 116 +++++++++++++++++++++++--------------
+ src/idocalendarmenuitem.h | 3 -
+ src/idodetaillabel.c | 42 +++++++-------
+ src/idodetaillabel.h | 2 -
+ src/idoentrymenuitem.c | 61 ++++++++++++-------
+ src/idoentrymenuitem.h | 3 -
+ src/idolocationmenuitem.c | 34 +++++------
+ src/idolocationmenuitem.h | 2 -
+ src/idomessagedialog.c | 26 ++++-----
+ src/idorange.c | 20 +++----
+ src/idorange.h | 2 -
+ src/idoscalemenuitem.c | 75 +++++++++++++-----------
+ src/idoscalemenuitem.h | 3 -
+ src/idoswitchmenuitem.c | 33 +++++++----
+ src/idoswitchmenuitem.h | 3 -
+ src/idotimeline.c | 100 +++++++++++++++-----------------
+ src/idotimestampmenuitem.c | 65 ++++++++++-----------
+ src/idotimestampmenuitem.h | 2 -
+ src/idousermenuitem.c | 63 ++++++++++----------
+ src/idousermenuitem.h | 2 -
+ 22 files changed, 356 insertions(+), 336 deletions(-)
+
+diff --git a/src/idobasicmenuitem.c b/src/idobasicmenuitem.c
+index 382a150..cf57e7c 100644
+--- a/src/idobasicmenuitem.c
++++ b/src/idobasicmenuitem.c
+@@ -37,8 +37,7 @@ enum
+
+ static GParamSpec *properties[PROP_LAST];
+
+-struct _IdoBasicMenuItemPrivate
+-{
++typedef struct {
+ GIcon * icon;
+ char * text;
+ char * secondary_text;
+@@ -46,11 +45,9 @@ struct _IdoBasicMenuItemPrivate
+ GtkWidget * image;
+ GtkWidget * label;
+ GtkWidget * secondary_label;
+-};
+-
+-typedef IdoBasicMenuItemPrivate priv_t;
++} IdoBasicMenuItemPrivate;
+
+-G_DEFINE_TYPE (IdoBasicMenuItem, ido_basic_menu_item, GTK_TYPE_MENU_ITEM);
++G_DEFINE_TYPE_WITH_PRIVATE (IdoBasicMenuItem, ido_basic_menu_item, GTK_TYPE_MENU_ITEM);
+
+ /***
+ **** GObject Virtual Functions
+@@ -63,7 +60,7 @@ my_get_property (GObject * o,
+ GParamSpec * pspec)
+ {
+ IdoBasicMenuItem * self = IDO_BASIC_MENU_ITEM (o);
+- priv_t * p = self->priv;
++ IdoBasicMenuItemPrivate * p = ido_basic_menu_item_get_instance_private(self);
+
+ switch (property_id)
+ {
+@@ -117,7 +114,7 @@ static void
+ my_dispose (GObject * object)
+ {
+ IdoBasicMenuItem * self = IDO_BASIC_MENU_ITEM (object);
+- priv_t * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ g_clear_object (&p->icon);
+
+@@ -128,7 +125,7 @@ static void
+ my_finalize (GObject * object)
+ {
+ IdoBasicMenuItem * self = IDO_BASIC_MENU_ITEM (object);
+- priv_t * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ g_free (p->text);
+ g_free (p->secondary_text);
+@@ -139,7 +136,7 @@ my_finalize (GObject * object)
+ static void
+ ido_basic_menu_item_update_image (IdoBasicMenuItem *self)
+ {
+- IdoBasicMenuItemPrivate * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ gtk_image_clear (GTK_IMAGE (p->image));
+
+@@ -191,8 +188,6 @@ ido_basic_menu_item_class_init (IdoBasicMenuItemClass *klass)
+ GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+- g_type_class_add_private (klass, sizeof (IdoBasicMenuItemPrivate));
+-
+ gobject_class->get_property = my_get_property;
+ gobject_class->set_property = my_set_property;
+ gobject_class->dispose = my_dispose;
+@@ -228,15 +223,11 @@ ido_basic_menu_item_class_init (IdoBasicMenuItemClass *klass)
+ static void
+ ido_basic_menu_item_init (IdoBasicMenuItem *self)
+ {
+- priv_t * p;
++
+ GtkWidget * w;
+ GtkGrid * grid;
+
+- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+- IDO_TYPE_BASIC_MENU_ITEM,
+- IdoBasicMenuItemPrivate);
+-
+- p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ p->image = gtk_image_new ();
+ gtk_misc_set_alignment(GTK_MISC(p->image), 0.0, 0.0);
+@@ -287,7 +278,7 @@ ido_basic_menu_item_new (void)
+ void
+ ido_basic_menu_item_set_icon (IdoBasicMenuItem * self, GIcon * icon)
+ {
+- IdoBasicMenuItemPrivate * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ if (p->icon != icon)
+ {
+@@ -314,7 +305,7 @@ ido_basic_menu_item_set_icon_from_file (IdoBasicMenuItem * self, const char * fi
+ void
+ ido_basic_menu_item_set_text (IdoBasicMenuItem * self, const char * text)
+ {
+- IdoBasicMenuItemPrivate * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ if (g_strcmp0 (p->text, text))
+ {
+@@ -331,7 +322,7 @@ ido_basic_menu_item_set_text (IdoBasicMenuItem * self, const char * text)
+ void
+ ido_basic_menu_item_set_secondary_text (IdoBasicMenuItem * self, const char * secondary_text)
+ {
+- IdoBasicMenuItemPrivate * p = self->priv;
++ IdoBasicMenuItemPrivate *p = ido_basic_menu_item_get_instance_private(self);
+
+ if (g_strcmp0 (p->secondary_text, secondary_text))
+ {
+diff --git a/src/idobasicmenuitem.h b/src/idobasicmenuitem.h
+index 6a4b83a..38ae830 100644
+--- a/src/idobasicmenuitem.h
++++ b/src/idobasicmenuitem.h
+@@ -30,7 +30,6 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoBasicMenuItem IdoBasicMenuItem;
+ typedef struct _IdoBasicMenuItemClass IdoBasicMenuItemClass;
+-typedef struct _IdoBasicMenuItemPrivate IdoBasicMenuItemPrivate;
+
+ struct _IdoBasicMenuItemClass
+ {
+@@ -44,7 +43,6 @@ struct _IdoBasicMenuItem
+ {
+ /*< private >*/
+ GtkMenuItem parent;
+- IdoBasicMenuItemPrivate * priv;
+ };
+
+
+diff --git a/src/idocalendarmenuitem.c b/src/idocalendarmenuitem.c
+index 557d898..f3881bc 100644
+--- a/src/idocalendarmenuitem.c
++++ b/src/idocalendarmenuitem.c
+@@ -51,17 +51,14 @@ static void calendar_day_selected_double_click_cb (GtkWidget *widg
+ gpointer user_data);
+ static void calendar_day_selected_cb (GtkWidget *widget,
+ gpointer user_data);
+-struct _IdoCalendarMenuItemPrivate
+-{
++typedef struct {
+ GtkWidget *box;
+ GtkWidget *calendar;
+ GtkWidget *parent;
+ gboolean selected;
+-};
+-
+-G_DEFINE_TYPE (IdoCalendarMenuItem, ido_calendar_menu_item, GTK_TYPE_MENU_ITEM)
++} IdoCalendarMenuItemPrivate;
+
+-#define IDO_CALENDAR_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_CALENDAR_MENU_ITEM, IdoCalendarMenuItemPrivate))
++G_DEFINE_TYPE_WITH_PRIVATE (IdoCalendarMenuItem, ido_calendar_menu_item, GTK_TYPE_MENU_ITEM)
+
+ static void
+ ido_calendar_menu_item_class_init (IdoCalendarMenuItemClass *klass)
+@@ -84,8 +81,6 @@ ido_calendar_menu_item_class_init (IdoCalendarMenuItemClass *klass)
+
+ menu_item_class->hide_on_activate = TRUE;
+
+- g_type_class_add_private (gobject_class, sizeof (IdoCalendarMenuItemPrivate));
+-
+ g_signal_new("month-changed", G_TYPE_FROM_CLASS(klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+@@ -104,9 +99,7 @@ ido_calendar_menu_item_class_init (IdoCalendarMenuItemClass *klass)
+ static void
+ ido_calendar_menu_item_init (IdoCalendarMenuItem *item)
+ {
+- IdoCalendarMenuItemPrivate *priv;
+-
+- priv = item->priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(item);
+
+ /* Will be disposed automatically */
+ priv->calendar = g_object_new (gtk_calendar_get_type (),
+@@ -136,7 +129,7 @@ static void
+ ido_calendar_menu_item_finalize (GObject *object)
+ {
+ IdoCalendarMenuItem *item = IDO_CALENDAR_MENU_ITEM (object);
+- IdoCalendarMenuItemPrivate *priv = IDO_CALENDAR_MENU_ITEM_GET_PRIVATE (item);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(item);
+
+ if (G_IS_OBJECT (priv->calendar))
+ {
+@@ -183,13 +176,14 @@ ido_calendar_menu_item_key_press (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+ {
+- IdoCalendarMenuItem *menuitem = (IdoCalendarMenuItem *)data;
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (data);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
+
+ g_return_val_if_fail (IDO_IS_CALENDAR_MENU_ITEM (menuitem), FALSE);
+
+- if (menuitem->priv->selected)
++ if (priv->selected)
+ {
+- GtkWidget *calendar = menuitem->priv->calendar;
++ GtkWidget *calendar = priv->calendar;
+
+ gtk_widget_event (calendar,
+ ((GdkEvent *)(void*)(event)));
+@@ -215,7 +209,10 @@ static gboolean
+ ido_calendar_menu_item_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+ {
+- GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (widget);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ GtkWidget *calendar = priv->calendar;
+
+ if (event->button == 1) {
+ if (gtk_widget_get_window (calendar) != NULL) {
+@@ -265,7 +262,10 @@ static gboolean
+ ido_calendar_menu_item_button_release (GtkWidget *widget,
+ GdkEventButton *event)
+ {
+- GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (widget);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ GtkWidget *calendar = priv->calendar;
+ GTK_WIDGET_GET_CLASS(calendar)->button_release_event(GTK_WIDGET(calendar), event);
+
+ return TRUE;
+@@ -274,17 +274,23 @@ ido_calendar_menu_item_button_release (GtkWidget *widget,
+ static void
+ ido_calendar_menu_item_select (GtkMenuItem *item)
+ {
+- IDO_CALENDAR_MENU_ITEM (item)->priv->selected = TRUE;
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (item);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ priv->selected = TRUE;
+
+- ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), TRUE);
++ ido_calendar_menu_item_send_focus_change (GTK_WIDGET (priv->calendar), TRUE);
+ }
+
+ static void
+ ido_calendar_menu_item_deselect (GtkMenuItem *item)
+ {
+- IDO_CALENDAR_MENU_ITEM (item)->priv->selected = FALSE;
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (item);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
+
+- ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), FALSE);
++ priv->selected = FALSE;
++
++ ido_calendar_menu_item_send_focus_change (GTK_WIDGET (priv->calendar), FALSE);
+ }
+
+ static void
+@@ -296,25 +302,27 @@ calendar_realized_cb (GtkWidget *widget,
+ gdk_window_raise (gtk_widget_get_window (widget));
+ }
+
+- item->priv->parent = gtk_widget_get_parent (GTK_WIDGET (item));
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(item);
++
++ priv->parent = gtk_widget_get_parent (GTK_WIDGET (item));
+
+- g_object_add_weak_pointer (G_OBJECT (item->priv->parent),
+- (gpointer*) &item->priv->parent);
++ g_object_add_weak_pointer (G_OBJECT (priv->parent),
++ (gpointer*) &priv->parent);
+
+- g_signal_connect (item->priv->parent,
++ g_signal_connect (priv->parent,
+ "key-press-event",
+ G_CALLBACK (ido_calendar_menu_item_key_press),
+ item);
+
+- g_signal_connect (item->priv->calendar,
++ g_signal_connect (priv->calendar,
+ "month-changed",
+ G_CALLBACK (calendar_month_changed_cb),
+ item);
+- g_signal_connect (item->priv->calendar,
++ g_signal_connect (priv->calendar,
+ "day-selected",
+ G_CALLBACK (calendar_day_selected_cb),
+ item);
+- g_signal_connect (item->priv->calendar,
++ g_signal_connect (priv->calendar,
+ "day-selected-double-click",
+ G_CALLBACK (calendar_day_selected_double_click_cb),
+ item);
+@@ -327,7 +335,10 @@ calendar_move_focus_cb (GtkWidget *widget,
+ GtkDirectionType direction,
+ IdoCalendarMenuItem *item)
+ {
+- ido_calendar_menu_item_send_focus_change (GTK_WIDGET (IDO_CALENDAR_MENU_ITEM (item)->priv->calendar), FALSE);
++ IdoCalendarMenuItem *menuitem = IDO_CALENDAR_MENU_ITEM (widget);
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ ido_calendar_menu_item_send_focus_change (GTK_WIDGET (priv->calendar), FALSE);
+
+ g_signal_emit_by_name (item,
+ "move-focus",
+@@ -386,7 +397,9 @@ ido_calendar_menu_item_get_calendar (IdoCalendarMenuItem *menuitem)
+ {
+ g_return_val_if_fail (IDO_IS_CALENDAR_MENU_ITEM (menuitem), NULL);
+
+- return menuitem->priv->calendar;
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ return priv->calendar;
+ }
+
+ /**
+@@ -402,8 +415,10 @@ gboolean
+ ido_calendar_menu_item_mark_day (IdoCalendarMenuItem *menuitem, guint day)
+ {
+ g_return_val_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem), FALSE);
+-
+- gtk_calendar_mark_day(GTK_CALENDAR (menuitem->priv->calendar), day);
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ gtk_calendar_mark_day(GTK_CALENDAR (priv->calendar), day);
+ return TRUE;
+ }
+
+@@ -420,8 +435,10 @@ gboolean
+ ido_calendar_menu_item_unmark_day (IdoCalendarMenuItem *menuitem, guint day)
+ {
+ g_return_val_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem), FALSE);
+-
+- gtk_calendar_unmark_day(GTK_CALENDAR (menuitem->priv->calendar), day);
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ gtk_calendar_unmark_day(GTK_CALENDAR (priv->calendar), day);
+ return TRUE;
+ }
+
+@@ -435,8 +452,10 @@ void
+ ido_calendar_menu_item_clear_marks (IdoCalendarMenuItem *menuitem)
+ {
+ g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem));
+-
+- gtk_calendar_clear_marks(GTK_CALENDAR (menuitem->priv->calendar));
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ gtk_calendar_clear_marks(GTK_CALENDAR (priv->calendar));
+ }
+
+ /**
+@@ -450,8 +469,10 @@ void
+ ido_calendar_menu_item_set_display_options (IdoCalendarMenuItem *menuitem, GtkCalendarDisplayOptions flags)
+ {
+ g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem));
+-
+- gtk_calendar_set_display_options (GTK_CALENDAR (menuitem->priv->calendar), flags);
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ gtk_calendar_set_display_options (GTK_CALENDAR (priv->calendar), flags);
+ }
+
+ /**
+@@ -466,8 +487,10 @@ GtkCalendarDisplayOptions
+ ido_calendar_menu_item_get_display_options (IdoCalendarMenuItem *menuitem)
+ {
+ g_return_val_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem), 0);
+-
+- return gtk_calendar_get_display_options (GTK_CALENDAR (menuitem->priv->calendar));
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ return gtk_calendar_get_display_options (GTK_CALENDAR (priv->calendar));
+ }
+
+ /**
+@@ -484,9 +507,12 @@ ido_calendar_menu_item_get_date (IdoCalendarMenuItem *menuitem,
+ guint *year,
+ guint *month,
+ guint *day) {
+-
++
+ g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem));
+- gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), year, month, day);
++
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
++ gtk_calendar_get_date (GTK_CALENDAR (priv->calendar), year, month, day);
+ }
+
+ /**
+@@ -510,13 +536,15 @@ ido_calendar_menu_item_set_date (IdoCalendarMenuItem *menuitem,
+
+ g_return_val_if_fail (IDO_IS_CALENDAR_MENU_ITEM(menuitem), FALSE);
+
++ IdoCalendarMenuItemPrivate *priv = ido_calendar_menu_item_get_instance_private(menuitem);
++
+ ido_calendar_menu_item_get_date (menuitem, &old_y, &old_m, &old_d);
+
+ if ((old_y != year) || (old_m != month))
+- gtk_calendar_select_month (GTK_CALENDAR (menuitem->priv->calendar), month, year);
++ gtk_calendar_select_month (GTK_CALENDAR (priv->calendar), month, year);
+
+ if (old_d != day)
+- gtk_calendar_select_day (GTK_CALENDAR (menuitem->priv->calendar), day);
++ gtk_calendar_select_day (GTK_CALENDAR (priv->calendar), day);
+
+ return TRUE;
+ }
+diff --git a/src/idocalendarmenuitem.h b/src/idocalendarmenuitem.h
+index 5cd913e..8c1528d 100644
+--- a/src/idocalendarmenuitem.h
++++ b/src/idocalendarmenuitem.h
+@@ -39,13 +39,10 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoCalendarMenuItem IdoCalendarMenuItem;
+ typedef struct _IdoCalendarMenuItemClass IdoCalendarMenuItemClass;
+-typedef struct _IdoCalendarMenuItemPrivate IdoCalendarMenuItemPrivate;
+
+ struct _IdoCalendarMenuItem
+ {
+ GtkMenuItem parent_instance;
+-
+- IdoCalendarMenuItemPrivate *priv;
+ };
+
+ struct _IdoCalendarMenuItemClass
+diff --git a/src/idodetaillabel.c b/src/idodetaillabel.c
+index b36b222..c502f92 100644
+--- a/src/idodetaillabel.c
++++ b/src/idodetaillabel.c
+@@ -21,14 +21,11 @@
+
+ #include <math.h>
+
+-G_DEFINE_TYPE (IdoDetailLabel, ido_detail_label, GTK_TYPE_WIDGET)
+-
+-struct _IdoDetailLabelPrivate
+-{
++typedef struct {
+ gchar *text;
+ PangoLayout *layout;
+ gboolean draw_lozenge;
+-};
++} IdoDetailLabelPrivate;
+
+ enum
+ {
+@@ -39,6 +36,8 @@ enum
+
+ static GParamSpec *properties[NUM_PROPERTIES];
+
++G_DEFINE_TYPE_WITH_PRIVATE (IdoDetailLabel, ido_detail_label, GTK_TYPE_WIDGET)
++
+ static void
+ ido_detail_label_get_property (GObject *object,
+ guint property_id,
+@@ -46,11 +45,12 @@ ido_detail_label_get_property (GObject *object,
+ GParamSpec *pspec)
+ {
+ IdoDetailLabel *self = IDO_DETAIL_LABEL (object);
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(self);
+
+ switch (property_id)
+ {
+ case PROP_TEXT:
+- g_value_set_string (value, self->priv->text);
++ g_value_set_string (value, priv->text);
+ break;
+
+ default:
+@@ -81,7 +81,7 @@ ido_detail_label_set_property (GObject *object,
+ static void
+ ido_detail_label_finalize (GObject *object)
+ {
+- IdoDetailLabelPrivate *priv = IDO_DETAIL_LABEL (object)->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(IDO_DETAIL_LABEL (object));
+
+ g_free (priv->text);
+
+@@ -91,7 +91,7 @@ ido_detail_label_finalize (GObject *object)
+ static void
+ ido_detail_label_dispose (GObject *object)
+ {
+- IdoDetailLabelPrivate *priv = IDO_DETAIL_LABEL (object)->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(IDO_DETAIL_LABEL (object));
+
+ g_clear_object (&priv->layout);
+
+@@ -101,7 +101,7 @@ ido_detail_label_dispose (GObject *object)
+ static void
+ ido_detail_label_ensure_layout (IdoDetailLabel *label)
+ {
+- IdoDetailLabelPrivate *priv = label->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(label);
+
+ if (priv->layout == NULL)
+ {
+@@ -156,7 +156,8 @@ gtk_widget_get_font_metrics (GtkWidget *widget,
+ static gint
+ ido_detail_label_get_minimum_text_width (IdoDetailLabel *label)
+ {
+- IdoDetailLabelPrivate *priv = label->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(label);
++
+ PangoContext *context;
+ PangoFontMetrics *metrics;
+ gint char_width;
+@@ -176,7 +177,8 @@ ido_detail_label_draw (GtkWidget *widget,
+ cairo_t *cr)
+ {
+ IdoDetailLabel *label = IDO_DETAIL_LABEL (widget);
+- IdoDetailLabelPrivate *priv = IDO_DETAIL_LABEL (widget)->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(label);
++
+ PangoRectangle extents;
+ GtkAllocation allocation;
+ double x, w, h, radius;
+@@ -224,7 +226,8 @@ ido_detail_label_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
+ {
+- IdoDetailLabelPrivate *priv = IDO_DETAIL_LABEL (widget)->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(IDO_DETAIL_LABEL (widget));
++
+ PangoRectangle extents;
+ double radius;
+
+@@ -244,7 +247,7 @@ ido_detail_label_get_preferred_height (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
+ {
+- IdoDetailLabelPrivate *priv = IDO_DETAIL_LABEL (widget)->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(IDO_DETAIL_LABEL (widget));
+ PangoContext *context;
+ PangoFontMetrics *metrics;
+ PangoRectangle extents;
+@@ -277,8 +280,6 @@ ido_detail_label_class_init (IdoDetailLabelClass *klass)
+ widget_class->get_preferred_width = ido_detail_label_get_preferred_width;
+ widget_class->get_preferred_height = ido_detail_label_get_preferred_height;
+
+- g_type_class_add_private (klass, sizeof (IdoDetailLabelPrivate));
+-
+ properties[PROP_TEXT] = g_param_spec_string ("text",
+ "Text",
+ "The text of the label",
+@@ -292,10 +293,6 @@ ido_detail_label_class_init (IdoDetailLabelClass *klass)
+ static void
+ ido_detail_label_init (IdoDetailLabel *self)
+ {
+- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+- IDO_TYPE_DETAIL_LABEL,
+- IdoDetailLabelPrivate);
+-
+ gtk_widget_set_has_window (GTK_WIDGET (self), FALSE);
+ }
+
+@@ -311,7 +308,10 @@ const gchar *
+ ido_detail_label_get_text (IdoDetailLabel *label)
+ {
+ g_return_val_if_fail (IDO_IS_DETAIL_LABEL (label), NULL);
+- return label->priv->text;
++
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(label);
++
++ return priv->text;
+ }
+
+ /* collapse_whitespace:
+@@ -362,7 +362,7 @@ ido_detail_label_set_text_impl (IdoDetailLabel *label,
+ const gchar *text,
+ gboolean draw_lozenge)
+ {
+- IdoDetailLabelPrivate * priv = label->priv;
++ IdoDetailLabelPrivate *priv = ido_detail_label_get_instance_private(label);
+
+ g_clear_object (&priv->layout);
+ g_free (priv->text);
+diff --git a/src/idodetaillabel.h b/src/idodetaillabel.h
+index 1995fee..6b6f57a 100644
+--- a/src/idodetaillabel.h
++++ b/src/idodetaillabel.h
+@@ -31,12 +31,10 @@
+
+ typedef struct _IdoDetailLabel IdoDetailLabel;
+ typedef struct _IdoDetailLabelClass IdoDetailLabelClass;
+-typedef struct _IdoDetailLabelPrivate IdoDetailLabelPrivate;
+
+ struct _IdoDetailLabel
+ {
+ GtkWidget parent;
+- IdoDetailLabelPrivate *priv;
+ };
+
+ struct _IdoDetailLabelClass
+diff --git a/src/idoentrymenuitem.c b/src/idoentrymenuitem.c
+index 5b5a3fb..d2948df 100644
+--- a/src/idoentrymenuitem.c
++++ b/src/idoentrymenuitem.c
+@@ -27,6 +27,7 @@
+ #include "idoentrymenuitem.h"
+ #include "config.h"
+
++static void ido_entry_menu_item_finalize (GObject *item);
+ static void ido_entry_menu_item_select (GtkMenuItem *item);
+ static void ido_entry_menu_item_deselect (GtkMenuItem *item);
+ static gboolean ido_entry_menu_item_button_release (GtkWidget *widget,
+@@ -44,16 +45,13 @@ static void entry_move_focus_cb (GtkWidget *widget,
+ GtkDirectionType direction,
+ IdoEntryMenuItem *item);
+
+-struct _IdoEntryMenuItemPrivate
+-{
++typedef struct {
+ GtkWidget *box;
+ GtkWidget *entry;
+ gboolean selected;
+-};
+-
+-G_DEFINE_TYPE (IdoEntryMenuItem, ido_entry_menu_item, GTK_TYPE_MENU_ITEM)
++} IdoEntryMenuItemPrivate;
+
+-#define IDO_ENTRY_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_ENTRY_MENU_ITEM, IdoEntryMenuItemPrivate))
++G_DEFINE_TYPE_WITH_PRIVATE (IdoEntryMenuItem, ido_entry_menu_item, GTK_TYPE_MENU_ITEM)
+
+ static void
+ ido_entry_menu_item_class_init (IdoEntryMenuItemClass *klass)
+@@ -66,6 +64,8 @@ ido_entry_menu_item_class_init (IdoEntryMenuItemClass *klass)
+ widget_class = GTK_WIDGET_CLASS (klass);
+ menu_item_class = GTK_MENU_ITEM_CLASS (klass);
+
++ gobject_class->finalize = ido_entry_menu_item_finalize;
++
+ widget_class->button_release_event = ido_entry_menu_item_button_release;
+ widget_class->button_press_event = ido_entry_menu_item_button_press;
+
+@@ -73,8 +73,6 @@ ido_entry_menu_item_class_init (IdoEntryMenuItemClass *klass)
+ menu_item_class->deselect = ido_entry_menu_item_deselect;
+
+ menu_item_class->hide_on_activate = TRUE;
+-
+- g_type_class_add_private (gobject_class, sizeof (IdoEntryMenuItemPrivate));
+ }
+
+ static void
+@@ -88,7 +86,7 @@ ido_entry_menu_item_init (IdoEntryMenuItem *item)
+ border.top = 2;
+ border.bottom = 2;
+
+- priv = item->priv = IDO_ENTRY_MENU_ITEM_GET_PRIVATE (item);
++ priv = ido_entry_menu_item_get_instance_private(item);
+
+ priv->entry = g_object_new (gtk_entry_get_type (),
+ "inner-border", &border,
+@@ -135,12 +133,13 @@ ido_entry_menu_item_key_press (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+ {
+- IdoEntryMenuItem *menuitem = (IdoEntryMenuItem *)data;
++ IdoEntryMenuItem *menuitem = IDO_ENTRY_MENU_ITEM(data);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
+
+- if (menuitem->priv->selected &&
++ if (priv->selected &&
+ is_key_press_valid (menuitem, event->keyval))
+ {
+- GtkWidget *entry = menuitem->priv->entry;
++ GtkWidget *entry = priv->entry;
+
+ gtk_widget_event (entry,
+ ((GdkEvent *)(void*)(event)));
+@@ -179,7 +178,10 @@ static gboolean
+ ido_entry_menu_item_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+ {
+- GtkWidget *entry = IDO_ENTRY_MENU_ITEM (widget)->priv->entry;
++ IdoEntryMenuItem *menuitem = IDO_ENTRY_MENU_ITEM(widget);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
++
++ GtkWidget *entry = priv->entry;
+
+ if (event->button == 1)
+ {
+@@ -206,7 +208,10 @@ static gboolean
+ ido_entry_menu_item_button_release (GtkWidget *widget,
+ GdkEventButton *event)
+ {
+- GtkWidget *entry = IDO_ENTRY_MENU_ITEM (widget)->priv->entry;
++ IdoEntryMenuItem *menuitem = IDO_ENTRY_MENU_ITEM(widget);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
++
++ GtkWidget *entry = priv->entry;
+
+ gtk_widget_event (entry,
+ ((GdkEvent *)(void*)(event)));
+@@ -217,17 +222,23 @@ ido_entry_menu_item_button_release (GtkWidget *widget,
+ static void
+ ido_entry_menu_item_select (GtkMenuItem *item)
+ {
+- IDO_ENTRY_MENU_ITEM (item)->priv->selected = TRUE;
++ IdoEntryMenuItem *menuitem = IDO_ENTRY_MENU_ITEM(item);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
++
++ priv->selected = TRUE;
+
+- ido_entry_menu_item_send_focus_change (GTK_WIDGET (IDO_ENTRY_MENU_ITEM (item)->priv->entry), TRUE);
++ ido_entry_menu_item_send_focus_change (GTK_WIDGET (priv->entry), TRUE);
+ }
+
+ static void
+ ido_entry_menu_item_deselect (GtkMenuItem *item)
+ {
+- IDO_ENTRY_MENU_ITEM (item)->priv->selected = FALSE;
++ IdoEntryMenuItem *menuitem = IDO_ENTRY_MENU_ITEM(item);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
+
+- ido_entry_menu_item_send_focus_change (GTK_WIDGET (IDO_ENTRY_MENU_ITEM (item)->priv->entry), FALSE);
++ priv->selected = FALSE;
++
++ ido_entry_menu_item_send_focus_change (GTK_WIDGET (priv->entry), FALSE);
+ }
+
+
+@@ -253,7 +264,9 @@ entry_move_focus_cb (GtkWidget *widget,
+ GtkDirectionType direction,
+ IdoEntryMenuItem *item)
+ {
+- ido_entry_menu_item_send_focus_change (GTK_WIDGET (IDO_ENTRY_MENU_ITEM (item)->priv->entry), FALSE);
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(item);
++
++ ido_entry_menu_item_send_focus_change (GTK_WIDGET (priv->entry), FALSE);
+
+ g_signal_emit_by_name (item,
+ "move-focus",
+@@ -286,5 +299,13 @@ ido_entry_menu_item_get_entry (IdoEntryMenuItem *menuitem)
+ {
+ g_return_val_if_fail (IDO_IS_ENTRY_MENU_ITEM (menuitem), NULL);
+
+- return menuitem->priv->entry;
++ IdoEntryMenuItemPrivate *priv = ido_entry_menu_item_get_instance_private(menuitem);
++
++ return priv->entry;
++}
++
++static void
++ido_entry_menu_item_finalize (GObject *gobject)
++{
++ /* no-op */
+ }
+diff --git a/src/idoentrymenuitem.h b/src/idoentrymenuitem.h
+index 417e774..7c5da79 100644
+--- a/src/idoentrymenuitem.h
++++ b/src/idoentrymenuitem.h
+@@ -39,13 +39,10 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoEntryMenuItem IdoEntryMenuItem;
+ typedef struct _IdoEntryMenuItemClass IdoEntryMenuItemClass;
+-typedef struct _IdoEntryMenuItemPrivate IdoEntryMenuItemPrivate;
+
+ struct _IdoEntryMenuItem
+ {
+ GtkMenuItem parent_instance;
+-
+- IdoEntryMenuItemPrivate *priv;
+ };
+
+ struct _IdoEntryMenuItemClass
+diff --git a/src/idolocationmenuitem.c b/src/idolocationmenuitem.c
+index 335422a..eb6b38b 100644
+--- a/src/idolocationmenuitem.c
++++ b/src/idolocationmenuitem.c
+@@ -37,16 +37,13 @@ enum
+
+ static GParamSpec *properties[PROP_LAST];
+
+-struct _IdoLocationMenuItemPrivate
+-{
++typedef struct {
+ char * timezone;
+
+ guint timestamp_timer;
+-};
++} IdoLocationMenuItemPrivate;
+
+-typedef IdoLocationMenuItemPrivate priv_t;
+-
+-G_DEFINE_TYPE (IdoLocationMenuItem, ido_location_menu_item, IDO_TYPE_TIME_STAMP_MENU_ITEM);
++G_DEFINE_TYPE_WITH_PRIVATE (IdoLocationMenuItem, ido_location_menu_item, IDO_TYPE_TIME_STAMP_MENU_ITEM);
+
+ /***
+ **** Timestamp Label
+@@ -58,7 +55,9 @@ update_timestamp (IdoLocationMenuItem * self)
+ GTimeZone * tz;
+ GDateTime * date_time;
+
+- tz = g_time_zone_new (self->priv->timezone);
++ IdoLocationMenuItemPrivate * priv = ido_location_menu_item_get_instance_private(self);
++
++ tz = g_time_zone_new (priv->timezone);
+ if (tz == NULL)
+ tz = g_time_zone_new_local ();
+ date_time = g_date_time_new_now (tz);
+@@ -73,7 +72,7 @@ update_timestamp (IdoLocationMenuItem * self)
+ static void
+ stop_timestamp_timer (IdoLocationMenuItem * self)
+ {
+- priv_t * p = self->priv;
++ IdoLocationMenuItemPrivate * p = ido_location_menu_item_get_instance_private(self);
+
+ if (p->timestamp_timer != 0)
+ {
+@@ -130,6 +129,7 @@ restart_timestamp_timer (IdoLocationMenuItem * self)
+ const char * fmt = ido_time_stamp_menu_item_get_format (IDO_TIME_STAMP_MENU_ITEM (self));
+ gboolean timestamp_shows_seconds;
+ int interval_sec;
++ IdoLocationMenuItemPrivate * priv = ido_location_menu_item_get_instance_private(self);
+
+ stop_timestamp_timer (self);
+
+@@ -142,7 +142,7 @@ restart_timestamp_timer (IdoLocationMenuItem * self)
+ else
+ interval_sec = calculate_seconds_until_next_minute();
+
+- self->priv->timestamp_timer = g_timeout_add_seconds (interval_sec,
++ priv->timestamp_timer = g_timeout_add_seconds (interval_sec,
+ on_timestamp_timer,
+ self);
+ }
+@@ -158,7 +158,7 @@ my_get_property (GObject * o,
+ GParamSpec * pspec)
+ {
+ IdoLocationMenuItem * self = IDO_LOCATION_MENU_ITEM (o);
+- priv_t * p = self->priv;
++ IdoLocationMenuItemPrivate * p = ido_location_menu_item_get_instance_private(self);
+
+ switch (property_id)
+ {
+@@ -204,8 +204,9 @@ static void
+ my_finalize (GObject * object)
+ {
+ IdoLocationMenuItem * self = IDO_LOCATION_MENU_ITEM (object);
++ IdoLocationMenuItemPrivate * priv = ido_location_menu_item_get_instance_private(self);
+
+- g_free (self->priv->timezone);
++ g_free (priv->timezone);
+
+ G_OBJECT_CLASS (ido_location_menu_item_parent_class)->finalize (object);
+ }
+@@ -219,8 +220,6 @@ ido_location_menu_item_class_init (IdoLocationMenuItemClass *klass)
+ {
+ GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
+
+- g_type_class_add_private (klass, sizeof (IdoLocationMenuItemPrivate));
+-
+ gobject_class->get_property = my_get_property;
+ gobject_class->set_property = my_set_property;
+ gobject_class->dispose = my_dispose;
+@@ -239,10 +238,6 @@ ido_location_menu_item_class_init (IdoLocationMenuItemClass *klass)
+ static void
+ ido_location_menu_item_init (IdoLocationMenuItem *self)
+ {
+- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+- IDO_LOCATION_MENU_ITEM_TYPE,
+- IdoLocationMenuItemPrivate);
+-
+ /* Update the timer whenever the format string changes
+ because it determines whether we update once per second or per minute */
+ g_signal_connect (self, "notify::format",
+@@ -271,10 +266,11 @@ void
+ ido_location_menu_item_set_timezone (IdoLocationMenuItem * self,
+ const char * timezone)
+ {
+- priv_t * p;
++ IdoLocationMenuItemPrivate * p;
+
+ g_return_if_fail (IDO_IS_LOCATION_MENU_ITEM (self));
+- p = self->priv;
++
++ p = ido_location_menu_item_get_instance_private(self);
+
+ g_free (p->timezone);
+ p->timezone = g_strdup (timezone);
+diff --git a/src/idolocationmenuitem.h b/src/idolocationmenuitem.h
+index 2ae231f..5d1c660 100644
+--- a/src/idolocationmenuitem.h
++++ b/src/idolocationmenuitem.h
+@@ -31,7 +31,6 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoLocationMenuItem IdoLocationMenuItem;
+ typedef struct _IdoLocationMenuItemClass IdoLocationMenuItemClass;
+-typedef struct _IdoLocationMenuItemPrivate IdoLocationMenuItemPrivate;
+
+ struct _IdoLocationMenuItemClass
+ {
+@@ -48,7 +47,6 @@ struct _IdoLocationMenuItem
+ {
+ /*< private >*/
+ IdoTimeStampMenuItem parent;
+- IdoLocationMenuItemPrivate * priv;
+ };
+
+
+diff --git a/src/idomessagedialog.c b/src/idomessagedialog.c
+index 5b73950..ef5f148 100644
+--- a/src/idomessagedialog.c
++++ b/src/idomessagedialog.c
+@@ -34,22 +34,18 @@
+ #include "idotimeline.h"
+ #include "config.h"
+
+-#define IDO_MESSAGE_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_MESSAGE_DIALOG, IdoMessageDialogPrivate))
+-
+ static GtkWidget *ido_message_dialog_get_secondary_label (IdoMessageDialog *dialog);
+ static GtkWidget *ido_message_dialog_get_primary_label (IdoMessageDialog *dialog);
+
+-typedef struct _IdoMessageDialogPrivate IdoMessageDialogPrivate;
+-typedef struct _IdoMessageDialogMorphContext IdoMessageDialogMorphContext;
+-
+-struct _IdoMessageDialogPrivate
+-{
++typedef struct {
+ GtkWidget *action_area;
+ GtkWidget *primary_label;
+ GtkWidget *secondary_label;
+
+ gboolean expanded;
+-};
++} IdoMessageDialogPrivate;
++
++typedef struct _IdoMessageDialogMorphContext IdoMessageDialogMorphContext;
+
+ struct _IdoMessageDialogMorphContext
+ {
+@@ -60,13 +56,13 @@ struct _IdoMessageDialogMorphContext
+ GtkRequisition end;
+ };
+
+-G_DEFINE_TYPE (IdoMessageDialog, ido_message_dialog, GTK_TYPE_MESSAGE_DIALOG)
++G_DEFINE_TYPE_WITH_PRIVATE (IdoMessageDialog, ido_message_dialog, GTK_TYPE_MESSAGE_DIALOG)
+
+ static void
+ ido_message_dialog_map (GtkWidget *widget)
+ {
+ IdoMessageDialog *dialog = IDO_MESSAGE_DIALOG (widget);
+- IdoMessageDialogPrivate *priv = IDO_MESSAGE_DIALOG_GET_PRIVATE (dialog);
++ IdoMessageDialogPrivate *priv = ido_message_dialog_get_instance_private (dialog);
+
+ GTK_WIDGET_CLASS (ido_message_dialog_parent_class)->map (widget);
+
+@@ -145,7 +141,7 @@ timeline_finished_cb (IdoTimeline *timeline,
+ gpointer user_data)
+ {
+ IdoMessageDialogMorphContext *context = user_data;
+- IdoMessageDialogPrivate *priv = IDO_MESSAGE_DIALOG_GET_PRIVATE (context->widget);
++ IdoMessageDialogPrivate *priv = ido_message_dialog_get_instance_private (IDO_MESSAGE_DIALOG (context->widget));
+
+ gtk_widget_show (priv->action_area);
+ gtk_widget_show (priv->secondary_label);
+@@ -158,7 +154,7 @@ ido_message_dialog_focus_in_event (GtkWidget *widget,
+ GdkEventFocus *event)
+ {
+ IdoMessageDialog *dialog = IDO_MESSAGE_DIALOG (widget);
+- IdoMessageDialogPrivate *priv = IDO_MESSAGE_DIALOG_GET_PRIVATE (dialog);
++ IdoMessageDialogPrivate *priv = ido_message_dialog_get_instance_private (dialog);
+
+ if (!priv->expanded)
+ {
+@@ -203,7 +199,9 @@ ido_message_dialog_focus_in_event (GtkWidget *widget,
+ static void
+ ido_message_dialog_constructed (GObject *object)
+ {
+- IdoMessageDialogPrivate *priv = IDO_MESSAGE_DIALOG_GET_PRIVATE (object);
++
++ IdoMessageDialog *dialog = IDO_MESSAGE_DIALOG (object);
++ IdoMessageDialogPrivate *priv = ido_message_dialog_get_instance_private (dialog);
+ GtkWidget *vbox;
+ GtkWidget *event_box;
+
+@@ -231,8 +229,6 @@ ido_message_dialog_class_init (IdoMessageDialogClass *class)
+
+ widget_class->map = ido_message_dialog_map;
+ widget_class->focus_in_event = ido_message_dialog_focus_in_event;
+-
+- g_type_class_add_private (object_class, sizeof (IdoMessageDialogPrivate));
+ }
+
+ static void
+diff --git a/src/idorange.c b/src/idorange.c
+index acdfa5d..634b223 100644
+--- a/src/idorange.c
++++ b/src/idorange.c
+@@ -27,10 +27,9 @@
+ #include "idotypebuiltins.h"
+ #include "config.h"
+
+-struct _IdoRangePrivate
+-{
++typedef struct {
+ IdoRangeStyle style;
+-};
++} IdoRangePrivate;
+
+ static void ido_range_constructed (GObject *object);
+ static void ido_range_set_property (GObject *object,
+@@ -42,9 +41,7 @@ static void ido_range_get_property (GObject *object,
+ GValue *value,
+ GParamSpec *pspec);
+
+-#define IDO_RANGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_RANGE, IdoRangePrivate))
+-
+-G_DEFINE_TYPE (IdoRange, ido_range, GTK_TYPE_SCALE)
++G_DEFINE_TYPE_WITH_PRIVATE (IdoRange, ido_range, GTK_TYPE_SCALE)
+
+ enum {
+ PROP_0,
+@@ -87,8 +84,6 @@ ido_range_class_init (IdoRangeClass *class)
+ G_MAXINT,
+ 8,
+ G_PARAM_READABLE));
+-
+- g_type_class_add_private (class, sizeof (IdoRangePrivate));
+ }
+
+ static void
+@@ -97,7 +92,8 @@ ido_range_get_property (GObject *object,
+ GValue *value,
+ GParamSpec *pspec)
+ {
+- IdoRangePrivate *priv = IDO_RANGE (object)->priv;
++ IdoRange *range = IDO_RANGE (object);
++ IdoRangePrivate *priv = ido_range_get_instance_private (range);
+
+ switch (prop_id)
+ {
+@@ -117,7 +113,8 @@ ido_range_set_property (GObject *object,
+ const GValue *value,
+ GParamSpec *pspec)
+ {
+- IdoRangePrivate *priv = IDO_RANGE (object)->priv;
++ IdoRange *range = IDO_RANGE (object);
++ IdoRangePrivate *priv = ido_range_get_instance_private (range);
+
+ switch (prop_id)
+ {
+@@ -135,6 +132,7 @@ static void
+ ido_range_constructed (GObject *object)
+ {
+ IdoRange *range = IDO_RANGE (object);
++
+ IdoRangeStyle style;
+ char buf[1024];
+
+@@ -163,7 +161,7 @@ ido_range_constructed (GObject *object)
+ static void
+ ido_range_init (IdoRange *range)
+ {
+- range->priv = IDO_RANGE_GET_PRIVATE (range);
++ /* no-op */
+ }
+
+ /**
+diff --git a/src/idorange.h b/src/idorange.h
+index 7c2e79b..beef43f 100644
+--- a/src/idorange.h
++++ b/src/idorange.h
+@@ -44,13 +44,11 @@ typedef enum
+ } IdoRangeStyle;
+
+ typedef struct _IdoRange IdoRange;
+-typedef struct _IdoRangePrivate IdoRangePrivate;
+ typedef struct _IdoRangeClass IdoRangeClass;
+
+ struct _IdoRange
+ {
+ GtkScale parent_instance;
+- IdoRangePrivate *priv;
+ };
+
+ struct _IdoRangeClass
+diff --git a/src/idoscalemenuitem.c b/src/idoscalemenuitem.c
+index de9884f..9f5f29c 100644
+--- a/src/idoscalemenuitem.c
++++ b/src/idoscalemenuitem.c
+@@ -64,7 +64,7 @@ static void update_packing (IdoScaleMenuItem
+ static void default_primary_clicked_handler (IdoScaleMenuItem *self);
+ static void default_secondary_clicked_handler (IdoScaleMenuItem *self);
+
+-struct _IdoScaleMenuItemPrivate {
++typedef struct {
+ GtkWidget *scale;
+ GtkAdjustment *adjustment;
+ GtkWidget *primary_image;
+@@ -78,7 +78,7 @@ struct _IdoScaleMenuItemPrivate {
+ IdoRangeStyle range_style;
+ gboolean ignore_value_changed;
+ gboolean has_focus;
+-};
++} IdoScaleMenuItemPrivate;
+
+ enum {
+ SLIDER_GRABBED,
+@@ -99,15 +99,15 @@ enum {
+
+ static guint signals[LAST_SIGNAL] = { 0 };
+
+-G_DEFINE_TYPE (IdoScaleMenuItem, ido_scale_menu_item, GTK_TYPE_MENU_ITEM)
+-
+-#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_SCALE_MENU_ITEM, IdoScaleMenuItemPrivate))
++G_DEFINE_TYPE_WITH_PRIVATE (IdoScaleMenuItem, ido_scale_menu_item, GTK_TYPE_MENU_ITEM)
+
+ static gboolean
+ ido_scale_menu_item_scroll_event (GtkWidget *menuitem,
+ GdkEventScroll *event)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menuitem);
++ IdoScaleMenuItem *item = IDO_SCALE_MENU_ITEM (menuitem);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (item);
++
+ GtkWidget *scale = priv->scale;
+
+ if (priv->reverse_scroll)
+@@ -138,7 +138,7 @@ ido_scale_menu_item_scale_value_changed (GtkRange *range,
+ gpointer user_data)
+ {
+ IdoScaleMenuItem *self = user_data;
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (self);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (self);
+
+ /* The signal is not sent when it was set through
+ * ido_scale_menu_item_set_value(). */
+@@ -151,7 +151,8 @@ static void
+ ido_scale_menu_item_constructed (GObject *object)
+ {
+ IdoScaleMenuItem *self = IDO_SCALE_MENU_ITEM (object);
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (self);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (self);
++
+ GObject *adj = G_OBJECT (gtk_adjustment_new (0.0, 0.0, 100.0, 1.0, 10.0, 0.0));
+ IdoRangeStyle range_style;
+ GtkWidget *hbox;
+@@ -322,14 +323,13 @@ ido_scale_menu_item_class_init (IdoScaleMenuItemClass *item_class)
+ G_TYPE_NONE,
+ 1, G_TYPE_DOUBLE);
+
+-
+- g_type_class_add_private (item_class, sizeof (IdoScaleMenuItemPrivate));
+ }
+
+ static void
+ update_packing (IdoScaleMenuItem *self, IdoScaleMenuItemStyle style)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (self);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (self);
++
+ GtkBox * box = GTK_BOX (priv->hbox);
+ GtkContainer *container = GTK_CONTAINER (priv->hbox);
+
+@@ -366,7 +366,7 @@ update_packing (IdoScaleMenuItem *self, IdoScaleMenuItemStyle style)
+ static void
+ ido_scale_menu_item_init (IdoScaleMenuItem *self)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (self);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (self);
+
+ priv->reverse_scroll = TRUE;
+
+@@ -380,7 +380,7 @@ ido_scale_menu_item_set_property (GObject *object,
+ GParamSpec *pspec)
+ {
+ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (object);
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menu_item);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
+
+ switch (prop_id)
+ {
+@@ -413,7 +413,7 @@ ido_scale_menu_item_get_property (GObject *object,
+ GParamSpec *pspec)
+ {
+ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (object);
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menu_item);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
+ GtkAdjustment *adjustment;
+
+ switch (prop_id)
+@@ -442,7 +442,8 @@ ido_scale_menu_item_parent_key_press_event (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer user_data)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (user_data);
++ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (user_data);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
+
+ /* only listen to events when the playback menu item is selected */
+ if (!priv->has_focus)
+@@ -469,7 +470,8 @@ ido_scale_menu_item_parent_key_press_event (GtkWidget *widget,
+ static void
+ ido_scale_menu_item_select (GtkMenuItem *item)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (item);
++ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (item);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
+
+ priv->has_focus = TRUE;
+ gtk_widget_set_state_flags (priv->scale, GTK_STATE_FLAG_FOCUSED, FALSE);
+@@ -480,7 +482,8 @@ ido_scale_menu_item_select (GtkMenuItem *item)
+ static void
+ ido_scale_menu_item_deselect (GtkMenuItem *item)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (item);
++ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (item);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
+
+ priv->has_focus = FALSE;
+ gtk_widget_unset_state_flags (priv->scale, GTK_STATE_FLAG_FOCUSED);
+@@ -492,7 +495,9 @@ static gboolean
+ ido_scale_menu_item_button_press_event (GtkWidget *menuitem,
+ GdkEventButton *event)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menuitem);
++ IdoScaleMenuItem *item = IDO_SCALE_MENU_ITEM (menuitem);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (item);
++
+ GtkAllocation alloc;
+ gint x, y;
+
+@@ -516,7 +521,8 @@ ido_scale_menu_item_button_release_event (GtkWidget *menuitem,
+ GdkEventButton *event)
+ {
+ IdoScaleMenuItem *item = IDO_SCALE_MENU_ITEM (menuitem);
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menuitem);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (item);
++
+ GtkWidget *scale = priv->scale;
+ GtkAllocation alloc;
+ gint x, y;
+@@ -569,7 +575,9 @@ static gboolean
+ ido_scale_menu_item_motion_notify_event (GtkWidget *menuitem,
+ GdkEventMotion *event)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menuitem);
++ IdoScaleMenuItem *menu_item = IDO_SCALE_MENU_ITEM (menuitem);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (menu_item);
++
+ GtkAllocation alloc;
+ gint x, y;
+
+@@ -596,7 +604,7 @@ static void
+ menu_hidden (GtkWidget *menu,
+ IdoScaleMenuItem *scale)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (scale);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (scale);
+
+ if (priv->grabbed)
+ {
+@@ -718,7 +726,7 @@ ido_scale_menu_item_get_scale (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), NULL);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return priv->scale;
+ }
+@@ -739,7 +747,7 @@ ido_scale_menu_item_get_style (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), IDO_SCALE_MENU_ITEM_STYLE_NONE);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return priv->style;
+ }
+@@ -760,7 +768,7 @@ ido_scale_menu_item_set_style (IdoScaleMenuItem *menuitem,
+
+ g_return_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem));
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ priv->style = style;
+
+@@ -784,7 +792,7 @@ ido_scale_menu_item_get_primary_image (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), NULL);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return priv->primary_image;
+ }
+@@ -806,7 +814,7 @@ ido_scale_menu_item_get_secondary_image (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), NULL);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return priv->secondary_image;
+ }
+@@ -859,7 +867,7 @@ ido_scale_menu_item_get_primary_label (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), NULL);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return gtk_label_get_text (GTK_LABEL (priv->primary_label));
+ }
+@@ -881,7 +889,7 @@ ido_scale_menu_item_get_secondary_label (IdoScaleMenuItem *menuitem)
+
+ g_return_val_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem), NULL);
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ return gtk_label_get_text (GTK_LABEL (priv->secondary_label));
+ }
+@@ -903,7 +911,7 @@ ido_scale_menu_item_set_primary_label (IdoScaleMenuItem *menuitem,
+
+ g_return_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem));
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ if (priv->primary_label)
+ {
+@@ -928,7 +936,7 @@ ido_scale_menu_item_set_secondary_label (IdoScaleMenuItem *menuitem,
+
+ g_return_if_fail (IDO_IS_SCALE_MENU_ITEM (menuitem));
+
+- priv = GET_PRIVATE (menuitem);
++ priv = ido_scale_menu_item_get_instance_private (menuitem);
+
+ if (priv->secondary_label)
+ {
+@@ -954,7 +962,8 @@ static void
+ default_primary_clicked_handler (IdoScaleMenuItem * item)
+ {
+ g_debug ("%s: setting scale to lower bound", G_STRFUNC);
+- IdoScaleMenuItemPrivate * priv = GET_PRIVATE (item);
++ IdoScaleMenuItemPrivate * priv = ido_scale_menu_item_get_instance_private (item);
++
+ GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (priv->scale));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+@@ -977,7 +986,7 @@ static void
+ default_secondary_clicked_handler (IdoScaleMenuItem * item)
+ {
+ g_debug ("%s: setting scale to upper bound", G_STRFUNC);
+- IdoScaleMenuItemPrivate * priv = GET_PRIVATE (item);
++ IdoScaleMenuItemPrivate * priv = ido_scale_menu_item_get_instance_private (item);
+ GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (priv->scale));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_upper (adj));
+ }
+@@ -991,7 +1000,7 @@ static void
+ ido_scale_menu_item_set_value (IdoScaleMenuItem *item,
+ gdouble value)
+ {
+- IdoScaleMenuItemPrivate *priv = GET_PRIVATE (item);
++ IdoScaleMenuItemPrivate *priv = ido_scale_menu_item_get_instance_private (item);
+
+ /* set ignore_value_changed to signify to the scale menu item that it
+ * should not emit its own value-changed signal, as that should only
+diff --git a/src/idoscalemenuitem.h b/src/idoscalemenuitem.h
+index 2c32a49..de6968e 100644
+--- a/src/idoscalemenuitem.h
++++ b/src/idoscalemenuitem.h
+@@ -47,13 +47,10 @@ typedef enum
+
+ typedef struct _IdoScaleMenuItem IdoScaleMenuItem;
+ typedef struct _IdoScaleMenuItemClass IdoScaleMenuItemClass;
+-typedef struct _IdoScaleMenuItemPrivate IdoScaleMenuItemPrivate;
+
+ struct _IdoScaleMenuItem
+ {
+ GtkMenuItem parent_instance;
+-
+- IdoScaleMenuItemPrivate *priv;
+ };
+
+ struct _IdoScaleMenuItemClass
+diff --git a/src/idoswitchmenuitem.c b/src/idoswitchmenuitem.c
+index d47392f..bd00e1d 100644
+--- a/src/idoswitchmenuitem.c
++++ b/src/idoswitchmenuitem.c
+@@ -23,24 +23,25 @@
+ #include "idoswitchmenuitem.h"
+ #include "idoactionhelper.h"
+
++static void ido_switch_menu_finalize (GObject * item);
+ static gboolean ido_switch_menu_button_release_event (GtkWidget * widget,
+ GdkEventButton * event);
+
+
+-struct _IdoSwitchMenuItemPrivate
++typedef struct
+ {
+ GtkWidget * box;
+ GtkWidget * content_area;
+ GtkWidget * label;
+ GtkWidget * image;
+ GtkWidget * switch_w;
+-};
++} IdoSwitchMenuItemPrivate;
+
+ /***
+ **** Life Cycle
+ ***/
+
+-G_DEFINE_TYPE (IdoSwitchMenuItem, ido_switch_menu_item, GTK_TYPE_CHECK_MENU_ITEM)
++G_DEFINE_TYPE_WITH_PRIVATE (IdoSwitchMenuItem, ido_switch_menu_item, GTK_TYPE_CHECK_MENU_ITEM)
+
+ static void
+ ido_switch_menu_item_class_init (IdoSwitchMenuItemClass *klass)
+@@ -50,7 +51,8 @@ ido_switch_menu_item_class_init (IdoSwitchMenuItemClass *klass)
+ GtkCheckMenuItemClass * check_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+- g_type_class_add_private (gobject_class, sizeof (IdoSwitchMenuItemPrivate));
++
++ gobject_class->finalize = ido_switch_menu_finalize;
+
+ widget_class = GTK_WIDGET_CLASS (klass);
+ widget_class->button_release_event = ido_switch_menu_button_release_event;
+@@ -62,9 +64,8 @@ ido_switch_menu_item_class_init (IdoSwitchMenuItemClass *klass)
+ static void
+ ido_switch_menu_item_init (IdoSwitchMenuItem *item)
+ {
+- IdoSwitchMenuItemPrivate *priv;
++ IdoSwitchMenuItemPrivate *priv = ido_switch_menu_item_get_instance_private(item);
+
+- priv = item->priv = G_TYPE_INSTANCE_GET_PRIVATE (item, IDO_TYPE_SWITCH_MENU_ITEM, IdoSwitchMenuItemPrivate);
+ priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ priv->content_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ priv->switch_w = gtk_switch_new ();
+@@ -134,6 +135,8 @@ ido_switch_menu_item_get_content_area (IdoSwitchMenuItem * item)
+
+ g_return_val_if_fail (IDO_IS_SWITCH_MENU_ITEM(item), NULL);
+
++ IdoSwitchMenuItemPrivate *priv = ido_switch_menu_item_get_instance_private(item);
++
+ if (!warned)
+ {
+ g_warning ("%s is deprecated. Please don't use it, especially if you're using"
+@@ -141,7 +144,7 @@ ido_switch_menu_item_get_content_area (IdoSwitchMenuItem * item)
+ warned = TRUE;
+ }
+
+- return GTK_CONTAINER (item->priv->content_area);
++ return GTK_CONTAINER (priv->content_area);
+ }
+
+ /**
+@@ -160,7 +163,7 @@ ido_switch_menu_item_set_label (IdoSwitchMenuItem *item,
+ g_return_if_fail (IDO_IS_SWITCH_MENU_ITEM (item));
+ g_return_if_fail (label != NULL);
+
+- priv = item->priv;
++ priv = ido_switch_menu_item_get_instance_private(item);
+
+ if (priv->label == NULL)
+ {
+@@ -189,7 +192,7 @@ ido_switch_menu_item_set_icon (IdoSwitchMenuItem *item,
+ g_return_if_fail (IDO_IS_SWITCH_MENU_ITEM (item));
+ g_return_if_fail (icon == NULL || G_IS_ICON (icon));
+
+- priv = item->priv;
++ priv = ido_switch_menu_item_get_instance_private(item);
+
+ if (icon)
+ {
+@@ -213,10 +216,11 @@ ido_source_menu_item_state_changed (IdoActionHelper *helper,
+ GVariant *state,
+ gpointer user_data)
+ {
+- IdoSwitchMenuItem *item = user_data;
++ IdoSwitchMenuItem *item = IDO_SWITCH_MENU_ITEM (user_data);
++ IdoSwitchMenuItemPrivate *priv = ido_switch_menu_item_get_instance_private(item);
+
+ if (g_variant_is_of_type (state, G_VARIANT_TYPE_BOOLEAN))
+- gtk_switch_set_active (GTK_SWITCH (item->priv->switch_w),
++ gtk_switch_set_active (GTK_SWITCH (priv->switch_w),
+ g_variant_get_boolean (state));
+ }
+
+@@ -269,3 +273,10 @@ ido_switch_menu_item_new_from_menu_model (GMenuItem *menuitem,
+
+ return item;
+ }
++
++static void
++ido_switch_menu_finalize (GObject * item)
++{
++ /* no-op */
++}
++
+diff --git a/src/idoswitchmenuitem.h b/src/idoswitchmenuitem.h
+index 222b473..de218d1 100644
+--- a/src/idoswitchmenuitem.h
++++ b/src/idoswitchmenuitem.h
+@@ -34,13 +34,10 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoSwitchMenuItem IdoSwitchMenuItem;
+ typedef struct _IdoSwitchMenuItemClass IdoSwitchMenuItemClass;
+-typedef struct _IdoSwitchMenuItemPrivate IdoSwitchMenuItemPrivate;
+
+ struct _IdoSwitchMenuItem
+ {
+ GtkCheckMenuItem parent_instance;
+-
+- IdoSwitchMenuItemPrivate *priv;
+ };
+
+ struct _IdoSwitchMenuItemClass
+diff --git a/src/idotimeline.c b/src/idotimeline.c
+index 8eea4b5..4929ba3 100644
+--- a/src/idotimeline.c
++++ b/src/idotimeline.c
+@@ -25,15 +25,11 @@
+ #include <gtk/gtk.h>
+ #include <math.h>
+
+-#define IDO_TIMELINE_GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), IDO_TYPE_TIMELINE, IdoTimelinePriv))
+ #define MSECS_PER_SEC 1000
+ #define FRAME_INTERVAL(nframes) (MSECS_PER_SEC / nframes)
+ #define DEFAULT_FPS 30
+
+-typedef struct IdoTimelinePriv IdoTimelinePriv;
+-
+-struct IdoTimelinePriv
+-{
++typedef struct {
+ guint duration;
+ guint fps;
+ guint source_id;
+@@ -48,7 +44,7 @@ struct IdoTimelinePriv
+ guint animations_enabled : 1;
+ guint loop : 1;
+ guint direction : 1;
+-};
++} IdoTimelinePrivate;
+
+ enum {
+ PROP_0,
+@@ -81,7 +77,7 @@ static void ido_timeline_get_property (GObject *object,
+ static void ido_timeline_finalize (GObject *object);
+
+
+-G_DEFINE_TYPE (IdoTimeline, ido_timeline, G_TYPE_OBJECT)
++G_DEFINE_TYPE_WITH_PRIVATE (IdoTimeline, ido_timeline, G_TYPE_OBJECT)
+
+
+ static void
+@@ -193,16 +189,12 @@ ido_timeline_class_init (IdoTimelineClass *klass)
+ g_cclosure_marshal_VOID__DOUBLE,
+ G_TYPE_NONE, 1,
+ G_TYPE_DOUBLE);
+-
+- g_type_class_add_private (klass, sizeof (IdoTimelinePriv));
+ }
+
+ static void
+ ido_timeline_init (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
+-
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ IdoTimelinePrivate *priv = ido_timeline_get_instance_private (timeline);
+
+ priv->fps = DEFAULT_FPS;
+ priv->duration = 0.0;
+@@ -251,11 +243,8 @@ ido_timeline_get_property (GObject *object,
+ GValue *value,
+ GParamSpec *pspec)
+ {
+- IdoTimeline *timeline;
+- IdoTimelinePriv *priv;
+-
+- timeline = IDO_TIMELINE (object);
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ IdoTimeline *timeline = IDO_TIMELINE (object);
++ IdoTimelinePrivate *priv = ido_timeline_get_instance_private (timeline);
+
+ switch (prop_id)
+ {
+@@ -282,9 +271,8 @@ ido_timeline_get_property (GObject *object,
+ static void
+ ido_timeline_finalize (GObject *object)
+ {
+- IdoTimelinePriv *priv;
+-
+- priv = IDO_TIMELINE_GET_PRIV (object);
++ IdoTimeline *timeline = IDO_TIMELINE (object);
++ IdoTimelinePrivate *priv = ido_timeline_get_instance_private (timeline);
+
+ if (priv->source_id)
+ {
+@@ -301,11 +289,10 @@ ido_timeline_finalize (GObject *object)
+ static gboolean
+ ido_timeline_run_frame (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
+ gdouble delta_progress, progress;
+ guint elapsed_time;
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ IdoTimelinePrivate *priv = ido_timeline_get_instance_private (timeline);
+
+ elapsed_time = (guint) (g_timer_elapsed (priv->timer, NULL) * 1000);
+ g_timer_start (priv->timer);
+@@ -395,12 +382,12 @@ ido_timeline_new_for_screen (guint duration,
+ void
+ ido_timeline_start (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+ gboolean enable_animations = FALSE;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (!priv->source_id)
+ {
+@@ -446,11 +433,11 @@ ido_timeline_start (IdoTimeline *timeline)
+ void
+ ido_timeline_pause (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (priv->source_id)
+ {
+@@ -470,11 +457,11 @@ ido_timeline_pause (IdoTimeline *timeline)
+ void
+ ido_timeline_rewind (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (ido_timeline_get_direction(timeline) != IDO_TIMELINE_DIRECTION_FORWARD)
+ priv->progress = priv->last_progress = 1.;
+@@ -502,11 +489,11 @@ ido_timeline_rewind (IdoTimeline *timeline)
+ gboolean
+ ido_timeline_is_running (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), FALSE);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ return (priv->source_id != 0);
+ }
+@@ -522,11 +509,12 @@ ido_timeline_is_running (IdoTimeline *timeline)
+ guint
+ ido_timeline_get_fps (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), 1);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
++
+ return priv->fps;
+ }
+
+@@ -542,12 +530,12 @@ void
+ ido_timeline_set_fps (IdoTimeline *timeline,
+ guint fps)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+ g_return_if_fail (fps > 0);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ /* Coverity CID: 12650/12651: guard against division by 0. */
+ priv->fps = fps > 0 ? fps : priv->fps;
+@@ -575,11 +563,12 @@ ido_timeline_set_fps (IdoTimeline *timeline,
+ gboolean
+ ido_timeline_get_loop (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), FALSE);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
++
+ return priv->loop;
+ }
+
+@@ -595,11 +584,11 @@ void
+ ido_timeline_set_loop (IdoTimeline *timeline,
+ gboolean loop)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (loop != priv->loop)
+ {
+@@ -619,11 +608,11 @@ void
+ ido_timeline_set_duration (IdoTimeline *timeline,
+ guint duration)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (duration != priv->duration)
+ {
+@@ -643,11 +632,11 @@ ido_timeline_set_duration (IdoTimeline *timeline,
+ guint
+ ido_timeline_get_duration (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), 0);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ return priv->duration;
+ }
+@@ -663,11 +652,11 @@ void
+ ido_timeline_set_direction (IdoTimeline *timeline,
+ IdoTimelineDirection direction)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (direction != priv->direction)
+ {
+@@ -687,11 +676,12 @@ ido_timeline_set_direction (IdoTimeline *timeline,
+ IdoTimelineDirection
+ ido_timeline_get_direction (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), IDO_TIMELINE_DIRECTION_FORWARD);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
++
+ return priv->direction;
+ }
+
+@@ -706,12 +696,12 @@ void
+ ido_timeline_set_screen (IdoTimeline *timeline,
+ GdkScreen *screen)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+ g_return_if_fail (GDK_IS_SCREEN (screen));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (priv->screen)
+ g_object_unref (priv->screen);
+@@ -732,11 +722,12 @@ ido_timeline_set_screen (IdoTimeline *timeline,
+ GdkScreen *
+ ido_timeline_get_screen (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), NULL);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
++
+ return priv->screen;
+ }
+
+@@ -751,11 +742,12 @@ ido_timeline_get_screen (IdoTimeline *timeline)
+ gdouble
+ ido_timeline_get_progress (IdoTimeline *timeline)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_val_if_fail (IDO_IS_TIMELINE (timeline), 0.);
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
++
+ return priv->progress;
+ }
+
+@@ -769,11 +761,11 @@ ido_timeline_get_progress (IdoTimeline *timeline)
+ void
+ ido_timeline_set_progress (IdoTimeline *timeline, gdouble progress)
+ {
+- IdoTimelinePriv *priv;
++ IdoTimelinePrivate *priv;
+
+ g_return_if_fail (IDO_IS_TIMELINE (timeline));
+
+- priv = IDO_TIMELINE_GET_PRIV (timeline);
++ priv = ido_timeline_get_instance_private (timeline);
+
+ if (priv->source_id)
+ {
+diff --git a/src/idotimestampmenuitem.c b/src/idotimestampmenuitem.c
+index 0d33deb..0c9c086 100644
+--- a/src/idotimestampmenuitem.c
++++ b/src/idotimestampmenuitem.c
+@@ -39,17 +39,14 @@ enum
+
+ static GParamSpec *properties[PROP_LAST];
+
+-struct _IdoTimeStampMenuItemPrivate
+-{
++typedef struct {
+ char * format;
+ GDateTime * date_time;
+-};
+-
+-typedef IdoTimeStampMenuItemPrivate priv_t;
++} IdoTimeStampMenuItemPrivate;
+
+-G_DEFINE_TYPE (IdoTimeStampMenuItem,
+- ido_time_stamp_menu_item,
+- IDO_TYPE_BASIC_MENU_ITEM);
++G_DEFINE_TYPE_WITH_PRIVATE (IdoTimeStampMenuItem,
++ ido_time_stamp_menu_item,
++ IDO_TYPE_BASIC_MENU_ITEM);
+
+ /***
+ **** GObject Virtual Functions
+@@ -62,16 +59,16 @@ my_get_property (GObject * o,
+ GParamSpec * pspec)
+ {
+ IdoTimeStampMenuItem * self = IDO_TIME_STAMP_MENU_ITEM (o);
+- priv_t * p = self->priv;
++ IdoTimeStampMenuItemPrivate * priv = ido_time_stamp_menu_item_get_instance_private(self);
+
+ switch (property_id)
+ {
+ case PROP_FORMAT:
+- g_value_set_string (v, p->format);
++ g_value_set_string (v, priv->format);
+ break;
+
+ case PROP_DATE_TIME:
+- g_value_set_boxed (v, p->date_time);
++ g_value_set_boxed (v, priv->date_time);
+ break;
+
+ default:
+@@ -108,9 +105,9 @@ static void
+ my_dispose (GObject * object)
+ {
+ IdoTimeStampMenuItem * self = IDO_TIME_STAMP_MENU_ITEM (object);
+- priv_t * p = self->priv;
++ IdoTimeStampMenuItemPrivate * priv = ido_time_stamp_menu_item_get_instance_private(self);
+
+- g_clear_pointer (&p->date_time, g_date_time_unref);
++ g_clear_pointer (&priv->date_time, g_date_time_unref);
+
+ G_OBJECT_CLASS (ido_time_stamp_menu_item_parent_class)->dispose (object);
+ }
+@@ -119,9 +116,9 @@ static void
+ my_finalize (GObject * object)
+ {
+ IdoTimeStampMenuItem * self = IDO_TIME_STAMP_MENU_ITEM (object);
+- priv_t * p = self->priv;
++ IdoTimeStampMenuItemPrivate * priv = ido_time_stamp_menu_item_get_instance_private(self);
+
+- g_free (p->format);
++ g_free (priv->format);
+
+ G_OBJECT_CLASS (ido_time_stamp_menu_item_parent_class)->finalize (object);
+ }
+@@ -136,8 +133,6 @@ ido_time_stamp_menu_item_class_init (IdoTimeStampMenuItemClass *klass)
+ GParamFlags prop_flags;
+ GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
+
+- g_type_class_add_private (klass, sizeof (IdoTimeStampMenuItemPrivate));
+-
+ gobject_class->get_property = my_get_property;
+ gobject_class->set_property = my_set_property;
+ gobject_class->dispose = my_dispose;
+@@ -167,20 +162,18 @@ ido_time_stamp_menu_item_class_init (IdoTimeStampMenuItemClass *klass)
+ static void
+ ido_time_stamp_menu_item_init (IdoTimeStampMenuItem *self)
+ {
+- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+- IDO_TYPE_TIME_STAMP_MENU_ITEM,
+- IdoTimeStampMenuItemPrivate);
+-
++ /* no-op */
+ }
+
+ static void
+ update_timestamp_label (IdoTimeStampMenuItem * self)
+ {
+ char * str;
+- priv_t * p = self->priv;
+
+- if (p->date_time && p->format)
+- str = g_date_time_format (p->date_time, p->format);
++ IdoTimeStampMenuItemPrivate * priv = ido_time_stamp_menu_item_get_instance_private(self);
++
++ if (priv->date_time && priv->format)
++ str = g_date_time_format (priv->date_time, priv->format);
+ else
+ str = NULL;
+
+@@ -210,14 +203,15 @@ void
+ ido_time_stamp_menu_item_set_date_time (IdoTimeStampMenuItem * self,
+ GDateTime * date_time)
+ {
+- priv_t * p;
++ IdoTimeStampMenuItemPrivate * priv;
+
+ g_return_if_fail (IDO_IS_TIME_STAMP_MENU_ITEM (self));
+- p = self->priv;
+
+- g_clear_pointer (&p->date_time, g_date_time_unref);
++ priv = ido_time_stamp_menu_item_get_instance_private(self);
++
++ g_clear_pointer (&priv->date_time, g_date_time_unref);
+ if (date_time != NULL)
+- p->date_time = g_date_time_ref (date_time);
++ priv->date_time = g_date_time_ref (date_time);
+ update_timestamp_label (self);
+ }
+
+@@ -234,20 +228,25 @@ void
+ ido_time_stamp_menu_item_set_format (IdoTimeStampMenuItem * self,
+ const char * strftime_fmt)
+ {
+- priv_t * p;
++ IdoTimeStampMenuItemPrivate * priv;
+
+ g_return_if_fail (IDO_IS_TIME_STAMP_MENU_ITEM (self));
+- p = self->priv;
+
+- g_free (p->format);
+- p->format = g_strdup (strftime_fmt);
++ priv = ido_time_stamp_menu_item_get_instance_private(self);
++
++ g_free (priv->format);
++ priv->format = g_strdup (strftime_fmt);
+ update_timestamp_label (self);
+ }
+
+ const gchar *
+ ido_time_stamp_menu_item_get_format (IdoTimeStampMenuItem * self)
+ {
++ IdoTimeStampMenuItemPrivate * priv;
++
+ g_return_val_if_fail (IDO_IS_TIME_STAMP_MENU_ITEM (self), NULL);
+
+- return self->priv->format;
++ priv = ido_time_stamp_menu_item_get_instance_private(self);
++
++ return priv->format;
+ }
+diff --git a/src/idotimestampmenuitem.h b/src/idotimestampmenuitem.h
+index 5847ba8..b596fad 100644
+--- a/src/idotimestampmenuitem.h
++++ b/src/idotimestampmenuitem.h
+@@ -31,7 +31,6 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoTimeStampMenuItem IdoTimeStampMenuItem;
+ typedef struct _IdoTimeStampMenuItemClass IdoTimeStampMenuItemClass;
+-typedef struct _IdoTimeStampMenuItemPrivate IdoTimeStampMenuItemPrivate;
+
+ struct _IdoTimeStampMenuItemClass
+ {
+@@ -49,7 +48,6 @@ struct _IdoTimeStampMenuItem
+ {
+ /*< private >*/
+ IdoBasicMenuItem parent;
+- IdoTimeStampMenuItemPrivate * priv;
+ };
+
+
+diff --git a/src/idousermenuitem.c b/src/idousermenuitem.c
+index 8d8673e..bbb7916 100644
+--- a/src/idousermenuitem.c
++++ b/src/idousermenuitem.c
+@@ -42,8 +42,7 @@ enum
+
+ static GParamSpec *properties[PROP_LAST];
+
+-struct _IdoUserMenuItemPrivate
+-{
++typedef struct {
+ GtkWidget* user_image;
+ GtkWidget* user_name;
+ GtkWidget* container;
+@@ -52,9 +51,9 @@ struct _IdoUserMenuItemPrivate
+ gboolean is_current_user;
+ gchar * label;
+ GIcon * icon;
+-};
++} IdoUserMenuItemPrivate;
+
+-G_DEFINE_TYPE (IdoUserMenuItem, ido_user_menu_item, GTK_TYPE_MENU_ITEM);
++G_DEFINE_TYPE_WITH_PRIVATE (IdoUserMenuItem, ido_user_menu_item, GTK_TYPE_MENU_ITEM);
+
+ /* Prototypes */
+ static gboolean ido_user_menu_item_primitive_draw_cb_gtk_3 (GtkWidget * image,
+@@ -72,23 +71,24 @@ my_get_property (GObject * o,
+ GParamSpec * pspec)
+ {
+ IdoUserMenuItem * self = IDO_USER_MENU_ITEM (o);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+ switch (property_id)
+ {
+ case PROP_LABEL:
+- g_value_set_string (value, self->priv->label);
++ g_value_set_string (value, priv->label);
+ break;
+
+ case PROP_ICON:
+- g_value_set_object (value, self->priv->icon);
++ g_value_set_object (value, priv->icon);
+ break;
+
+ case PROP_IS_LOGGED_IN:
+- g_value_set_boolean (value, self->priv->is_logged_in);
++ g_value_set_boolean (value, priv->is_logged_in);
+ break;
+
+ case PROP_IS_CURRENT_USER:
+- g_value_set_boolean (value, self->priv->is_current_user);
++ g_value_set_boolean (value, priv->is_current_user);
+ break;
+
+ default:
+@@ -104,6 +104,7 @@ my_set_property (GObject * o,
+ GParamSpec * pspec)
+ {
+ IdoUserMenuItem * self = IDO_USER_MENU_ITEM (o);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+ switch (property_id)
+ {
+@@ -120,7 +121,7 @@ my_set_property (GObject * o,
+ break;
+
+ case PROP_IS_CURRENT_USER:
+- self->priv->is_current_user = g_value_get_boolean (value);
++ priv->is_current_user = g_value_get_boolean (value);
+ gtk_widget_queue_draw (GTK_WIDGET(self));
+ break;
+
+@@ -134,8 +135,9 @@ static void
+ my_dispose (GObject *object)
+ {
+ IdoUserMenuItem * self = IDO_USER_MENU_ITEM (object);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+- g_clear_object (&self->priv->icon);
++ g_clear_object (&priv->icon);
+
+ G_OBJECT_CLASS (ido_user_menu_item_parent_class)->dispose (object);
+ }
+@@ -144,8 +146,9 @@ static void
+ my_finalize (GObject *object)
+ {
+ IdoUserMenuItem * self = IDO_USER_MENU_ITEM (object);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+- g_free (self->priv->label);
++ g_free (priv->label);
+
+ G_OBJECT_CLASS (ido_user_menu_item_parent_class)->finalize (object);
+ }
+@@ -156,8 +159,6 @@ ido_user_menu_item_class_init (IdoUserMenuItemClass *klass)
+ GParamFlags prop_flags;
+ GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
+
+- g_type_class_add_private (klass, sizeof (IdoUserMenuItemPrivate));
+-
+ gobject_class->get_property = my_get_property;
+ gobject_class->set_property = my_set_property;
+ gobject_class->dispose = my_dispose;
+@@ -197,13 +198,7 @@ ido_user_menu_item_class_init (IdoUserMenuItemClass *klass)
+ static void
+ ido_user_menu_item_init (IdoUserMenuItem *self)
+ {
+- IdoUserMenuItemPrivate * priv;
+-
+- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+- IDO_USER_MENU_ITEM_TYPE,
+- IdoUserMenuItemPrivate);
+-
+- priv = self->priv;
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+ // Create the UI elements.
+ priv->user_image = gtk_image_new ();
+@@ -260,7 +255,7 @@ ido_user_menu_item_primitive_draw_cb_gtk_3 (GtkWidget * widget,
+
+ g_return_val_if_fail(IS_IDO_USER_MENU_ITEM(user_data), FALSE);
+
+- priv = IDO_USER_MENU_ITEM(user_data)->priv;
++ priv = ido_user_menu_item_get_instance_private(IDO_USER_MENU_ITEM(user_data));
+
+ /* Draw dot only when user is the current user. */
+ if (priv->is_current_user)
+@@ -303,6 +298,8 @@ ido_user_menu_item_set_icon_from_file_icon (IdoUserMenuItem *self,
+ gint height;
+ GdkPixbuf *pixbuf;
+
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
++
+ file = g_file_icon_get_file (G_FILE_ICON (icon));
+ path = g_file_get_path (file);
+
+@@ -316,7 +313,7 @@ ido_user_menu_item_set_icon_from_file_icon (IdoUserMenuItem *self,
+
+ if (pixbuf)
+ {
+- gtk_image_set_from_pixbuf (GTK_IMAGE (self->priv->user_image), pixbuf);
++ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->user_image), pixbuf);
+ g_object_unref (pixbuf);
+ return TRUE;
+ }
+@@ -331,15 +328,15 @@ ido_user_menu_item_set_icon_from_file_icon (IdoUserMenuItem *self,
+ void
+ ido_user_menu_item_set_icon (IdoUserMenuItem * self, GIcon * icon)
+ {
+- IdoUserMenuItemPrivate * p = self->priv;
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
+
+- if (p->icon == icon)
++ if (priv->icon == icon)
+ return;
+
+- g_clear_object (&p->icon);
++ g_clear_object (&priv->icon);
+
+ if (icon)
+- p->icon = g_object_ref (icon);
++ priv->icon = g_object_ref (icon);
+
+ /* Avatars are always loaded from disk. Show the fallback when no icon
+ * is set, the icon is not a file icon, or the file could not be
+@@ -349,7 +346,7 @@ ido_user_menu_item_set_icon (IdoUserMenuItem * self, GIcon * icon)
+ !G_IS_FILE_ICON (icon) ||
+ !ido_user_menu_item_set_icon_from_file_icon (self, G_FILE_ICON (icon)))
+ {
+- gtk_image_set_from_icon_name (GTK_IMAGE (p->user_image),
++ gtk_image_set_from_icon_name (GTK_IMAGE (priv->user_image),
+ FALLBACK_ICON_NAME,
+ GTK_ICON_SIZE_MENU);
+ }
+@@ -370,20 +367,26 @@ ido_user_menu_item_set_icon_from_file (IdoUserMenuItem * self, const char * file
+ void
+ ido_user_menu_item_set_logged_in (IdoUserMenuItem * self, gboolean is_logged_in)
+ {
+- gtk_widget_set_visible (self->priv->tick_icon, is_logged_in);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
++
++ gtk_widget_set_visible (priv->tick_icon, is_logged_in);
+ }
+
+ void
+ ido_user_menu_item_set_current_user (IdoUserMenuItem * self, gboolean is_current_user)
+ {
+- self->priv->is_current_user = is_current_user;
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
++
++ priv->is_current_user = is_current_user;
+ gtk_widget_queue_draw (GTK_WIDGET (self));
+ }
+
+ void
+ ido_user_menu_item_set_label (IdoUserMenuItem * self, const char * label)
+ {
+- gtk_label_set_label (GTK_LABEL(self->priv->user_name), label);
++ IdoUserMenuItemPrivate * priv = ido_user_menu_item_get_instance_private(self);
++
++ gtk_label_set_label (GTK_LABEL(priv->user_name), label);
+ }
+
+ GtkWidget*
+diff --git a/src/idousermenuitem.h b/src/idousermenuitem.h
+index d1d5729..093078d 100644
+--- a/src/idousermenuitem.h
++++ b/src/idousermenuitem.h
+@@ -32,7 +32,6 @@ G_BEGIN_DECLS
+
+ typedef struct _IdoUserMenuItem IdoUserMenuItem;
+ typedef struct _IdoUserMenuItemClass IdoUserMenuItemClass;
+-typedef struct _IdoUserMenuItemPrivate IdoUserMenuItemPrivate;
+
+ /* property keys */
+ #define IDO_USER_MENU_ITEM_PROP_LABEL "label"
+@@ -49,7 +48,6 @@ struct _IdoUserMenuItem
+ {
+ /*< private >*/
+ GtkMenuItem parent;
+- IdoUserMenuItemPrivate * priv;
+ };
+
+ GType ido_user_menu_item_get_type (void) G_GNUC_CONST;