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 <tadeb...@gmail.com> wrote: From: Tadej Borovšak <tadeb...@gmail.com> Subject: Re: How to bring up tooltip text for certain words in a GTK textview? To: "richard boaz" <ivor.b...@gmail.com> Cc: "Ken Resander" <kresan...@yahoo.com>, gtk-list@gnome.org 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 tadeb...@gmail.com tadej.borov...@gmail.com
_______________________________________________ gtk-list mailing list gtk-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-list