[gimp] app: Support obsolete data resources
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Support obsolete data resources
- Date: Thu, 13 Aug 2009 19:52:31 +0000 (UTC)
commit 3d0c025a5175e6419fd7281bac8e2cc92db6b67a
Author: Martin Nordholts <martinn src gnome org>
Date: Tue Aug 11 20:38:12 2009 +0200
app: Support obsolete data resources
Add support for having obsolete data resources. An obsolete resource
is not shown in the UI or managed in any way, but it will be
considered when plug-ins requests resources. This in order to maintain
backwards compatibility for plug-ins.
app/core/gimpdatafactory.c | 35 ++++++++++++++++++++++++++++++++++-
app/core/gimpdatafactory.h | 2 ++
app/pdb/gimppdb-utils.c | 27 +++++++++++++++++++--------
3 files changed, 55 insertions(+), 9 deletions(-)
---
diff --git a/app/core/gimpdatafactory.c b/app/core/gimpdatafactory.c
index dd92dd3..05abbe3 100644
--- a/app/core/gimpdatafactory.c
+++ b/app/core/gimpdatafactory.c
@@ -42,12 +42,19 @@
#define WRITABLE_PATH_KEY "gimp-data-factory-writable-path"
+/* Data files that have this string in their path are considered
+ * obsolete and are only kept around for backwards compatibility
+ */
+#define GIMP_OBSOLETE_DATA_DIR_NAME "gimp-obsolete-files"
+
struct _GimpDataFactoryPriv
{
Gimp *gimp;
GimpContainer *container;
+ GimpContainer *container_obsolete;
+
gchar *path_property_name;
gchar *writable_property_name;
@@ -102,6 +109,7 @@ gimp_data_factory_init (GimpDataFactory *factory)
factory->priv->gimp = NULL;
factory->priv->container = NULL;
+ factory->priv->container_obsolete = NULL;
factory->priv->path_property_name = NULL;
factory->priv->writable_property_name = NULL;
factory->priv->loader_entries = NULL;
@@ -121,6 +129,12 @@ gimp_data_factory_finalize (GObject *object)
factory->priv->container = NULL;
}
+ if (factory->priv->container_obsolete)
+ {
+ g_object_unref (factory->priv->container_obsolete);
+ factory->priv->container_obsolete = NULL;
+ }
+
if (factory->priv->path_property_name)
{
g_free (factory->priv->path_property_name);
@@ -145,6 +159,8 @@ gimp_data_factory_get_memsize (GimpObject *object,
memsize += gimp_object_get_memsize (GIMP_OBJECT (factory->priv->container),
gui_size);
+ memsize += gimp_object_get_memsize (GIMP_OBJECT (factory->priv->container_obsolete),
+ gui_size);
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);
@@ -175,6 +191,9 @@ gimp_data_factory_new (Gimp *gimp,
factory->priv->container = gimp_list_new (data_type, TRUE);
gimp_list_set_sort_func (GIMP_LIST (factory->priv->container),
(GCompareFunc) gimp_data_compare);
+ factory->priv->container_obsolete = gimp_list_new (data_type, TRUE);
+ gimp_list_set_sort_func (GIMP_LIST (factory->priv->container_obsolete),
+ (GCompareFunc) gimp_data_compare);
factory->priv->path_property_name = g_strdup (path_property_name);
factory->priv->writable_property_name = g_strdup (writable_property_name);
@@ -630,6 +649,14 @@ gimp_data_factory_get_container (GimpDataFactory *factory)
return factory->priv->container;
}
+GimpContainer *
+gimp_data_factory_get_container_obsolete (GimpDataFactory *factory)
+{
+ g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), NULL);
+
+ return factory->priv->container_obsolete;
+}
+
Gimp *
gimp_data_factory_get_gimp (GimpDataFactory *factory)
{
@@ -783,7 +810,13 @@ gimp_data_factory_load_data (const GimpDatafileData *file_data,
data->mtime = file_data->mtime;
data->dirty = FALSE;
- gimp_container_add (factory->priv->container, GIMP_OBJECT (data));
+ if (strstr (file_data->dirname, GIMP_OBSOLETE_DATA_DIR_NAME))
+ gimp_container_add (factory->priv->container_obsolete,
+ GIMP_OBJECT (data));
+ else
+ gimp_container_add (factory->priv->container,
+ GIMP_OBJECT (data));
+
g_object_unref (data);
}
diff --git a/app/core/gimpdatafactory.h b/app/core/gimpdatafactory.h
index 9717868..bad6033 100644
--- a/app/core/gimpdatafactory.h
+++ b/app/core/gimpdatafactory.h
@@ -95,6 +95,8 @@ gboolean gimp_data_factory_data_save_single (GimpDataFactory *factory,
GimpData *data,
GError **error);
GimpContainer * gimp_data_factory_get_container (GimpDataFactory *factory);
+GimpContainer * gimp_data_factory_get_container_obsolete
+ (GimpDataFactory *factory);
Gimp * gimp_data_factory_get_gimp (GimpDataFactory *factory);
gboolean gimp_data_factory_has_data_new_func (GimpDataFactory *factory);
diff --git a/app/pdb/gimppdb-utils.c b/app/pdb/gimppdb-utils.c
index fab4189..4fd5ff0 100644
--- a/app/pdb/gimppdb-utils.c
+++ b/app/pdb/gimppdb-utils.c
@@ -41,6 +41,21 @@
#include "gimp-intl.h"
+static GimpObject *
+gimp_pdb_get_data_factory_item (GimpDataFactory *data_factory,
+ const gchar *name)
+{
+ GimpObject *gimp_object;
+
+ gimp_object = gimp_container_get_child_by_name (gimp_data_factory_get_container (data_factory), name);
+
+ if (! gimp_object)
+ gimp_object = gimp_container_get_child_by_name (gimp_data_factory_get_container_obsolete (data_factory), name);
+
+ return gimp_object;
+}
+
+
GimpBrush *
gimp_pdb_get_brush (Gimp *gimp,
const gchar *name,
@@ -59,8 +74,7 @@ gimp_pdb_get_brush (Gimp *gimp,
return NULL;
}
- brush = (GimpBrush *)
- gimp_container_get_child_by_name (gimp_data_factory_get_container (gimp->brush_factory), name);
+ brush = (GimpBrush *) gimp_pdb_get_data_factory_item (gimp->brush_factory, name);
if (! brush)
{
@@ -120,8 +134,7 @@ gimp_pdb_get_pattern (Gimp *gimp,
return NULL;
}
- pattern = (GimpPattern *)
- gimp_container_get_child_by_name (gimp_data_factory_get_container (gimp->pattern_factory), name);
+ pattern = (GimpPattern *) gimp_pdb_get_data_factory_item (gimp->pattern_factory, name);
if (! pattern)
{
@@ -150,8 +163,7 @@ gimp_pdb_get_gradient (Gimp *gimp,
return NULL;
}
- gradient = (GimpGradient *)
- gimp_container_get_child_by_name (gimp_data_factory_get_container (gimp->gradient_factory), name);
+ gradient = (GimpGradient *) gimp_pdb_get_data_factory_item (gimp->gradient_factory, name);
if (! gradient)
{
@@ -186,8 +198,7 @@ gimp_pdb_get_palette (Gimp *gimp,
return NULL;
}
- palette = (GimpPalette *)
- gimp_container_get_child_by_name (gimp_data_factory_get_container (gimp->palette_factory), name);
+ palette = (GimpPalette *) gimp_pdb_get_data_factory_item (gimp->palette_factory, name);
if (! palette)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]