Commit 5a1d91306eb99ff64b1af370600dd54f18c1d5fe

Authored by perry.werneck@gmail.com
1 parent b0ece9a9

Corrigindo erro no gerenciamento de memoria

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;