diff options
Diffstat (limited to 'src/idousermenuitem.c')
-rw-r--r-- | src/idousermenuitem.c | 63 |
1 files changed, 33 insertions, 30 deletions
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* |