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,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 | static void atk_component_interface_init(AtkComponentIface *iface) | 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 | iface->get_layer = gtk_widget_accessible_get_layer; | 548 | iface->get_layer = gtk_widget_accessible_get_layer; |
| 513 | - iface->grab_focus = gtk_widget_accessible_grab_focus; | ||
| 514 | iface->set_extents = gtk_widget_accessible_set_extents; | 549 | iface->set_extents = gtk_widget_accessible_set_extents; |
| 515 | iface->set_position = gtk_widget_accessible_set_position; | 550 | iface->set_position = gtk_widget_accessible_set_position; |
| 516 | iface->set_size = gtk_widget_accessible_set_size; | 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,24 +428,29 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len) | ||
| 428 | buffer = malloc(len+1); | 428 | buffer = malloc(len+1); |
| 429 | ptr = buffer; | 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 | if(h->text[offset].attr & LIB3270_ATTR_CG) | 435 | if(h->text[offset].attr & LIB3270_ATTR_CG) |
| 434 | *ptr = ' '; | 436 | *ptr = ' '; |
| 435 | else if(h->text[offset].chr) | 437 | else if(h->text[offset].chr) |
| 436 | *ptr = h->text[offset].chr; | 438 | *ptr = h->text[offset].chr; |
| 437 | else | 439 | else |
| 438 | - *ptr = " "; | 440 | + *ptr = ' '; |
| 439 | 441 | ||
| 440 | ptr++; | 442 | ptr++; |
| 441 | offset++; | 443 | offset++; |
| 444 | + len--; | ||
| 442 | 445 | ||
| 443 | - if((offset%h->cols) == 0) | 446 | + if((offset%h->cols) == 0 && len > 0) |
| 444 | { | 447 | { |
| 445 | *(ptr++) = '\n'; | 448 | *(ptr++) = '\n'; |
| 446 | len--; | 449 | len--; |
| 447 | } | 450 | } |
| 448 | } | 451 | } |
| 452 | + trace("len=%d buffer=%p pos=%d",len,buffer,ptr-buffer); | ||
| 453 | + | ||
| 449 | *ptr = 0; | 454 | *ptr = 0; |
| 450 | 455 | ||
| 451 | return buffer; | 456 | return buffer; |