private void OnLeaveNotifyEvent(object o, LeaveNotifyEventArgs args) { bool inDialog = false; Widget widget = (Widget) o; while (widget != null) { if (widget == Popup) { inDialog = true; break; } else { widget = widget.Parent; } } if (!inDialog) { GLib.Timeout.Add (800, delegate { Hide(); return true; }); } }