diff --git a/src/lib3270/options.c b/src/lib3270/options.c index b30efa8..5da612a 100644 --- a/src/lib3270/options.c +++ b/src/lib3270/options.c @@ -153,7 +153,7 @@ LIB3270_EXPORT LIB3270_OPTION lib3270_parse_host_type(const char *name) int f; - for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) + for(f=0;host_type[f].name;f++) { if(!strcasecmp(host_type[f].name,name)) return host_type[f].option; diff --git a/src/pw3270/window.c b/src/pw3270/window.c index f8f0c67..ff22d78 100644 --- a/src/pw3270/window.c +++ b/src/pw3270/window.c @@ -294,8 +294,47 @@ LIB3270_EXPORT void pw3270_set_host_type(GtkWidget *widget, const gchar *name) { + size_t f; + size_t sz; + g_return_if_fail(GTK_IS_PW3270(widget)); - v3270_set_host_type(GTK_PW3270(widget)->terminal,name); + + int rc = v3270_set_host_type(GTK_PW3270(widget)->terminal,name); + + if(!rc) { + return; + } + + GtkWidget *popup = gtk_message_dialog_new_with_markup( + GTK_WINDOW(widget), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, + _( "Can't recognize \"%s\" as a valid host type" ), name); + + gtk_window_set_title(GTK_WINDOW(popup),strerror(rc)); + + // Obtenho as opções válidas. + char text[4096]; + const LIB3270_OPTION_ENTRY *host_type = lib3270_get_option_list(); + + *text = 0; + for(f=1;host_type[f].name;f++) + { + sz = strlen(text); + snprintf(text+sz,4095-sz,_( "%s%s for %s"), *text ? ", " : "",host_type[f].name,gettext(host_type[f].description)); + + } + + sz = strlen(text); + snprintf(text+sz,4095-sz,_( " and %s for %s."),host_type[0].name,gettext(host_type[0].description)); + + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),_( "The known types are %s" ),text); + + gtk_dialog_run(GTK_DIALOG(popup)); + + gtk_widget_destroy(popup); + + } LIB3270_EXPORT int pw3270_set_session_color_type(GtkWidget *widget, unsigned short colortype) -- libgit2 0.21.2