Commit 2ebc6b93313128071caf53aaa468b63446bb1847

Authored by perry.werneck@gmail.com
1 parent 81d108b9

Separando informações de fonte numa estrutura independente

src/include/pw3270/v3270.h
@@ -64,6 +64,7 @@ @@ -64,6 +64,7 @@
64 64
65 typedef struct _v3270 v3270; 65 typedef struct _v3270 v3270;
66 typedef struct _v3270Class v3270Class; 66 typedef struct _v3270Class v3270Class;
  67 + typedef struct _v3270FontInfo v3270FontInfo;
67 68
68 enum V3270_COLOR 69 enum V3270_COLOR
69 { 70 {
src/pw3270/v3270/accessible.c
@@ -308,10 +308,10 @@ static void v3270_accessible_get_character_extents( AtkText *text, @@ -308,10 +308,10 @@ static void v3270_accessible_get_character_extents( AtkText *text,
308 gdk_window_get_origin(window, x, y); 308 gdk_window_get_origin(window, x, y);
309 309
310 // Get screen position 310 // Get screen position
311 - *x += widget->metrics.left + ((offset%cols) * widget->metrics.width);  
312 - *y += widget->metrics.top + ((offset/cols) * widget->metrics.spacing);  
313 - *width = widget->metrics.width;  
314 - *height = widget->metrics.spacing; 311 + *x += widget->font.left + ((offset%cols) * widget->font.width);
  312 + *y += widget->font.top + ((offset/cols) * widget->font.spacing);
  313 + *width = widget->font.width;
  314 + *height = widget->font.spacing;
315 315
316 if(coords == ATK_XY_WINDOW) 316 if(coords == ATK_XY_WINDOW)
317 { 317 {
@@ -631,7 +631,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint @@ -631,7 +631,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint
631 // The font family name 631 // The font family name
632 attributes = add_attribute( attributes, 632 attributes = add_attribute( attributes,
633 ATK_TEXT_ATTR_FAMILY_NAME, 633 ATK_TEXT_ATTR_FAMILY_NAME,
634 - GTK_V3270(widget)->font_family ); 634 + GTK_V3270(widget)->font.family );
635 635
636 return attributes; 636 return attributes;
637 } 637 }
src/pw3270/v3270/draw.c
@@ -51,7 +51,7 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr) @@ -51,7 +51,7 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr)
51 51
52 gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_CROSS_HAIR); 52 gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_CROSS_HAIR);
53 53
54 - cairo_rectangle(cr, 0,terminal->cursor.rect.y+terminal->metrics.height,allocation.width,1); 54 + cairo_rectangle(cr, 0,terminal->cursor.rect.y+terminal->font.height,allocation.width,1);
55 cairo_fill(cr); 55 cairo_fill(cr);
56 56
57 cairo_rectangle(cr, terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3); 57 cairo_rectangle(cr, terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3);
@@ -72,9 +72,9 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr) @@ -72,9 +72,9 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr)
72 else 72 else
73 { 73 {
74 cairo_rectangle(cr, terminal->cursor.rect.x, 74 cairo_rectangle(cr, terminal->cursor.rect.x,
75 - terminal->cursor.rect.y+terminal->metrics.height, 75 + terminal->cursor.rect.y+terminal->font.height,
76 terminal->cursor.rect.width, 76 terminal->cursor.rect.width,
77 - terminal->metrics.descent ); 77 + terminal->font.descent );
78 } 78 }
79 79
80 cairo_fill(cr); 80 cairo_fill(cr);
@@ -364,9 +364,9 @@ void v3270_reload(GtkWidget *widget) @@ -364,9 +364,9 @@ void v3270_reload(GtkWidget *widget)
364 lib3270_get_screen_size(terminal->host,&rows,&cols); 364 lib3270_get_screen_size(terminal->host,&rows,&cols);
365 365
366 memset(&rect,0,sizeof(rect)); 366 memset(&rect,0,sizeof(rect));
367 - rect.y = terminal->metrics.top;  
368 - rect.width = terminal->metrics.width;  
369 - rect.height = terminal->metrics.spacing; 367 + rect.y = terminal->font.top;
  368 + rect.width = terminal->font.width;
  369 + rect.height = terminal->font.spacing;
