| 1093 return; |
1093 return; |
| 1094 } |
1094 } |
| 1095 |
1095 |
| 1096 imhtml_paste_insert(imhtml, text, FALSE); |
1096 imhtml_paste_insert(imhtml, text, FALSE); |
| 1097 g_free(text); |
1097 g_free(text); |
| |
1098 } |
| |
1099 |
| |
1100 |
| |
1101 static void smart_backspace_cb(GtkIMHtml *imhtml, gpointer blah) |
| |
1102 { |
| |
1103 GtkTextIter iter; |
| |
1104 GtkTextChildAnchor* anchor; |
| |
1105 char * text; |
| |
1106 gint offset; |
| |
1107 |
| |
1108 if (!imhtml->editable) |
| |
1109 return; |
| |
1110 |
| |
1111 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer)); |
| |
1112 |
| |
1113 /* Get the character before the insertion point */ |
| |
1114 offset = gtk_text_iter_get_offset(&iter); |
| |
1115 if (offset <= 0) |
| |
1116 return; |
| |
1117 |
| |
1118 gtk_text_iter_backward_char(&iter); |
| |
1119 anchor = gtk_text_iter_get_child_anchor(&iter); |
| |
1120 |
| |
1121 if (!anchor) |
| |
1122 return; /* No smiley here */ |
| |
1123 |
| |
1124 text = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_plaintext"); |
| |
1125 if (!text) |
| |
1126 return; |
| |
1127 |
| |
1128 /* ok, then we need to insert the image buffer text before the anchor */ |
| |
1129 gtk_text_buffer_insert(imhtml->text_buffer, &iter, text, -1); |
| 1098 } |
1130 } |
| 1099 |
1131 |
| 1100 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah) |
1132 static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah) |
| 1101 { |
1133 { |
| 1102 #ifdef _WIN32 |
1134 #ifdef _WIN32 |
| 4050 /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */ |
4082 /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */ |
| 4051 imhtml->editable = editable; |
4083 imhtml->editable = editable; |
| 4052 imhtml->format_functions = GTK_IMHTML_ALL; |
4084 imhtml->format_functions = GTK_IMHTML_ALL; |
| 4053 |
4085 |
| 4054 if (editable) |
4086 if (editable) |
| |
4087 { |
| 4055 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", |
4088 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", |
| 4056 G_CALLBACK(mark_set_cb), imhtml); |
4089 G_CALLBACK(mark_set_cb), imhtml); |
| |
4090 g_signal_connect(G_OBJECT(imhtml), "backspace", G_CALLBACK(smart_backspace_cb), NULL); |
| |
4091 } |
| 4057 } |
4092 } |
| 4058 |
4093 |
| 4059 void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo) |
4094 void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo) |
| 4060 { |
4095 { |
| 4061 g_return_if_fail(imhtml != NULL); |
4096 g_return_if_fail(imhtml != NULL); |