diff --git a/src/dialogs/load.c b/src/dialogs/load.c index ca5df1c..4d35312 100644 --- a/src/dialogs/load.c +++ b/src/dialogs/load.c @@ -245,7 +245,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ gtk_window_set_title(GTK_WINDOW(dialog),_("Paste from file")); - if(filename) + if(filename && *filename) gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(widget))); diff --git a/src/include/v3270.h b/src/include/v3270.h index 3af26cd..1e97bd0 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -227,9 +227,12 @@ LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut); - LIB3270_EXPORT void v3270_paste(GtkWidget *widget); - LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget); - LIB3270_EXPORT void v3270_paste_from_file(GtkWidget *widget); + LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url); + + LIB3270_EXPORT void v3270_paste(GtkWidget *widget) G_GNUC_DEPRECATED; + LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) G_GNUC_DEPRECATED; + LIB3270_EXPORT void v3270_paste_from_file(GtkWidget *widget) G_GNUC_DEPRECATED; + LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const gchar *encoding); // Colors diff --git a/src/selection/linux/paste.c b/src/selection/linux/paste.c index 210c4c4..e1c3d74 100644 --- a/src/selection/linux/paste.c +++ b/src/selection/linux/paste.c @@ -29,6 +29,7 @@ #include #include + #include /*--[ Implement ]------------------------------------------------------------------------------------*/ @@ -176,25 +177,47 @@ static void targets_received(GtkClipboard *clipboard, GdkAtom *atoms, gint n_ato } -LIB3270_EXPORT void v3270_paste(GtkWidget *widget) +LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url) { g_return_if_fail(GTK_IS_V3270(widget)); GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GTK_V3270(widget)->selection.target); - gtk_clipboard_request_targets(clipboard, (GtkClipboardTargetsReceivedFunc) targets_received, (gpointer) widget); + + if(!url || g_str_has_prefix(url,"clipboard://")) + { + gtk_clipboard_request_targets( + clipboard, + (GtkClipboardTargetsReceivedFunc) targets_received, + (gpointer) widget + ); + } + else if(g_str_has_prefix(url,"text://")) + { + gtk_clipboard_request_text( + clipboard, + (GtkClipboardTextReceivedFunc) text_received, + (gpointer) widget + ); + + } + else if(g_str_has_prefix(url,"file://")) + { + GtkWidget * dialog = v3270_load_dialog_new(widget, url+7); + gtk_widget_show_all(dialog); + v3270_load_dialog_run(dialog); + gtk_widget_destroy(dialog); + } } -LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) -{ - g_return_if_fail(GTK_IS_V3270(widget)); - GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GTK_V3270(widget)->selection.target); - gtk_clipboard_request_text( - clipboard, - (GtkClipboardTextReceivedFunc) text_received, - (gpointer) widget - ); +LIB3270_EXPORT void v3270_paste(GtkWidget *widget) +{ + v3270_paste_from_url(widget,NULL); +} +LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) +{ + v3270_paste_from_url(widget,"text://"); } diff --git a/src/testprogram/toolbar.c b/src/testprogram/toolbar.c index 0fc8938..5cab2e9 100644 --- a/src/testprogram/toolbar.c +++ b/src/testprogram/toolbar.c @@ -157,7 +157,7 @@ static void paste_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { - v3270_paste(terminal); + v3270_paste_from_url(terminal,NULL); } static void copy_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) diff --git a/src/trace/exec.c b/src/trace/exec.c index 3980230..a19969c 100644 --- a/src/trace/exec.c +++ b/src/trace/exec.c @@ -237,18 +237,7 @@ gchar * arg = cmdline+5; g_strstrip(arg); - if(!*arg) - { - v3270_paste(trace->terminal); - } - else if(!g_ascii_strcasecmp(arg,"text")) - { - v3270_paste_text(trace->terminal); - } - else - { - return errno = EINVAL; - } + v3270_paste_from_url(trace->terminal,arg); return 0; } -- libgit2 0.21.2