Commit dcb8845e0e9e6a3eb87eef090863e9ce5e8ae6d3

Authored by perry.werneck@gmail.com
1 parent 31eff1cb
Exists in master and in 1 other branch develop

Melhorando tratamento do indicador de SSL

Showing 3 changed files with 56 additions and 17 deletions   Show diff stats
oia.c
... ... @@ -306,18 +306,10 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
306 306 {
307 307 cairo_surface_t * icon;
308 308 double sz = rect->width < rect->height ? rect->width : rect->height;
309   - int idx = lib3270_get_ssl_state(host) ? 1 : 0;
310   -
311   - static const struct
312   - {
313   - unsigned short width;
314   - unsigned short height;
315   - unsigned char * bits;
316   - } bitmap[] =
317   - {
318   - { unlocked_width, unlocked_height, unlocked_bits },
319   - { locked_width, locked_height, locked_bits },
320   - };
  309 + int idx = 0; // lib3270_get_ssl_state(host) ? 1 : 0;
  310 + unsigned short width;
  311 + unsigned short height;
  312 + unsigned char * bits;
321 313  
322 314 #ifdef DEBUG
323 315 cairo_set_source_rgb(cr,0.1,0.1,0.1);
... ... @@ -330,15 +322,42 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
330 322 cairo_rectangle(cr, 0, 0, rect->width, rect->height);
331 323 cairo_fill(cr);
332 324  
333   - gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_FOREGROUND);
  325 + switch(lib3270_get_secure(host))
  326 + {
  327 + case LIB3270_SSL_UNSECURE: /**< No secure connection */
  328 + gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_FOREGROUND);
  329 + width = unlocked_width;
  330 + height = unlocked_height;
  331 + bits = (unsigned char *) unlocked_bits;
  332 + break;
  333 +
  334 + case LIB3270_SSL_SECURE: /**< Connection secure */
  335 + gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_FOREGROUND);
  336 + width = locked_width;
  337 + height = locked_height;
  338 + bits = (unsigned char *) locked_bits;
  339 + break;
  340 +
  341 + case LIB3270_SSL_NEGOTIATING: /**< Negotiating SSL */
  342 + gdk_cairo_set_source_color(cr,color+V3270_COLOR_OIA_STATUS_WARNING);
  343 + width = locked_width;
  344 + height = locked_height;
  345 + bits = (unsigned char *) locked_bits;
  346 + break;
  347 +
  348 + default:
  349 + return;
  350 +
  351 + }
  352 +
334 353  
335   - icon = cairo_image_surface_create_for_data( (unsigned char *) bitmap[idx].bits,
  354 + icon = cairo_image_surface_create_for_data( bits,
336 355 CAIRO_FORMAT_A1,
337   - bitmap[idx].width,bitmap[idx].height,
  356 + width,height,
338 357 cairo_format_stride_for_width(CAIRO_FORMAT_A1,locked_width));
339 358  
340   - cairo_scale(cr, sz / ((double) bitmap[idx].width),
341   - sz / ((double) bitmap[idx].height));
  359 + cairo_scale(cr, sz / ((double) width),
  360 + sz / ((double) height));
342 361  
343 362 cairo_mask_surface(cr,icon,(rect->width-sz)/2,(rect->height-sz)/2);
344 363  
... ... @@ -985,6 +1004,22 @@ void v3270_stop_timer(GtkWidget *widget)
985 1004  
986 1005 }
987 1006  
  1007 +void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state)
  1008 +{
  1009 + v3270 * terminal = GTK_V3270(session->widget);
  1010 + cairo_t * cr;
  1011 + GdkRectangle * r;
  1012 +
  1013 + if(!terminal->surface)
  1014 + return;
  1015 +
  1016 + cr = set_update_region(terminal,&r,V3270_OIA_SSL);
  1017 + v3270_draw_ssl_status(cr,terminal->host,&terminal->metrics,terminal->color,r);
  1018 + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
  1019 + cairo_destroy(cr);
  1020 +
  1021 +}
  1022 +
988 1023 void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
989 1024 {
990 1025 cairo_t *cr;
... ... @@ -1011,12 +1046,14 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1011 1046 cairo_destroy(cr);
1012 1047 break;
1013 1048  
  1049 +/*
1014 1050 case LIB3270_FLAG_SECURE:
1015 1051 cr = set_update_region(terminal,&r,V3270_OIA_SSL);
1016 1052 v3270_draw_ssl_status(cr,terminal->host,&terminal->metrics,terminal->color,r);
1017 1053 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
1018 1054 cairo_destroy(cr);
1019 1055 break;
  1056 +*/
1020 1057  
1021 1058 case LIB3270_FLAG_TYPEAHEAD:
1022 1059 update_text_field(terminal,on,V3270_OIA_TYPEAHEAD,"T");
... ...
private.h
... ... @@ -224,6 +224,7 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name);
224 224 void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id);
225 225 void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);
226 226 void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on);
  227 +void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state);
227 228  
228 229 // Keyboard & Mouse
229 230 gboolean v3270_key_press_event(GtkWidget *widget, GdkEventKey *event);
... ...
widget.c
... ... @@ -769,6 +769,7 @@ static void v3270_init(v3270 *widget)
769 769 widget->host->changed = changed;
770 770 widget->host->ctlr_done = ctlr_done;
771 771 widget->host->message = message;
  772 + widget->host->update_ssl = v3270_update_ssl;
772 773  
773 774 // Setup input method
774 775 widget->input_method = gtk_im_multicontext_new();
... ...