--- a/libpurple/image.c Thu Jun 01 19:59:58 2017 -0500 +++ b/libpurple/image.c Mon Jun 05 20:51:11 2017 -0500 @@ -41,6 +41,7 @@ enum { PROP_0, + PROP_PATH, PROP_CONTENTS, PROP_SIZE, PROP_LAST @@ -52,6 +53,15 @@ * Helpers ******************************************************************************/ static void +_purple_image_set_path(PurpleImage *image, const gchar *path) { + PurpleImagePrivate *priv = PURPLE_IMAGE_GET_PRIVATE(image); + + g_free(priv->path); + + priv->path = g_strdup(path); +} + +static void _purple_image_set_contents(PurpleImage *image, GBytes *bytes) { PurpleImagePrivate *priv = PURPLE_IMAGE_GET_PRIVATE(image); @@ -91,6 +101,9 @@ PurpleImage *image = PURPLE_IMAGE(obj); switch (param_id) { + case PROP_PATH: + _purple_image_set_path(image, g_value_get_string(value)); + break; case PROP_CONTENTS: _purple_image_set_contents(image, g_value_get_boxed(value)); break; @@ -107,6 +120,9 @@ PurpleImage *image = PURPLE_IMAGE(obj); switch (param_id) { + case PROP_PATH: + g_value_set_string(value, purple_image_get_path(image)); + break; case PROP_CONTENTS: g_value_set_boxed(value, purple_image_get_contents(image)); break; @@ -127,6 +143,14 @@ gobj_class->get_property = purple_image_get_property; gobj_class->set_property = purple_image_set_property; + properties[PROP_PATH] = g_param_spec_string( + "path", + "path", + "The filepath for the image if one was provided", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS + ); + properties[PROP_CONTENTS] = g_param_spec_boxed( "contents", "contents", @@ -252,7 +276,7 @@ g_return_val_if_fail(priv != NULL, NULL); - return priv->path; + return priv->path ? priv->path : purple_image_generate_filename(image); } gsize