1 diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
2 index 9918165..0efe4ff 100644
5 @@ -98,6 +98,9 @@ static void gtk_tooltip_display_closed (GdkDisplay *display,
6 static void gtk_tooltip_set_last_window (GtkTooltip *tooltip,
8 static void update_shape (GtkTooltip *tooltip);
9 +static void toplevel_focus_out (GtkWidget *widget,
10 + GdkEventFocus *event,
11 + GtkTooltip *tooltip);
14 G_DEFINE_TYPE (GtkTooltip, gtk_tooltip, G_TYPE_OBJECT);
15 @@ -1169,6 +1172,7 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
19 + GtkWidget *toplevel;
20 GtkWidget *tooltip_widget;
21 GtkWidget *pointer_widget;
23 @@ -1220,6 +1224,11 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
24 tooltip->current_window = GTK_WINDOW (GTK_TOOLTIP (tooltip)->window);
27 + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tooltip_widget));
28 + g_signal_connect (toplevel, "focus-out-event",
29 + G_CALLBACK (toplevel_focus_out),
32 screen = gtk_widget_get_screen (tooltip_widget);
34 /* FIXME: should use tooltip->current_window iso tooltip->window */
35 @@ -1251,6 +1260,8 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
37 gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
39 + GtkWidget *toplevel;
44 @@ -1263,6 +1274,10 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
45 if (!GTK_TOOLTIP_VISIBLE (tooltip))
48 + toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
50 + g_signal_handlers_disconnect_by_func (toplevel, G_CALLBACK (toplevel_focus_out), tooltip);
52 tooltip->tooltip_widget = NULL;
54 if (!tooltip->keyboard_mode_enabled)
55 @@ -1302,6 +1317,14 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
60 +toplevel_focus_out (GtkWidget *widget,
61 + GdkEventFocus *event,
62 + GtkTooltip *tooltip)
64 + gtk_tooltip_hide_tooltip (tooltip);
68 tooltip_popup_timeout (gpointer data)