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