comparison src/gtkimhtml.c @ 4944:5fe846b7603f

[gaim-migrate @ 5278] Fixes by Rob "Robot101" McQueen: Buddies who sign off within 10 seconds of signing on won't get stuck "online" forever Idle times refresh every minute Show icons/text on the buddy list buttons works now URL tooltips in gtkimhtml won't linger around for no good reason. Thanks, Rob. And Rob Flynn is a spoil sport ;) committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Tue, 01 Apr 2003 07:57:13 +0000
parents 20c737bc03d7
children 24c9a23df63b
comparison
equal deleted inserted replaced
4943:f0c7d092948d 4944:5fe846b7603f
52 #include <pango/pango-font.h> 52 #include <pango/pango-font.h>
53 53
54 #define TOOLTIP_TIMEOUT 500 54 #define TOOLTIP_TIMEOUT 500
55 55
56 static gboolean gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer user_data); 56 static gboolean gtk_motion_event_notify(GtkWidget *imhtml, GdkEventMotion *event, gpointer user_data);
57 static gboolean gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer user_data);
57 58
58 static gboolean gtk_size_allocate_cb(GtkWidget *widget, GtkAllocation *alloc, gpointer user_data); 59 static gboolean gtk_size_allocate_cb(GtkWidget *widget, GtkAllocation *alloc, gpointer user_data);
59 static gint gtk_imhtml_tip (gpointer data); 60 static gint gtk_imhtml_tip (gpointer data);
60 61
61 62
228 229
229 imhtml->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal, 230 imhtml->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal,
230 g_free, (GDestroyNotify)gtk_smiley_tree_destroy); 231 g_free, (GDestroyNotify)gtk_smiley_tree_destroy);
231 imhtml->default_smilies = gtk_smiley_tree_new(); 232 imhtml->default_smilies = gtk_smiley_tree_new();
232 233
234 g_signal_connect(G_OBJECT(imhtml), "size-allocate", G_CALLBACK(gtk_size_allocate_cb), NULL);
233 g_signal_connect(G_OBJECT(imhtml), "motion-notify-event", G_CALLBACK(gtk_motion_event_notify), NULL); 235 g_signal_connect(G_OBJECT(imhtml), "motion-notify-event", G_CALLBACK(gtk_motion_event_notify), NULL);
234 g_signal_connect(G_OBJECT(imhtml), "size-allocate", G_CALLBACK(gtk_size_allocate_cb), NULL); 236 g_signal_connect(G_OBJECT(imhtml), "leave-notify-event", G_CALLBACK(gtk_leave_event_notify), NULL);
237 gtk_widget_add_events(GTK_WIDGET(imhtml), GDK_LEAVE_NOTIFY_MASK);
235 238
236 imhtml->tip = NULL; 239 imhtml->tip = NULL;
237 imhtml->tip_timer = 0; 240 imhtml->tip_timer = 0;
238 imhtml->tip_window = NULL; 241 imhtml->tip_window = NULL;
239 242
388 gtk_imhtml_tip, imhtml); 391 gtk_imhtml_tip, imhtml);
389 } 392 }
390 393
391 GTK_IMHTML(imhtml)->tip = tip; 394 GTK_IMHTML(imhtml)->tip = tip;
392 g_slist_free(tags); 395 g_slist_free(tags);
396 return FALSE;
397 }
398
399 gboolean gtk_leave_event_notify(GtkWidget *imhtml, GdkEventCrossing *event, gpointer data)
400 {
401 /* when leaving the widget, clear any current & pending tooltips and restore the cursor */
402 if (GTK_IMHTML(imhtml)->tip_window) {
403 gtk_widget_destroy(GTK_IMHTML(imhtml)->tip_window);
404 GTK_IMHTML(imhtml)->tip_window = NULL;
405 }
406 if (GTK_IMHTML(imhtml)->tip_timer) {
407 g_source_remove(GTK_IMHTML(imhtml)->tip_timer);
408 GTK_IMHTML(imhtml)->tip_timer = 0;
409 }
410 gdk_window_set_cursor(event->window, GTK_IMHTML(imhtml)->arrow_cursor);
411
412 /* propogate the event normally */
393 return FALSE; 413 return FALSE;
394 } 414 }
395 415
396 /* this isn't used yet 416 /* this isn't used yet
397 static void 417 static void