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;