vcl/qt5/Qt5AccessibleWidget.cxx                 |    7 ++-
 winaccessibility/source/UAccCOM/AccTextBase.cxx |   45 +++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 3 deletions(-)

New commits:
commit 6aef5a1e880262354cf739e461a12a0ef9573fef
Author:     Samuel Thibault <samuel.thiba...@ens-lyon.org>
AuthorDate: Thu May 7 14:18:51 2020 +0200
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Sat May 9 00:17:59 2020 +0200

    tdf#118418 implement scrollSubstringTo() for Qt & windows
    
    Use new accessibility scroll type compatible with IAccessible2.
    
    Change-Id: I0967d1c56425e1e860db34f4b9c17427e531fe02
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93636
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index dd062e369c46..0ffdf102a10a 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -30,6 +30,7 @@
 
 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
 #include <com/sun/star/accessibility/AccessibleRole.hpp>
+#include <com/sun/star/accessibility/AccessibleScrollType.hpp>
 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
 #include <com/sun/star/accessibility/XAccessible.hpp>
 #include <com/sun/star/accessibility/XAccessibleAction.hpp>
@@ -900,9 +901,11 @@ void Qt5AccessibleWidget::removeSelection(int /* 
selectionIndex */)
 {
     SAL_INFO("vcl.qt5", "Unsupported 
QAccessibleTextInterface::removeSelection");
 }
-void Qt5AccessibleWidget::scrollToSubstring(int /* startIndex */, int /* 
endIndex */)
+void Qt5AccessibleWidget::scrollToSubstring(int startIndex, int endIndex)
 {
-    SAL_INFO("vcl.qt5", "Unsupported 
QAccessibleTextInterface::scrollToSubstring");
+    Reference<XAccessibleText> xText(m_xAccessible, UNO_QUERY);
+    if (xText.is())
+        xText->scrollSubstringTo(startIndex, endIndex, 
AccessibleScrollType_SCROLL_ANYWHERE);
 }
 
 void Qt5AccessibleWidget::selection(int selectionIndex, int* startOffset, int* 
endOffset) const
diff --git a/winaccessibility/source/UAccCOM/AccTextBase.cxx 
b/winaccessibility/source/UAccCOM/AccTextBase.cxx
index 6717ce6fed7f..caf3af18b38b 100644
--- a/winaccessibility/source/UAccCOM/AccTextBase.cxx
+++ b/winaccessibility/source/UAccCOM/AccTextBase.cxx
@@ -28,6 +28,7 @@
 #include <vcl/svapp.hxx>
 #include <o3tl/char16_t2wchar_t.hxx>
 
+#include <com/sun/star/accessibility/AccessibleScrollType.hpp>
 #include <com/sun/star/accessibility/AccessibleTextType.hpp>
 #include <com/sun/star/accessibility/XAccessible.hpp>
 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
@@ -895,9 +896,51 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP 
CAccTextBase::scrollSubstringToPoint(long, lon
     return E_NOTIMPL;
 }
 
-COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::scrollSubstringTo(long, long, 
IA2ScrollType)
+COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::scrollSubstringTo(long 
startIndex, long endIndex, IA2ScrollType type)
 {
+    SolarMutexGuard g;
+
+    ENTER_PROTECTED_BLOCK
+
+    // #CHECK XInterface#
+    if(!pRXText.is())
+        return E_FAIL;
+
+    AccessibleScrollType lUnoType;
+
+    switch(type)
+    {
+    case IA2_SCROLL_TYPE_TOP_LEFT:
+        lUnoType = AccessibleScrollType_SCROLL_TOP_LEFT;
+        break;
+    case IA2_SCROLL_TYPE_BOTTOM_RIGHT:
+        lUnoType = AccessibleScrollType_SCROLL_BOTTOM_RIGHT;
+        break;
+    case IA2_SCROLL_TYPE_TOP_EDGE:
+        lUnoType = AccessibleScrollType_SCROLL_TOP_EDGE;
+        break;
+    case IA2_SCROLL_TYPE_BOTTOM_EDGE:
+        lUnoType = AccessibleScrollType_SCROLL_BOTTOM_EDGE;
+        break;
+    case IA2_SCROLL_TYPE_LEFT_EDGE:
+        lUnoType = AccessibleScrollType_SCROLL_LEFT_EDGE;
+        break;
+    case IA2_SCROLL_TYPE_RIGHT_EDGE:
+        lUnoType = AccessibleScrollType_SCROLL_RIGHT_EDGE;
+        break;
+    case IA2_SCROLL_TYPE_ANYWHERE:
+        lUnoType = AccessibleScrollType_SCROLL_ANYWHERE;
+        break;
+    default:
+        return E_NOTIMPL;
+    }
+
+    if( GetXInterface()->scrollSubstringTo(startIndex, endIndex, lUnoType) )
+        return S_OK;
+
     return E_NOTIMPL;
+
+    LEAVE_PROTECTED_BLOCK
 }
 
 /**
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to