pidgin/gtkimhtml.c

changeset 17288
ffda972c2fb4
parent 17189
7d0cf54d0f32
child 17388
8be39f0de528
child 17406
bc37f59a34f1
child 17880
5e73968467e0
equal deleted inserted replaced
17287:72e491a54a63 17288:ffda972c2fb4
930 } 930 }
931 931
932 static void copy_clipboard_cb(GtkIMHtml *imhtml, gpointer unused) 932 static void copy_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
933 { 933 {
934 GtkTextIter start, end; 934 GtkTextIter start, end;
935 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer); 935 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
936 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer); 936 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
937 937 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
938 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel); 938 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
939 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins); 939 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
940 940
941 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
942 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
943 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
944 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
945
946 if (imhtml->clipboard_html_string) {
947 g_free(imhtml->clipboard_html_string); 941 g_free(imhtml->clipboard_html_string);
948 g_free(imhtml->clipboard_text_string); 942 g_free(imhtml->clipboard_text_string);
949 } 943
950 944 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
951 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); 945 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
952 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); 946 }
953 947
954 g_signal_stop_emission_by_name(imhtml, "copy-clipboard"); 948 g_signal_stop_emission_by_name(imhtml, "copy-clipboard");
955 } 949 }
956 950
957 static void cut_clipboard_cb(GtkIMHtml *imhtml, gpointer unused) 951 static void cut_clipboard_cb(GtkIMHtml *imhtml, gpointer unused)
958 { 952 {
959 GtkTextIter start, end; 953 GtkTextIter start, end;
960 GtkTextMark *sel = gtk_text_buffer_get_selection_bound(imhtml->text_buffer); 954 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
961 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer); 955 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
962 956 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
963 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, sel); 957 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
964 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &end, ins); 958 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
965 959
966 gtk_clipboard_set_with_owner(gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD),
967 selection_targets, sizeof(selection_targets) / sizeof(GtkTargetEntry),
968 (GtkClipboardGetFunc)gtk_imhtml_clipboard_get,
969 (GtkClipboardClearFunc)NULL, G_OBJECT(imhtml));
970
971 if (imhtml->clipboard_html_string) {
972 g_free(imhtml->clipboard_html_string); 960 g_free(imhtml->clipboard_html_string);
973 g_free(imhtml->clipboard_text_string); 961 g_free(imhtml->clipboard_text_string);
974 } 962
975 963 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end);
976 imhtml->clipboard_html_string = gtk_imhtml_get_markup_range(imhtml, &start, &end); 964 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end);
977 imhtml->clipboard_text_string = gtk_imhtml_get_text(imhtml, &start, &end); 965
978 966 if (imhtml->editable)
979 if (imhtml->editable) 967 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE);
980 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE); 968 }
969
981 g_signal_stop_emission_by_name(imhtml, "cut-clipboard"); 970 g_signal_stop_emission_by_name(imhtml, "cut-clipboard");
982 } 971 }
983 972
984 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext) 973 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext)
985 { 974 {

mercurial