Mercurial > pidgin
comparison pidgin/gtkimhtml.c @ 18453:f50a82a14122
Fix #1727 and also plug a possible leak and make a little efficiency improvement to the win32 clipboard handling.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sun, 08 Jul 2007 17:53:14 +0000 |
parents | 4b1e2aefeb9d |
children | 8425cbac2474 |
comparison
equal
deleted
inserted
replaced
18452:45865fb3f4f9 | 18453:f50a82a14122 |
---|---|
214 | 214 |
215 static gchar * | 215 static gchar * |
216 clipboard_html_to_win32(char *html) { | 216 clipboard_html_to_win32(char *html) { |
217 int length; | 217 int length; |
218 GString *clipboard; | 218 GString *clipboard; |
219 gchar *tmp; | |
220 | 219 |
221 if (html == NULL) | 220 if (html == NULL) |
222 return NULL; | 221 return NULL; |
223 | 222 |
224 length = strlen(html); | 223 length = strlen(html); |
225 clipboard = g_string_new ("Version:1.0\r\n"); | 224 clipboard = g_string_new ("Version:1.0\r\n"); |
226 g_string_append(clipboard, "StartHTML:0000000105\r\n"); | 225 g_string_append(clipboard, "StartHTML:0000000105\r\n"); |
227 tmp = g_strdup_printf("EndHTML:%010d\r\n", 147 + length); | 226 g_string_append_printf(clipboard, "EndHTML:%010d\r\n", 147 + length); |
228 g_string_append(clipboard, tmp); | |
229 g_free(tmp); | |
230 g_string_append(clipboard, "StartFragment:0000000127\r\n"); | 227 g_string_append(clipboard, "StartFragment:0000000127\r\n"); |
231 tmp = g_strdup_printf("EndFragment:%010d\r\n", 127 + length); | 228 g_string_append_printf(clipboard, "EndFragment:%010d\r\n", 127 + length); |
232 g_string_append(clipboard, tmp); | |
233 g_free(tmp); | |
234 g_string_append(clipboard, "<!--StartFragment-->\r\n"); | 229 g_string_append(clipboard, "<!--StartFragment-->\r\n"); |
235 g_string_append(clipboard, html); | 230 g_string_append(clipboard, html); |
236 g_string_append(clipboard, "\r\n<!--EndFragment-->"); | 231 g_string_append(clipboard, "\r\n<!--EndFragment-->"); |
237 | 232 |
238 return g_string_free(clipboard, FALSE); | 233 return g_string_free(clipboard, FALSE); |
907 str = g_string_append_unichar(str, 0x0000); | 902 str = g_string_append_unichar(str, 0x0000); |
908 selection = g_convert(str->str, str->len, "UCS-2", "UTF-8", NULL, &len, NULL); | 903 selection = g_convert(str->str, str->len, "UCS-2", "UTF-8", NULL, &len, NULL); |
909 gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), 16, (const guchar *)selection, len); | 904 gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), 16, (const guchar *)selection, len); |
910 g_string_free(str, TRUE); | 905 g_string_free(str, TRUE); |
911 #else | 906 #else |
912 selection = clipboard_html_to_win32(imhtml->clipboard_html_string); | 907 selection = clipboard_html_to_win32(html_clipboard); |
913 gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE), 8, (const guchar *)selection, strlen(selection)); | 908 gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE), 8, (const guchar *)selection, strlen(selection)); |
914 #endif | 909 #endif |
915 g_free(selection); | 910 g_free(selection); |
916 } else { | 911 } else { |
917 if (primary) { | 912 if (primary) { |
955 gtk_clipboard_set_with_owner(clipboard_selection, | 950 gtk_clipboard_set_with_owner(clipboard_selection, |
956 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry), | 951 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry), |
957 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get, | 952 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get, |
958 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml)); | 953 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml)); |
959 | 954 |
960 g_free(imhtml->clipboard_html_string); | 955 g_free(html_clipboard); |
961 g_free(imhtml->clipboard_text_string); | 956 g_free(text_clipboard); |
962 | 957 |
963 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); | 958 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); |
964 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); | 959 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); |
965 | 960 |
966 text_clipboard = imhtml->clipboard_text_string; | 961 text_clipboard = imhtml->clipboard_text_string; |
980 gtk_clipboard_set_with_owner(clipboard_selection, | 975 gtk_clipboard_set_with_owner(clipboard_selection, |
981 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry), | 976 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry), |
982 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get, | 977 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get, |
983 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml)); | 978 (GtkClipboardClearFunc)gtk_imhtml_clipboard_clear, G_OBJECT(imhtml)); |
984 | 979 |
985 g_free(imhtml->clipboard_html_string); | 980 g_free(html_clipboard); |
986 g_free(imhtml->clipboard_text_string); | 981 g_free(text_clipboard); |
987 | 982 |
988 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); | 983 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); |
989 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); | 984 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); |
990 | 985 |
991 text_clipboard = imhtml->clipboard_text_string; | 986 text_clipboard = imhtml->clipboard_text_string; |