| 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 { |