Merge branch '1858-tutorial-deprecated-gobject-api' into 'master'

Fix handling of private object members in GObject property tutorial

Closes #1858

See merge request GNOME/glib!1069
This commit is contained in:
Philip Withnall 2019-10-10 13:15:39 +00:00
commit 0869cdedcf

View File

@ -65,6 +65,8 @@ struct _ViewerFile
GObject parent_instance; GObject parent_instance;
/* instance members */ /* instance members */
gchar *filename;
guint zoom_level;
}; };
/* will create viewer_file_get_type and set viewer_file_parent_class */ /* will create viewer_file_get_type and set viewer_file_parent_class */
@ -80,12 +82,25 @@ viewer_file_constructed (GObject *obj)
G_OBJECT_CLASS (viewer_file_parent_class)->constructed (obj); G_OBJECT_CLASS (viewer_file_parent_class)->constructed (obj);
} }
static void
viewer_file_finalize (GObject *obj)
{
ViewerFile *self = VIEWER_FILE (obj);
g_free (self->filename);
/* Always chain up to the parent finalize function to complete object
* destruction. */
G_OBJECT_CLASS (viewer_file_parent_class)->finalize (obj);
}
static void static void
viewer_file_class_init (ViewerFileClass *klass) viewer_file_class_init (ViewerFileClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = viewer_file_constructed; object_class->constructed = viewer_file_constructed;
object_class->finalize = viewer_file_finalize;
} }
static void static void
@ -465,12 +480,12 @@ ViewerFile *file = g_object_new (VIEWER_TYPE_FILE, NULL);
/* Implementation */ /* Implementation */
/************************************************/ /************************************************/
enum typedef enum
{ {
PROP_FILENAME = 1, PROP_FILENAME = 1,
PROP_ZOOM_LEVEL, PROP_ZOOM_LEVEL,
N_PROPERTIES N_PROPERTIES
}; } ViewerFileProperty;
static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
@ -482,7 +497,7 @@ viewer_file_set_property (GObject *object,
{ {
ViewerFile *self = VIEWER_FILE (object); ViewerFile *self = VIEWER_FILE (object);
switch (property_id) switch ((ViewerFileProperty) property_id)
{ {
case PROP_FILENAME: case PROP_FILENAME:
g_free (self->filename); g_free (self->filename);
@ -510,7 +525,7 @@ viewer_file_get_property (GObject *object,
{ {
ViewerFile *self = VIEWER_FILE (object); ViewerFile *self = VIEWER_FILE (object);
switch (property_id) switch ((ViewerFileProperty) property_id)
{ {
case PROP_FILENAME: case PROP_FILENAME:
g_value_set_string (value, self->filename); g_value_set_string (value, self->filename);