# HG changeset patch # User Yoshiki Yazawa # Date 1210413803 0 # Node ID d1dfbedd9e644cd7d147a4d6ca995e99cd567f4a # Parent f9fd7ddf69964260e910a99e7c47952371d2f161 - due to bug of gtk_text_buffer_insert(), chop the text at designated position. - cleanups diff -r f9fd7ddf6996 -r d1dfbedd9e64 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Thu May 08 00:27:54 2008 +0000 +++ b/pidgin/gtkimhtml.c Sat May 10 10:03:23 2008 +0000 @@ -586,15 +586,12 @@ tip = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_tiptext"); hand = FALSE; } -//yaz here bomb explodes -#if 1 if (tip && *tip) { if (!GTK_IMHTML(imhtml)->editable && hand) gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor); GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT, gtk_imhtml_tip, imhtml); } -#endif GTK_IMHTML(imhtml)->tip = tip; g_slist_free(tags); return FALSE; @@ -962,13 +959,16 @@ } else text = html_clipboard; - /* Mozilla asks that we start our text/html with the Unicode byte order mark */ - str = g_string_append(str, text); - str = g_string_append_c(str, 0x00); - selection = g_convert(str->str, str->len, "UTF-16", "UTF-8", NULL, &len, NULL); + selection = NULL; + if (primary) { + text = gtk_imhtml_get_markup_range(imhtml, &start, &end); + } else { + text = html_clipboard; + } + /* xxx should remove following line --yaz */ + purple_debug_info("imhtml clipboard", "html_clipboard: %s len = %d\n", text, strlen(text)); gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), - 16, (const guchar *)selection, len); - g_string_free(str, TRUE); + 8, (const guchar *)text, strlen(text)); #else /*_WIN32 */ selection = clipboard_html_to_win32(html_clipboard); gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE), @@ -1123,7 +1123,8 @@ if (selection_data->length >= 2 && (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { /* This is UTF-16 */ - char *utf8 = utf16_to_utf8_with_bom_check(text, selection_data->length); +// char *utf8 = utf16_to_utf8_with_bom_check(text, selection_data->length); + char *utf8 = g_convert(text, selection_data->length, "UTF-8", "UTF-16", NULL, NULL, NULL); g_free(text); text = utf8; if (!text) { @@ -1845,7 +1846,8 @@ * 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 = utf16_to_utf8_with_bom_check(text, sd->length); +// utf8 = utf16_to_utf8_with_bom_check(text, sd->length); + utf8 = g_convert(text, sd->length, "UTF-8", "UTF-16", NULL, NULL, NULL); if (!utf8) { purple_debug_warning("gtkimhtml", "g_convert from UTF-16 failed in drag_rcv_cb\n"); @@ -3146,6 +3148,7 @@ break; } } + ws[wpos] = '\0'; // chop ws at wpos. due to bug of gtk_text_buffer_insert() --yaz gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); ws[0] = '\0'; wpos = 0; @@ -3160,7 +3163,7 @@ ws[wpos++] = 0xE2; ws[wpos++] = 0x80; ws[wpos++] = 0x8F; - + if (!rtl_direction) { /* insert LRM character to set direction */