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