public AutomationElement GetParent (AutomationElement element)
{
if (element == null)
throw new ArgumentNullException ("element");
else if (element == AutomationElement.RootElement)
return null;
AutomationElement ancestor =
SourceManager.GetOrCreateAutomationElement (element.SourceElement.Parent);
lock (TreeWalker.RawViewWalker.directChildrenLock)
if (ancestor == null && RawViewWalker.directChildren.Contains (element))
ancestor = SourceManager.GetOrCreateAutomationElement (AutomationElement.RootElement.SourceElement);
if (ancestor != null && !condition.AppliesTo (ancestor))
return GetParent (ancestor);
return ancestor;
}