diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index 0d1bedd..7e579f2 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -360,7 +360,8 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title { GtkWidget *terminal = (GtkWidget *) lib3270_get_user_data(session); - if(terminal && GTK_IS_V3270(terminal)) { + if(terminal && GTK_IS_V3270(terminal)) + { if(fmt) { @@ -416,6 +417,56 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_update_oia, data, g_free); } + static int popup_ssl_error(H3270 *session, int rc, const char *title, const char *summary, const char *body) + { + GtkWidget *terminal = (GtkWidget *) lib3270_get_user_data(session); + + debug("%s.summary=\"%s\"",__FUNCTION__,summary); + debug("%s.body=\"%s\"",__FUNCTION__,body ? body : "undefined"); + + if(terminal && GTK_IS_V3270(terminal)) + { + 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_WARNING, + GTK_BUTTONS_NONE, + "%s", + summary + ); + + gtk_window_set_title(GTK_WINDOW(dialog), title); + + if(body && *body) + { + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",body); + } + else if(rc) + { + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "The error code was %d"),rc); + } + + gtk_dialog_add_buttons( + GTK_DIALOG(dialog), + _("Cancel"), GTK_RESPONSE_CANCEL, + _("Continue"), GTK_RESPONSE_APPLY, + NULL + ); + + gtk_dialog_set_default_response(GTK_DIALOG (dialog),GTK_RESPONSE_CANCEL); + + gtk_widget_show_all(dialog); + int rc = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + + if(rc == GTK_RESPONSE_APPLY) + return 0; + + } + + return -1; + } + void v3270_install_callbacks(v3270 *widget) { struct lib3270_session_callbacks *cbk; @@ -450,6 +501,7 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title cbk->message = message; cbk->update_ssl = update_ssl; cbk->print = print; + cbk->popup_ssl_error = popup_ssl_error; } -- libgit2 0.21.2