gimp r27822 - in trunk: . app/widgets
- From: aurisj svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r27822 - in trunk: . app/widgets
- Date: Sun, 21 Dec 2008 16:41:10 +0000 (UTC)
Author: aurisj
Date: Sun Dec 21 16:41:09 2008
New Revision: 27822
URL: http://svn.gnome.org/viewvc/gimp?rev=27822&view=rev
Log:
* app/widgets/gimptagentry.c: fixed handling of tags which contain
non-ASCII characters.
Modified:
trunk/ChangeLog
trunk/app/widgets/gimptagentry.c
Modified: trunk/app/widgets/gimptagentry.c
==============================================================================
--- trunk/app/widgets/gimptagentry.c (original)
+++ trunk/app/widgets/gimptagentry.c Sun Dec 21 16:41:09 2008
@@ -475,8 +475,10 @@
gboolean is_tag[2];
gint i;
gint insert_pos = *position;
+ glong num_chars;
entry_text = gtk_entry_get_text (GTK_ENTRY (editable));
+ num_chars = g_utf8_strlen (new_text, text_length);
if (! tag_entry->internal_operation)
{
@@ -494,7 +496,7 @@
{
g_signal_stop_emission_by_name (editable, "insert_text");
}
- else if (text_length > 0)
+ else if (num_chars > 0)
{
gunichar c = g_utf8_get_char (new_text);
@@ -522,7 +524,7 @@
g_signal_stop_emission_by_name (editable, "insert_text");
}
else if (! tag_entry->internal_operation
- && text_length == 1
+ && num_chars == 1
&& *position < tag_entry->mask->len
&& tag_entry->mask->str[*position] == 't'
&& ! g_unichar_isspace (c))
@@ -549,7 +551,7 @@
if (! tag_entry->suppress_mask_update)
{
- for (i = 0; i < text_length; i++)
+ for (i = 0; i < num_chars; i++)
{
g_string_insert_c (tag_entry->mask, insert_pos + i, 'u');
}
@@ -1082,13 +1084,21 @@
gchar *completion;
gchar *completion_end;
gint completion_length;
+ gchar *normalized_prefix;
if (! candidates)
{
return NULL;
}
- prefix_length = strlen (prefix);
+ normalized_prefix = g_utf8_normalize (prefix, -1, G_NORMALIZE_ALL);
+ if (! normalized_prefix)
+ {
+ return NULL;
+ }
+ prefix_length = strlen (normalized_prefix);
+ g_free (normalized_prefix);
+
length = g_list_length (candidates);
if (length < 2)
{
@@ -1160,7 +1170,10 @@
GimpTagEntry *tag_entry = GIMP_TAG_ENTRY (widget);
gimp_tag_entry_commit_tags (tag_entry);
- gimp_tag_entry_assign_tags (GIMP_TAG_ENTRY (widget));
+ if (tag_entry->mode == GIMP_TAG_ENTRY_MODE_ASSIGN)
+ {
+ gimp_tag_entry_assign_tags (GIMP_TAG_ENTRY (widget));
+ }
gimp_tag_entry_add_to_recent (tag_entry,
gtk_entry_get_text (GTK_ENTRY (widget)),
@@ -1820,6 +1833,7 @@
gint position;
gboolean found_region;
gint cursor_position;
+ glong length_before;
cursor_position = gtk_editable_get_position (GTK_EDITABLE (tag_entry));
@@ -1858,6 +1872,7 @@
tags_string = gtk_editable_get_chars (GTK_EDITABLE (tag_entry), region_start, region_end);
tags = g_string_new (tags_string);
g_free (tags_string);
+ length_before = region_end - region_start;
mask = g_string_new_len (tag_entry->mask->str + region_start, region_end - region_start);
@@ -1885,14 +1900,14 @@
if (cursor_position >= region_start)
{
- cursor_position += mask->len - (region_end - region_start);
+ cursor_position += g_utf8_strlen (tags->str, tags->len) - length_before;
}
tag_entry->internal_operation++;
tag_entry->suppress_mask_update++;
gtk_editable_delete_text (GTK_EDITABLE (tag_entry), region_start, region_end);
position = region_start;
- gtk_editable_insert_text (GTK_EDITABLE (tag_entry), tags->str, mask->len, &position);
+ gtk_editable_insert_text (GTK_EDITABLE (tag_entry), tags->str, tags->len, &position);
tag_entry->suppress_mask_update--;
tag_entry->internal_operation--;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]