diff options
author | Alexander Larsson <alexl@redhat.com> | 2007-11-12 15:51:55 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-11-12 15:51:55 +0000 |
commit | 118e9f41e23829d391e4be7de7c648ca9a491fc0 (patch) | |
tree | ee125970568c17820c0c551dcb9c9b94a2492116 | |
parent | ed69dc0fb9f6ffc73f2158166a9f83ff7009623a (diff) | |
download | gtk+-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-- | ChangeLog | 7 | ||||
-rw-r--r-- | gdk/x11/gdkselection-x11.c | 42 |
2 files changed, 28 insertions, 21 deletions
@@ -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) { |