diff --git a/src/include/internals.h b/src/include/internals.h index 4e5b989..a08c501 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -338,7 +338,7 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned G_GNUC_INTERNAL void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr); G_GNUC_INTERNAL void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on); - G_GNUC_INTERNAL void v3270_blink_ssl(v3270 *terminal); + G_GNUC_INTERNAL gboolean v3270_blink_ssl(v3270 *terminal); G_GNUC_INTERNAL void v3270_queue_draw_area(GtkWidget *widget, gint x, gint y, gint width, gint height); diff --git a/src/terminal/blink.c b/src/terminal/blink.c index 4d5ff01..11f65a9 100644 --- a/src/terminal/blink.c +++ b/src/terminal/blink.c @@ -34,6 +34,12 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ + gboolean v3270_blink_ssl(v3270 *terminal) + { + LIB3270_SSL_STATE state = lib3270_get_ssl_state(terminal->host); + return (state == LIB3270_SSL_NEGOTIATING || state == LIB3270_SSL_VERIFYING); + } + static gboolean blink_timer_tick(v3270 *widget) { gboolean rc = FALSE; @@ -47,7 +53,7 @@ rc = TRUE; } - if(lib3270_get_ssl_state(widget->host) == LIB3270_SSL_NEGOTIATING) + if(v3270_blink_ssl(widget)) { GdkRectangle * r; cairo_t * cr = v3270_oia_set_update_region(widget,&r,V3270_OIA_SSL); diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index 57fee8c..4b2c1dc 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -349,9 +349,21 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title static gboolean bg_update_ssl(H3270 *session) { - v3270_blink_ssl(GTK_V3270(lib3270_get_user_data(session))); + v3270 *terminal = GTK_V3270(lib3270_get_user_data(session)); - if(lib3270_get_ssl_state(session) == LIB3270_SSL_NEGOTIATING) + if(terminal->surface) + { + // Redraw SSL area. + GdkRectangle * r; + cairo_t * cr = v3270_oia_set_update_region(terminal,&r,V3270_OIA_SSL); + + v3270_draw_ssl_status(terminal,cr,r); + v3270_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); + cairo_destroy(cr); + + } + + if(v3270_blink_ssl(terminal)) v3270_start_blinking(GTK_WIDGET(lib3270_get_user_data(session))); return FALSE; @@ -359,6 +371,8 @@ static void popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title static void update_ssl(H3270 *session, G_GNUC_UNUSED LIB3270_SSL_STATE state) { + debug("----------------------> %d", (int) state); + g_idle_add((GSourceFunc) bg_update_ssl, session); } diff --git a/src/terminal/drawing/oia.c b/src/terminal/drawing/oia.c index f8049f3..b909b31 100644 --- a/src/terminal/drawing/oia.c +++ b/src/terminal/drawing/oia.c @@ -363,6 +363,7 @@ void v3270_draw_ssl_status(v3270 *widget, cairo_t *cr, GdkRectangle *rect) break; case LIB3270_SSL_NEGOTIATING: // Negotiating SSL + case LIB3270_SSL_VERIFYING: // Verifying SSL if(widget->blink.show) { gdk_cairo_set_source_rgba(cr,widget->color+V3270_COLOR_OIA_STATUS_WARNING); @@ -1077,21 +1078,6 @@ void v3270_stop_timer(GtkWidget *widget) } -void v3270_blink_ssl(v3270 *terminal) -{ - if(terminal->surface) - { - GdkRectangle * r; - cairo_t * cr = v3270_oia_set_update_region(terminal,&r,V3270_OIA_SSL); - - v3270_draw_ssl_status(terminal,cr,r); - v3270_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); - cairo_destroy(cr); - - } - -} - void v3270_update_oia(v3270 *terminal, LIB3270_FLAG id, unsigned char on) { cairo_t *cr; diff --git a/src/terminal/mouse.c b/src/terminal/mouse.c index 024a9ea..da7affd 100644 --- a/src/terminal/mouse.c +++ b/src/terminal/mouse.c @@ -363,11 +363,12 @@ gboolean v3270_motion_notify_event(GtkWidget *widget, GdkEventMotion *event) { switch(lib3270_get_ssl_state(terminal->host)) { - case LIB3270_SSL_UNSECURE: /**< No secure connection */ + case LIB3270_SSL_UNSECURE: // No secure connection id = LIB3270_POINTER_QUESTION; break; - case LIB3270_SSL_NEGOTIATING: /**< Negotiating SSL */ + case LIB3270_SSL_NEGOTIATING: // Negotiating SSL + case LIB3270_SSL_VERIFYING: // Verifying SSL id = LIB3270_POINTER_WAITING; break; diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 979663e..cbe8cb2 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -101,7 +101,7 @@ GtkWidget * notebook = gtk_notebook_new(); // Hack to speed up the tests. - lib3270_ssl_set_crl_download(v3270_get_session(terminal),0); + //lib3270_ssl_set_crl_download(v3270_get_session(terminal),0); gtk_box_pack_start(GTK_BOX(vBox),create_toolbar(terminal),FALSE,TRUE,0); gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); -- libgit2 0.21.2