370 addr = 0; 370 addr = 0;
371 cursor = lib3270_get_cursor_address(terminal->host); 371 cursor = lib3270_get_cursor_address(terminal->host);
372 372
@@ -374,7 +374,7 @@ void v3270_reload(GtkWidget *widget) @@ -374,7 +374,7 @@ void v3270_reload(GtkWidget *widget)
374 { 374 {
375 int c; 375 int c;
376 376
377 - rect.x = terminal->metrics.left; 377 + rect.x = terminal->font.left;
378 378
379 for(c=0;c < cols;c++) 379 for(c=0;c < cols;c++)
380 { 380 {
@@ -386,18 +386,18 @@ void v3270_reload(GtkWidget *widget) @@ -386,18 +386,18 @@ void v3270_reload(GtkWidget *widget)
386 if(addr == cursor) 386 if(addr == cursor)
387 v3270_update_cursor_rect(terminal,&rect,chr,attr); 387 v3270_update_cursor_rect(terminal,&rect,chr,attr);
388 388
389 - v3270_draw_element(cr,chr,attr,terminal->host,terminal->metrics.height,&rect,terminal->color); 389 + v3270_draw_element(cr,chr,attr,terminal->host,terminal->font.height,&rect,terminal->color);
390 390
391 addr++; 391 addr++;
392 rect.x += rect.width; 392 rect.x += rect.width;
393 } 393 }
394 394
395 - rect.y += terminal->metrics.spacing; 395 + rect.y += terminal->font.spacing;
396 396
397 } 397 }
398 398
399 - cairo_set_scaled_font(cr,terminal->font_scaled);  
400 - v3270_draw_oia(cr, terminal->host, rect.y, cols, &terminal->metrics, terminal->color,terminal->oia_rect); 399 + cairo_set_scaled_font(cr,terminal->font.scaled);
  400 + v3270_draw_oia(cr, terminal->host, rect.y, cols, &terminal->font, terminal->color,terminal->oia_rect);
401 401
402 cairo_destroy(cr); 402 cairo_destroy(cr);
403 403
@@ -423,16 +423,16 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho @@ -423,16 +423,16 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho
423 lib3270_get_screen_size(terminal->host,&rows,&cols); 423 lib3270_get_screen_size(terminal->host,&rows,&cols);
424 424
425 memset(&rect,0,sizeof(rect)); 425 memset(&rect,0,sizeof(rect));
426 - rect.x = terminal->metrics.left + ((addr % cols) * terminal->metrics.width);  
427 - rect.y = terminal->metrics.top + ((addr / cols) * terminal->metrics.spacing);  
428 - rect.width = terminal->metrics.width;  
429 - rect.height = terminal->metrics.spacing; 426 + rect.x = terminal->font.left + ((addr % cols) * terminal->font.width);
  427 + rect.y = terminal->font.top + ((addr / cols) * terminal->font.spacing);
  428 + rect.width = terminal->font.width;
  429 + rect.height = terminal->font.spacing;
430 430
431 // trace("%s: c=%c attr=%04x addr=%d pos=%d,%d x=%d y=%d w=%d h=%d",__FUNCTION__,chr,(int) attr,addr,(addr / cols),(addr % cols),rect.x,rect.y,rect.width,rect.height); 431 // trace("%s: c=%c attr=%04x addr=%d pos=%d,%d x=%d y=%d w=%d h=%d",__FUNCTION__,chr,(int) attr,addr,(addr / cols),(addr % cols),rect.x,rect.y,rect.width,rect.height);
432 432
433 cr = cairo_create(terminal->surface); 433 cr = cairo_create(terminal->surface);
434 - cairo_set_scaled_font(cr,terminal->font_scaled);  
435 - v3270_draw_element(cr, chr, attr, terminal->host, terminal->metrics.height, &rect,terminal->color); 434 + cairo_set_scaled_font(cr,terminal->font.scaled);
  435 + v3270_draw_element(cr, chr, attr, terminal->host, terminal->font.height, &rect,terminal->color);
