diff options
Diffstat (limited to 'src/gtkutil.c')
| -rw-r--r-- | src/gtkutil.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index 88e6d30bd9a..e08a4b53489 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -731,14 +731,23 @@ xg_show_tooltip (struct frame *f, int root_x, int root_y) 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)); @@ -747,11 +756,21 @@ xg_hide_tooltip (struct frame *f) 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; } |
