[gimp] app: virtualize the add/remove/freeze/thaw logic of GimpFilteredContainer
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: virtualize the add/remove/freeze/thaw logic of GimpFilteredContainer
- Date: Wed, 23 Mar 2011 21:13:56 +0000 (UTC)
commit f2d5831ee28e9abb1f15af0e0cf806294cf015a4
Author: Michael Natterer <mitch gimp org>
Date: Wed Mar 23 22:12:49 2011 +0100
app: virtualize the add/remove/freeze/thaw logic of GimpFilteredContainer
and derive GimpTaggedContainer from it, removing a lot od code
dupliucation.
app/core/gimpfilteredcontainer.c | 131 ++++++++++----
app/core/gimpfilteredcontainer.h | 7 +
app/core/gimptaggedcontainer.c | 355 ++++++++++++--------------------------
app/core/gimptaggedcontainer.h | 14 +-
4 files changed, 221 insertions(+), 286 deletions(-)
---
diff --git a/app/core/gimpfilteredcontainer.c b/app/core/gimpfilteredcontainer.c
index 54d731b..7bcec47 100644
--- a/app/core/gimpfilteredcontainer.c
+++ b/app/core/gimpfilteredcontainer.c
@@ -37,28 +37,35 @@ enum
};
-static void gimp_filtered_container_constructed (GObject *object);
-static void gimp_filtered_container_dispose (GObject *object);
-static void gimp_filtered_container_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gimp_filtered_container_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec);
-
-static void gimp_filtered_container_filter (GimpFilteredContainer *filtered_container);
-static void gimp_filtered_container_src_add (GimpContainer *src_container,
- GimpObject *obj,
- GimpFilteredContainer *filtered_container);
-static void gimp_filtered_container_src_remove (GimpContainer *src_container,
- GimpObject *obj,
- GimpFilteredContainer *filtered_container);
-static void gimp_filtered_container_src_freeze (GimpContainer *src_container,
- GimpFilteredContainer *filtered_container);
-static void gimp_filtered_container_src_thaw (GimpContainer *src_container,
- GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_constructed (GObject *object);
+static void gimp_filtered_container_dispose (GObject *object);
+static void gimp_filtered_container_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gimp_filtered_container_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static void gimp_filtered_container_real_src_add (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+static void gimp_filtered_container_real_src_remove (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+static void gimp_filtered_container_real_src_freeze (GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_real_src_thaw (GimpFilteredContainer *filtered_container);
+
+static void gimp_filtered_container_filter (GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_src_add (GimpContainer *src_container,
+ GimpObject *obj,
+ GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_src_remove (GimpContainer *src_container,
+ GimpObject *obj,
+ GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_src_freeze (GimpContainer *src_container,
+ GimpFilteredContainer *filtered_container);
+static void gimp_filtered_container_src_thaw (GimpContainer *src_container,
+ GimpFilteredContainer *filtered_container);
G_DEFINE_TYPE (GimpFilteredContainer, gimp_filtered_container, GIMP_TYPE_LIST)
@@ -69,13 +76,19 @@ G_DEFINE_TYPE (GimpFilteredContainer, gimp_filtered_container, GIMP_TYPE_LIST)
static void
gimp_filtered_container_class_init (GimpFilteredContainerClass *klass)
{
- GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ GimpFilteredContainerClass *filtered_class = GIMP_FILTERED_CONTAINER_CLASS (klass);
g_object_class->constructed = gimp_filtered_container_constructed;
g_object_class->dispose = gimp_filtered_container_dispose;
g_object_class->set_property = gimp_filtered_container_set_property;
g_object_class->get_property = gimp_filtered_container_get_property;
+ filtered_class->src_add = gimp_filtered_container_real_src_add;
+ filtered_class->src_remove = gimp_filtered_container_real_src_remove;
+ filtered_class->src_freeze = gimp_filtered_container_real_src_freeze;
+ filtered_class->src_thaw = gimp_filtered_container_real_src_thaw;
+
g_object_class_install_property (g_object_class, PROP_SRC_CONTAINER,
g_param_spec_object ("src-container",
NULL, NULL,
@@ -110,10 +123,18 @@ gimp_filtered_container_constructed (GObject *object)
G_OBJECT_CLASS (parent_class)->constructed (object);
g_assert (GIMP_IS_CONTAINER (filtered_container->src_container));
- g_assert (filtered_container->filter_func != NULL);
if (! gimp_container_frozen (filtered_container->src_container))
- gimp_filtered_container_filter (filtered_container);
+ {
+ /* a freeze/thaw can't hurt on a newly created container because
+ * we can't have any views yet. This way we get away without
+ * having a virtual function for initializing the container.
+ */
+ gimp_filtered_container_src_freeze (filtered_container->src_container,
+ filtered_container);
+ gimp_filtered_container_src_thaw (filtered_container->src_container,
+ filtered_container);
+ }
}
static void
@@ -212,6 +233,40 @@ gimp_filtered_container_get_property (GObject *object,
}
}
+static void
+gimp_filtered_container_real_src_add (GimpFilteredContainer *filtered_container,
+ GimpObject *object)
+{
+ if (! filtered_container->filter_func ||
+ filtered_container->filter_func (object, filtered_container->filter_data))
+ {
+ gimp_container_add (GIMP_CONTAINER (filtered_container), object);
+ }
+}
+
+static void
+gimp_filtered_container_real_src_remove (GimpFilteredContainer *filtered_container,
+ GimpObject *object)
+{
+ if (! filtered_container->filter_func ||
+ filtered_container->filter_func (object, filtered_container->filter_data))
+ {
+ gimp_container_remove (GIMP_CONTAINER (filtered_container), object);
+ }
+}
+
+static void
+gimp_filtered_container_real_src_freeze (GimpFilteredContainer *filtered_container)
+{
+ gimp_container_clear (GIMP_CONTAINER (filtered_container));
+}
+
+static void
+gimp_filtered_container_real_src_thaw (GimpFilteredContainer *filtered_container)
+{
+ gimp_filtered_container_filter (filtered_container);
+}
+
/**
* gimp_filtered_container_new:
* @src_container: container to be filtered.
@@ -232,7 +287,6 @@ gimp_filtered_container_new (GimpContainer *src_container,
GCompareFunc sort_func;
g_return_val_if_fail (GIMP_IS_LIST (src_container), NULL);
- g_return_val_if_fail (filter_func != NULL, NULL);
children_type = gimp_container_get_children_type (src_container);
sort_func = GIMP_LIST (src_container)->sort_func;
@@ -259,7 +313,8 @@ gimp_filtered_container_filter (GimpFilteredContainer *filtered_container)
{
GimpObject *child = list->data;
- if (filtered_container->filter_func (child,
+ if (! filtered_container->filter_func ||
+ filtered_container->filter_func (child,
filtered_container->filter_data))
{
gimp_container_add (GIMP_CONTAINER (filtered_container), child);
@@ -269,25 +324,25 @@ gimp_filtered_container_filter (GimpFilteredContainer *filtered_container)
static void
gimp_filtered_container_src_add (GimpContainer *src_container,
- GimpObject *obj,
+ GimpObject *object,
GimpFilteredContainer *filtered_container)
{
- if (! gimp_container_frozen (src_container) &&
- filtered_container->filter_func (obj, filtered_container->filter_data))
+ if (! gimp_container_frozen (filtered_container->src_container))
{
- gimp_container_add (GIMP_CONTAINER (filtered_container), obj);
+ GIMP_FILTERED_CONTAINER_GET_CLASS (filtered_container)->src_add (filtered_container,
+ object);
}
}
static void
gimp_filtered_container_src_remove (GimpContainer *src_container,
- GimpObject *obj,
+ GimpObject *object,
GimpFilteredContainer *filtered_container)
{
- if (! gimp_container_frozen (src_container) &&
- filtered_container->filter_func (obj, filtered_container->filter_data))
+ if (! gimp_container_frozen (filtered_container->src_container))
{
- gimp_container_remove (GIMP_CONTAINER (filtered_container), obj);
+ GIMP_FILTERED_CONTAINER_GET_CLASS (filtered_container)->src_remove (filtered_container,
+ object);
}
}
@@ -296,13 +351,15 @@ gimp_filtered_container_src_freeze (GimpContainer *src_container,
GimpFilteredContainer *filtered_container)
{
gimp_container_freeze (GIMP_CONTAINER (filtered_container));
- gimp_container_clear (GIMP_CONTAINER (filtered_container));
+
+ GIMP_FILTERED_CONTAINER_GET_CLASS (filtered_container)->src_freeze (filtered_container);
}
static void
gimp_filtered_container_src_thaw (GimpContainer *src_container,
GimpFilteredContainer *filtered_container)
{
- gimp_filtered_container_filter (filtered_container);
+ GIMP_FILTERED_CONTAINER_GET_CLASS (filtered_container)->src_thaw (filtered_container);
+
gimp_container_thaw (GIMP_CONTAINER (filtered_container));
}
diff --git a/app/core/gimpfilteredcontainer.h b/app/core/gimpfilteredcontainer.h
index 3264ab1..486887c 100644
--- a/app/core/gimpfilteredcontainer.h
+++ b/app/core/gimpfilteredcontainer.h
@@ -48,6 +48,13 @@ struct _GimpFilteredContainer
struct _GimpFilteredContainerClass
{
GimpContainerClass parent_class;
+
+ void (* src_add) (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+ void (* src_remove) (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+ void (* src_freeze) (GimpFilteredContainer *filtered_container);
+ void (* src_thaw) (GimpFilteredContainer *filtered_container);
};
diff --git a/app/core/gimptaggedcontainer.c b/app/core/gimptaggedcontainer.c
index 316a475..368e48e 100644
--- a/app/core/gimptaggedcontainer.c
+++ b/app/core/gimptaggedcontainer.c
@@ -37,55 +37,37 @@ enum
LAST_SIGNAL
};
-enum
-{
- PROP_0,
- PROP_SRC_CONTAINER
-};
-
-static void gimp_tagged_container_constructed (GObject *object);
-static void gimp_tagged_container_dispose (GObject *object);
-static void gimp_tagged_container_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gimp_tagged_container_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec);
-
-static gint64 gimp_tagged_container_get_memsize (GimpObject *object,
- gint64 *gui_size);
-
-static gboolean gimp_tagged_container_object_matches (GimpTaggedContainer *tagged_container,
- GimpObject *object);
-
-static void gimp_tagged_container_src_add (GimpContainer *src_container,
- GimpObject *object,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_src_remove (GimpContainer *src_container,
- GimpObject *object,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_src_freeze (GimpContainer *src_container,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_src_thaw (GimpContainer *src_container,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_tag_added (GimpTagged *tagged,
- GimpTag *tag,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_tag_removed (GimpTagged *tagged,
- GimpTag *tag,
- GimpTaggedContainer *tagged_container);
-static void gimp_tagged_container_ref_tag (GimpTaggedContainer *tagged_container,
- GimpTag *tag);
-static void gimp_tagged_container_unref_tag (GimpTaggedContainer *tagged_container,
- GimpTag *tag);
-static void gimp_tagged_container_tag_count_changed (GimpTaggedContainer *tagged_container,
- gint tag_count);
-
-
-G_DEFINE_TYPE (GimpTaggedContainer, gimp_tagged_container, GIMP_TYPE_LIST)
+static void gimp_tagged_container_dispose (GObject *object);
+static gint64 gimp_tagged_container_get_memsize (GimpObject *object,
+ gint64 *gui_size);
+
+static void gimp_tagged_container_src_add (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+static void gimp_tagged_container_src_remove (GimpFilteredContainer *filtered_container,
+ GimpObject *object);
+static void gimp_tagged_container_src_freeze (GimpFilteredContainer *filtered_container);
+static void gimp_tagged_container_src_thaw (GimpFilteredContainer *filtered_container);
+
+static gboolean gimp_tagged_container_object_matches (GimpTaggedContainer *tagged_container,
+ GimpObject *object);
+
+static void gimp_tagged_container_tag_added (GimpTagged *tagged,
+ GimpTag *tag,
+ GimpTaggedContainer *tagged_container);
+static void gimp_tagged_container_tag_removed (GimpTagged *tagged,
+ GimpTag *tag,
+ GimpTaggedContainer *tagged_container);
+static void gimp_tagged_container_ref_tag (GimpTaggedContainer *tagged_container,
+ GimpTag *tag);
+static void gimp_tagged_container_unref_tag (GimpTaggedContainer *tagged_container,
+ GimpTag *tag);
+static void gimp_tagged_container_tag_count_changed (GimpTaggedContainer *tagged_container,
+ gint tag_count);
+
+
+G_DEFINE_TYPE (GimpTaggedContainer, gimp_tagged_container,
+ GIMP_TYPE_FILTERED_CONTAINER)
#define parent_class gimp_tagged_container_parent_class
@@ -95,16 +77,19 @@ static guint gimp_tagged_container_signals[LAST_SIGNAL] = { 0, };
static void
gimp_tagged_container_class_init (GimpTaggedContainerClass *klass)
{
- GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
- GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
+ GimpFilteredContainerClass *filtered_class = GIMP_FILTERED_CONTAINER_CLASS (klass);
- g_object_class->constructed = gimp_tagged_container_constructed;
g_object_class->dispose = gimp_tagged_container_dispose;
- g_object_class->set_property = gimp_tagged_container_set_property;
- g_object_class->get_property = gimp_tagged_container_get_property;
gimp_object_class->get_memsize = gimp_tagged_container_get_memsize;
+ filtered_class->src_add = gimp_tagged_container_src_add;
+ filtered_class->src_remove = gimp_tagged_container_src_remove;
+ filtered_class->src_freeze = gimp_tagged_container_src_freeze;
+ filtered_class->src_thaw = gimp_tagged_container_src_thaw;
+
klass->tag_count_changed = gimp_tagged_container_tag_count_changed;
gimp_tagged_container_signals[TAG_COUNT_CHANGED] =
@@ -116,45 +101,14 @@ gimp_tagged_container_class_init (GimpTaggedContainerClass *klass)
gimp_marshal_VOID__INT,
G_TYPE_NONE, 1,
G_TYPE_INT);
-
- g_object_class_install_property (g_object_class, PROP_SRC_CONTAINER,
- g_param_spec_object ("src-container",
- NULL, NULL,
- GIMP_TYPE_CONTAINER,
- GIMP_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
}
static void
gimp_tagged_container_init (GimpTaggedContainer *tagged_container)
{
-}
-
-static void
-gimp_tagged_container_constructed (GObject *object)
-{
- GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (object);
-
- if (G_OBJECT_CLASS (parent_class)->constructed)
- G_OBJECT_CLASS (parent_class)->constructed (object);
-
tagged_container->tag_ref_counts =
g_hash_table_new ((GHashFunc) gimp_tag_get_hash,
(GEqualFunc) gimp_tag_equals);
-
- if (! gimp_container_frozen (tagged_container->src_container))
- {
- GList *list;
-
- for (list = GIMP_LIST (tagged_container->src_container)->list;
- list;
- list = g_list_next (list))
- {
- gimp_tagged_container_src_add (tagged_container->src_container,
- list->data,
- tagged_container);
- }
- }
}
static void
@@ -168,91 +122,96 @@ gimp_tagged_container_dispose (GObject *object)
tagged_container->tag_ref_counts = NULL;
}
- if (tagged_container->src_container)
- {
- g_signal_handlers_disconnect_by_func (tagged_container->src_container,
- gimp_tagged_container_src_add,
- tagged_container);
- g_signal_handlers_disconnect_by_func (tagged_container->src_container,
- gimp_tagged_container_src_remove,
- tagged_container);
- g_signal_handlers_disconnect_by_func (tagged_container->src_container,
- gimp_tagged_container_src_freeze,
- tagged_container);
- g_signal_handlers_disconnect_by_func (tagged_container->src_container,
- gimp_tagged_container_src_thaw,
- tagged_container);
-
- g_object_unref (tagged_container->src_container);
- tagged_container->src_container = NULL;
- }
-
G_OBJECT_CLASS (parent_class)->dispose (object);
}
+static gint64
+gimp_tagged_container_get_memsize (GimpObject *object,
+ gint64 *gui_size)
+{
+ gint64 memsize = 0;
+
+ /* FIXME take members into account */
+
+ return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
+ gui_size);
+}
+
static void
-gimp_tagged_container_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+gimp_tagged_container_src_add (GimpFilteredContainer *filtered_container,
+ GimpObject *object)
{
- GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (object);
+ GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (filtered_container);
+ GList *list;
- switch (property_id)
+ for (list = gimp_tagged_get_tags (GIMP_TAGGED (object));
+ list;
+ list = g_list_next (list))
{
- case PROP_SRC_CONTAINER:
- tagged_container->src_container = g_value_dup_object (value);
-
- g_signal_connect (tagged_container->src_container, "add",
- G_CALLBACK (gimp_tagged_container_src_add),
- tagged_container);
- g_signal_connect (tagged_container->src_container, "remove",
- G_CALLBACK (gimp_tagged_container_src_remove),
- tagged_container);
- g_signal_connect (tagged_container->src_container, "freeze",
- G_CALLBACK (gimp_tagged_container_src_freeze),
- tagged_container);
- g_signal_connect (tagged_container->src_container, "thaw",
- G_CALLBACK (gimp_tagged_container_src_thaw),
- tagged_container);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
+ gimp_tagged_container_ref_tag (tagged_container, list->data);
+ }
+
+ g_signal_connect (object, "tag-added",
+ G_CALLBACK (gimp_tagged_container_tag_added),
+ tagged_container);
+ g_signal_connect (object, "tag-removed",
+ G_CALLBACK (gimp_tagged_container_tag_removed),
+ tagged_container);
+
+ if (gimp_tagged_container_object_matches (tagged_container, object))
+ {
+ gimp_container_add (GIMP_CONTAINER (tagged_container), object);
}
}
static void
-gimp_tagged_container_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+gimp_tagged_container_src_remove (GimpFilteredContainer *filtered_container,
+ GimpObject *object)
{
- GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (object);
+ GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (filtered_container);
+ GList *list;
- switch (property_id)
+ g_signal_handlers_disconnect_by_func (object,
+ gimp_tagged_container_tag_added,
+ tagged_container);
+ g_signal_handlers_disconnect_by_func (object,
+ gimp_tagged_container_tag_removed,
+ tagged_container);
+
+ for (list = gimp_tagged_get_tags (GIMP_TAGGED (object));
+ list;
+ list = g_list_next (list))
{
- case PROP_SRC_CONTAINER:
- g_value_set_object (value, tagged_container->src_container);
- break;
+ gimp_tagged_container_unref_tag (tagged_container, list->data);
+ }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
+ if (gimp_tagged_container_object_matches (tagged_container, object))
+ {
+ gimp_container_remove (GIMP_CONTAINER (tagged_container), object);
}
}
-static gint64
-gimp_tagged_container_get_memsize (GimpObject *object,
- gint64 *gui_size)
+static void
+gimp_tagged_container_src_freeze (GimpFilteredContainer *filtered_container)
{
- gint64 memsize = 0;
+ GimpTaggedContainer *tagged_container = GIMP_TAGGED_CONTAINER (filtered_container);
- /* FIXME take members into account */
+ gimp_container_clear (GIMP_CONTAINER (tagged_container));
+ g_hash_table_remove_all (tagged_container->tag_ref_counts);
+ tagged_container->tag_count = 0;
+}
- return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
- gui_size);
+static void
+gimp_tagged_container_src_thaw (GimpFilteredContainer *filtered_container)
+{
+ GList *list;
+
+ for (list = GIMP_LIST (filtered_container->src_container)->list;
+ list;
+ list = g_list_next (list))
+ {
+ gimp_tagged_container_src_add (filtered_container, list->data);
+ }
}
/**
@@ -303,13 +262,14 @@ gimp_tagged_container_set_filter (GimpTaggedContainer *tagged_container,
{
g_return_if_fail (GIMP_IS_TAGGED_CONTAINER (tagged_container));
- gimp_tagged_container_src_freeze (tagged_container->src_container,
- tagged_container);
+ if (! gimp_container_frozen (GIMP_FILTERED_CONTAINER (tagged_container)->src_container))
+ {
+ gimp_tagged_container_src_freeze (GIMP_FILTERED_CONTAINER (tagged_container));
- tagged_container->filter = tags;
+ tagged_container->filter = tags;
- gimp_tagged_container_src_thaw (tagged_container->src_container,
- tagged_container);
+ gimp_tagged_container_src_thaw (GIMP_FILTERED_CONTAINER (tagged_container));
+ }
}
/**
@@ -373,95 +333,6 @@ gimp_tagged_container_object_matches (GimpTaggedContainer *tagged_container,
}
static void
-gimp_tagged_container_src_add (GimpContainer *src_container,
- GimpObject *object,
- GimpTaggedContainer *tagged_container)
-{
- if (! gimp_container_frozen (src_container))
- {
- GList *list;
-
- for (list = gimp_tagged_get_tags (GIMP_TAGGED (object));
- list;
- list = g_list_next (list))
- {
- gimp_tagged_container_ref_tag (tagged_container, list->data);
- }
-
- g_signal_connect (object, "tag-added",
- G_CALLBACK (gimp_tagged_container_tag_added),
- tagged_container);
- g_signal_connect (object, "tag-removed",
- G_CALLBACK (gimp_tagged_container_tag_removed),
- tagged_container);
-
- if (gimp_tagged_container_object_matches (tagged_container, object))
- {
- gimp_container_add (GIMP_CONTAINER (tagged_container), object);
- }
- }
-}
-
-static void
-gimp_tagged_container_src_remove (GimpContainer *src_container,
- GimpObject *object,
- GimpTaggedContainer *tagged_container)
-{
- if (! gimp_container_frozen (src_container))
- {
- GList *list;
-
- g_signal_handlers_disconnect_by_func (object,
- gimp_tagged_container_tag_added,
- tagged_container);
- g_signal_handlers_disconnect_by_func (object,
- gimp_tagged_container_tag_removed,
- tagged_container);
-
- for (list = gimp_tagged_get_tags (GIMP_TAGGED (object));
- list;
- list = g_list_next (list))
- {
- gimp_tagged_container_unref_tag (tagged_container, list->data);
- }
-
- if (gimp_tagged_container_object_matches (tagged_container, object))
- {
- gimp_container_remove (GIMP_CONTAINER (tagged_container), object);
- }
- }
-}
-
-static void
-gimp_tagged_container_src_freeze (GimpContainer *src_container,
- GimpTaggedContainer *tagged_container)
-{
- gimp_container_freeze (GIMP_CONTAINER (tagged_container));
-
- gimp_container_clear (GIMP_CONTAINER (tagged_container));
- g_hash_table_remove_all (tagged_container->tag_ref_counts);
- tagged_container->tag_count = 0;
-}
-
-static void
-gimp_tagged_container_src_thaw (GimpContainer *src_container,
- GimpTaggedContainer *tagged_container)
-{
- GList *list;
-
- for (list = GIMP_LIST (tagged_container->src_container)->list;
- list;
- list = g_list_next (list))
- {
- gimp_tagged_container_src_add (tagged_container->src_container,
- list->data,
- tagged_container);
- }
-
- gimp_container_thaw (GIMP_CONTAINER (tagged_container));
-}
-
-static void
gimp_tagged_container_tag_added (GimpTagged *tagged,
GimpTag *tag,
GimpTaggedContainer *tagged_container)
diff --git a/app/core/gimptaggedcontainer.h b/app/core/gimptaggedcontainer.h
index 5633ee1..2c18f92 100644
--- a/app/core/gimptaggedcontainer.h
+++ b/app/core/gimptaggedcontainer.h
@@ -22,7 +22,7 @@
#define __GIMP_TAGGED_CONTAINER_H__
-#include "gimplist.h"
+#include "gimpfilteredcontainer.h"
#define GIMP_TYPE_TAGGED_CONTAINER (gimp_tagged_container_get_type ())
@@ -37,17 +37,17 @@ typedef struct _GimpTaggedContainerClass GimpTaggedContainerClass;
struct _GimpTaggedContainer
{
- GimpList parent_instance;
+ GimpFilteredContainer parent_instance;
- GimpContainer *src_container;
- GList *filter;
- GHashTable *tag_ref_counts;
- gint tag_count;
+ GimpContainer *src_container;
+ GList *filter;
+ GHashTable *tag_ref_counts;
+ gint tag_count;
};
struct _GimpTaggedContainerClass
{
- GimpListClass parent_class;
+ GimpFilteredContainerClass parent_class;
void (* tag_count_changed) (GimpTaggedContainer *container,
gint count);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]