With the callback below the tooltip removes itself when the mouse leaves a word
and pops up when I move to a different word (what I wanted) . It didn't with
the previous bare-bone version.
Any idea why?
However, the callback is still called when the mouse moves. In this version
tracing also goes to the window title bar.
static gboolean querytooltipcb (GtkWidget * w,
gint x, gint y,
gboolean keyboard_mode,
GtkTooltip *tooltip,
gpointer data )
{
printf ( "querytooltip(%d): x=%d y=%d kbm=%d tip=%d\n" ,
counter , x , y , keyboard_mode ? 1 : 0, (int)tooltip ) ;
char text [ 2000 ] ;
int x1 ;
int y1 ;
GtkTextIter iter ;
gtk_text_view_window_to_buffer_coords((GtkTextView *)w,
GTK_TEXT_WINDOW_WIDGET,
x , y , &x1 , &y1 );
gtk_text_view_get_iter_at_location ( (GtkTextView *)w , &iter , x1 , y1 ) ;
GtkTextIter startiter = iter ;
GtkTextIter enditer = iter ;
if ( gtk_text_iter_starts_word ( &iter ) )
{
gtk_text_iter_forward_word_end ( &enditer ) ;
}
else if ( gtk_text_iter_inside_word ( &iter ) )
{
gtk_text_iter_forward_word_end ( &enditer ) ;
gtk_text_iter_backward_word_start ( &startiter ) ;
}
else if ( gtk_text_iter_ends_word ( &iter ) )
{
gtk_text_iter_backward_word_start ( &startiter ) ;
}
else
{
sprintf ( text , "Not in word, Hi #%d (%d,%d)\n" ,
counter , x , y ) ;
gtk_window_set_title (GTK_WINDOW (window), text );
counter++;
return false ;
}
GtkTextBuffer * buf = (GtkTextBuffer *)data ;
TCHAR * word = gtk_text_buffer_get_text ( buf , &startiter , &enditer ,
false ) ;
gtk_tooltip_set_text ( tooltip, word );
sprintf ( text , "Word=%s Hello #%d (%d,%d)\n" ,
word , counter , x , y ) ;
gtk_window_set_title (GTK_WINDOW (window), text );
counter++;
return TRUE ;
}
Ken
--- On Thu, 20/5/10, Tadej Borovšak <[email protected]> wrote:
From: Tadej Borovšak <[email protected]>
Subject: Re: How to bring up tooltip text for certain words in a GTK textview?
To: "richard boaz" <[email protected]>
Cc: "Ken Resander" <[email protected]>, [email protected]
Date: Thursday, 20 May, 2010, 2:23 AM
Hi.
General flow is correct, but GTK+ does offer some functionality that
may come handy in your case. (I'm commenting in a rather strange
succession because Richard top-posted his reply).
> unless gtk is now providing direct access to tooltip style pop-ups, you must
> create it yourself
GTK+ does offer access to tooltips in various ways: you can simply set
text or markup; you can insert custom content into tooltip; or you can
create your own window and present it as tooltip.
> meaning that you must create and manage your own borderless top-level window
This is not needed anymore.
> whose location must be explicitly specified to be placed onto the screen
> calculation of the window location coordinates must access the root-window
> where to the tooltip is to be located on top of, and
> since you don't have access to the size of the WM's borders on the root
> window, a little "guessing" as to the WM's size must be taken into account
If you connect to GtkWidget::query-tooltip signal, coordinates are
already provided, so I think most of this stuff is not needed now.
>> A textview shows help text with many 'technical' words that users may not
>> know or remember. I would like a tooltip text with a short explanation to
>> pop up when a user hovers the cursor over a technical phrase. There is a
>> lookup table from technical phrases to explanations. I am thinking about
>> using the mouse move event to get x,y then getting the technical phrase from
>> x,y, then looking up the explanation and outputting the tooltip text.
Don't use movement events to monitor your position. Simply set text
view's "has-tooltip" property to "TRUE" and connect handler to
"query-tooltip" signal. Use coordinates provided by callback to find
the word that cursor hovers over and then do the lookup. I think
things should be relatively simple.
Tadej
--
Tadej Borovšak
tadeboro.blogspot.com
[email protected]
[email protected]
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list