Mercurial > pidgin
comparison src/gtkimhtml.c @ 4740:beffb3109ddb
[gaim-migrate @ 5055]
This is a slightly better way to do tooltips in gtkimhtml.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Thu, 13 Mar 2003 09:06:20 +0000 |
parents | 66c2388046fb |
children | 01cae9259e2f |
comparison
equal
deleted
inserted
replaced
4739:5c720bc4c23d | 4740:beffb3109ddb |
---|---|
340 gboolean gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data) | 340 gboolean gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer data) |
341 { | 341 { |
342 GtkTextIter iter; | 342 GtkTextIter iter; |
343 GdkWindow *win = event->window; | 343 GdkWindow *win = event->window; |
344 int x, y; | 344 int x, y; |
345 char *tip = NULL; | |
345 GSList *tags = NULL, *templist = NULL; | 346 GSList *tags = NULL, *templist = NULL; |
346 | |
347 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL); | 347 gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL); |
348 | |
349 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET, | 348 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET, |
350 event->x, event->y, &x, &y); | 349 event->x, event->y, &x, &y); |
351 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y); | 350 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y); |
352 | 351 tags = gtk_text_iter_get_tags(&iter); |
353 if (GTK_IMHTML(imhtml)->tip_window) { | 352 |
354 gtk_widget_destroy (GTK_IMHTML(imhtml)->tip_window); | 353 templist = tags; |
355 GTK_IMHTML(imhtml)->tip_window = NULL; | 354 while (templist) { |
356 } | 355 GtkTextTag *tag = templist->data; |
357 if (GTK_IMHTML(imhtml)->tip_timer) { | 356 tip = g_object_get_data(G_OBJECT(tag), "link_url"); |
358 gtk_timeout_remove (GTK_IMHTML(imhtml)->tip_timer); | 357 if (tip) |
358 break; | |
359 templist = templist->next; | |
360 } | |
361 | |
362 if (GTK_IMHTML(imhtml)->tip) { | |
363 if ((tip == GTK_IMHTML(imhtml)->tip)) { | |
364 return FALSE; | |
365 } | |
366 /* We've left the cell. Remove the timeout and create a new one below */ | |
367 if (GTK_IMHTML(imhtml)->tip_window) { | |
368 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window); | |
369 GTK_IMHTML(imhtml)->tip_window = NULL; | |
370 } | |
371 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor); | |
372 if (GTK_IMHTML(imhtml)->tip_timer) | |
373 g_source_remove(GTK_IMHTML(imhtml)->tip_timer); | |
359 GTK_IMHTML(imhtml)->tip_timer = 0; | 374 GTK_IMHTML(imhtml)->tip_timer = 0; |
360 } | 375 } |
361 | 376 |
362 GTK_IMHTML(imhtml)->tip = NULL; | 377 if(tip){ |
363 | |
364 tags = gtk_text_iter_get_tags(&iter); | |
365 | |
366 for(templist = tags; !GTK_IMHTML(imhtml)->tip && templist; templist = templist->next){ | |
367 GtkTextTag *tag = templist->data; | |
368 GTK_IMHTML(imhtml)->tip = g_object_get_data(G_OBJECT(tag), "link_url"); | |
369 } | |
370 | |
371 if(GTK_IMHTML(imhtml)->tip){ | |
372 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor); | 378 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor); |
373 GTK_IMHTML(imhtml)->tip_timer = gtk_timeout_add (TOOLTIP_TIMEOUT, | 379 GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT, |
374 gtk_imhtml_tip, imhtml); | 380 gtk_imhtml_tip, imhtml); |
375 } | 381 } |
376 else{ | 382 |
377 gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor); | 383 GTK_IMHTML(imhtml)->tip = tip; |
378 } | |
379 | |
380 g_slist_free(tags); | 384 g_slist_free(tags); |
381 return FALSE; | 385 return FALSE; |
382 } | 386 } |
383 | 387 |
384 /* this isn't used yet | 388 /* this isn't used yet |