summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winaccessibility/source/UAccCOM/AccTextBase.cxx16
1 files changed, 15 insertions, 1 deletions
diff --git a/winaccessibility/source/UAccCOM/AccTextBase.cxx b/winaccessibility/source/UAccCOM/AccTextBase.cxx
index 183ec3467655..b70b13c0a980 100644
--- a/winaccessibility/source/UAccCOM/AccTextBase.cxx
+++ b/winaccessibility/source/UAccCOM/AccTextBase.cxx
@@ -417,7 +417,7 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_nSelections(long * nSelectio
* @param offset Variant to accept offset.
* @return Result.
*/
-COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_offsetAtPoint(long x, long y, IA2CoordinateType, long * offset)
+COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_offsetAtPoint(long x, long y, IA2CoordinateType coordType, long * offset)
{
SolarMutexGuard g;
@@ -432,6 +432,20 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_offsetAtPoint(long x, long y
css::awt::Point point;
point.X = x;
point.Y = y;
+
+ if (coordType == IA2_COORDTYPE_SCREEN_RELATIVE)
+ {
+ // convert from screen to local coordinates
+ Reference<XAccessibleContext> xContext = pUNOInterface->getAccessibleContext();
+ Reference<XAccessibleComponent> xComponent(xContext, UNO_QUERY);
+ if (!xComponent.is())
+ return S_FALSE;
+
+ css::awt::Point aObjectPos = xComponent->getLocationOnScreen();
+ point.X -= aObjectPos.X;
+ point.Y -= aObjectPos.Y;
+ }
+
*offset = GetXInterface()->getIndexAtPoint(point);
return S_OK;