private static void AddWidget(Gtk.Widget widget, ToolTipData data) { if (!widgets.ContainsKey(widget)) { widgets.Add(widget, data); widget.DeleteEvent += on_widget_delete; widget.AddEvents((int)Gdk.EventMask.ProximityInMask); widget.AddEvents((int)Gdk.EventMask.PointerMotionMask); widget.AddEvents((int)Gdk.EventMask.PointerMotionHintMask); widget.AddEvents((int)Gdk.EventMask.LeaveNotifyMask); widget.AddEvents((int)Gdk.EventMask.AllEventsMask); widget.AddEvents((int)Gdk.EventMask.EnterNotifyMask); widget.AddEvents((int)Gdk.EventMask.FocusChangeMask); widget.WidgetEvent += delegate(object sender, Gtk.WidgetEventArgs args) { if (args.Event.Type == Gdk.EventType.LeaveNotify) { is_interval_started = false; Instance.Close(); } if (args.Event.Type == Gdk.EventType.EnterNotify) { CurrentWidget = (Gtk.Widget)sender; is_interval_started = true; GLib.Timeout.Add((uint)ToolTipInterval, new GLib.TimeoutHandler(ShowMe)); } }; } else { widgets[widget] = data; } }