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

Reply via email to