[gnome-photos/wip/rishi/import-0: 1/5] source: Prevent the ID and name from getting overwritten
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/import-0: 1/5] source: Prevent the ID and name from getting overwritten
- Date: Wed, 7 Feb 2018 04:12:43 +0000 (UTC)
commit 34965b2d8eda41483626aa23bc7518e1b9d8099e
Author: Debarshi Ray <debarshir gnome org>
Date: Thu Jan 11 19:04:54 2018 +0100
source: Prevent the ID and name from getting overwritten
The "id" and "name" properties of a Source created from a GoaObject are
set based on attributes of the GoaObject, and are not separately routed
through GObject's property machinery. Since they are marked as
construct properties, GObject will set them to their default values,
which is NULL in both cases, regardless of whether they were already
set outside of the property machinery.
This hasn't been a problem so far because GObject sorts the construct
properties alphabetically before setting them, and "id" and "name"
precede "object". This will break when a "mount" property, analogous to
"object", for GMount-backed sources gets added in a subsequent commit.
https://gitlab.gnome.org/GNOME/gnome-photos/issues/29
src/photos-source.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/src/photos-source.c b/src/photos-source.c
index 845f1c86..500dccc7 100644
--- a/src/photos-source.c
+++ b/src/photos-source.c
@@ -241,12 +241,30 @@ photos_source_set_property (GObject *object, guint prop_id, const GValue *value,
break;
case PROP_ID:
- self->id = g_value_dup_string (value);
- break;
+ {
+ const gchar *id;
+
+ id = g_value_get_string (value);
+ g_return_if_fail (self->id == NULL || id == NULL);
+
+ if (self->id == NULL && id != NULL)
+ self->id = g_strdup (id);
+
+ break;
+ }
case PROP_NAME:
- self->name = g_value_dup_string (value);
- break;
+ {
+ const gchar *name;
+
+ name = g_value_get_string (value);
+ g_return_if_fail (self->name == NULL || name == NULL);
+
+ if (self->name == NULL && name != NULL)
+ self->name = g_strdup (name);
+
+ break;
+ }
case PROP_OBJECT:
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]