STDMETHODIMP ia2AccessibleComponent::get_locationInParent(long* aX, long* aY) { A11Y_TRYBLOCK_BEGIN *aX = 0; *aY = 0; AccessibleWrap* acc = static_cast<AccessibleWrap*>(this); if (acc->IsDefunct()) return CO_E_OBJNOTCONNECTED; // If the object is not on any screen the returned position is (0,0). uint64_t state = acc->State(); if (state & states::INVISIBLE) return S_OK; int32_t x = 0, y = 0, width = 0, height = 0; nsresult rv = acc->GetBounds(&x, &y, &width, &height); if (NS_FAILED(rv)) return GetHRESULT(rv); Accessible* parentAcc = acc->Parent(); // The coordinates of the returned position are relative to this object's // parent or relative to the screen on which this object is rendered if it // has no parent. if (!parentAcc) { *aX = x; *aY = y; return S_OK; } // The coordinates of the bounding box are given relative to the parent's // coordinate system. int32_t parentx = 0, parenty = 0; rv = acc->GetBounds(&parentx, &parenty, &width, &height); if (NS_FAILED(rv)) return GetHRESULT(rv); *aX = x - parentx; *aY = y - parenty; return S_OK; A11Y_TRYBLOCK_END }