436 cairo_destroy(cr); 436 cairo_destroy(cr);
437 if(cursor) 437 if(cursor)
438 v3270_update_cursor_rect(terminal,&rect,chr,attr); 438 v3270_update_cursor_rect(terminal,&rect,chr,attr);
@@ -454,11 +454,11 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short @@ -454,11 +454,11 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short
454 454
455 get_element_colors(attr,&fg,&bg,widget->color); 455 get_element_colors(attr,&fg,&bg,widget->color);
456 456
457 - cairo_set_scaled_font(cr,widget->font_scaled); 457 + cairo_set_scaled_font(cr,widget->font.scaled);
458 458
459 rect.x = 0; 459 rect.x = 0;
460 rect.y = 0; 460 rect.y = 0;
461 - v3270_draw_char(cr,chr,attr,widget->host,widget->metrics.height,&rect,bg,fg); 461 + v3270_draw_char(cr,chr,attr,widget->host,widget->font.height,&rect,bg,fg);
462 462
463 cairo_destroy(cr); 463 cairo_destroy(cr);
464 } 464 }
@@ -471,7 +471,7 @@ void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *rect, unsigned char c @@ -471,7 +471,7 @@ void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *rect, unsigned char c
471 widget->cursor.chr = chr; 471 widget->cursor.chr = chr;
472 widget->cursor.rect = *rect; 472 widget->cursor.rect = *rect;
473 widget->cursor.attr = attr; 473 widget->cursor.attr = attr;
474 - widget->cursor.rect.height = widget->metrics.height + widget->metrics.descent; 474 + widget->cursor.rect.height = widget->font.height + widget->font.descent;
475 v3270_update_cursor_surface(widget,chr,attr); 475 v3270_update_cursor_surface(widget,chr,attr);
476 } 476 }
477 477
src/pw3270/v3270/mouse.c
@@ -49,12 +49,12 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) @@ -49,12 +49,12 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y)
49 GdkPoint point; 49 GdkPoint point;
50 int r,c; 50 int r,c;
51 51
52 - g_return_val_if_fail(widget->metrics.width > 0,-1); 52 + g_return_val_if_fail(widget->font.width > 0,-1);
53 53
54 if(x > 0 && y > 0) 54 if(x > 0 && y > 0)
55 { 55 {
56 - point.x = ((x-widget->metrics.left)/widget->metrics.width);  
57 - point.y = ((y-widget->metrics.top)/widget->metrics.spacing); 56 + point.x = ((x-widget->font.left)/widget->font.width);
  57 + point.y = ((y-widget->font.top)/widget->font.spacing);
58 58
59 lib3270_get_screen_size(widget->host,&r,&c); 59 lib3270_get_screen_size(widget->host,&r,&c);
60 60
src/pw3270/v3270/oia.c
@@ -47,7 +47,7 @@ @@ -47,7 +47,7 @@
47 47
48 /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ 48 /*--[ Prototipes ]-----------------------------------------------------------------------------------*/
49 49
50 -static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_metrics *metrics, int row, int col); 50 +static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo *metrics, int row, int col);
51 51
52 /*--[ Statics ]--------------------------------------------------------------------------------------*/ 52 /*--[ Statics ]--------------------------------------------------------------------------------------*/
53 53
@@ -124,7 +124,7 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step @@ -124,7 +124,7 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step
124 } 124 }
125 #endif // HAVE_LIBM 125 #endif // HAVE_LIBM
126 126
127 -static void setup_cursor_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 127 +static void setup_cursor_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
128 { 128 {
129 rect->width = metrics->width * 8; 129 rect->width = metrics->width * 8;
130 rect->x -= rect->width; 130 rect->x -= rect->width;
@@ -136,7 +136,7 @@ static void setup_cursor_position(GdkRectangle *rect, struct v3270_metrics *metr @@ -136,7 +136,7 @@ static void setup_cursor_position(GdkRectangle *rect, struct v3270_metrics *metr
136 } 136 }
137 } 137 }
138 138
139 -static void setup_timer_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 139 +static void setup_timer_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
140 { 140 {
141 char buffer[7]; 141 char buffer[7];
142 cairo_text_extents_t extents; 142 cairo_text_extents_t extents;
@@ -151,14 +151,14 @@ static void setup_timer_position(GdkRectangle *rect, struct v3270_metrics *metri @@ -151,14 +151,14 @@ static void setup_timer_position(GdkRectangle *rect, struct v3270_metrics *metri
151 rect->x -= rect->width; 151 rect->x -= rect->width;
152 } 152 }
153 153
154 -static void setup_spinner_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 154 +static void setup_spinner_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
155 { 155 {
156 rect->width = rect->height; 156 rect->width = rect->height;
157 rect->x -= rect->width; 157 rect->x -= rect->width;
158 // draw_spinner(cr,rect,color,0); 158 // draw_spinner(cr,rect,color,0);
159 } 159 }
160 160
161 -static void setup_luname_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 161 +static void setup_luname_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
162 { 162 {
163 const char *luname = lib3270_get_luname(host); 163 const char *luname = lib3270_get_luname(host);
164 164
@@ -190,7 +190,7 @@ static void setup_luname_position(GdkRectangle *rect, struct v3270_metrics *metr @@ -190,7 +190,7 @@ static void setup_luname_position(GdkRectangle *rect, struct v3270_metrics *metr
190 190
191 } 191 }
192 192
193 -static void setup_single_char_right(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 193 +static void setup_single_char_right(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
194 { 194 {
195 rect->x -= rect->width; 195 rect->x -= rect->width;
196 196
@@ -202,7 +202,7 @@ static void setup_single_char_right(GdkRectangle *rect, struct v3270_metrics *me @@ -202,7 +202,7 @@ static void setup_single_char_right(GdkRectangle *rect, struct v3270_metrics *me
202 202
203 } 203 }
204 204
205 -static void setup_insert_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) 205 +static void setup_insert_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color)
206 { 206 {
207 if(rect->width > rect->height) 207 if(rect->width > rect->height)
208 { 208 {
@@ -239,7 +239,7 @@ static void setup_double_char_position(GdkRectangle *rect, struct v3270_metrics @@ -239,7 +239,7 @@ static void setup_double_char_position(GdkRectangle *rect, struct v3270_metrics
239 239
240 } 240 }
241 241
242 -static void draw_undera(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) 242 +static void draw_undera(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect)
243 { 243 {
244 #ifdef DEBUG 244 #ifdef DEBUG
245 cairo_set_source_rgb(cr,0.1,0.1,0.1); 245 cairo_set_source_rgb(cr,0.1,0.1,0.1);
@@ -289,7 +289,7 @@ static void draw_centered_text(cairo_t *cr, struct v3270_metrics *metrics, int x @@ -289,7 +289,7 @@ static void draw_centered_text(cairo_t *cr, struct v3270_metrics *metrics, int x
289 } 289 }
290 */ 290 */
291 291
292 -static void draw_centered_char(cairo_t *cr, struct v3270_metrics *metrics, int x, int y, const gchar chr) 292 +static void draw_centered_char(cairo_t *cr, v3270FontInfo *metrics, int x, int y, const gchar chr)
293 { 293 {
294 char str[2] = { chr, 0 }; 294 char str[2] = { chr, 0 };
295 295
@@ -301,7 +301,7 @@ static void draw_centered_char(cairo_t *cr, struct v3270_metrics *metrics, int x @@ -301,7 +301,7 @@ static void draw_centered_char(cairo_t *cr, struct v3270_metrics *metrics, int x
301 301
302 } 302 }
303 303
304 -void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, const GdkRectangle *rect) 304 +void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect)
305 { 305 {
306 gchar str = ' '; 306 gchar str = ' ';
307 307
@@ -352,7 +352,7 @@ static void draw_xbm(cairo_t *cr, GdkRectangle *rect, int width, int height, uns @@ -352,7 +352,7 @@ static void draw_xbm(cairo_t *cr, GdkRectangle *rect, int width, int height, uns
352 cairo_restore(cr); 352 cairo_restore(cr);
353 } 353 }
354 354
355 -void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) 355 +void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect)
356 { 356 {
357 #ifdef DEBUG 357 #ifdef DEBUG
358 cairo_set_source_rgb(cr,0.1,0.1,0.1); 358 cairo_set_source_rgb(cr,0.1,0.1,0.1);
@@ -396,7 +396,7 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri @@ -396,7 +396,7 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri
396 396
397 } 397 }
398 398
399 -static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) 399 +static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect)
400 { 400 {
401 #ifdef DEBUG 401 #ifdef DEBUG
402 #define OIA_MESSAGE(x,c,y) { #x, c, y } 402 #define OIA_MESSAGE(x,c,y) { #x, c, y }
@@ -559,12 +559,12 @@ static void draw_insert(cairo_t *cr, H3270 *host, GdkRGBA *color, GdkRectangle * @@ -559,12 +559,12 @@ static void draw_insert(cairo_t *cr, H3270 *host, GdkRGBA *color, GdkRectangle *
559 559
560 } 560 }
561 561
562 -void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) 562 +void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect)
563 { 563 {
564 static const struct _right_fields 564 static const struct _right_fields
565 { 565 {
566 V3270_OIA_FIELD id; 566 V3270_OIA_FIELD id;
567 - void (*draw)(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color); 567 + void (*draw)(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color);
568 } right[] = 568 } right[] =
569 { 569 {
570 { V3270_OIA_CURSOR_POSITION, setup_cursor_position }, 570 { V3270_OIA_CURSOR_POSITION, setup_cursor_position },
@@ -676,7 +676,7 @@ static cairo_t * set_update_region(v3270 * terminal, GdkRectangle **r, V3270_OIA @@ -676,7 +676,7 @@ static cairo_t * set_update_region(v3270 * terminal, GdkRectangle **r, V3270_OIA
676 GdkRectangle * rect = terminal->oia_rect + id; 676 GdkRectangle * rect = terminal->oia_rect + id;
677 cairo_t * cr = cairo_create(terminal->surface); 677 cairo_t * cr = cairo_create(terminal->surface);
678 678
679 - cairo_set_scaled_font(cr,terminal->font_scaled); 679 + cairo_set_scaled_font(cr,terminal->font.scaled);
680 680
681 cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); 681 cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height);
682 cairo_clip(cr); 682 cairo_clip(cr);
@@ -709,7 +709,7 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name) @@ -709,7 +709,7 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name)
709 709
710 if(name) 710 if(name)
711 { 711 {
712 - cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height); 712 + cairo_move_to(cr,rect->x,rect->y+terminal->font.height);
713 gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME); 713 gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME);
714 cairo_show_text(cr,name); 714 cairo_show_text(cr,name);
715 cairo_stroke(cr); 715 cairo_stroke(cr);
@@ -738,7 +738,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) @@ -738,7 +738,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id)
738 738
739 cr = set_update_region(widget,&rect,V3270_OIA_MESSAGE); 739 cr = set_update_region(widget,&rect,V3270_OIA_MESSAGE);
740 740
741 - draw_status_message(cr,id,&widget->metrics,widget->color,rect); 741 + draw_status_message(cr,id,&widget->font,widget->color,rect);
742 742
743 cairo_destroy(cr); 743 cairo_destroy(cr);
744 744
@@ -749,7 +749,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) @@ -749,7 +749,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id)
749 749
750 } 750 }
751 751
752 -static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_metrics *metrics, int row, int col) 752 +static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo *metrics, int row, int col)
753 { 753 {
754 cairo_text_extents_t extents; 754 cairo_text_extents_t extents;
755 char buffer[10]; 755 char buffer[10];
@@ -777,10 +777,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, @@ -777,10 +777,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col,
777 // Update cursor rectangle 777 // Update cursor rectangle
778 saved = terminal->cursor.rect; 778 saved = terminal->cursor.rect;
779 779
780 - terminal->cursor.rect.x = terminal->metrics.left + (col * terminal->cursor.rect.width);  
781 - terminal->cursor.rect.y = terminal->metrics.top + (row * terminal->metrics.spacing);  
782 - terminal->cursor.rect.width = terminal->metrics.width;  
783 - terminal->cursor.rect.height = terminal->metrics.height+terminal->metrics.descent; 780 + terminal->cursor.rect.x = terminal->font.left + (col * terminal->cursor.rect.width);
  781 + terminal->cursor.rect.y = terminal->font.top + (row * terminal->font.spacing);
  782 + terminal->cursor.rect.width = terminal->font.width;
  783 + terminal->cursor.rect.height = terminal->font.height+terminal->font.descent;
784 terminal->cursor.show |= 1; 784 terminal->cursor.show |= 1;
785 785
786 gtk_widget_queue_draw_area( GTK_WIDGET(terminal), saved.x, 786 gtk_widget_queue_draw_area( GTK_WIDGET(terminal), saved.x,
@@ -800,10 +800,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, @@ -800,10 +800,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col,
800 GtkAllocation allocation; 800 GtkAllocation allocation;
801 gtk_widget_get_allocation(GTK_WIDGET(terminal), &allocation); 801 gtk_widget_get_allocation(GTK_WIDGET(terminal), &allocation);
802 802
803 - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,saved.y+terminal->metrics.height,allocation.width,1); 803 + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,saved.y+terminal->font.height,allocation.width,1);
804 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),saved.x,0,1,terminal->oia_rect->y-3); 804 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),saved.x,0,1,terminal->oia_rect->y-3);
805 805
806 - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,terminal->cursor.rect.y+terminal->metrics.height,allocation.width,1); 806 + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,terminal->cursor.rect.y+terminal->font.height,allocation.width,1);
807 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3); 807 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3);
808 } 808 }
809 809
@@ -815,7 +815,7 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, @@ -815,7 +815,7 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col,
815 815
816 cr = set_update_region(terminal,&rect,V3270_OIA_CURSOR_POSITION); 816 cr = set_update_region(terminal,&rect,V3270_OIA_CURSOR_POSITION);
817 817
818 - draw_cursor_position(cr,rect,&terminal->metrics,row,col); 818 + draw_cursor_position(cr,rect,&terminal->font,row,col);
819 819
820 cairo_destroy(cr); 820 cairo_destroy(cr);
821 821
@@ -940,7 +940,7 @@ static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id @@ -940,7 +940,7 @@ static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id
940 940
941 if(flag) 941 if(flag)
942 { 942 {
943 - cairo_move_to(cr,0,terminal->metrics.height); 943 + cairo_move_to(cr,0,terminal->font.height);
944 cairo_show_text(cr, text); 944 cairo_show_text(cr, text);
945 cairo_stroke(cr); 945 cairo_stroke(cr);
946 } 946 }
@@ -1007,8 +1007,8 @@ static gboolean update_timer(struct timer_info *info) @@ -1007,8 +1007,8 @@ static gboolean update_timer(struct timer_info *info)
1007 short2string(buffer+3,seconds%60,2); 1007 short2string(buffer+3,seconds%60,2);
1008 buffer[5] = 0; 1008 buffer[5] = 0;
1009 1009
1010 - cairo_set_scaled_font(cr,info->terminal->font_scaled);  
1011 - cairo_move_to(cr,rect->x,rect->y+info->terminal->metrics.height); 1010 + cairo_set_scaled_font(cr,info->terminal->font.scaled);
  1011 + cairo_move_to(cr,rect->x,rect->y+info->terminal->font.height);
