private object DeserializeAutomationPropertyValue (string busName, int propId, object value)
{
object ret = null;
if (propId == TableItemPatternIdentifiers.ColumnHeaderItemsProperty.Id ||
propId == TableItemPatternIdentifiers.RowHeaderItemsProperty.Id ||
propId == TablePatternIdentifiers.ColumnHeadersProperty.Id ||
propId == TablePatternIdentifiers.RowHeadersProperty.Id ||
propId == SelectionPatternIdentifiers.SelectionProperty.Id) {
string [] paths = (string [])value;
AutomationElement [] elements = new AutomationElement [paths.Length];
for (var i = 0; i < paths.Length; i++) {
UiaDbusElement elem = GetOrCreateElement (busName, paths [i]);
elements [i] = SourceManager.GetOrCreateAutomationElement (elem);
}
ret = elements;
} else if (propId == AutomationElementIdentifiers.LabeledByProperty.Id ||
propId == GridItemPatternIdentifiers.ContainingGridProperty.Id ||
propId == SelectionItemPatternIdentifiers.SelectionContainerProperty.Id) {
string path = (string) value;
UiaDbusElement elem = GetOrCreateElement (busName, path);
ret = SourceManager.GetOrCreateAutomationElement (elem);
} else
ret = DC.DbusSerializer.DeserializeValue (propId, value);
return ret;
}