Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

70 lines
2.3 KiB
Diff

diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
index 9918165..0efe4ff 100644
--- a/gtk/gtktooltip.c
+++ b/gtk/gtktooltip.c
@@ -98,6 +98,9 @@ static void gtk_tooltip_display_closed (GdkDisplay *display,
static void gtk_tooltip_set_last_window (GtkTooltip *tooltip,
GdkWindow *window);
static void update_shape (GtkTooltip *tooltip);
+static void toplevel_focus_out (GtkWidget *widget,
+ GdkEventFocus *event,
+ GtkTooltip *tooltip);
G_DEFINE_TYPE (GtkTooltip, gtk_tooltip, G_TYPE_OBJECT);
@@ -1169,6 +1172,7 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
GdkScreen *screen;
GdkWindow *window;
+ GtkWidget *toplevel;
GtkWidget *tooltip_widget;
GtkWidget *pointer_widget;
GtkTooltip *tooltip;
@@ -1220,6 +1224,11 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
tooltip->current_window = GTK_WINDOW (GTK_TOOLTIP (tooltip)->window);
}
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tooltip_widget));
+ g_signal_connect (toplevel, "focus-out-event",
+ G_CALLBACK (toplevel_focus_out),
+ tooltip);
+
screen = gtk_widget_get_screen (tooltip_widget);
/* FIXME: should use tooltip->current_window iso tooltip->window */
@@ -1251,6 +1260,8 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
static void
gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
{
+ GtkWidget *toplevel;
+
if (!tooltip)
return;
@@ -1263,6 +1274,10 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
if (!GTK_TOOLTIP_VISIBLE (tooltip))
return;
+ toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
+ if (toplevel)
+ g_signal_handlers_disconnect_by_func (toplevel, G_CALLBACK (toplevel_focus_out), tooltip);
+
tooltip->tooltip_widget = NULL;
if (!tooltip->keyboard_mode_enabled)
@@ -1302,6 +1317,14 @@ gtk_tooltip_hide_tooltip (GtkTooltip *tooltip)
}
}
+static void
+toplevel_focus_out (GtkWidget *widget,
+ GdkEventFocus *event,
+ GtkTooltip *tooltip)
+{
+ gtk_tooltip_hide_tooltip (tooltip);
+}
+
static gint
tooltip_popup_timeout (gpointer data)
{