1012 cairo_show_text(cr, buffer); 1012 cairo_show_text(cr, buffer);
1013 cairo_stroke(cr); 1013 cairo_stroke(cr);
1014 1014
@@ -1092,7 +1092,7 @@ void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state) @@ -1092,7 +1092,7 @@ void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state)
1092 return; 1092 return;
1093 1093
1094 cr = set_update_region(terminal,&r,V3270_OIA_SSL); 1094 cr = set_update_region(terminal,&r,V3270_OIA_SSL);
1095 - v3270_draw_ssl_status(cr,terminal->host,&terminal->metrics,terminal->color,r); 1095 + v3270_draw_ssl_status(cr,terminal->host,&terminal->font,terminal->color,r);
1096 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); 1096 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
1097 cairo_destroy(cr); 1097 cairo_destroy(cr);
1098 1098
@@ -1113,7 +1113,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) @@ -1113,7 +1113,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1113 case LIB3270_FLAG_BOXSOLID: 1113 case LIB3270_FLAG_BOXSOLID:
1114 debug("%s",__FUNCTION__); 1114 debug("%s",__FUNCTION__);
1115 cr = set_update_region(terminal,&r,V3270_OIA_CONNECTION); 1115 cr = set_update_region(terminal,&r,V3270_OIA_CONNECTION);
1116 - v3270_draw_connection(cr,terminal->host,&terminal->metrics,terminal->color,r); 1116 + v3270_draw_connection(cr,terminal->host,&terminal->font,terminal->color,r);
1117 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); 1117 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
1118 cairo_destroy(cr); 1118 cairo_destroy(cr);
1119 break; 1119 break;
@@ -1121,7 +1121,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) @@ -1121,7 +1121,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1121 case LIB3270_FLAG_UNDERA: 1121 case LIB3270_FLAG_UNDERA:
1122 debug("%s",__FUNCTION__); 1122 debug("%s",__FUNCTION__);
1123 cr = set_update_region(terminal,&r,V3270_OIA_UNDERA); 1123 cr = set_update_region(terminal,&r,V3270_OIA_UNDERA);
1124 - draw_undera(cr,terminal->host,&terminal->metrics,terminal->color,r); 1124 + draw_undera(cr,terminal->host,&terminal->font,terminal->color,r);
1125 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); 1125 gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height);
1126 cairo_destroy(cr); 1126 cairo_destroy(cr);
1127 break; 1127 break;
src/pw3270/v3270/private.h
@@ -24,8 +24,6 @@ @@ -24,8 +24,6 @@
24 * 24 *
25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) 25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) 26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 * 27 *
30 */ 28 */
31 29
@@ -109,19 +107,6 @@ G_BEGIN_DECLS @@ -109,19 +107,6 @@ G_BEGIN_DECLS
109 #define V3270_CURSOR_COUNT LIB3270_CURSOR_USER+11 107 #define V3270_CURSOR_COUNT LIB3270_CURSOR_USER+11
110 108
111 109
112 - struct v3270_metrics  
113 - {  
114 - guint width;  
115 - guint height;  
116 - guint ascent;  
117 - guint descent;  
118 -  
119 - guint spacing;  
120 -  
121 - guint left;  
122 - guint top;  
123 - };  
124 -  
125 struct v3270_ssl_status_msg 110 struct v3270_ssl_status_msg
126 { 111 {
127 long id; 112 long id;
@@ -130,6 +115,28 @@ G_BEGIN_DECLS @@ -130,6 +115,28 @@ G_BEGIN_DECLS
130 const gchar * message; 115 const gchar * message;
131 }; 116 };
132 117
  118 + /**
  119 + * @brief Informações para desenho de fontes com o cairo.
  120 + *
  121 + */
  122 + struct _v3270FontInfo {
  123 +
  124 + guint width;
  125 + guint height;
  126 + guint ascent;
  127 + guint descent;
  128 +
  129 + guint spacing;
  130 +
  131 + guint left;
  132 + guint top;
  133 +
  134 + gchar * family;
  135 + cairo_font_weight_t weight;
  136 + cairo_scaled_font_t * scaled;
  137 +
  138 + };
  139 +
