diff --git a/src/gtk/v3270/accessible.c b/src/gtk/v3270/accessible.c index da08dc9..50baacb 100644 --- a/src/gtk/v3270/accessible.c +++ b/src/gtk/v3270/accessible.c @@ -503,14 +503,49 @@ void v3270_accessible_get_extents(AtkComponent *component, gint *x, gint *y,gint } } +static void v3270_accessible_get_size(AtkComponent *component,gint *width, gint *height) +{ + GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); + + if (widget == NULL) + return; + + *width = gtk_widget_get_allocated_width (widget); + *height = gtk_widget_get_allocated_height (widget); +} + +static gboolean v3270_accessible_grab_focus(AtkComponent *component) +{ + GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); + GtkWidget *toplevel; + + if (!widget) + return FALSE; + + gtk_widget_grab_focus (widget); + + toplevel = gtk_widget_get_toplevel (widget); + if (gtk_widget_is_toplevel (toplevel)) + { + #ifdef GDK_WINDOWING_X11 + gtk_window_present_with_time (GTK_WINDOW (toplevel),gdk_x11_get_server_time(gtk_widget_get_window(widget))); + #else + gtk_window_present (GTK_WINDOW (toplevel)); + #endif + } + + return TRUE; +} + + static void atk_component_interface_init(AtkComponentIface *iface) { - iface->get_extents = v3270_accessible_get_extents; + iface->get_extents = v3270_accessible_get_extents; + iface->get_size = v3270_accessible_get_size; + iface->grab_focus = v3270_accessible_grab_focus; /* - iface->get_size = gtk_widget_accessible_get_size; iface->get_layer = gtk_widget_accessible_get_layer; - iface->grab_focus = gtk_widget_accessible_grab_focus; iface->set_extents = gtk_widget_accessible_set_extents; iface->set_position = gtk_widget_accessible_set_position; iface->set_size = gtk_widget_accessible_set_size; diff --git a/src/lib3270/selection.c b/src/lib3270/selection.c index 786ecf4..8eedc7c 100644 --- a/src/lib3270/selection.c +++ b/src/lib3270/selection.c @@ -428,24 +428,29 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len) buffer = malloc(len+1); ptr = buffer; - while(len-- > 0) + trace("len=%d buffer=%p",len,buffer); + + while(len > 0) { if(h->text[offset].attr & LIB3270_ATTR_CG) *ptr = ' '; else if(h->text[offset].chr) *ptr = h->text[offset].chr; else - *ptr = " "; + *ptr = ' '; ptr++; offset++; + len--; - if((offset%h->cols) == 0) + if((offset%h->cols) == 0 && len > 0) { *(ptr++) = '\n'; len--; } } + trace("len=%d buffer=%p pos=%d",len,buffer,ptr-buffer); + *ptr = 0; return buffer; -- libgit2 0.21.2