Commit 5a1d91306eb99ff64b1af370600dd54f18c1d5fe
1 parent
b0ece9a9
Exists in
master
and in
5 other branches
Corrigindo erro no gerenciamento de memoria
Showing
2 changed files
with
46 additions
and
6 deletions
Show diff stats
src/gtk/v3270/accessible.c
| ... | ... | @@ -503,14 +503,49 @@ void v3270_accessible_get_extents(AtkComponent *component, gint *x, gint *y,gint |
| 503 | 503 | } |
| 504 | 504 | } |
| 505 | 505 | |
| 506 | +static void v3270_accessible_get_size(AtkComponent *component,gint *width, gint *height) | |
| 507 | +{ | |
| 508 | + GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); | |
| 509 | + | |
| 510 | + if (widget == NULL) | |
| 511 | + return; | |
| 512 | + | |
| 513 | + *width = gtk_widget_get_allocated_width (widget); | |
| 514 | + *height = gtk_widget_get_allocated_height (widget); | |
| 515 | +} | |
| 516 | + | |
| 517 | +static gboolean v3270_accessible_grab_focus(AtkComponent *component) | |
| 518 | +{ | |
| 519 | + GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); | |
| 520 | + GtkWidget *toplevel; | |
| 521 | + | |
| 522 | + if (!widget) | |
| 523 | + return FALSE; | |
| 524 | + | |
| 525 | + gtk_widget_grab_focus (widget); | |
| 526 | + | |
| 527 | + toplevel = gtk_widget_get_toplevel (widget); | |
| 528 | + if (gtk_widget_is_toplevel (toplevel)) | |
| 529 | + { | |
| 530 | + #ifdef GDK_WINDOWING_X11 | |
| 531 | + gtk_window_present_with_time (GTK_WINDOW (toplevel),gdk_x11_get_server_time(gtk_widget_get_window(widget))); | |
| 532 | + #else | |
| 533 | + gtk_window_present (GTK_WINDOW (toplevel)); | |
| 534 | + #endif | |
| 535 | + } | |
| 536 | + | |
| 537 | + return TRUE; | |
| 538 | +} | |
| 539 | + | |
| 540 | + | |
| 506 | 541 | static void atk_component_interface_init(AtkComponentIface *iface) |
| 507 | 542 | { |
| 508 | - iface->get_extents = v3270_accessible_get_extents; | |
| 543 | + iface->get_extents = v3270_accessible_get_extents; | |
| 544 | + iface->get_size = v3270_accessible_get_size; | |
| 545 | + iface->grab_focus = v3270_accessible_grab_focus; | |
| 509 | 546 | |
| 510 | 547 | /* |
| 511 | - iface->get_size = gtk_widget_accessible_get_size; | |
| 512 | 548 | iface->get_layer = gtk_widget_accessible_get_layer; |
| 513 | - iface->grab_focus = gtk_widget_accessible_grab_focus; | |
| 514 | 549 | iface->set_extents = gtk_widget_accessible_set_extents; |
| 515 | 550 | iface->set_position = gtk_widget_accessible_set_position; |
| 516 | 551 | iface->set_size = gtk_widget_accessible_set_size; | ... | ... |
src/lib3270/selection.c
| ... | ... | @@ -428,24 +428,29 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len) |
| 428 | 428 | buffer = malloc(len+1); |
| 429 | 429 | ptr = buffer; |
| 430 | 430 | |
| 431 | - while(len-- > 0) | |
| 431 | + trace("len=%d buffer=%p",len,buffer); | |
| 432 | + | |
| 433 | + while(len > 0) | |
| 432 | 434 | { |
| 433 | 435 | if(h->text[offset].attr & LIB3270_ATTR_CG) |
| 434 | 436 | *ptr = ' '; |
| 435 | 437 | else if(h->text[offset].chr) |
| 436 | 438 | *ptr = h->text[offset].chr; |
| 437 | 439 | else |
| 438 | - *ptr = " "; | |
| 440 | + *ptr = ' '; | |
| 439 | 441 | |
| 440 | 442 | ptr++; |
| 441 | 443 | offset++; |
| 444 | + len--; | |
| 442 | 445 | |
| 443 | - if((offset%h->cols) == 0) | |
| 446 | + if((offset%h->cols) == 0 && len > 0) | |
| 444 | 447 | { |
| 445 | 448 | *(ptr++) = '\n'; |
| 446 | 449 | len--; |
| 447 | 450 | } |
| 448 | 451 | } |
| 452 | + trace("len=%d buffer=%p pos=%d",len,buffer,ptr-buffer); | |
| 453 | + | |
| 449 | 454 | *ptr = 0; |
| 450 | 455 | |
| 451 | 456 | return buffer; | ... | ... |