--- browser.c.orig	2002-10-25 16:04:46.000000000 +0100
+++ browser.c	2002-10-25 17:14:39.000000000 +0100
@@ -346,12 +346,54 @@
     return br->posthandle ? br->posthandle(br, ev, mx, my, key, xev) : 0;
 }
 
+/* handle tooltips */
+static void
+tooltip_handler(int ID, void *data)
+{
+    FL_OBJECT *obj = data;
+
+    if (obj->tooltip && *(obj->tooltip))
+	fl_show_tooltip(obj->tooltip, obj->form->x + obj->x,
+			obj->form->y + obj->y + obj->h + 1);
+    obj->tipID = 0;
+}
+
 static int
 tbpre(FL_OBJECT * ob, int ev, FL_Coord mx, FL_Coord my,
       int key, void *xev)
 {
 
     FL_OBJECT *br = GetPSpec(ob)->br;
+
+    switch (ev)
+    {
+    case FL_ENTER:
+	if (br->tooltip && *(br->tooltip) && !br->form->no_tooltip)
+	    br->tipID = fl_add_timeout(fl_context->tooltip_time,
+				       tooltip_handler, br);
+	br->belowmouse = 1;
+	break;
+    case FL_LEAVE:
+	if (br->tooltip && *(br->tooltip))
+	{
+	    fl_hide_tooltip();
+	    if (br->tipID)
+		fl_remove_timeout(br->tipID);
+	    br->tipID = 0;
+	}
+	br->belowmouse = 0;
+	break;
+    case FL_PUSH:
+	if (br->tooltip && *(br->tooltip))
+	{
+	    fl_hide_tooltip();
+	    if (br->tipID)
+		fl_remove_timeout(br->tipID);
+	    br->tipID = 0;
+	}
+	br->pushed = 1;
+	break;
+    }
     return br->prehandle ? br->prehandle(br, ev, mx, my, key, xev) : 0;
 }
 
