diff --git a/src/objects/application/actions/script.c b/src/objects/application/actions/script.c index 47ee7b8..e841813 100644 --- a/src/objects/application/actions/script.c +++ b/src/objects/application/actions/script.c @@ -27,7 +27,7 @@ #ifdef ENABLE_SCRIPTS static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal); -static void response(GtkWidget *dialog, gint response_id, GtkWidget *input); +static void response(GtkWidget *dialog, gint response_id, GtkEntry *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() { @@ -98,18 +98,6 @@ 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, - _("Run script"), - NULL, - "*.*", - _("All files") - ); - */ - g_signal_connect(dialog,"response",G_CALLBACK(response),input); gtk_widget_show_all(GTK_WIDGET(grid)); @@ -117,7 +105,7 @@ 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) { +void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, GdkEvent G_GNUC_UNUSED(*event), const void G_GNUC_UNUSED(*dunno)) { GtkWidget * dialog = gtk_file_chooser_dialog_new( @@ -164,14 +152,47 @@ void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G } -void response(GtkWidget *dialog, gint response_id, GtkWidget *input) { +void response(GtkWidget *input_dialog, gint response_id, GtkEntry *entry) { - if(response_id == GTK_RESPONSE_APPLY) { + g_autofree gchar *filename = g_strdup(gtk_entry_get_text(entry)); + gtk_widget_destroy(input_dialog); + if(response_id != GTK_RESPONSE_APPLY) { + return; } - gtk_widget_destroy(dialog); + GtkWidget * terminal = pw3270_get_active_terminal(); + + g_message("Finding worker for '%s'",filename); + + int (*call)(GtkWidget *terminal, const gchar *filename); + + GSList * item; + for(item = PW3270_APPLICATION(g_application_get_default())->plugins; item; item = g_slist_next(item)) { + if(g_module_symbol((GModule *) item->data, "pw3270_plugin_run_script", (gpointer *) &call)) { + if(call(terminal,filename) == 0) { + break; + } + } + } + + GtkWidget * dialog = gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(terminal)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("Can't run \"%s\""), filename + ); + + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",_("No available runner for this file")); + + gtk_window_set_title(GTK_WINDOW(dialog),_("Can't run script")); + + gtk_widget_show_all(dialog); + + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); + g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); } #endif // ENABLE_SCRIPTS -- libgit2 0.21.2