gimp r26318 - in branches/soc-2008-tagging: . app/core app/widgets
- From: aurisj svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r26318 - in branches/soc-2008-tagging: . app/core app/widgets
- Date: Sat, 26 Jul 2008 18:23:52 +0000 (UTC)
Author: aurisj
Date: Sat Jul 26 18:23:52 2008
New Revision: 26318
URL: http://svn.gnome.org/viewvc/gimp?rev=26318&view=rev
Log:
2008-07-26 Aurimas JuÅka <aurisj svn gnome org>
* app/core/core-types.h
* app/core/gimpdata.c
* app/core/gimpfilteredcontainer.c
* app/core/gimptag.[ch]
* app/core/gimptagcache.c
* app/core/gimptagged.h
* app/widgets/gimpcombotagentry.c
* app/widgets/gimptagentry.c: made GimpTag an object and updated all
places to treat it as such. This allows correctly compare various tags
and change implementation in one place.
Modified:
branches/soc-2008-tagging/ChangeLog
branches/soc-2008-tagging/app/core/core-types.h
branches/soc-2008-tagging/app/core/gimpdata.c
branches/soc-2008-tagging/app/core/gimpfilteredcontainer.c
branches/soc-2008-tagging/app/core/gimptag.c
branches/soc-2008-tagging/app/core/gimptag.h
branches/soc-2008-tagging/app/core/gimptagcache.c
branches/soc-2008-tagging/app/core/gimptagged.h
branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c
branches/soc-2008-tagging/app/widgets/gimptagentry.c
Modified: branches/soc-2008-tagging/app/core/core-types.h
==============================================================================
--- branches/soc-2008-tagging/app/core/core-types.h (original)
+++ branches/soc-2008-tagging/app/core/core-types.h Sat Jul 26 18:23:52 2008
@@ -172,9 +172,7 @@
/* tags */
-typedef GQuark GimpTag;
-#define gimp_tag_new(name) g_quark_from_string (name)
-#define gimp_tag_get_name(tag) g_quark_to_string (name)
+typedef struct _GimpTag GimpTag;
/* functions */
Modified: branches/soc-2008-tagging/app/core/gimpdata.c
==============================================================================
--- branches/soc-2008-tagging/app/core/gimpdata.c (original)
+++ branches/soc-2008-tagging/app/core/gimpdata.c Sat Jul 26 18:23:52 2008
@@ -42,6 +42,7 @@
#include "gimp-utils.h"
#include "gimpdata.h"
#include "gimpmarshal.h"
+#include "gimptag.h"
#include "gimptagged.h"
#include "gimp-intl.h"
@@ -89,9 +90,9 @@
static void gimp_data_real_dirty (GimpData *data);
static gboolean gimp_data_add_tag (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
static gboolean gimp_data_remove_tag (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
static GList * gimp_data_get_tags (GimpTagged *tagged);
static gchar * gimp_data_get_identifier (GimpTagged *tagged);
static gchar * gimp_data_get_checksum (GimpTagged *tagged);
@@ -360,38 +361,40 @@
static gboolean
gimp_data_add_tag (GimpTagged *tagged,
- GimpTag tag)
+ GimpTag *tag)
{
GimpData *data = GIMP_DATA (tagged);
GList *list;
for (list = data->tags; list; list = list->next)
{
- GimpTag this = GPOINTER_TO_UINT (list->data);
+ GimpTag *this = GIMP_TAG (list->data);
- if (this == tag)
+ if (gimp_tag_equals (tag, this))
return FALSE;
}
- data->tags = g_list_prepend (data->tags, GUINT_TO_POINTER (tag));
+ g_object_ref (tag);
+ data->tags = g_list_prepend (data->tags, tag);
return TRUE;
}
static gboolean
gimp_data_remove_tag (GimpTagged *tagged,
- GimpTag tag)
+ GimpTag *tag)
{
GimpData *data = GIMP_DATA (tagged);
GList *list;
for (list = data->tags; list; list = list->next)
{
- GimpTag this = GPOINTER_TO_UINT (list->data);
+ GimpTag *this = GIMP_TAG (list->data);
- if (this == tag)
+ if (gimp_tag_equals (tag, this))
{
data->tags = g_list_delete_link (data->tags, list);
+ g_object_unref (tag);
return TRUE;
}
}
Modified: branches/soc-2008-tagging/app/core/gimpfilteredcontainer.c
==============================================================================
--- branches/soc-2008-tagging/app/core/gimpfilteredcontainer.c (original)
+++ branches/soc-2008-tagging/app/core/gimpfilteredcontainer.c Sat Jul 26 18:23:52 2008
@@ -29,6 +29,7 @@
#include "core-types.h"
#include "gimp.h"
+#include "gimptag.h"
#include "gimptagged.h"
#include "gimplist.h"
#include "gimpfilteredcontainer.h"
@@ -54,10 +55,10 @@
static void gimp_filtered_container_src_thaw (GimpContainer *src_container,
GimpFilteredContainer *filtered_container);
static void gimp_filtered_container_tag_added (GimpTagged *tagged,
- GimpTag tag,
+ GimpTag *tag,
GimpFilteredContainer *filtered_container);
static void gimp_filtered_container_tag_removed (GimpTagged *tagged,
- GimpTag tag,
+ GimpTag *tag,
GimpFilteredContainer *filtered_container);
static void gimp_filtered_container_tagged_item_added (GimpTagged *tagged,
GimpFilteredContainer *filtered_container);
@@ -147,7 +148,9 @@
filtered_container->src_container = src_container;
GIMP_CONTAINER (filtered_container)->children_type = children_type;
- filtered_container->tag_ref_counts = g_hash_table_new (g_direct_hash, g_direct_equal);
+ filtered_container->tag_ref_counts =
+ g_hash_table_new ((GHashFunc)gimp_tag_get_hash,
+ (GEqualFunc)gimp_tag_equals);
gimp_filtered_container_filter (filtered_container);
@@ -199,7 +202,8 @@
object_tag = gimp_tagged_get_tags (GIMP_TAGGED (object));
while (object_tag)
{
- if (object_tag->data == filter_tag->data)
+ if (gimp_tag_equals (GIMP_TAG (object_tag->data),
+ GIMP_TAG (filter_tag->data)))
{
break;
}
@@ -294,7 +298,7 @@
while (tag_iterator)
{
gimp_filtered_container_tag_added (tagged,
- GPOINTER_TO_UINT (tag_iterator->data),
+ GIMP_TAG (tag_iterator->data),
filtered_container);
tag_iterator = g_list_next (tag_iterator);
}
@@ -324,7 +328,7 @@
while (tag_iterator)
{
gimp_filtered_container_tag_removed (tagged,
- GPOINTER_TO_UINT (tag_iterator->data),
+ GIMP_TAG (tag_iterator->data),
filtered_container);
tag_iterator = g_list_next (tag_iterator);
}
@@ -333,38 +337,36 @@
static void
gimp_filtered_container_tag_added (GimpTagged *tagged,
- GimpTag tag,
- GimpFilteredContainer *filtered_container)
+ GimpTag *tag,
+ GimpFilteredContainer *filtered_container)
{
gint ref_count;
ref_count = GPOINTER_TO_INT (g_hash_table_lookup (filtered_container->tag_ref_counts,
- GUINT_TO_POINTER (tag)));
+ tag));
ref_count++;
g_hash_table_insert (filtered_container->tag_ref_counts,
- GUINT_TO_POINTER (tag),
- GINT_TO_POINTER (ref_count));
+ tag, GINT_TO_POINTER (ref_count));
}
static void
gimp_filtered_container_tag_removed (GimpTagged *tagged,
- GimpTag tag,
+ GimpTag *tag,
GimpFilteredContainer *filtered_container)
{
gint ref_count;
ref_count = GPOINTER_TO_INT (g_hash_table_lookup (filtered_container->tag_ref_counts,
- GUINT_TO_POINTER (tag)));
+ tag));
ref_count--;
if (ref_count > 0)
{
g_hash_table_insert (filtered_container->tag_ref_counts,
- GUINT_TO_POINTER (tag),
- GINT_TO_POINTER (ref_count));
+ tag, GINT_TO_POINTER (ref_count));
}
else
{
- g_hash_table_remove (filtered_container->tag_ref_counts,
- GUINT_TO_POINTER (tag));
+ g_hash_table_remove (filtered_container->tag_ref_counts, tag);
}
}
+
Modified: branches/soc-2008-tagging/app/core/gimptag.c
==============================================================================
--- branches/soc-2008-tagging/app/core/gimptag.c (original)
+++ branches/soc-2008-tagging/app/core/gimptag.c Sat Jul 26 18:23:52 2008
@@ -1,3 +1,23 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimptag.c
+ * Copyright (C) 2008 Aurimas JuÅka <aurisj svn gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
#include "config.h"
@@ -7,22 +27,154 @@
#include "gimptag.h"
-GimpTag
-gimp_tag_from_string (const gchar *string)
+G_DEFINE_TYPE (GimpTag, gimp_tag, GIMP_TYPE_OBJECT)
+
+#define parent_class gimp_tag_parent_class
+
+static void
+gimp_tag_class_init (GimpTagClass *klass)
{
- if (g_utf8_strchr (string, -1, ','))
+}
+
+static void
+gimp_tag_init (GimpTag *tag)
+{
+ tag->tag = 0;
+ tag->collate_key = 0;
+}
+
+GimpTag *
+gimp_tag_new (const char *tag_string)
+{
+ GimpTag *tag;
+ gchar *case_folded;
+ gchar *collate_key;
+
+ g_return_val_if_fail (tag_string != NULL, NULL);
+ g_return_val_if_fail (gimp_tag_string_is_valid (tag_string), NULL);
+
+ tag = g_object_new (GIMP_TYPE_TAG, NULL);
+
+ tag->tag = g_quark_from_string (tag_string);
+
+ case_folded = g_utf8_casefold (tag_string, -1);
+ collate_key = g_utf8_collate_key (case_folded, -1);
+ tag->collate_key = g_quark_from_string (collate_key);
+ g_free (collate_key);
+ g_free (case_folded);
+
+ return tag;
+}
+
+GimpTag *
+gimp_tag_try_new (const char *tag_string)
+{
+ GimpTag *tag;
+ gchar *case_folded;
+ gchar *collate_key;
+ GQuark tag_quark;
+ GQuark collate_key_quark;
+
+ if (! tag_string
+ || ! gimp_tag_string_is_valid (tag_string))
+ {
+ return NULL;
+ }
+
+
+ tag_quark = g_quark_from_string (tag_string);
+ if (! tag_quark)
+ {
+ return NULL;
+ }
+
+ case_folded = g_utf8_casefold (tag_string, -1);
+ collate_key = g_utf8_collate_key (case_folded, -1);
+ collate_key_quark = g_quark_from_string (collate_key);
+ g_free (collate_key);
+ g_free (case_folded);
+
+ if (! collate_key_quark)
{
- return 0;
+ return NULL;
}
- return g_quark_from_string (string);
+ tag = g_object_new (GIMP_TYPE_TAG, NULL);
+ tag->tag = tag_quark;
+ tag->collate_key = collate_key_quark;
+ return tag;
+}
+
+const gchar *
+gimp_tag_get_name (GimpTag *tag)
+{
+ g_return_val_if_fail (GIMP_IS_TAG (tag), NULL);
+
+ return g_quark_to_string (tag->tag);
+}
+
+guint
+gimp_tag_get_hash (GimpTag *tag)
+{
+ g_return_val_if_fail (GIMP_IS_TAG (tag), -1);
+
+ return tag->collate_key;
+}
+
+gboolean
+gimp_tag_equals (GimpTag *tag,
+ GimpTag *other)
+{
+ g_return_val_if_fail (GIMP_IS_TAG (tag), FALSE);
+ g_return_val_if_fail (GIMP_IS_TAG (tag), FALSE);
+
+ return tag->tag == other->tag;
}
int
gimp_tag_compare_func (const void *p1,
const void *p2)
{
- return strcmp (g_quark_to_string (GPOINTER_TO_UINT (p1)),
- g_quark_to_string (GPOINTER_TO_UINT (p2)));
+ GimpTag *t1 = GIMP_TAG (p1);
+ GimpTag *t2 = GIMP_TAG (p2);
+
+ return g_strcmp0 (g_quark_to_string (t1->collate_key),
+ g_quark_to_string (t2->collate_key));
+}
+
+gint
+gimp_tag_compare_with_string (GimpTag *tag,
+ const char *tag_string)
+{
+ gchar *case_folded;
+ const gchar *collate_key;
+ gchar *collate_key2;
+ gint result;
+
+ g_return_val_if_fail (GIMP_IS_TAG (tag), 0);
+ g_return_val_if_fail (tag_string != NULL, 0);
+ g_return_val_if_fail (! gimp_tag_string_is_valid (tag_string), 0);
+
+ collate_key = g_quark_to_string (tag->collate_key);
+ case_folded = g_utf8_casefold (tag_string, -1);
+ collate_key2 = g_utf8_collate_key (case_folded, -1);
+ result = g_strcmp0 (collate_key, collate_key2);
+ g_free (collate_key2);
+ g_free (case_folded);
+
+ return result;
+}
+
+gboolean
+gimp_tag_string_is_valid (const gchar *string)
+{
+ g_return_val_if_fail (string, FALSE);
+
+ if (g_utf8_strchr (string, -1, ','))
+ {
+ return FALSE;
+ }
+
+ return TRUE;
}
Modified: branches/soc-2008-tagging/app/core/gimptag.h
==============================================================================
--- branches/soc-2008-tagging/app/core/gimptag.h (original)
+++ branches/soc-2008-tagging/app/core/gimptag.h Sat Jul 26 18:23:52 2008
@@ -1,12 +1,68 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimptag.h
+ * Copyright (C) 2008 Aurimas JuÅka <aurisj svn gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
#ifndef __GIMP_TAG_H__
#define __GIMP_TAG_H__
-GimpTag gimp_tag_from_string (const gchar *string);
-#define gimp_tag_to_string g_quark_to_string
+#include "gimpobject.h"
-int gimp_tag_compare_func (const void *p1,
- const void *p2);
+#define GIMP_TYPE_TAG (gimp_tag_get_type ())
+#define GIMP_TAG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_TAG, GimpTag))
+#define GIMP_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_TAG, GimpTagClass))
+#define GIMP_IS_TAG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_TAG))
+#define GIMP_IS_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_TAG))
+#define GIMP_TAG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_TAG, GimpTagClass))
+
+typedef struct _GimpTagClass GimpTagClass;
+
+struct _GimpTag
+{
+ GimpObject parent_instance;
+
+ GQuark tag;
+ GQuark collate_key;
+};
+
+struct _GimpTagClass
+{
+ GimpObjectClass parent_class;
+};
+
+GType gimp_tag_get_type (void) G_GNUC_CONST;
+
+GimpTag *gimp_tag_new (const gchar *tag_string);
+
+GimpTag *gimp_tag_try_new (const gchar *tag_string);
+
+const gchar *gimp_tag_get_name (GimpTag *tag);
+guint gimp_tag_get_hash (GimpTag *tag);
+
+gboolean gimp_tag_equals (GimpTag *tag,
+ GimpTag *other);
+gint gimp_tag_compare_func (const void *p1,
+ const void *p2);
+gint gimp_tag_compare_with_string (GimpTag *tag,
+ const gchar *string);
+
+gboolean gimp_tag_string_is_valid (const gchar *tag_string);
#endif // __GIMP_TAG_H__
Modified: branches/soc-2008-tagging/app/core/gimptagcache.c
==============================================================================
--- branches/soc-2008-tagging/app/core/gimptagcache.c (original)
+++ branches/soc-2008-tagging/app/core/gimptagcache.c Sat Jul 26 18:23:52 2008
@@ -127,6 +127,7 @@
{
GimpTagCacheRecord *rec =
&g_array_index (cache->records, GimpTagCacheRecord, i);
+ g_list_foreach (rec->tags, (GFunc)g_object_unref, NULL);
g_list_free (rec->tags);
}
g_array_free (cache->records, TRUE);
@@ -213,9 +214,10 @@
while (tag_iterator)
{
printf ("assigning cached tag: %s to %s\n",
- g_quark_to_string (GPOINTER_TO_UINT (tag_iterator->data)),
+ gimp_tag_get_name (GIMP_TAG (tag_iterator->data)),
identifier);
- gimp_tagged_add_tag (tagged, GPOINTER_TO_UINT (tag_iterator->data));
+ gimp_tagged_add_tag (tagged, GIMP_TAG (tag_iterator->data));
+
tag_iterator = g_list_next (tag_iterator);
}
rec->referenced = TRUE;
@@ -245,9 +247,10 @@
while (tag_iterator)
{
printf ("assigning cached tag: %s to %s\n",
- g_quark_to_string (GPOINTER_TO_UINT (tag_iterator->data)),
+ gimp_tag_get_name (GIMP_TAG (tag_iterator->data)),
identifier);
- gimp_tagged_add_tag (tagged, GPOINTER_TO_UINT (tag_iterator->data));
+ gimp_tagged_add_tag (tagged, GIMP_TAG (tag_iterator->data));
+
tag_iterator = g_list_next (tag_iterator);
}
rec->referenced = TRUE;
@@ -343,7 +346,7 @@
tag_iterator = cache_rec->tags;
while (tag_iterator)
{
- tag_string = g_markup_escape_text (gimp_tag_to_string (GPOINTER_TO_UINT (tag_iterator->data)), -1);
+ tag_string = g_markup_escape_text (gimp_tag_get_name (GIMP_TAG (tag_iterator->data)), -1);
g_string_append_printf (buf, "\t\t<tag>%s</tag>\n", tag_string);
g_free (tag_string);
tag_iterator = g_list_next (tag_iterator);
@@ -395,7 +398,7 @@
filename = g_build_filename (gimp_directory (), GIMP_TAG_CACHE_FILE, NULL);
printf ("reading tag cache to %s\n", filename);
error = NULL;
- if (!g_file_get_contents (filename, &buffer, &length, &error))
+ if (! g_file_get_contents (filename, &buffer, &length, &error))
{
printf ("Error while reading tag cache: %s\n", error->message);
g_error_free (error);
@@ -490,7 +493,7 @@
ParseData *parse_data = (ParseData*) user_data;
const gchar *current_element;
gchar buffer[2048];
- GQuark tag_quark;
+ GimpTag *tag;
current_element = g_markup_parse_context_get_element (context);
if (current_element
@@ -509,9 +512,9 @@
printf ("assigning tag %s to %s\n", buffer,
g_quark_to_string (parse_data->current_record.identifier));
- tag_quark = g_quark_from_string (buffer);
+ tag = gimp_tag_new (buffer);
parse_data->current_record.tags = g_list_append (parse_data->current_record.tags,
- GUINT_TO_POINTER (tag_quark));
+ tag);
}
}
Modified: branches/soc-2008-tagging/app/core/gimptagged.h
==============================================================================
--- branches/soc-2008-tagging/app/core/gimptagged.h (original)
+++ branches/soc-2008-tagging/app/core/gimptagged.h Sat Jul 26 18:23:52 2008
@@ -37,15 +37,15 @@
/* signals */
void (* tag_added) (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
void (* tag_removed) (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
/* virtual functions */
gboolean (* add_tag) (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
gboolean (* remove_tag) (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
GList * (* get_tags) (GimpTagged *tagged);
gchar * (* get_identifier) (GimpTagged *tagged);
@@ -56,9 +56,9 @@
GType gimp_tagged_interface_get_type (void) G_GNUC_CONST;
void gimp_tagged_add_tag (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
void gimp_tagged_remove_tag (GimpTagged *tagged,
- GimpTag tag);
+ GimpTag *tag);
GList * gimp_tagged_get_tags (GimpTagged *tagged);
gchar * gimp_tagged_get_identifier (GimpTagged *tagged);
Modified: branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c (original)
+++ branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c Sat Jul 26 18:23:52 2008
@@ -42,7 +42,7 @@
typedef struct
{
- GimpTag tag;
+ GimpTag *tag;
GdkRectangle bounds;
gboolean selected;
} PopupTagData;
@@ -404,9 +404,9 @@
tag_iterator = tag_list;
for (i = 0; i < popup_data->tag_count; i++)
{
- popup_data->tag_data[i].tag = GPOINTER_TO_UINT (tag_iterator->data);
+ popup_data->tag_data[i].tag = GIMP_TAG (tag_iterator->data);
popup_data->tag_data[i].selected = FALSE;
- list_tag = gimp_tag_to_string (popup_data->tag_data[i].tag);
+ list_tag = gimp_tag_get_name (popup_data->tag_data[i].tag);
for (j = 0; j < current_count; j++)
{
if (! strcmp (current_tags[j], list_tag))
@@ -517,7 +517,7 @@
for (i = 0; i < popup_data->tag_count; i++)
{
pango_layout_set_text (popup_data->layout,
- g_quark_to_string (popup_data->tag_data[i].tag), -1);
+ gimp_tag_get_name (popup_data->tag_data[i].tag), -1);
pango_layout_get_size (popup_data->layout,
&popup_data->tag_data[i].bounds.width,
&popup_data->tag_data[i].bounds.height);
@@ -561,7 +561,7 @@
for (i = 0; i < popup_data->tag_count; i++)
{
pango_layout_set_text (popup_data->layout,
- g_quark_to_string (popup_data->tag_data[i].tag), -1);
+ gimp_tag_get_name (popup_data->tag_data[i].tag), -1);
if (popup_data->tag_data[i].selected)
{
pango_layout_set_attributes (popup_data->layout,
@@ -653,7 +653,7 @@
gint y;
gint i;
GdkRectangle *bounds;
- GimpTag tag;
+ GimpTag *tag;
button_event = (GdkEventButton *) event;
x = button_event->x;
@@ -724,7 +724,7 @@
tag_data->selected = ! tag_data->selected;
- tag = gimp_tag_to_string (tag_data->tag);
+ tag = gimp_tag_get_name (tag_data->tag);
current_tags = gimp_tag_entry_parse_tags (GIMP_TAG_ENTRY (combo_entry->tag_entry));
tag_str = g_string_new ("");
length = g_strv_length (current_tags);
Modified: branches/soc-2008-tagging/app/widgets/gimptagentry.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimptagentry.c (original)
+++ branches/soc-2008-tagging/app/widgets/gimptagentry.c Sat Jul 26 18:23:52 2008
@@ -261,7 +261,7 @@
gchar **parsed_tags;
gint count;
gint i;
- GimpTag tag;
+ GimpTag *tag;
GList *query_list = NULL;
parsed_tags = gimp_tag_entry_parse_tags (entry);
@@ -270,8 +270,11 @@
{
if (strlen (parsed_tags[i]) > 0)
{
- tag = g_quark_try_string (parsed_tags[i]);
- query_list = g_list_append (query_list, GUINT_TO_POINTER (tag));
+ tag = gimp_tag_try_new (parsed_tags[i]);
+ if (tag)
+ {
+ query_list = g_list_append (query_list, tag);
+ }
}
}
g_strfreev (parsed_tags);
@@ -341,17 +344,17 @@
gchar **parsed_tags;
gint count;
gint i;
- GimpTag tag;
+ GimpTag *tag;
GList *tag_list = NULL;
parsed_tags = gimp_tag_entry_parse_tags (tag_entry);
count = g_strv_length (parsed_tags);
for (i = 0; i < count; i++)
{
- if (strlen (parsed_tags[i]) > 0)
+ if (gimp_tag_string_is_valid (parsed_tags[i]))
{
- tag = g_quark_from_string (parsed_tags[i]);
- tag_list = g_list_append (tag_list, GUINT_TO_POINTER (tag));
+ tag = gimp_tag_new (parsed_tags[i]);
+ tag_list = g_list_append (tag_list, tag);
}
}
g_strfreev (parsed_tags);
@@ -363,6 +366,8 @@
gimp_tag_entry_item_set_tags (selected_item, tag_list);
selected_iterator = g_list_next (selected_iterator);
}
+
+ g_list_foreach (tag_list, (GFunc)g_object_unref, NULL);
g_list_free (tag_list);
}
@@ -377,8 +382,7 @@
tags_iterator = old_tags;
while (tags_iterator)
{
- gimp_tagged_remove_tag (tagged,
- GPOINTER_TO_UINT (tags_iterator->data));
+ gimp_tagged_remove_tag (tagged, GIMP_TAG (tags_iterator->data));
tags_iterator = g_list_next (tags_iterator);
}
g_list_free (old_tags);
@@ -386,8 +390,8 @@
tags_iterator = tags;
while (tags_iterator)
{
- printf ("tagged: %s\n", g_quark_to_string (GPOINTER_TO_UINT (tags_iterator->data)));
- gimp_tagged_add_tag (tagged, GPOINTER_TO_UINT (tags_iterator->data));
+ printf ("tagged: %s\n", gimp_tag_get_name (GIMP_TAG (tags_iterator->data)));
+ gimp_tagged_add_tag (tagged, GIMP_TAG (tags_iterator->data));
tags_iterator = g_list_next (tags_iterator);
}
}
@@ -441,7 +445,7 @@
GList *tag_list;
GList *tag_iterator;
gint insert_pos;
- GimpTag tag;
+ GimpTag *tag;
gchar *text;
gtk_editable_delete_text (GTK_EDITABLE (tag_entry), 0, -1);
@@ -459,8 +463,8 @@
tag_iterator = tag_list;
while (tag_iterator)
{
- tag = GPOINTER_TO_UINT (tag_iterator->data);
- text = g_strdup_printf ("%s, ", g_quark_to_string (tag));
+ tag = GIMP_TAG (tag_iterator->data);
+ text = g_strdup_printf ("%s, ", gimp_tag_get_name (tag));
gtk_editable_insert_text (GTK_EDITABLE (tag_entry), text, strlen (text),
&insert_pos);
g_free (text);
@@ -521,7 +525,8 @@
GList *candidates = NULL;
GList *all_tags;
GList *tag_iterator;
- GimpTag tag;
+ GimpTag *tag;
+ const gchar *tag_name;
gint i;
gint length;
@@ -536,13 +541,14 @@
length = g_strv_length (used_tags);
while (tag_iterator)
{
- tag = GPOINTER_TO_UINT (tag_iterator->data);
- if (g_str_has_prefix (g_quark_to_string (tag), prefix))
+ tag = GIMP_TAG (tag_iterator->data);
+ tag_name = gimp_tag_get_name (tag);
+ if (g_str_has_prefix (tag_name, prefix))
{
/* check if tag is not already entered */
for (i = 0; i < length; i++)
{
- if (! strcmp (g_quark_to_string (tag), used_tags[i]))
+ if (! strcmp (tag_name, used_tags[i]))
{
break;
}
@@ -587,7 +593,7 @@
length = g_list_length (candidates);
if (length < 2)
{
- candidate_string = g_quark_to_string (GPOINTER_TO_UINT (candidates->data));
+ candidate_string = gimp_tag_get_name (GIMP_TAG (candidates->data));
return g_strdup (candidate_string + prefix_length);
}
@@ -595,8 +601,7 @@
candidate_iterator = candidates;
for (i = 0; i < length; i++)
{
- candidate_string =
- g_quark_to_string (GPOINTER_TO_UINT (candidate_iterator->data));
+ candidate_string = gimp_tag_get_name (GIMP_TAG (candidate_iterator->data));
completions[i] = candidate_string + prefix_length;
candidate_iterator = g_list_next (candidate_iterator);
}
@@ -615,7 +620,7 @@
d = g_utf8_get_char (completions[i]);
if (c != d)
{
- candidate_string = g_quark_to_string (GPOINTER_TO_UINT (candidates->data));
+ candidate_string = gimp_tag_get_name (GIMP_TAG (candidates->data));
candidate_string += prefix_length;
completion_end = g_utf8_offset_to_pointer (candidate_string,
num_chars_match);
@@ -634,7 +639,7 @@
} while (c);
g_free (completions);
- candidate_string = g_quark_to_string (GPOINTER_TO_UINT (candidates->data));
+ candidate_string = gimp_tag_get_name (GIMP_TAG (candidates->data));
return g_strdup (candidate_string + prefix_length);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]