diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -572,6 +572,7 @@ version 3.0.0 (??/??/????):
 		* purple_time_build. Use g_date_time_new* instead.
 		* purple_time_format. Use g_date_time_format instead.
 		* purple_timeout_*. Use g_timeout_* or g_idle_* instead.
+		* pidgin_tooltip_setup_for_widget
 		* purple_txt_cancel
 		* purple_txt_resolve_account
 		* PurpleType, use GType instead.
diff --git a/pidgin/pidgintooltip.h b/pidgin/pidgintooltip.h
--- a/pidgin/pidgintooltip.h
+++ b/pidgin/pidgintooltip.h
@@ -87,20 +87,6 @@ gboolean pidgin_tooltip_setup_for_treevi
 		PidginTooltipCreateForTree create_cb, PidginTooltipPaint paint_cb);
 
 /**
- * pidgin_tooltip_setup_for_widget:
- * @widget: The widget
- * @userdata: The userdata to send to the callback functions
- * @create_cb: (scope call): Callback function to create the tooltip for the widget
- * @paint_cb: (scope call): Callback function to paint the tooltip
- *
- * Setup tooltip drawing functions for any widget.
- *
- * Returns:   %TRUE if the tooltip callbacks were setup correctly.
- */
-gboolean pidgin_tooltip_setup_for_widget(GtkWidget *widget, gpointer userdata,
-		PidginTooltipCreate create_cb, PidginTooltipPaint paint_cb);
-
-/**
  * pidgin_tooltip_destroy:
  *
  * Destroy the tooltip.
diff --git a/pidgin/pidgintooltip.c b/pidgin/pidgintooltip.c
--- a/pidgin/pidgintooltip.c
+++ b/pidgin/pidgintooltip.c
@@ -42,15 +42,8 @@ typedef struct
 	GtkWidget *widget;
 	gpointer userdata;
 	PidginTooltipPaint paint_tooltip;
-	union {
-		struct {
-			PidginTooltipCreateForTree create_tooltip;
-			GtkTreePath *path;
-		} treeview;
-		struct {
-			PidginTooltipCreate create_tooltip;
-		} widget;
-	} common;
+	PidginTooltipCreateForTree create_tooltip;
+	GtkTreePath *path;
 } PidginTooltipData;
 
 static void
@@ -70,8 +63,9 @@ initialize_tooltip_delay()
 static void
 destroy_tooltip_data(PidginTooltipData *data)
 {
-	if (data->common.treeview.path)
-		gtk_tree_path_free(data->common.treeview.path);
+	if (data->path) {
+		gtk_tree_path_free(data->path);
+	}
 	pidgin_tooltip_destroy();
 	g_free(data);
 }
@@ -221,53 +215,35 @@ void pidgin_tooltip_show(GtkWidget *widg
 static void
 reset_data_treepath(PidginTooltipData *data)
 {
-	gtk_tree_path_free(data->common.treeview.path);
-	data->common.treeview.path = NULL;
+	gtk_tree_path_free(data->path);
+	data->path = NULL;
 }
 
-static void
-pidgin_tooltip_draw(PidginTooltipData *data)
+static gboolean
+pidgin_tooltip_timeout(gpointer userdata)
 {
-	GtkWidget *tipwindow;
-	int w, h;
-
-	pidgin_tooltip_destroy();
-
-	pidgin_tooltip.widget = gtk_widget_get_toplevel(data->widget);
-	pidgin_tooltip.tipwindow = tipwindow = setup_tooltip_window();
-	pidgin_tooltip.paint_tooltip = data->paint_tooltip;
-
-	if (!data->common.widget.create_tooltip(tipwindow, data->userdata, &w, &h)) {
-		if (tipwindow == pidgin_tooltip.tipwindow)
-			pidgin_tooltip_destroy();
-		return;
-	}
-
-	setup_tooltip_window_position(data->userdata, w, h);
-}
-
-static void
-pidgin_tooltip_draw_tree(PidginTooltipData *data)
-{
+	PidginTooltipData *data = (PidginTooltipData *)userdata;
 	GtkWidget *tipwindow;
 	GtkTreePath *path = NULL;
 	int w, h;
 
+	pidgin_tooltip.timeout = 0;
+
 	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(data->widget),
 				pidgin_tooltip.tip_rect.x,
 				pidgin_tooltip.tip_rect.y + (pidgin_tooltip.tip_rect.height/2),
 				&path, NULL, NULL, NULL)) {
 		pidgin_tooltip_destroy();
-		return;
+		return FALSE;
 	}
 
-	if (data->common.treeview.path) {
-		if (gtk_tree_path_compare(data->common.treeview.path, path) == 0) {
+	if (data->path) {
+		if (gtk_tree_path_compare(data->path, path) == 0) {
 			gtk_tree_path_free(path);
-			return;
+			return FALSE;
 		}
-		gtk_tree_path_free(data->common.treeview.path);
-		data->common.treeview.path = NULL;
+		gtk_tree_path_free(data->path);
+		data->path = NULL;
 	}
 
 	pidgin_tooltip_destroy();
@@ -276,29 +252,19 @@ pidgin_tooltip_draw_tree(PidginTooltipDa
 	pidgin_tooltip.tipwindow = tipwindow = setup_tooltip_window();
 	pidgin_tooltip.paint_tooltip = data->paint_tooltip;
 
-	if (!data->common.treeview.create_tooltip(tipwindow, path, data->userdata, &w, &h)) {
+	if (!data->create_tooltip(tipwindow, path, data->userdata, &w, &h)) {
 		if (tipwindow == pidgin_tooltip.tipwindow)
 			pidgin_tooltip_destroy();
 		gtk_tree_path_free(path);
-		return;
+		return FALSE;
 	}
 
 	setup_tooltip_window_position(data->userdata, w, h);
 
-	data->common.treeview.path = path;
+	data->path = path;
 	g_signal_connect_swapped(G_OBJECT(pidgin_tooltip.tipwindow), "destroy",
 			G_CALLBACK(reset_data_treepath), data);
-}
 
-static gboolean
-pidgin_tooltip_timeout(gpointer data)
-{
-	PidginTooltipData *tdata = data;
-	pidgin_tooltip.timeout = 0;
-	if (GTK_IS_TREE_VIEW(tdata->widget))
-		pidgin_tooltip_draw_tree(data);
-	else
-		pidgin_tooltip_draw(data);
 	return FALSE;
 }
 
@@ -349,7 +315,7 @@ gboolean pidgin_tooltip_setup_for_treevi
 	PidginTooltipData *tdata = g_new0(PidginTooltipData, 1);
 	tdata->widget = tree;
 	tdata->userdata = userdata;
-	tdata->common.treeview.create_tooltip = create_tooltip;
+	tdata->create_tooltip = create_tooltip;
 	tdata->paint_tooltip = paint_tooltip;
 
 	g_signal_connect(G_OBJECT(tree), "motion-notify-event", G_CALLBACK(row_motion_cb), tdata);
@@ -358,33 +324,3 @@ gboolean pidgin_tooltip_setup_for_treevi
 	g_signal_connect_swapped(G_OBJECT(tree), "destroy", G_CALLBACK(destroy_tooltip_data), tdata);
 	return TRUE;
 }
-
-static gboolean
-widget_motion_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
-{
-	initialize_tooltip_delay();
-
-	pidgin_tooltip_destroy();
-	if (!enable_tooltips)
-		return FALSE;
-
-	pidgin_tooltip.timeout = g_timeout_add(tooltip_delay, (GSourceFunc)pidgin_tooltip_timeout, data);
-	return FALSE;
-}
-
-gboolean pidgin_tooltip_setup_for_widget(GtkWidget *widget, gpointer userdata,
-		PidginTooltipCreate create_tooltip, PidginTooltipPaint paint_tooltip)
-{
-	PidginTooltipData *wdata = g_new0(PidginTooltipData, 1);
-	wdata->widget = widget;
-	wdata->userdata = userdata;
-	wdata->common.widget.create_tooltip = create_tooltip;
-	wdata->paint_tooltip = paint_tooltip;
-
-	g_signal_connect(G_OBJECT(widget), "motion-notify-event", G_CALLBACK(widget_motion_cb), wdata);
-	g_signal_connect(G_OBJECT(widget), "leave-notify-event", G_CALLBACK(widget_leave_cb), NULL);
-	g_signal_connect(G_OBJECT(widget), "scroll-event", G_CALLBACK(widget_leave_cb), NULL);
-	g_signal_connect_swapped(G_OBJECT(widget), "destroy", G_CALLBACK(destroy_tooltip_data), wdata);
-	return TRUE;
-}
-
