bool
xg_hide_tooltip (struct frame *f)
{
- bool ret = 0;
#ifdef USE_GTK_TOOLTIP
- if (f->output_data.x->ttip_window)
+ struct x_output *x = FRAME_X_OUTPUT (f);
+
+ if (x->ttip_window)
{
GtkWindow *win = f->output_data.x->ttip_window;
+
block_input ();
gtk_widget_hide (GTK_WIDGET (win));
+ /* Cancel call to xg_hide_tip. */
+ if (x->ttip_timeout != 0)
+ {
+ g_source_remove (x->ttip_timeout);
+ x->ttip_timeout = 0;
+ }
+
if (g_object_get_data (G_OBJECT (win), "restore-tt"))
{
GdkWindow *gwin = gtk_widget_get_window (GTK_WIDGET (win));
g_object_set (settings, "gtk-enable-tooltips", TRUE, NULL);
}
unblock_input ();
-
- ret = 1;
+ return 1;
}
#endif
- return ret;
+ return 0;
+}
+
+/* One-shot timeout handler attached to GTK event loop in Fx_show_tip. */
+
+gboolean
+xg_hide_tip (gpointer data)
+{
+#ifdef USE_GTK_TOOLTIP
+ xg_hide_tooltip ((struct frame *) data);
+#endif
+ return FALSE;
}
\f