Commit 8f0018923a27459cfa79a144933c05ccd928652d
1 parent
b37c1d20
Exists in
master
and in
1 other branch
Fixing windows build.
Showing
1 changed file
with
49 additions
and
0 deletions
Show diff stats
src/selection/windows/copy.c
| ... | ... | @@ -193,3 +193,52 @@ void v3270_update_system_clipboard(GtkWidget *widget) |
| 193 | 193 | |
| 194 | 194 | } |
| 195 | 195 | |
| 196 | +void v3270_set_copy_target(GtkWidget *widget, const gchar *target, guint flags, guint info) { | |
| 197 | + | |
| 198 | + v3270 * terminal = GTK_V3270(widget); | |
| 199 | + | |
| 200 | + if(!terminal->selection.blocks) | |
| 201 | + { | |
| 202 | + // No clipboard data, return. | |
| 203 | + v3270_emit_copy_state(widget); | |
| 204 | + return; | |
| 205 | + } | |
| 206 | + | |
| 207 | + // Has clipboard data, inform system. | |
| 208 | + GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,terminal->selection.target); | |
| 209 | + | |
| 210 | + GtkTargetList * list = gtk_target_list_new(NULL,0); | |
| 211 | + | |
| 212 | + GtkTargetEntry entry = { | |
| 213 | + .target = (char *) target, | |
| 214 | + .flags = flags, | |
| 215 | + .info = info | |
| 216 | + }; | |
| 217 | + | |
| 218 | + gtk_target_list_add_table(list, &entry, 1); | |
| 219 | + | |
| 220 | + int n_targets; | |
| 221 | + GtkTargetEntry * targets = gtk_target_table_new_from_list(list, &n_targets); | |
| 222 | + | |
| 223 | + if(gtk_clipboard_set_with_owner( | |
| 224 | + clipboard, | |
| 225 | + targets, | |
| 226 | + n_targets, | |
| 227 | + (GtkClipboardGetFunc) clipboard_get, | |
| 228 | + (GtkClipboardClearFunc) clipboard_clear, | |
| 229 | + G_OBJECT(widget) | |
| 230 | + )) | |
| 231 | + { | |
| 232 | + gtk_clipboard_set_can_store(clipboard,targets,1); | |
| 233 | + } | |
| 234 | + | |
| 235 | + gtk_target_table_free(targets, n_targets); | |
| 236 | + gtk_target_list_unref(list); | |
| 237 | + v3270_emit_copy_state(widget); | |
| 238 | +} | |
| 239 | + | |
| 240 | +LIB3270_EXPORT void v3270_copy_as_html(GtkWidget *widget) { | |
| 241 | + debug("%s(%p)",__FUNCTION__,widget); | |
| 242 | + v3270_set_copy_target(widget,"text/html", 0, CLIPBOARD_TYPE_HTML); | |
| 243 | +} | |
| 244 | + | ... | ... |