summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2007-11-12 15:51:55 +0000
committerAlexander Larsson <alexl@src.gnome.org>2007-11-12 15:51:55 +0000
commit118e9f41e23829d391e4be7de7c648ca9a491fc0 (patch)
treeee125970568c17820c0c551dcb9c9b94a2492116
parented69dc0fb9f6ffc73f2158166a9f83ff7009623a (diff)
downloadgtk+-118e9f41e23829d391e4be7de7c648ca9a491fc0.tar.gz
Avoid loading the ISO8859-1 iconv module. We're already doing all the
2007-11-12 Alexander Larsson <alexl@redhat.com> * gdk/x11/gdkselection-x11.c: Avoid loading the ISO8859-1 iconv module. We're already doing all the required work anyway. This saves 4kb private dirty memory per gtk+ process svn path=/trunk/; revision=18986
-rw-r--r--ChangeLog7
-rw-r--r--gdk/x11/gdkselection-x11.c42
2 files changed, 28 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 2cad15f1a3..29d6050b8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-12 Alexander Larsson <alexl@redhat.com>
+
+ * gdk/x11/gdkselection-x11.c:
+ Avoid loading the ISO8859-1 iconv module.
+ We're already doing all the required work anyway.
+ This saves 4kb private dirty memory per gtk+ process
+
2007-11-11 Yevgen Muntyan <muntyan@tamu.edu>
* gtk/gtktextview.c: Moved gtk_text_view_update_im_spot_location()
diff --git a/gdk/x11/gdkselection-x11.c b/gdk/x11/gdkselection-x11.c
index c15d1f5abf..88d2729ca0 100644
--- a/gdk/x11/gdkselection-x11.c
+++ b/gdk/x11/gdkselection-x11.c
@@ -727,7 +727,8 @@ gdk_string_to_compound_text_for_display (GdkDisplay *display,
* from the input string and also canonicalizes \r, and \r\n to \n
*/
static gchar *
-sanitize_utf8 (const gchar *src)
+sanitize_utf8 (const gchar *src,
+ gboolean return_latin1)
{
gint len = strlen (src);
GString *result = g_string_sized_new (len);
@@ -746,13 +747,26 @@ sanitize_utf8 (const gchar *src)
else
{
gunichar ch = g_utf8_get_char (p);
- char buf[7];
- gint buflen;
if (!((ch < 0x20 && ch != '\t' && ch != '\n') || (ch >= 0x7f && ch < 0xa0)))
{
- buflen = g_unichar_to_utf8 (ch, buf);
- g_string_append_len (result, buf, buflen);
+ if (return_latin1)
+ {
+ if (ch <= 0xff)
+ g_string_append_c (result, ch);
+ else
+ g_string_append_printf (result,
+ ch < 0x10000 ? "\\u%04x" : "\\U%08x",
+ ch);
+ }
+ else
+ {
+ char buf[7];
+ gint buflen;
+
+ buflen = g_unichar_to_utf8 (ch, buf);
+ g_string_append_len (result, buf, buflen);
+ }
}
p = g_utf8_next_char (p);
@@ -779,21 +793,7 @@ sanitize_utf8 (const gchar *src)
gchar *
gdk_utf8_to_string_target (const gchar *str)
{
- GError *error = NULL;
-
- gchar *tmp_str = sanitize_utf8 (str);
- gchar *result = g_convert_with_fallback (tmp_str, -1,
- "ISO-8859-1", "UTF-8",
- NULL, NULL, NULL, &error);
- if (!result)
- {
- g_warning ("Error converting from UTF-8 to STRING: %s",
- error->message);
- g_error_free (error);
- }
-
- g_free (tmp_str);
- return result;
+ return sanitize_utf8 (str, TRUE);
}
/**
@@ -832,7 +832,7 @@ gdk_utf8_to_compound_text_for_display (GdkDisplay *display,
need_conversion = !g_get_charset (&charset);
- tmp_str = sanitize_utf8 (str);
+ tmp_str = sanitize_utf8 (str, FALSE);
if (need_conversion)
{