diff --git a/src/objects/application/actions/script.c b/src/objects/application/actions/script.c index 6a6f0bc..47ee7b8 100644 --- a/src/objects/application/actions/script.c +++ b/src/objects/application/actions/script.c @@ -28,6 +28,7 @@ static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal); static void response(GtkWidget *dialog, gint response_id, GtkWidget *input); +static void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, const void *dunno); GAction * pw3270_script_action_new() { @@ -75,6 +76,14 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { gtk_widget_set_vexpand(input,FALSE); gtk_entry_set_width_chars(GTK_ENTRY(input),60); + gtk_entry_set_icon_from_icon_name( + GTK_ENTRY(input), + GTK_ENTRY_ICON_SECONDARY, + "document-open" + ); + + g_signal_connect(input,"icon_press",G_CALLBACK(icon_press),NULL); + gtk_grid_attach(grid,input,1,0,10,1); // Setup window @@ -89,6 +98,8 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { NULL ); + /* + // Cant use gtk_entry_bind_to_filechooser due to plugin interaction gtk_entry_bind_to_filechooser( input, GTK_FILE_CHOOSER_ACTION_OPEN, @@ -97,6 +108,7 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { "*.*", _("All files") ); + */ g_signal_connect(dialog,"response",G_CALLBACK(response),input); @@ -105,6 +117,53 @@ GtkWidget * factory(V3270SimpleAction * action, GtkWidget *terminal) { } +void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, const void *dunno) { + + GtkWidget * dialog = + gtk_file_chooser_dialog_new( + _("Select script to run"), + GTK_WINDOW(gtk_widget_get_toplevel(entry)), + GTK_FILE_CHOOSER_ACTION_OPEN, + _("Cancel"), GTK_RESPONSE_CANCEL, + _("Run"), GTK_RESPONSE_ACCEPT, + NULL + ); + + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); + + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(entry)); + + pw3270_application_plugin_call( + g_application_get_default(), + "pw3270_plugin_set_script_chooser", + dialog + ); + + /* + g_autoptr(GSList) filters = gtk_file_chooser_list_filters(GTK_FILE_CHOOSER(dialog)); + + if(g_slist_length(filters) == 0) { + gtk_widget_destroy(dialog); + } + */ + + if(filename && *filename) + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename); + + gtk_widget_show_all(dialog); + + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { + + g_autofree gchar * filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + gtk_entry_set_text(GTK_ENTRY(entry),filename); + + } + + gtk_widget_destroy(dialog); + +} + void response(GtkWidget *dialog, gint response_id, GtkWidget *input) { if(response_id == GTK_RESPONSE_APPLY) { -- libgit2 0.21.2