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; | ... | ... |