At 11:24 AM +0300 9/9/06, Osmo Salomaa wrote:
pe, 2006-09-08 kello 15:36 -0400, [EMAIL PROTECTED] kirjoitti:
 > but how do I make the cursor change to the shape of a hand ( like in
 > web browsers ) when I mouse over this text.

You can connect to the text view's motion-notify-event. Then, when the
mouse pointer moves, you can get the pointer's coordinates, get the
gtk.TextIter at that location and get the gtk.TextTags at that iter.
Based on what those tags are, you can change the cursor.

----------------------------------------
def _on_text_view_motion_notify_event(self, text_view, event):

    x, y = text_view.get_pointer()
    x, y = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
    tags = text_view.get_iter_at_location(x, y).get_tags()
    window = text_view.get_window(gtk.TEXT_WINDOW_TEXT)
    for tag in tags:
        if tag in self._url_tags:
            window.set_cursor(HAND_CURSOR)
            return
    window.set_cursor(NORMAL_CURSOR)
----------------------------------------

However, this is painfully slow! Maybe someone knows a better way?

When I do something similar, it is fast. The main difference is that I give the tag a property name so I know it is a tag without having to look it up in my collection. However, "tag in self._url_tags" should be fast enough if _url_tags is a dictionary and not a list.

Note that the event already has the pointer coords in event.x and event.y. Use text_view.window_to_buffer_coords( gtk.TEXT_WINDOW_WIDGET, int(event.x), int(event.y) ) to convert them.

When text_view.get_iter_at_position() is available, I use it, as it does a better job at staying on the link. This is especially apparent when there is a TAB character before the link.

As you are looking for tags within a larger widget, enter and leave won't work. Motion is the correct way.
--
____________________________________________________________________
TonyN.:'                       <mailto:[EMAIL PROTECTED]>
      '                              <http://www.georgeanelson.com/>
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to