Thanks for the response. It came down to a simple logic error. In this code: my $start_iter; if ( $iter->starts_word ) { $start_iter = $iter; } else { $iter->backward_word_start; $start_iter = $iter; } $iter->forward_word_end; ... I set $start_iter to be $iter. This *doesn't* make a copy of the iter ... so when I call $iter->backward_word_start or $iter->forward_word_end ... both $start_iter and $iter are pointing to the same position. The correct method of getting 2 iters ( eg for 'start' and 'end' ) is to create them independently. Dan On Sat, Feb 18, 2017 at 6:51 AM, <cecashon@xxxxxxx> wrote: > > Hi Dan, > > I am not very good with Perl but it looks like the iters aren't getting > moved forward and backwards on the word the cursor is over. In C, the > callback would look something like > > static gboolean query_tooltip(GtkWidget *textview, gint x, gint y, gboolean > keyboard_mode, GtkTooltip *tooltip, gpointer user_data) > { > GtkTextIter start_iter; > GtkTextIter end_iter; > GtkTextBuffer *buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); > gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(textview), &end_iter, > x, y); > if(gtk_text_iter_inside_word(&end_iter)) > { > start_iter=end_iter; > gtk_text_iter_forward_word_end(&end_iter); > gtk_text_iter_backward_word_start(&start_iter); > gchar *string=gtk_text_buffer_get_text(buffer, &start_iter, > &end_iter, TRUE); > gtk_tooltip_set_text(tooltip, string); > g_free(string); > return TRUE; > } > return FALSE; > } > > Should be similar in Perl, right? > > Eric > > _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gtk-list