Mercurial > pidgin
changeset 10243:e450f24d1fe1
[gaim-migrate @ 11383]
I used to think Mozilla was a good thing. Now I'm not so sure.
Who would think "text/html" is "for internal use only" - yup, mozilla.
Oh well.
"No operating systems or external applications understand this flavor" eh? we
know the taste now!
committer: Tailor Script <tailor@pidgin.im>
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Tue, 23 Nov 2004 02:22:24 +0000 |
parents | c66da6503db8 |
children | 13cb42ebb537 |
files | src/gtkimhtml.c src/gtkimhtml.h |
diffstat | 2 files changed, 29 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gtkimhtml.c Tue Nov 23 02:15:47 2004 +0000 +++ b/src/gtkimhtml.c Tue Nov 23 02:22:24 2004 +0000 @@ -1332,7 +1332,6 @@ gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); - if(gtk_imhtml_get_editable(imhtml) && sd->data){ switch (info) { case GTK_IMHTML_DRAG_URL: @@ -1352,32 +1351,44 @@ } break; case GTK_IMHTML_DRAG_HTML: - if (sd->length >= 2 && - (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { - /* This is UCS-2 */ - char *tmp; - char *utf8 = g_convert(text, sd->length, "UTF-8", "UCS-2", NULL, NULL, NULL); - g_free(text); - text = utf8; - if (!text) { + { + char *utf8 = NULL; + /* Ewww. This is all because mozilla thinks that text/html is 'for internal use only.' + * as explained by this comment in gtkhtml: + * + * FIXME This hack decides the charset of the selection. It seems that + * mozilla/netscape alway use ucs2 for text/html + * and openoffice.org seems to always use utf8 so we try to validate + * the string as utf8 and if that fails we assume it is ucs2 + * + * See also the comment on text/html here: + * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html + */ + if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) { + utf8 = g_convert(text, sd->length, "UTF-8", "UCS-2", NULL, NULL, NULL); + + if (!utf8) { gaim_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in drag_rcv_cb\n"); return; } - tmp = g_utf8_next_char(text); - memmove(text, tmp, strlen(tmp) + 1); - } - - if (!(*text) || !g_utf8_validate(text, -1, NULL)) { + + if (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe || TRUE) { + char *tmp; + tmp = g_utf8_next_char(utf8); + memmove(utf8, tmp, strlen(tmp) + 1); + } + } else if (!(*text) || !g_utf8_validate(text, -1, NULL)) { gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n"); - g_free(text); return; } - gtk_imhtml_insert_html_at_iter(imhtml, text, 0, &iter); + + gtk_imhtml_insert_html_at_iter(imhtml, utf8 ? utf8 : text, 0, &iter); + g_free(utf8); break; + } case GTK_IMHTML_DRAG_TEXT: if (!(*text) || !g_utf8_validate(text, -1, NULL)) { gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n"); - g_free(text); return; } else { char *tmp = gaim_escape_html(text);
--- a/src/gtkimhtml.h Tue Nov 23 02:15:47 2004 +0000 +++ b/src/gtkimhtml.h Tue Nov 23 02:22:24 2004 +0000 @@ -200,11 +200,11 @@ }; #define GTK_IMHTML_DND_TARGETS \ + { "_NETSCAPE_URL", 0, GTK_IMHTML_DRAG_URL }, \ { "text/html", 0, GTK_IMHTML_DRAG_HTML }, \ { "x-url/ftp", 0, GTK_IMHTML_DRAG_URL }, \ { "x-url/http", 0, GTK_IMHTML_DRAG_URL }, \ { "text/uri-list", 0, GTK_IMHTML_DRAG_URL }, \ - { "_NETSCAPE_URL", 0, GTK_IMHTML_DRAG_URL }, \ { "UTF8_STRING", 0, GTK_IMHTML_DRAG_UTF8_STRING }, \ { "COMPOUND_TEXT", 0, GTK_IMHTML_DRAG_COMPOUND_TEXT }, \ { "STRING", 0, GTK_IMHTML_DRAG_STRING }, \