133 /*--[ Widget data ]----------------------------------------------------------------------------------*/ 140 /*--[ Widget data ]----------------------------------------------------------------------------------*/
134 141
135 struct _v3270 142 struct _v3270
@@ -166,18 +173,14 @@ G_BEGIN_DECLS @@ -166,18 +173,14 @@ G_BEGIN_DECLS
166 V3270_OIA_FIELD selected_field; /**< Clicked OIA field */ 173 V3270_OIA_FIELD selected_field; /**< Clicked OIA field */
167 174
168 // Font info 175 // Font info
169 - gchar * font_family;  
170 - cairo_font_weight_t font_weight;  
171 - cairo_scaled_font_t * font_scaled;  
172 cairo_surface_t * surface; 176 cairo_surface_t * surface;
173 -  
174 - struct v3270_metrics metrics; 177 + v3270FontInfo font;
175 178
176 gint minimum_width; 179 gint minimum_width;
177 gint minimum_height; 180 gint minimum_height;
178 181
179 // Colors 182 // Colors
180 - GdkRGBA color[V3270_COLOR_COUNT]; /**< Terminal widget colors */ 183 + GdkRGBA color[V3270_COLOR_COUNT]; /**< Terminal widget colors */
181 184
182 // Regions 185 // Regions
183 GdkRectangle oia_rect[V3270_OIA_FIELD_COUNT]; 186 GdkRectangle oia_rect[V3270_OIA_FIELD_COUNT];
@@ -252,7 +255,7 @@ G_BEGIN_DECLS @@ -252,7 +255,7 @@ G_BEGIN_DECLS
252 const GtkWidgetClass * v3270_get_parent_class(void); 255 const GtkWidgetClass * v3270_get_parent_class(void);
253 256
254 gboolean v3270_draw(GtkWidget * widget, cairo_t * cr); 257 gboolean v3270_draw(GtkWidget * widget, cairo_t * cr);
255 -void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect); 258 +void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect);
256 void v3270_update_mouse_pointer(GtkWidget *widget); 259 void v3270_update_mouse_pointer(GtkWidget *widget);
257 260
258 #if ! GTK_CHECK_VERSION(2,18,0) 261 #if ! GTK_CHECK_VERSION(2,18,0)
@@ -292,8 +295,8 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3 @@ -292,8 +295,8 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3
292 void v3270_start_timer(GtkWidget *terminal); 295 void v3270_start_timer(GtkWidget *terminal);
293 void v3270_stop_timer(GtkWidget *terminal); 296 void v3270_stop_timer(GtkWidget *terminal);
294 297
295 -void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, const GdkRectangle *rect);  
296 -void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect); 298 +void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect);
  299 +void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect);
