[gimp] app: Enforce privacy of GimpObject members
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Enforce privacy of GimpObject members
- Date: Mon, 31 Aug 2009 19:20:42 +0000 (UTC)
commit 5fbe68c26b681f35882eabf5e5a6c85b80d4480f
Author: Martin Nordholts <martinn src gnome org>
Date: Mon Aug 31 21:23:07 2009 +0200
app: Enforce privacy of GimpObject members
Use g_type_class_add_private() for GimpObject to prevent private data
from being modified "accidentally".
app/core/gimpobject.c | 96 ++++++++++++++++++++++++++++---------------------
app/core/gimpobject.h | 11 ++----
2 files changed, 59 insertions(+), 48 deletions(-)
---
diff --git a/app/core/gimpobject.c b/app/core/gimpobject.c
index 66f616c..bd41cad 100644
--- a/app/core/gimpobject.c
+++ b/app/core/gimpobject.c
@@ -44,6 +44,15 @@ enum
};
+struct _GimpObjectPrivate
+{
+ gchar *name;
+ gchar *normalized;
+ guint static_name : 1;
+ guint disconnected : 1;
+};
+
+
static void gimp_object_dispose (GObject *object);
static void gimp_object_finalize (GObject *object);
static void gimp_object_set_property (GObject *object,
@@ -104,13 +113,18 @@ gimp_object_class_init (GimpObjectClass *klass)
NULL,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ g_type_class_add_private (klass,
+ sizeof (GimpObjectPrivate));
}
static void
gimp_object_init (GimpObject *object)
{
- object->name = NULL;
- object->normalized = NULL;
+ object->p = G_TYPE_INSTANCE_GET_PRIVATE (object,
+ GIMP_TYPE_OBJECT,
+ GimpObjectPrivate);
+ object->p->name = NULL;
+ object->p->normalized = NULL;
}
static void
@@ -118,11 +132,11 @@ gimp_object_dispose (GObject *object)
{
GimpObject *gimp_object = GIMP_OBJECT (object);
- if (! gimp_object->disconnected)
+ if (! gimp_object->p->disconnected)
{
g_signal_emit (object, object_signals[DISCONNECT], 0);
- gimp_object->disconnected = TRUE;
+ gimp_object->p->disconnected = TRUE;
}
G_OBJECT_CLASS (parent_class)->dispose (object);
@@ -166,10 +180,10 @@ gimp_object_get_property (GObject *object,
switch (property_id)
{
case PROP_NAME:
- if (gimp_object->static_name)
- g_value_set_static_string (value, gimp_object->name);
+ if (gimp_object->p->static_name)
+ g_value_set_static_string (value, gimp_object->p->name);
else
- g_value_set_string (value, gimp_object->name);
+ g_value_set_string (value, gimp_object->p->name);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -191,14 +205,14 @@ gimp_object_set_name (GimpObject *object,
{
g_return_if_fail (GIMP_IS_OBJECT (object));
- if ((!object->name && !name) ||
- (object->name && name && !strcmp (object->name, name)))
+ if ((!object->p->name && !name) ||
+ (object->p->name && name && !strcmp (object->p->name, name)))
return;
gimp_object_name_free (object);
- object->name = g_strdup (name);
- object->static_name = FALSE;
+ object->p->name = g_strdup (name);
+ object->p->static_name = FALSE;
gimp_object_name_changed (object);
g_object_notify (G_OBJECT (object), "name");
@@ -219,14 +233,14 @@ gimp_object_set_name_safe (GimpObject *object,
{
g_return_if_fail (GIMP_IS_OBJECT (object));
- if ((!object->name && !name) ||
- (object->name && name && !strcmp (object->name, name)))
+ if ((!object->p->name && !name) ||
+ (object->p->name && name && !strcmp (object->p->name, name)))
return;
gimp_object_name_free (object);
- object->name = gimp_utf8_strtrim (name, 30);
- object->static_name = FALSE;
+ object->p->name = gimp_utf8_strtrim (name, 30);
+ object->p->static_name = FALSE;
gimp_object_name_changed (object);
g_object_notify (G_OBJECT (object), "name");
@@ -240,8 +254,8 @@ gimp_object_set_static_name (GimpObject *object,
gimp_object_name_free (object);
- object->name = (gchar *) name;
- object->static_name = TRUE;
+ object->p->name = (gchar *) name;
+ object->p->static_name = TRUE;
gimp_object_name_changed (object);
g_object_notify (G_OBJECT (object), "name");
@@ -255,8 +269,8 @@ gimp_object_take_name (GimpObject *object,
gimp_object_name_free (object);
- object->name = name;
- object->static_name = FALSE;
+ object->p->name = name;
+ object->p->static_name = FALSE;
gimp_object_name_changed (object);
g_object_notify (G_OBJECT (object), "name");
@@ -277,7 +291,7 @@ gimp_object_get_name (gconstpointer object)
const GimpObject *object_typed = object;
g_return_val_if_fail (GIMP_IS_OBJECT (object_typed), NULL);
- return object_typed->name;
+ return object_typed->p->name;
}
/**
@@ -309,21 +323,21 @@ gimp_object_name_changed (GimpObject *object)
void
gimp_object_name_free (GimpObject *object)
{
- if (object->normalized)
+ if (object->p->normalized)
{
- if (object->normalized != object->name)
- g_free (object->normalized);
+ if (object->p->normalized != object->p->name)
+ g_free (object->p->normalized);
- object->normalized = NULL;
+ object->p->normalized = NULL;
}
- if (object->name)
+ if (object->p->name)
{
- if (! object->static_name)
- g_free (object->name);
+ if (! object->p->static_name)
+ g_free (object->p->name);
- object->name = NULL;
- object->static_name = FALSE;
+ object->p->name = NULL;
+ object->p->static_name = FALSE;
}
}
@@ -344,32 +358,32 @@ gint
gimp_object_name_collate (GimpObject *object1,
GimpObject *object2)
{
- if (! object1->normalized)
+ if (! object1->p->normalized)
gimp_object_name_normalize (object1);
- if (! object2->normalized)
+ if (! object2->p->normalized)
gimp_object_name_normalize (object2);
- return strcmp (object1->normalized, object2->normalized);
+ return strcmp (object1->p->normalized, object2->p->normalized);
}
static void
gimp_object_name_normalize (GimpObject *object)
{
- g_return_if_fail (object->normalized == NULL);
+ g_return_if_fail (object->p->normalized == NULL);
- if (object->name)
+ if (object->p->name)
{
- gchar *key = g_utf8_collate_key (object->name, -1);
+ gchar *key = g_utf8_collate_key (object->p->name, -1);
- if (strcmp (key, object->name))
+ if (strcmp (key, object->p->name))
{
- object->normalized = key;
+ object->p->normalized = key;
}
else
{
g_free (key);
- object->normalized = object->name;
+ object->p->normalized = object->p->name;
}
}
}
@@ -430,7 +444,7 @@ gimp_object_get_memsize (GimpObject *object,
"(%" G_GINT64_FORMAT ")\n",
indent_buf,
g_type_name (G_TYPE_FROM_INSTANCE (object)),
- object->name ? object->name : "anonymous",
+ object->p->name ? object->p->name : "anonymous",
memsize,
gui_memsize);
@@ -469,8 +483,8 @@ gimp_object_real_get_memsize (GimpObject *object,
{
gint64 memsize = 0;
- if (! object->static_name)
- memsize += gimp_string_get_memsize (object->name);
+ if (! object->p->static_name)
+ memsize += gimp_string_get_memsize (object->p->name);
return memsize + gimp_g_object_get_memsize ((GObject *) object);
}
diff --git a/app/core/gimpobject.h b/app/core/gimpobject.h
index a61c5e2..40960a6 100644
--- a/app/core/gimpobject.h
+++ b/app/core/gimpobject.h
@@ -27,17 +27,14 @@
#define GIMP_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OBJECT, GimpObjectClass))
-typedef struct _GimpObjectClass GimpObjectClass;
+typedef struct _GimpObjectPrivate GimpObjectPrivate;
+typedef struct _GimpObjectClass GimpObjectClass;
struct _GimpObject
{
- GObject parent_instance;
+ GObject parent_instance;
- /*< private >*/
- gchar *name;
- gchar *normalized;
- guint static_name : 1;
- guint disconnected : 1;
+ GimpObjectPrivate *p;
};
struct _GimpObjectClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]