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