297 300
298 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor); 301 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor);
299 302
src/pw3270/v3270/widget.c
@@ -54,8 +54,8 @@ @@ -54,8 +54,8 @@
54 #define WIDTH_IN_PIXELS(terminal,x) (x * cols) 54 #define WIDTH_IN_PIXELS(terminal,x) (x * cols)
55 #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1)) 55 #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1))
56 56
57 - #define CONTENTS_WIDTH(terminal) (cols * terminal->metrics.width)  
58 - #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->metrics.spacing)+OIA_TOP_MARGIN+2) 57 + #define CONTENTS_WIDTH(terminal) (cols * terminal->font.width)
  58 + #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->font.spacing)+OIA_TOP_MARGIN+2)
59 59
60 /** 60 /**
61 * SECTION: v3270 61 * SECTION: v3270
@@ -554,11 +554,11 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig @@ -554,11 +554,11 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
554 554
555 lib3270_get_screen_size(terminal->host,&rows,&cols); 555 lib3270_get_screen_size(terminal->host,&rows,&cols);
556 556
557 - terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; 557 + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
558 558
559 - cairo_select_font_face(cr, terminal->font_family, CAIRO_FONT_SLANT_NORMAL,terminal->font_weight); 559 + cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight);
560 560
561 - if(terminal->scaled_fonts) 561 + if(terminal->font.scaled)
562 { 562 {
563 double w = ((double) width) / ((double)cols); 563 double w = ((double) width) / ((double)cols);
564 double h = ((double) height) / ((double) (rows+2)); 564 double h = ((double) height) / ((double) (rows+2));
@@ -612,38 +612,38 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig @@ -612,38 +612,38 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
612 cairo_font_extents(cr,&extents); 612 cairo_font_extents(cr,&extents);
613 613
614 // Save scaled font for use on next drawings 614 // Save scaled font for use on next drawings
615 - if(terminal->font_scaled)  
616 - cairo_scaled_font_destroy(terminal->font_scaled); 615 + if(terminal->font.scaled)
  616 + cairo_scaled_font_destroy(terminal->font.scaled);
617 617
618 - terminal->font_scaled = cairo_get_scaled_font(cr);  
619 - cairo_scaled_font_reference(terminal->font_scaled); 618 + terminal->font.scaled = cairo_get_scaled_font(cr);
  619 + cairo_scaled_font_reference(terminal->font.scaled);
620 620
621 - cairo_scaled_font_extents(terminal->font_scaled,&extents); 621 + cairo_scaled_font_extents(terminal->font.scaled,&extents);
622 622
623 - terminal->metrics.width = (int) extents.max_x_advance;  
624 - terminal->metrics.height = (int) extents.height;  
625 - terminal->metrics.ascent = (int) extents.ascent;  
626 - terminal->metrics.descent = (int) extents.descent; 623 + terminal->font.width = (int) extents.max_x_advance;
  624 + terminal->font.height = (int) extents.height;
  625 + terminal->font.ascent = (int) extents.ascent;
  626 + terminal->font.descent = (int) extents.descent;
627 627
628 - hFont = terminal->metrics.height + terminal->metrics.descent; 628 + hFont = terminal->font.height + terminal->font.descent;
629 629
630 // Create new cursor surface 630 // Create new cursor surface
631 if(terminal->cursor.surface) 631 if(terminal->cursor.surface)
632 cairo_surface_destroy(terminal->cursor.surface); 632 cairo_surface_destroy(terminal->cursor.surface);
633 633
634 - terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->metrics.width,hFont); 634 + terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->font.width,hFont);
635 635
636 // Center image 636 // Center image
637 size = CONTENTS_WIDTH(terminal); 637 size = CONTENTS_WIDTH(terminal);
638 - terminal->metrics.left = (width >> 1) - ((size) >> 1); 638 + terminal->font.left = (width >> 1) - ((size) >> 1);
639 639
640 - terminal->metrics.spacing = height / (rows+2);  
641 - if(terminal->metrics.spacing < hFont)  
642 - terminal->metrics.spacing = hFont; 640 + terminal->font.spacing = height / (rows+2);
  641 + if(terminal->font.spacing < hFont)
  642 + terminal->font.spacing = hFont;
643 643
644 size = CONTENTS_HEIGHT(terminal); 644 size = CONTENTS_HEIGHT(terminal);
645 645
646 - terminal->metrics.top = (height >> 1) - (size >> 1); 646 + terminal->font.top = (height >> 1) - (size >> 1);
647 647
648 } 648 }
649 649
@@ -1021,16 +1021,16 @@ static void v3270_destroy(GtkObject *widget) @@ -1021,16 +1021,16 @@ static void v3270_destroy(GtkObject *widget)
1021 terminal->host = NULL; 1021 terminal->host = NULL;
1022 } 1022 }
1023 1023
1024 - if(terminal->font_family) 1024 + if(terminal->font.family)
1025 { 1025 {
1026 - g_free(terminal->font_family);  
1027 - terminal->font_family = 0; 1026 + g_free(terminal->font.family);
  1027 + terminal->font.family = 0;
1028 } 1028 }
1029 1029
1030 - if(terminal->font_scaled) 1030 + if(terminal->font.scaled)
1031 { 1031 {
1032 - cairo_scaled_font_destroy(terminal->font_scaled);  
1033 - terminal->font_scaled = NULL; 1032 + cairo_scaled_font_destroy(terminal->font.scaled);
  1033 + terminal->font.scaled = NULL;
1034 } 1034 }
1035 1035
1036 if(terminal->surface) 1036 if(terminal->surface)
@@ -1455,18 +1455,18 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) @@ -1455,18 +1455,18 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name)
1455 name = "courier new"; 1455 name = "courier new";
1456 } 1456 }
1457 1457
1458 - if(terminal->font_family) 1458 + if(terminal->font.family)
1459 { 1459 {
1460 - if(!g_ascii_strcasecmp(terminal->font_family,name)) 1460 + if(!g_ascii_strcasecmp(terminal->font.family,name))
1461 return; 1461 return;
1462 - g_free(terminal->font_family);  
1463 - terminal->font_family = NULL; 1462 + g_free(terminal->font.family);
  1463 + terminal->font.family = NULL;
1464 } 1464 }
1465 1465
1466 - terminal->font_family = g_strdup(name);  
1467 - terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; 1466 + terminal->font.family = g_strdup(name);
  1467 + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL;
1468 1468
1469 - trace("%s: %s (%p)",__FUNCTION__,terminal->font_family,terminal->font_family); 1469 + trace("%s: %s (%p)",__FUNCTION__,terminal->font.family,terminal->font.family);
1470 1470
1471 g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name); 1471 g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name);
1472 1472
@@ -1479,7 +1479,7 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) @@ -1479,7 +1479,7 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name)
1479 const gchar * v3270_get_font_family(GtkWidget *widget) 1479 const gchar * v3270_get_font_family(GtkWidget *widget)
1480 { 1480 {
1481 g_return_val_if_fail(GTK_IS_V3270(widget),NULL); 1481 g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
1482 - return GTK_V3270(widget)->font_family; 1482 + return GTK_V3270(widget)->font.family;
1483 } 1483 }
1484 1484
1485 void v3270_disconnect(GtkWidget *widget) 1485 void v3270_disconnect(GtkWidget *widget)