comparison src/gtkimhtml.c @ 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 6f49ce1d394d
children ec140184437b
comparison
equal deleted inserted replaced
10242:c66da6503db8 10243:e450f24d1fe1
1330 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer); 1330 GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer);
1331 GtkTextIter iter; 1331 GtkTextIter iter;
1332 1332
1333 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); 1333 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark);
1334 1334
1335
1336 if(gtk_imhtml_get_editable(imhtml) && sd->data){ 1335 if(gtk_imhtml_get_editable(imhtml) && sd->data){
1337 switch (info) { 1336 switch (info) {
1338 case GTK_IMHTML_DRAG_URL: 1337 case GTK_IMHTML_DRAG_URL:
1339 gaim_str_strip_cr(sd->data); 1338 gaim_str_strip_cr(sd->data);
1340 1339
1350 /* Special reasons, aka images being put in via other tag, etc. */ 1349 /* Special reasons, aka images being put in via other tag, etc. */
1351 } 1350 }
1352 } 1351 }
1353 break; 1352 break;
1354 case GTK_IMHTML_DRAG_HTML: 1353 case GTK_IMHTML_DRAG_HTML:
1355 if (sd->length >= 2 && 1354 {
1356 (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { 1355 char *utf8 = NULL;
1357 /* This is UCS-2 */ 1356 /* Ewww. This is all because mozilla thinks that text/html is 'for internal use only.'
1358 char *tmp; 1357 * as explained by this comment in gtkhtml:
1359 char *utf8 = g_convert(text, sd->length, "UTF-8", "UCS-2", NULL, NULL, NULL); 1358 *
1360 g_free(text); 1359 * FIXME This hack decides the charset of the selection. It seems that
1361 text = utf8; 1360 * mozilla/netscape alway use ucs2 for text/html
1362 if (!text) { 1361 * and openoffice.org seems to always use utf8 so we try to validate
1362 * the string as utf8 and if that fails we assume it is ucs2
1363 *
1364 * See also the comment on text/html here:
1365 * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html
1366 */
1367 if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) {
1368 utf8 = g_convert(text, sd->length, "UTF-8", "UCS-2", NULL, NULL, NULL);
1369
1370 if (!utf8) {
1363 gaim_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in drag_rcv_cb\n"); 1371 gaim_debug_warning("gtkimhtml", "g_convert from UCS-2 failed in drag_rcv_cb\n");
1364 return; 1372 return;
1365 } 1373 }
1366 tmp = g_utf8_next_char(text); 1374
1367 memmove(text, tmp, strlen(tmp) + 1); 1375 if (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe || TRUE) {
1368 } 1376 char *tmp;
1369 1377 tmp = g_utf8_next_char(utf8);
1370 if (!(*text) || !g_utf8_validate(text, -1, NULL)) { 1378 memmove(utf8, tmp, strlen(tmp) + 1);
1379 }
1380 } else if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
1371 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n"); 1381 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
1372 g_free(text);
1373 return; 1382 return;
1374 } 1383 }
1375 gtk_imhtml_insert_html_at_iter(imhtml, text, 0, &iter); 1384
1385 gtk_imhtml_insert_html_at_iter(imhtml, utf8 ? utf8 : text, 0, &iter);
1386 g_free(utf8);
1376 break; 1387 break;
1388 }
1377 case GTK_IMHTML_DRAG_TEXT: 1389 case GTK_IMHTML_DRAG_TEXT:
1378 if (!(*text) || !g_utf8_validate(text, -1, NULL)) { 1390 if (!(*text) || !g_utf8_validate(text, -1, NULL)) {
1379 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n"); 1391 gaim_debug_warning("gtkimhtml", "empty string or invalid UTF-8 in drag_rcv_cb\n");
1380 g_free(text);
1381 return; 1392 return;
1382 } else { 1393 } else {
1383 char *tmp = gaim_escape_html(text); 1394 char *tmp = gaim_escape_html(text);
1384 gtk_imhtml_insert_html_at_iter(imhtml, tmp, 0, &iter); 1395 gtk_imhtml_insert_html_at_iter(imhtml, tmp, 0, &iter);
1385 g_free(tmp); 1396 g_free(tmp);