diff options
Diffstat (limited to 'src/plugins/platforms/winrt/uiautomation')
42 files changed, 0 insertions, 5683 deletions
diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp deleted file mode 100644 index 40274fb967..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiaaccessibility.h" -#include "qwinrtuiamainprovider.h" - -#include <QtGui/QAccessible> -#include <QtGui/QWindow> -#include <QtGui/QGuiApplication> -#include <QtGui/private/qguiapplication_p.h> -#include <QtCore/qt_windows.h> -#include <qpa/qplatformintegration.h> - -QT_BEGIN_NAMESPACE - -QWinRTUiaAccessibility::QWinRTUiaAccessibility() -{ -} - -QWinRTUiaAccessibility::~QWinRTUiaAccessibility() -{ -} - -// Handles UI Automation window messages. -void QWinRTUiaAccessibility::activate() -{ - // Start handling accessibility internally - QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true); -} - -// Handles accessibility update notifications. -void QWinRTUiaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) -{ - if (!event) - return; - - QAccessibleInterface *accessible = event->accessibleInterface(); - if (!isActive() || !accessible || !accessible->isValid()) - return; - - switch (event->type()) { - case QAccessible::Focus: - QWinRTUiaMainProvider::notifyFocusChange(event); - break; - case QAccessible::ObjectCreated: - case QAccessible::ObjectDestroyed: - case QAccessible::ObjectShow: - case QAccessible::ObjectHide: - case QAccessible::ObjectReorder: - QWinRTUiaMainProvider::notifyVisibilityChange(event); - break; - case QAccessible::StateChanged: - QWinRTUiaMainProvider::notifyStateChange(static_cast<QAccessibleStateChangeEvent *>(event)); - break; - case QAccessible::ValueChanged: - QWinRTUiaMainProvider::notifyValueChange(static_cast<QAccessibleValueChangeEvent *>(event)); - break; - case QAccessible::TextAttributeChanged: - case QAccessible::TextColumnChanged: - case QAccessible::TextInserted: - case QAccessible::TextRemoved: - case QAccessible::TextUpdated: - case QAccessible::TextSelectionChanged: - case QAccessible::TextCaretMoved: - QWinRTUiaMainProvider::notifyTextChange(event); - break; - default: - break; - } -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.h deleted file mode 100644 index b966271e21..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaaccessibility.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAACCESSIBILITY_H -#define QWINRTUIAACCESSIBILITY_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <qpa/qplatformaccessibility.h> - -QT_BEGIN_NAMESPACE - -// WinRT platform accessibility implemented over UI Automation. -class QWinRTUiaAccessibility : public QPlatformAccessibility -{ -public: - explicit QWinRTUiaAccessibility(); - virtual ~QWinRTUiaAccessibility(); - static void activate(); - void notifyAccessibilityUpdate(QAccessibleEvent *event) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAACCESSIBILITY_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.cpp deleted file mode 100644 index ee53714caa..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> - -QT_BEGIN_NAMESPACE - -QWinRTUiaBaseProvider::QWinRTUiaBaseProvider(QAccessible::Id id) : - m_id(id) -{ -} - -QWinRTUiaBaseProvider::~QWinRTUiaBaseProvider() -{ -} - -QAccessibleInterface *QWinRTUiaBaseProvider::accessibleInterface() const -{ - QAccessibleInterface *accessible = QAccessible::accessibleInterface(m_id); - if (accessible && accessible->isValid()) - return accessible; - return nullptr; -} - -QAccessible::Id QWinRTUiaBaseProvider::id() const -{ - return m_id; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.h deleted file mode 100644 index d8837354dc..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiabaseprovider.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIABASEPROVIDER_H -#define QWINRTUIABASEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QPointer> - -QT_BEGIN_NAMESPACE - -// Base class for UI Automation providers. -class QWinRTUiaBaseProvider : public QObject -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaBaseProvider) -public: - explicit QWinRTUiaBaseProvider(QAccessible::Id id); - virtual ~QWinRTUiaBaseProvider(); - - QAccessibleInterface *accessibleInterface() const; - QAccessible::Id id() const; - -private: - QAccessible::Id m_id; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIABASEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.cpp deleted file mode 100644 index 4e406a3545..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiacontrolmetadata.h" -#include "qwinrtuiautils.h" - -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; - -QWinRTUiaControlMetadata::QWinRTUiaControlMetadata() -{ -} - -QWinRTUiaControlMetadata::QWinRTUiaControlMetadata(QAccessible::Id id) -{ - update(id); -} - -void QWinRTUiaControlMetadata::update(QAccessible::Id id) -{ - if (QAccessibleInterface *accessible = accessibleForId(id)) { - m_automationId = generateAutomationId(accessible); - m_className = generateClassName(accessible); - m_controlName = generateControlName(accessible); - m_role = generateRole(accessible); - m_state = accessible->state(); - m_accelerator = accessible->text(QAccessible::Accelerator); - m_access = accessible->text(QAccessible::Accelerator); - m_help = accessible->text(QAccessible::Help); - m_description = accessible->text(QAccessible::Description); - m_value = accessible->text(QAccessible::Value); - m_boundingRect = accessible->rect(); - updateValueData(accessible); - updateTableData(accessible); - updateTextData(accessible); - } -} - -QString QWinRTUiaControlMetadata::generateControlName(QAccessibleInterface *accessible) -{ - const bool clientTopLevel = (accessible->role() == QAccessible::Client) - && accessible->parent() && (accessible->parent()->role() == QAccessible::Application); - - QString name = accessible->text(QAccessible::Name); - if (name.isEmpty() && clientTopLevel) - name = QCoreApplication::applicationName(); - return name; -} - -QString QWinRTUiaControlMetadata::generateClassName(QAccessibleInterface *accessible) -{ - QString name; - - if (QObject *obj = accessible->object()) - name = QLatin1String(obj->metaObject()->className()); - return name; -} - -// Generates an ID based on the name of the controls and their parents. -QString QWinRTUiaControlMetadata::generateAutomationId(QAccessibleInterface *accessible) -{ - QString autid; - QObject *obj = accessible->object(); - while (obj) { - QString name = obj->objectName(); - if (name.isEmpty()) { - autid = QStringLiteral(""); - break; - } - if (!autid.isEmpty()) - autid.prepend(QLatin1Char('.')); - autid.prepend(name); - obj = obj->parent(); - } - return autid; -} - -QAccessible::Role QWinRTUiaControlMetadata::generateRole(QAccessibleInterface *accessible) -{ - const bool clientTopLevel = (accessible->role() == QAccessible::Client) - && accessible->parent() && (accessible->parent()->role() == QAccessible::Application); - - if (clientTopLevel) { - // Reports a top-level widget as a window. - return QAccessible::Window; - } else { - return accessible->role(); - } -} - -void QWinRTUiaControlMetadata::updateValueData(QAccessibleInterface *accessible) -{ - if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { - m_minimumValue = valueInterface->minimumValue().toDouble(); - m_maximumValue = valueInterface->maximumValue().toDouble(); - m_currentValue = valueInterface->currentValue().toDouble(); - m_minimumStepSize = valueInterface->minimumStepSize().toDouble(); - } else { - m_minimumValue = 0.0; - m_maximumValue = 0.0; - m_currentValue = 0.0; - m_minimumStepSize = 0.0; - } -} - -void QWinRTUiaControlMetadata::updateTableData(QAccessibleInterface *accessible) -{ - if (QAccessibleTableInterface *tableInterface = accessible->tableInterface()) { - m_rowIndex = 0; - m_columnIndex = 0; - m_rowCount = tableInterface->rowCount(); - m_columnCount = tableInterface->columnCount(); - } else if (QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface()) { - m_rowIndex = tableCellInterface->rowIndex(); - m_columnIndex = tableCellInterface->columnIndex(); - m_rowCount = tableCellInterface->rowExtent(); - m_columnCount = tableCellInterface->columnExtent(); - } else { - m_rowIndex = 0; - m_columnIndex = 0; - m_rowCount = 0; - m_columnCount = 0; - } -} - -void QWinRTUiaControlMetadata::updateTextData(QAccessibleInterface *accessible) -{ - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - m_cursorPosition = textInterface->cursorPosition(); - m_text = textInterface->text(0, textInterface->characterCount()); - } else { - m_cursorPosition = 0; - m_text = QStringLiteral(""); - } -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.h deleted file mode 100644 index 769f073a1b..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiacontrolmetadata.h +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIACONTROLMETADATA_H -#define QWINRTUIACONTROLMETADATA_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <QString> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> - -QT_BEGIN_NAMESPACE - -// Cacheable control metadata -class QWinRTUiaControlMetadata -{ -public: - QWinRTUiaControlMetadata(); - QWinRTUiaControlMetadata(QAccessible::Id id); - void update(QAccessible::Id id); - QString automationId() const { return m_automationId; } - QString className() const { return m_className; } - QString controlName() const { return m_controlName; } - QString accelerator() const { return m_accelerator; } - QString access() const { return m_access; } - QString help() const { return m_help; } - QString description() const { return m_description; } - QString value() const { return m_value; } - QString text() const { return m_text; } - QAccessible::Role role() const { return m_role; } - QAccessible::State state() const { return m_state; } - QRect boundingRect() const { return m_boundingRect; } - double minimumValue() const { return m_minimumValue; } - double maximumValue() const { return m_maximumValue; } - double currentValue() const { return m_currentValue; } - double minimumStepSize() const { return m_minimumStepSize; } - int rowIndex() const { return m_rowIndex; } - int columnIndex() const { return m_columnIndex; } - int rowCount() const { return m_rowCount; } - int columnCount() const { return m_columnCount; } - int characterCount() const { return m_text.length(); } - int cursorPosition() const { return m_cursorPosition; } - -private: - QString generateControlName(QAccessibleInterface *accessible); - QString generateClassName(QAccessibleInterface *accessible); - QString generateAutomationId(QAccessibleInterface *accessible); - QAccessible::Role generateRole(QAccessibleInterface *accessible); - void updateValueData(QAccessibleInterface *accessible); - void updateTableData(QAccessibleInterface *accessible); - void updateTextData(QAccessibleInterface *accessible); - QString m_automationId; - QString m_className; - QString m_controlName; - QString m_accelerator; - QString m_access; - QString m_help; - QString m_description; - QString m_value; - QString m_text; - QAccessible::Role m_role = QAccessible::NoRole; - QAccessible::State m_state; - QRect m_boundingRect; - double m_minimumValue = 0.0; - double m_maximumValue = 0.0; - double m_currentValue = 0.0; - double m_minimumStepSize = 0.0; - int m_rowIndex = 0; - int m_columnIndex = 0; - int m_rowCount = 0; - int m_columnCount = 0; - int m_cursorPosition = 0; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIACONTROLMETADATA_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaemptypropertyvalue.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaemptypropertyvalue.h deleted file mode 100644 index 35e4df75fc..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaemptypropertyvalue.h +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAEMPTYPROPERTYVALUE_H -#define QWINRTUIAEMPTYPROPERTYVALUE_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements an empty property value. -class QWinRTUiaEmptyPropertyValue : - public Microsoft::WRL::RuntimeClass<ABI::Windows::Foundation::IPropertyValue> -{ - InspectableClass(L"QWinRTUiaEmptyPropertyValue", BaseTrust); -public: - - HRESULT STDMETHODCALLTYPE get_Type(ABI::Windows::Foundation::PropertyType *value) - { - *value = ABI::Windows::Foundation::PropertyType_Empty; - return S_OK; - } - - HRESULT STDMETHODCALLTYPE get_IsNumericScalar(boolean*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt8(BYTE*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt16(INT16*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt16(UINT16*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt32(INT32*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt32(UINT32*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt64(INT64*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt64(UINT64*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetSingle(FLOAT*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetDouble(DOUBLE*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetChar16(WCHAR*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetBoolean(boolean*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetString(HSTRING*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetGuid(GUID*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetDateTime(ABI::Windows::Foundation::DateTime*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetTimeSpan(ABI::Windows::Foundation::TimeSpan*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetPoint(ABI::Windows::Foundation::Point*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetSize(ABI::Windows::Foundation::Size*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetRect(ABI::Windows::Foundation::Rect*) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt8Array(UINT32*, BYTE**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt16Array(UINT32*, INT16**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt16Array(UINT32*, UINT16**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt32Array(UINT32*, INT32**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt32Array(UINT32*, UINT32**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInt64Array(UINT32*, INT64**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetUInt64Array(UINT32*, UINT64**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetSingleArray(UINT32*, FLOAT**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetDoubleArray(UINT32*, DOUBLE**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetChar16Array(UINT32*, WCHAR**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetBooleanArray(UINT32*, boolean**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetStringArray(UINT32*, HSTRING**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetInspectableArray(UINT32*, IInspectable***) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetGuidArray(UINT32*, GUID**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetDateTimeArray(UINT32*, ABI::Windows::Foundation::DateTime**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetTimeSpanArray(UINT32*, ABI::Windows::Foundation::TimeSpan**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetPointArray(UINT32*, ABI::Windows::Foundation::Point**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetSizeArray(UINT32*, ABI::Windows::Foundation::Size**) { return E_FAIL; } - HRESULT STDMETHODCALLTYPE GetRectArray(UINT32*, ABI::Windows::Foundation::Rect**) { return E_FAIL; } -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAEMPTYPROPERTYVALUE_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.cpp deleted file mode 100644 index 355dbf7d20..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiagriditemprovider.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; - -QWinRTUiaGridItemProvider::QWinRTUiaGridItemProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaGridItemProvider::~QWinRTUiaGridItemProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns the column index of the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridItemProvider::get_Column(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->columnIndex(); - return S_OK; -} - -// Returns the number of columns occupied by the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridItemProvider::get_ColumnSpan(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->columnCount(); - return S_OK; -} - -// Returns the provider for the containing table/tree. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridItemProvider::get_ContainingGrid(IIRawElementProviderSimple **value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - *value = nullptr; - - auto accid = id(); - auto elementId = std::make_shared<QAccessible::Id>(0); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementId]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface()) { - if (QAccessibleInterface *table = tableCellInterface->table()) { - *elementId = idForAccessible(table); - QWinRTUiaMetadataCache::instance()->load(*elementId); - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - if (!*elementId) - return S_OK; - - return QWinRTUiaMainProvider::rawProviderForAccessibleId(*elementId, value); -} - -// Returns the row index of the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridItemProvider::get_Row(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->rowIndex(); - return S_OK; -} - -// Returns the number of rows occupied by the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridItemProvider::get_RowSpan(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->rowCount(); - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.h deleted file mode 100644 index 70504fc555..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagriditemprovider.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAGRIDITEMPROVIDER_H -#define QWINRTUIAGRIDITEMPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Grid Item control pattern provider. Used by items within a table/tree. -class QWinRTUiaGridItemProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IGridItemProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaGridItemProvider) - InspectableClass(L"QWinRTUiaGridItemProvider", BaseTrust); - -public: - explicit QWinRTUiaGridItemProvider(QAccessible::Id id); - virtual ~QWinRTUiaGridItemProvider(); - - // IGridItemProvider - HRESULT STDMETHODCALLTYPE get_Column(INT32 *value) override; - HRESULT STDMETHODCALLTYPE get_ColumnSpan(INT32 *value) override; - HRESULT STDMETHODCALLTYPE get_ContainingGrid(ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **value) override; - HRESULT STDMETHODCALLTYPE get_Row(INT32 *value) override; - HRESULT STDMETHODCALLTYPE get_RowSpan(INT32 *value) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAGRIDITEMPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.cpp deleted file mode 100644 index 3bd90f6850..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiagridprovider.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; - -QWinRTUiaGridProvider::QWinRTUiaGridProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaGridProvider::~QWinRTUiaGridProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns the number of columns. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridProvider::get_ColumnCount(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->columnCount(); - return S_OK; -} - -// Returns the number of rows. -HRESULT STDMETHODCALLTYPE QWinRTUiaGridProvider::get_RowCount(INT32 *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->rowCount(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaGridProvider::GetItem(INT32 row, INT32 column, IIRawElementProviderSimple **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - auto accid = id(); - auto elementId = std::make_shared<QAccessible::Id>(0); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, row, column, elementId]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableInterface *tableInterface = accessible->tableInterface()) { - if ((row >= 0) && (row < tableInterface->rowCount()) && (column >= 0) && (column < tableInterface->columnCount())) { - if (QAccessibleInterface *cell = tableInterface->cellAt(row, column)) { - *elementId = idForAccessible(cell); - QWinRTUiaMetadataCache::instance()->load(*elementId); - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - if (!*elementId) - return E_FAIL; - - return QWinRTUiaMainProvider::rawProviderForAccessibleId(*elementId, returnValue); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.h deleted file mode 100644 index d6dfaed315..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiagridprovider.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAGRIDPROVIDER_H -#define QWINRTUIAGRIDPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Grid control pattern provider. Used by tables/trees. -class QWinRTUiaGridProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IGridProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaGridProvider) - InspectableClass(L"QWinRTUiaGridProvider", BaseTrust); - -public: - explicit QWinRTUiaGridProvider(QAccessible::Id id); - virtual ~QWinRTUiaGridProvider(); - - // IGridProvider - HRESULT STDMETHODCALLTYPE get_ColumnCount(INT32 *value) override; - HRESULT STDMETHODCALLTYPE get_RowCount(INT32 *value) override; - HRESULT STDMETHODCALLTYPE GetItem(INT32 row, INT32 column, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **returnValue) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAGRIDPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.cpp deleted file mode 100644 index e2cf7bc107..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiainvokeprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaInvokeProvider::QWinRTUiaInvokeProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaInvokeProvider::~QWinRTUiaInvokeProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaInvokeProvider::Invoke() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleActionInterface *actionInterface = accessible->actionInterface()) - actionInterface->doAction(QAccessibleActionInterface::pressAction()); - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.h deleted file mode 100644 index dfe7917a16..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiainvokeprovider.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAINVOKEPROVIDER_H -#define QWINRTUIAINVOKEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Invoke control pattern provider. -class QWinRTUiaInvokeProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IInvokeProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaInvokeProvider) - InspectableClass(L"QWinRTUiaInvokeProvider", BaseTrust); - -public: - explicit QWinRTUiaInvokeProvider(QAccessible::Id id); - virtual ~QWinRTUiaInvokeProvider(); - - // IInvokeProvider - HRESULT STDMETHODCALLTYPE Invoke() override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAINVOKEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp deleted file mode 100644 index 0b1db306bd..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.cpp +++ /dev/null @@ -1,787 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiaprovidercache.h" -#include "qwinrtuiavalueprovider.h" -#include "qwinrtuiarangevalueprovider.h" -#include "qwinrtuiatextprovider.h" -#include "qwinrtuiatoggleprovider.h" -#include "qwinrtuiainvokeprovider.h" -#include "qwinrtuiaselectionprovider.h" -#include "qwinrtuiaselectionitemprovider.h" -#include "qwinrtuiatableprovider.h" -#include "qwinrtuiatableitemprovider.h" -#include "qwinrtuiagridprovider.h" -#include "qwinrtuiagriditemprovider.h" -#include "qwinrtuiapeervector.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiaemptypropertyvalue.h" -#include "qwinrtuiautils.h" - -#include <QCoreApplication> -#include <QSemaphore> -#include <QtCore/QLoggingCategory> -#include <QtCore/qfunctions_winrt.h> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -using namespace QWinRTUiAutomation; -using namespace Microsoft::WRL; -using namespace Microsoft::WRL::Wrappers; -using namespace ABI::Windows::System; -using namespace ABI::Windows::UI; -using namespace ABI::Windows::UI::Core; -using namespace ABI::Windows::UI::Xaml; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; -using namespace ABI::Windows::Foundation; -using namespace ABI::Windows::Foundation::Collections; - -QT_BEGIN_NAMESPACE - -QWinRTUiaMainProvider::QWinRTUiaMainProvider(QAccessible::Id id) - : QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - ComPtr<IAutomationPeerFactory> factory; - HRESULT hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_Xaml_Automation_Peers_AutomationPeer).Get(), IID_PPV_ARGS(&factory)); - Q_ASSERT_SUCCEEDED(hr); - - hr = factory->CreateInstance(this, &m_base, &m_core); - Q_ASSERT_SUCCEEDED(hr); -} - -QWinRTUiaMainProvider::~QWinRTUiaMainProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::QueryInterface(REFIID iid, LPVOID *iface) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!iface) - return E_POINTER; - *iface = nullptr; - - if (iid == IID_IUnknown) { - *iface = static_cast<IAutomationPeerOverrides *>(this); - AddRef(); - return S_OK; - } else if (iid == IID_IAutomationPeerOverrides) { - *iface = static_cast<IAutomationPeerOverrides *>(this); - AddRef(); - return S_OK; - } else { - return m_base.CopyTo(iid, iface); - } -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetIids(ULONG *iidCount, IID **iids) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - *iidCount = 0; - *iids = nullptr; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetRuntimeClassName(HSTRING *className) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - return qHString(QStringLiteral("QWinRTUiaMainProvider"), className); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetTrustLevel(TrustLevel *trustLevel) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - *trustLevel = TrustLevel::BaseTrust; - return S_OK; -} - -// Returns a cached instance of the provider for a specific accessible interface. -QWinRTUiaMainProvider *QWinRTUiaMainProvider::providerForAccessibleId(QAccessible::Id id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - QWinRTUiaProviderCache *providerCache = QWinRTUiaProviderCache::instance(); - QWinRTUiaMainProvider *provider = qobject_cast<QWinRTUiaMainProvider *>(providerCache->providerForId(id)); - - if (provider) { - provider->AddRef(); - } else { - ComPtr<QWinRTUiaMainProvider> p = Make<QWinRTUiaMainProvider>(id); - provider = p.Get(); - provider->AddRef(); - providerCache->insert(id, provider); - } - return provider; -} - -// Returns an IIRawElementProviderSimple for a specific accessible interface. -HRESULT QWinRTUiaMainProvider::rawProviderForAccessibleId(QAccessible::Id elementId, - IIRawElementProviderSimple **returnValue) -{ - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(elementId)) { - ComPtr<IAutomationPeer> automationPeer; - if (SUCCEEDED(provider.As(&automationPeer))) { - ComPtr<IAutomationPeerProtected> automationPeerProtected; - if (SUCCEEDED(provider.As(&automationPeerProtected))) { - return automationPeerProtected->ProviderFromPeer(automationPeer.Get(), returnValue); - } - } - } - return E_FAIL; -} - -// Returns an array of IIRawElementProviderSimple instances for a list of accessible interface ids. -HRESULT QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(const QVarLengthArray<QAccessible::Id> &elementIds, - UINT32 *returnValueSize, - IIRawElementProviderSimple ***returnValue) -{ - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - QList<IIRawElementProviderSimple *> rawProviderList; - - for (auto elementId : elementIds) { - IIRawElementProviderSimple *rawProvider; - if (SUCCEEDED(rawProviderForAccessibleId(elementId, &rawProvider))) - rawProviderList.append(rawProvider); - } - - if (rawProviderList.size() == 0) - return S_OK; - - *returnValue = static_cast<IIRawElementProviderSimple **>(CoTaskMemAlloc(rawProviderList.size() * sizeof(IIRawElementProviderSimple *))); - if (!*returnValue) { - for (auto rawProvider : qAsConst(rawProviderList)) - rawProvider->Release(); - return E_OUTOFMEMORY; - } - - int index = 0; - for (auto rawProvider : qAsConst(rawProviderList)) - (*returnValue)[index++] = rawProvider; - *returnValueSize = rawProviderList.size(); - return S_OK; -} - -void QWinRTUiaMainProvider::notifyFocusChange(QAccessibleEvent *event) -{ - if (QAccessibleInterface *accessible = event->accessibleInterface()) { - QAccessible::Id accid = idForAccessible(accessible); - QWinRTUiaMetadataCache::instance()->load(accid); - QEventDispatcherWinRT::runOnXamlThread([accid]() { - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(accid)) { - ComPtr<IAutomationPeer> automationPeer; - if (SUCCEEDED(provider->QueryInterface(IID_PPV_ARGS(&automationPeer)))) { - automationPeer->RaiseAutomationEvent(AutomationEvents_AutomationFocusChanged); - } - } - return S_OK; - }, false); - } -} - -void QWinRTUiaMainProvider::notifyVisibilityChange(QAccessibleEvent *event) -{ - if (QAccessibleInterface *accessible = event->accessibleInterface()) { - QAccessible::Id accid = idForAccessible(accessible); - QWinRTUiaMetadataCache::instance()->load(accid); - } -} - -void QWinRTUiaMainProvider::notifyStateChange(QAccessibleStateChangeEvent *event) -{ - if (QAccessibleInterface *accessible = event->accessibleInterface()) { - QAccessible::Id accid = idForAccessible(accessible); - QWinRTUiaMetadataCache::instance()->load(accid); - - if (event->changedStates().checked || event->changedStates().checkStateMixed) { - // Notifies states changes in checkboxes. - if (accessible->role() == QAccessible::CheckBox) { - QEventDispatcherWinRT::runOnXamlThread([accid]() { - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(accid)) { - ComPtr<IAutomationPeer> automationPeer; - if (SUCCEEDED(provider->QueryInterface(IID_PPV_ARGS(&automationPeer)))) { - ComPtr<ITogglePatternIdentifiersStatics> toggleStatics; - if (SUCCEEDED(RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_UI_Xaml_Automation_TogglePatternIdentifiers).Get(), IID_PPV_ARGS(&toggleStatics)))) { - ComPtr<IAutomationProperty> toggleStateProperty; - if (SUCCEEDED(toggleStatics->get_ToggleStateProperty(&toggleStateProperty))) { - ComPtr<QWinRTUiaEmptyPropertyValue> emptyValue = Make<QWinRTUiaEmptyPropertyValue>(); - // by sending an event with an empty value we force ui automation to refresh its state - automationPeer->RaisePropertyChangedEvent(toggleStateProperty.Get(), emptyValue.Get(), emptyValue.Get()); - } - } - } - } - return S_OK; - }, false); - } - } - if (event->changedStates().active) { - if (accessible->role() == QAccessible::Window) { - // Notifies window opened/closed. - bool active = accessible->state().active; - QEventDispatcherWinRT::runOnXamlThread([accid, active]() { - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(accid)) { - ComPtr<IAutomationPeer> automationPeer; - if (SUCCEEDED(provider->QueryInterface(IID_PPV_ARGS(&automationPeer)))) { - if (active) { - automationPeer->RaiseAutomationEvent(AutomationEvents_WindowOpened); - } else { - automationPeer->RaiseAutomationEvent(AutomationEvents_WindowClosed); - } - } - } - return S_OK; - }, false); - } - } - } -} - -void QWinRTUiaMainProvider::notifyValueChange(QAccessibleValueChangeEvent *event) -{ - if (QAccessibleInterface *accessible = event->accessibleInterface()) { - QAccessible::Id accid = idForAccessible(accessible); - QWinRTUiaMetadataCache::instance()->load(accid); - if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { - // Notifies changes in values of controls supporting the value interface. - double value = valueInterface->currentValue().toDouble(); - QEventDispatcherWinRT::runOnXamlThread([accid, value]() { - // For some reason RaisePropertyChangedEvent() does not seem to be - // forwarding notifications for any property types except empty, - // which would do nothing here. ToDo: find a workaround. - return S_OK; - }, false); - } - } -} - -// Notifies changes in text content and selection state of text controls. -void QWinRTUiaMainProvider::notifyTextChange(QAccessibleEvent *event) -{ - if (QAccessibleInterface *accessible = event->accessibleInterface()) { - QAccessible::Id accid = idForAccessible(accessible); - QWinRTUiaMetadataCache::instance()->load(accid); - bool readOnly = accessible->state().readOnly; - QAccessible::Event eventType = event->type(); - if (accessible->textInterface()) { - QEventDispatcherWinRT::runOnXamlThread([accid, eventType, readOnly]() { - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(accid)) { - ComPtr<IAutomationPeer> automationPeer; - if (SUCCEEDED(provider->QueryInterface(IID_PPV_ARGS(&automationPeer)))) { - if (eventType == QAccessible::TextSelectionChanged) { - automationPeer->RaiseAutomationEvent(AutomationEvents_TextPatternOnTextSelectionChanged); - } else if (eventType == QAccessible::TextCaretMoved) { - if (!readOnly) { - automationPeer->RaiseAutomationEvent(AutomationEvents_TextPatternOnTextSelectionChanged); - } - } else { - automationPeer->RaiseAutomationEvent(AutomationEvents_TextPatternOnTextChanged); - } - } - } - return S_OK; - }, false); - } - } -} - -// Return providers for specific control patterns -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetPatternCore(PatternInterface patternInterface, IInspectable **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__ << patternInterface; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - QAccessibleInterface *accessible = accessibleInterface(); - if (!accessible) - return E_FAIL; - - switch (patternInterface) { - case PatternInterface_Text: - case PatternInterface_Text2: { - // All text controls. - if (accessible->textInterface()) { - ComPtr<QWinRTUiaTextProvider> provider = Make<QWinRTUiaTextProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Value: { - // All accessible controls return text(QAccessible::Value) (which may be empty). - ComPtr<QWinRTUiaValueProvider> provider = Make<QWinRTUiaValueProvider>(id()); - return provider.CopyTo(returnValue); - } - case PatternInterface_RangeValue: { - // Controls providing a numeric value within a range (e.g., sliders, scroll bars, dials). - if (accessible->valueInterface()) { - ComPtr<QWinRTUiaRangeValueProvider> provider = Make<QWinRTUiaRangeValueProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Toggle: { - // Checkbox controls. - if (accessible->role() == QAccessible::CheckBox) { - ComPtr<QWinRTUiaToggleProvider> provider = Make<QWinRTUiaToggleProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Selection: { - // Lists of items. - if (accessible->role() == QAccessible::List) { - ComPtr<QWinRTUiaSelectionProvider> provider = Make<QWinRTUiaSelectionProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_SelectionItem: { - // Items within a list and radio buttons. - if ((accessible->role() == QAccessible::RadioButton) - || (accessible->role() == QAccessible::ListItem)) { - ComPtr<QWinRTUiaSelectionItemProvider> provider = Make<QWinRTUiaSelectionItemProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Table: { - // Table/tree. - if (accessible->tableInterface() - && ((accessible->role() == QAccessible::Table) || (accessible->role() == QAccessible::Tree))) { - ComPtr<QWinRTUiaTableProvider> provider = Make<QWinRTUiaTableProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_TableItem: { - // Item within a table/tree. - if (accessible->tableCellInterface() - && ((accessible->role() == QAccessible::Cell) || (accessible->role() == QAccessible::TreeItem))) { - ComPtr<QWinRTUiaTableItemProvider> provider = Make<QWinRTUiaTableItemProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Grid: { - // Table/tree. - if (accessible->tableInterface() - && ((accessible->role() == QAccessible::Table) || (accessible->role() == QAccessible::Tree))) { - ComPtr<QWinRTUiaGridProvider> provider = Make<QWinRTUiaGridProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_GridItem: { - // Item within a table/tree. - if (accessible->tableCellInterface() - && ((accessible->role() == QAccessible::Cell) || (accessible->role() == QAccessible::TreeItem))) { - ComPtr<QWinRTUiaGridItemProvider> provider = Make<QWinRTUiaGridItemProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - case PatternInterface_Invoke: { - // Things that have an invokable action (e.g., simple buttons). - if (accessible->actionInterface()) { - ComPtr<QWinRTUiaInvokeProvider> provider = Make<QWinRTUiaInvokeProvider>(id()); - return provider.CopyTo(returnValue); - } - break; - } - default: - break; - } - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetAcceleratorKeyCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->accelerator(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetAccessKeyCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->access(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetAutomationControlTypeCore(AutomationControlType *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = roleToControlType(metadata->role()); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetAutomationIdCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->automationId(), returnValue); -} - -// Returns the bounding rectangle for the accessible control. -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetBoundingRectangleCore(ABI::Windows::Foundation::Rect *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - QRect rect = metadata->boundingRect(); - returnValue->X = rect.x(); - returnValue->Y = rect.y(); - returnValue->Width = rect.width(); - returnValue->Height = rect.height(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetChildrenCore(IVector<AutomationPeer *> **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - auto accid = id(); - auto children = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, children]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - int childCount = accessible->childCount(); - for (int i = 0; i < childCount; ++i) { - if (QAccessibleInterface *childAcc = accessible->child(i)) { - QAccessible::Id childId = idForAccessible(childAcc); - QWinRTUiaMetadataCache::instance()->load(childId); - if (!childAcc->state().invisible) - children->append(childId); - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - ComPtr<IVector<AutomationPeer *>> peerVector = Make<QWinRTUiaPeerVector>(); - - for (auto childId : *children) { - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(childId)) { - IAutomationPeer *peer; - if (SUCCEEDED(provider.CopyTo(&peer))) - peerVector->Append(peer); - } - } - return peerVector.CopyTo(returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetClassNameCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->className(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetClickablePointCore(ABI::Windows::Foundation::Point *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetHelpTextCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->help(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetItemStatusCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetItemTypeCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetLabeledByCore(IAutomationPeer **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetLocalizedControlTypeCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetNameCore(HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->controlName(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetOrientationCore(AutomationOrientation *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = AutomationOrientation_None; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::HasKeyboardFocusCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = (metadata->state().focused != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsContentElementCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = true; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsControlElementCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = true; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsEnabledCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = (metadata->state().disabled == 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsKeyboardFocusableCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = (metadata->state().focusable != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsOffscreenCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = (metadata->state().offscreen != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsPasswordCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *returnValue = (metadata->role() == QAccessible::EditableText) && (metadata->state().passwordEdit != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::IsRequiredForFormCore(boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = false; - return S_OK; -} - -// Sets focus to the control. -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::SetFocusCore() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - QAccessibleInterface *accessible = accessibleInterface(); - if (!accessible) - return E_FAIL; - - QAccessibleActionInterface *actionInterface = accessible->actionInterface(); - if (!actionInterface) - return E_FAIL; - - QEventDispatcherWinRT::runOnMainThread([actionInterface]() { - actionInterface->doAction(QAccessibleActionInterface::setFocusAction()); - return S_OK; - }); - return S_OK; -} - -// Returns a provider for the UI element present at the specified screen coordinates. -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetPeerFromPointCore(ABI::Windows::Foundation::Point point, IAutomationPeer **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - // Scale coordinates from High DPI screens? - - auto accid = id(); - auto elementId = std::make_shared<QAccessible::Id>(0); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementId, point]() { - // Controls can be embedded within grouping elements. By default returns the innermost control. - QAccessibleInterface *target = accessibleForId(accid); - while (QAccessibleInterface *tmpacc = target->childAt(point.X, point.Y)) { - target = tmpacc; - // For accessibility tools it may be better to return the text element instead of its subcomponents. - if (target->textInterface()) break; - } - *elementId = idForAccessible(target); - QWinRTUiaMetadataCache::instance()->load(*elementId); - return S_OK; - }))) { - return E_FAIL; - } - - if (ComPtr<QWinRTUiaMainProvider> provider = providerForAccessibleId(*elementId)) - return provider.CopyTo(returnValue); - return E_FAIL; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaMainProvider::GetLiveSettingCore(AutomationLiveSetting *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - return E_NOTIMPL; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h deleted file mode 100644 index 23a6e56ae7..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiamainprovider.h +++ /dev/null @@ -1,125 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAMAINPROVIDER_H -#define QWINRTUIAMAINPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <QtCore/qglobal.h> -#include <QtCore/QPointer> -#include <QtCore/QSharedPointer> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// The main WinRT UI Automation class. -class QWinRTUiaMainProvider: - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeerOverrides> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaMainProvider) - -public: - explicit QWinRTUiaMainProvider(QAccessible::Id id); - virtual ~QWinRTUiaMainProvider(); - static QWinRTUiaMainProvider *providerForAccessibleId(QAccessible::Id id); - static HRESULT rawProviderForAccessibleId(QAccessible::Id elementId, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **returnValue); - static HRESULT rawProviderArrayForAccessibleIdList(const QVarLengthArray<QAccessible::Id> &elementIds, UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue); - static void notifyFocusChange(QAccessibleEvent *event); - static void notifyVisibilityChange(QAccessibleEvent *event); - static void notifyStateChange(QAccessibleStateChangeEvent *event); - static void notifyValueChange(QAccessibleValueChangeEvent *event); - static void notifyTextChange(QAccessibleEvent *event); - - // IUnknown - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id, LPVOID *iface) override; - - // IInspectable - HRESULT STDMETHODCALLTYPE GetIids(ULONG *iidCount, IID **iids) override; - HRESULT STDMETHODCALLTYPE GetRuntimeClassName(HSTRING *className) override; - HRESULT STDMETHODCALLTYPE GetTrustLevel(TrustLevel *trustLevel) override; - - // IAutomationPeerOverrides - HRESULT STDMETHODCALLTYPE GetPatternCore(ABI::Windows::UI::Xaml::Automation::Peers::PatternInterface patternInterface, IInspectable **returnValue) override; - HRESULT STDMETHODCALLTYPE GetAcceleratorKeyCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetAccessKeyCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetAutomationControlTypeCore(ABI::Windows::UI::Xaml::Automation::Peers::AutomationControlType *returnValue) override; - HRESULT STDMETHODCALLTYPE GetAutomationIdCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetBoundingRectangleCore(ABI::Windows::Foundation::Rect *returnValue) override; - HRESULT STDMETHODCALLTYPE GetChildrenCore(ABI::Windows::Foundation::Collections::IVector<ABI::Windows::UI::Xaml::Automation::Peers::AutomationPeer*> **returnValue) override; - HRESULT STDMETHODCALLTYPE GetClassNameCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetClickablePointCore(ABI::Windows::Foundation::Point *returnValue) override; - HRESULT STDMETHODCALLTYPE GetHelpTextCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetItemStatusCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetItemTypeCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetLabeledByCore(ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer **returnValue) override; - HRESULT STDMETHODCALLTYPE GetLocalizedControlTypeCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetNameCore(HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE GetOrientationCore(ABI::Windows::UI::Xaml::Automation::Peers::AutomationOrientation *returnValue) override; - HRESULT STDMETHODCALLTYPE HasKeyboardFocusCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsContentElementCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsControlElementCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsEnabledCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsKeyboardFocusableCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsOffscreenCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsPasswordCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE IsRequiredForFormCore(boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE SetFocusCore() override; - HRESULT STDMETHODCALLTYPE GetPeerFromPointCore(ABI::Windows::Foundation::Point point, ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer **returnValue) override; - HRESULT STDMETHODCALLTYPE GetLiveSettingCore(ABI::Windows::UI::Xaml::Automation::Peers::AutomationLiveSetting *returnValue) override; - -private: - Microsoft::WRL::ComPtr<ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeerOverrides> m_base; - Microsoft::WRL::ComPtr<ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer> m_core; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAMAINPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.cpp deleted file mode 100644 index 442ff184a8..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtCore/QLoggingCategory> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; - -// Private constructor -QWinRTUiaMetadataCache::QWinRTUiaMetadataCache() -{ -} - -// shared instance -QWinRTUiaMetadataCache *QWinRTUiaMetadataCache::instance() -{ - static QWinRTUiaMetadataCache metadataCache; - return &metadataCache; -} - -// Returns the cached metadata associated with the ID, or an instance with default values. -QSharedPointer<QWinRTUiaControlMetadata> QWinRTUiaMetadataCache::metadataForId(QAccessible::Id id) -{ - QSharedPointer<QWinRTUiaControlMetadata> metadata; - - m_mutex.lock(); - if (m_metadataTable.contains(id)) - metadata = m_metadataTable[id]; - else - metadata = QSharedPointer<QWinRTUiaControlMetadata>(new QWinRTUiaControlMetadata); - m_mutex.unlock(); - return metadata; -} - -// Caches metadata from the accessibility framework within the main thread. -bool QWinRTUiaMetadataCache::load(QAccessible::Id id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([id]() { - QWinRTUiaMetadataCache::instance()->insert(id, QSharedPointer<QWinRTUiaControlMetadata>(new QWinRTUiaControlMetadata(id))); - return S_OK; - }))) { - return false; - } - return true; -} - -// Inserts metadata in the cache and associates it with an accessibility ID. -void QWinRTUiaMetadataCache::insert(QAccessible::Id id, const QSharedPointer<QWinRTUiaControlMetadata> &metadata) -{ - m_mutex.lock(); - m_metadataTable[id] = metadata; - m_mutex.unlock(); -} - -// Removes metadata with a given id from the cache. -void QWinRTUiaMetadataCache::remove(QAccessible::Id id) -{ - m_mutex.lock(); - m_metadataTable.remove(id); - m_mutex.unlock(); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.h deleted file mode 100644 index 2d68d1b654..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiametadatacache.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAMETADATACACHE_H -#define QWINRTUIAMETADATACACHE_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiacontrolmetadata.h" - -#include <QtCore/QHash> -#include <QtCore/QMutex> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> - -QT_BEGIN_NAMESPACE - -// Singleton used to cache metadata using the accessibility ID as the key. -class QWinRTUiaMetadataCache : public QObject -{ - QWinRTUiaMetadataCache(); - Q_OBJECT -public: - static QWinRTUiaMetadataCache *instance(); - QSharedPointer<QWinRTUiaControlMetadata> metadataForId(QAccessible::Id id); - void insert(QAccessible::Id id, const QSharedPointer<QWinRTUiaControlMetadata> &metadata); - void remove(QAccessible::Id id); - bool load(QAccessible::Id id); - -private: - QHash<QAccessible::Id, QSharedPointer<QWinRTUiaControlMetadata>> m_metadataTable; - QMutex m_mutex; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAMETADATACACHE_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.cpp deleted file mode 100644 index e3d6bcae4b..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiapeervector.h" -#include "qwinrtuiautils.h" - -using namespace ABI::Windows::UI::Xaml::Automation::Peers; -using namespace ABI::Windows::Foundation::Collections; - -QT_BEGIN_NAMESPACE - -HRESULT QWinRTUiaPeerVector::GetAt(quint32 index, IAutomationPeer **item) -{ - if (index >= quint32(m_impl.size())) - return E_FAIL; - if ((*item = m_impl.at(index))) - (*item)->AddRef(); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::get_Size(quint32 *size) -{ - *size = m_impl.size(); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::GetView(IVectorView<AutomationPeer *> **view) -{ - *view = nullptr; - return E_NOTIMPL; -} - -HRESULT QWinRTUiaPeerVector::IndexOf(IAutomationPeer *value, quint32 *index, boolean *found) -{ - int idx = m_impl.indexOf(value); - if (idx > -1) { - *index = quint32(idx); - *found = true; - } else { - *found = false; - } - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::SetAt(quint32 index, IAutomationPeer *item) -{ - if (index >= quint32(m_impl.size())) - return E_FAIL; - if (IAutomationPeer *elem = m_impl.at(index)) { - if (elem == item) - return S_OK; - else - elem->Release(); - } - if (item) - item->AddRef(); - m_impl[index] = item; - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::InsertAt(quint32 index, IAutomationPeer *item) -{ - if (index >= quint32(m_impl.size())) - return E_FAIL; - if (item) - item->AddRef(); - m_impl.insert(index, item); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::RemoveAt(quint32 index) -{ - if (index >= quint32(m_impl.size())) - return E_FAIL; - if (IAutomationPeer *elem = m_impl.at(index)) - elem->Release(); - m_impl.remove(index); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::Append(IAutomationPeer *item) -{ - if (item) - item->AddRef(); - m_impl.append(item); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::RemoveAtEnd() -{ - if (m_impl.size() == 0) - return E_FAIL; - if (IAutomationPeer *elem = m_impl.last()) - elem->Release(); - m_impl.removeLast(); - return S_OK; -} - -HRESULT QWinRTUiaPeerVector::Clear() -{ - for (auto elem : qAsConst(m_impl)) - if (elem) - elem->Release(); - m_impl.clear(); - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.h deleted file mode 100644 index 265526de09..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiapeervector.h +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAPEERVECTOR_H -#define QWINRTUIAPEERVECTOR_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <QtCore/QString> -#include <QtCore/qt_windows.h> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtGui/QWindow> -#include <QVector> - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements IVector<AutomationPeer *> -class QWinRTUiaPeerVector : public Microsoft::WRL::RuntimeClass<ABI::Windows::Foundation::Collections::IVector<ABI::Windows::UI::Xaml::Automation::Peers::AutomationPeer *>> -{ -public: - HRESULT STDMETHODCALLTYPE GetAt(quint32 index, ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer **item) override; - HRESULT STDMETHODCALLTYPE get_Size(quint32 *size) override; - HRESULT STDMETHODCALLTYPE GetView(ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::Xaml::Automation::Peers::AutomationPeer *> **view) override; - HRESULT STDMETHODCALLTYPE IndexOf(ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer *value, quint32 *index, boolean *found) override; - HRESULT STDMETHODCALLTYPE SetAt(quint32 index, ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer *item) override; - HRESULT STDMETHODCALLTYPE InsertAt(quint32 index, ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer *item) override; - HRESULT STDMETHODCALLTYPE RemoveAt(quint32 index) override; - HRESULT STDMETHODCALLTYPE Append(ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer *item) override; - HRESULT STDMETHODCALLTYPE RemoveAtEnd() override; - HRESULT STDMETHODCALLTYPE Clear() override; -private: - QVector<ABI::Windows::UI::Xaml::Automation::Peers::IAutomationPeer *> m_impl; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAPEERVECTOR_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.cpp deleted file mode 100644 index 06ff094c45..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiaprovidercache.h" - -QT_BEGIN_NAMESPACE - -// Private constructor -QWinRTUiaProviderCache::QWinRTUiaProviderCache() -{ -} - -// shared instance -QWinRTUiaProviderCache *QWinRTUiaProviderCache::instance() -{ - static QWinRTUiaProviderCache providerCache; - return &providerCache; -} - -// Returns the provider instance associated with the ID, or nullptr. -QWinRTUiaBaseProvider *QWinRTUiaProviderCache::providerForId(QAccessible::Id id) const -{ - return m_providerTable.value(id); -} - -// Inserts a provider in the cache and associates it with an accessibility ID. -void QWinRTUiaProviderCache::insert(QAccessible::Id id, QWinRTUiaBaseProvider *provider) -{ - remove(id); - if (provider) { - m_providerTable[id] = provider; - m_inverseTable[provider] = id; - // Connects the destroyed signal to our slot, to remove deleted objects from the cache. - QObject::connect(provider, &QObject::destroyed, this, &QWinRTUiaProviderCache::objectDestroyed); - } -} - -// Removes deleted provider objects from the cache. -void QWinRTUiaProviderCache::objectDestroyed(QObject *obj) -{ - // We have to use the inverse table to map the object address back to its ID, - // since at this point (called from QObject destructor), it has already been - // partially destroyed and we cannot treat it as a provider. - auto it = m_inverseTable.find(obj); - if (it != m_inverseTable.end()) { - m_providerTable.remove(*it); - m_inverseTable.remove(obj); - } -} - -// Removes a provider with a given id from the cache. -void QWinRTUiaProviderCache::remove(QAccessible::Id id) -{ - m_inverseTable.remove(m_providerTable.value(id)); - m_providerTable.remove(id); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.h deleted file mode 100644 index 393ef7d562..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaprovidercache.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAPROVIDERCACHE_H -#define QWINRTUIAPROVIDERCACHE_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <QtCore/QHash> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> - -QT_BEGIN_NAMESPACE - -// Singleton used to cache provider instances using the accessibility ID as the key. -class QWinRTUiaProviderCache : public QObject -{ - QWinRTUiaProviderCache(); - Q_OBJECT -public: - static QWinRTUiaProviderCache *instance(); - QWinRTUiaBaseProvider *providerForId(QAccessible::Id id) const; - void insert(QAccessible::Id id, QWinRTUiaBaseProvider *provider); - void remove(QAccessible::Id id); - -private Q_SLOTS: - void objectDestroyed(QObject *obj); - -private: - QHash<QAccessible::Id, QWinRTUiaBaseProvider *> m_providerTable; - QHash<QObject *, QAccessible::Id> m_inverseTable; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAPROVIDERCACHE_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.cpp deleted file mode 100644 index 4ac59c890a..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiarangevalueprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaRangeValueProvider::QWinRTUiaRangeValueProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaRangeValueProvider::~QWinRTUiaRangeValueProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_IsReadOnly(boolean *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = (metadata->state().readOnly != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_LargeChange(DOUBLE *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->minimumStepSize(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_Maximum(DOUBLE *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->maximumValue(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_Minimum(DOUBLE *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->minimumValue(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_SmallChange(DOUBLE *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->minimumStepSize(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::get_Value(DOUBLE *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = metadata->currentValue(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaRangeValueProvider::SetValue(DOUBLE value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid, value]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { - double minimum = valueInterface->minimumValue().toDouble(); - double maximum = valueInterface->maximumValue().toDouble(); - if ((value >= minimum) && (value <= maximum)) { - valueInterface->setCurrentValue(QVariant(value)); - } - } - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.h deleted file mode 100644 index 4e98959526..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiarangevalueprovider.h +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIARANGEVALUEPROVIDER_H -#define QWINRTUIARANGEVALUEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Range Value control pattern provider. -class QWinRTUiaRangeValueProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IRangeValueProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaRangeValueProvider) - InspectableClass(L"QWinRTUiaRangeValueProvider", BaseTrust); - -public: - explicit QWinRTUiaRangeValueProvider(QAccessible::Id id); - virtual ~QWinRTUiaRangeValueProvider(); - - // IRangeValueProvider - HRESULT STDMETHODCALLTYPE get_IsReadOnly(boolean *value) override; - HRESULT STDMETHODCALLTYPE get_LargeChange(DOUBLE *value) override; - HRESULT STDMETHODCALLTYPE get_Maximum(DOUBLE *value) override; - HRESULT STDMETHODCALLTYPE get_Minimum(DOUBLE *value) override; - HRESULT STDMETHODCALLTYPE get_SmallChange(DOUBLE *value) override; - HRESULT STDMETHODCALLTYPE get_Value(DOUBLE *value) override; - HRESULT STDMETHODCALLTYPE SetValue(DOUBLE value) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIARANGEVALUEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.cpp deleted file mode 100644 index 2cb5aa685c..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiaselectionitemprovider.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; - -QWinRTUiaSelectionItemProvider::QWinRTUiaSelectionItemProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaSelectionItemProvider::~QWinRTUiaSelectionItemProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns true if element is currently selected. -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionItemProvider::get_IsSelected(boolean *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - if (metadata->role() == QAccessible::RadioButton) - *value = metadata->state().checked; - else - *value = metadata->state().selected; - return S_OK; -} - -// Returns the provider for the container element (e.g., the list for the list item). -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionItemProvider::get_SelectionContainer(IIRawElementProviderSimple **value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - *value = nullptr; - - auto accid = id(); - auto elementId = std::make_shared<QAccessible::Id>(0); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementId]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - // Radio buttons do not require a container. - if (accessible->role() == QAccessible::ListItem) { - if (QAccessibleInterface *parent = accessible->parent()) { - if (parent->role() == QAccessible::List) { - *elementId = idForAccessible(parent); - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - if (!*elementId) - return S_OK; - - return QWinRTUiaMainProvider::rawProviderForAccessibleId(*elementId, value); -} - -// Adds the element to the list of selected elements. -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionItemProvider::AddToSelection() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleActionInterface *actionInterface = accessible->actionInterface()) { - if (accessible->role() == QAccessible::RadioButton) { - // For radio buttons we invoke the selection action. - actionInterface->doAction(QAccessibleActionInterface::pressAction()); - } else { - // Toggle list item if not already selected. - if (!accessible->state().selected) { - actionInterface->doAction(QAccessibleActionInterface::toggleAction()); - } - } - } - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -// Removes a list item from selection. -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionItemProvider::RemoveFromSelection() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleActionInterface *actionInterface = accessible->actionInterface()) { - if (accessible->role() != QAccessible::RadioButton) { - if (accessible->state().selected) { - actionInterface->doAction(QAccessibleActionInterface::toggleAction()); - } - } - } - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -// Selects the element (deselecting all others). -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionItemProvider::Select() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleActionInterface *actionInterface = accessible->actionInterface()) { - if (accessible->role() == QAccessible::RadioButton) { - // For radio buttons we just invoke the selection action; others are automatically deselected. - actionInterface->doAction(QAccessibleActionInterface::pressAction()); - } else { - // Toggle list item if not already selected. It must be done first to support all selection modes. - if (!accessible->state().selected) { - actionInterface->doAction(QAccessibleActionInterface::toggleAction()); - } - // Toggle selected siblings. - if (QAccessibleInterface *parent = accessible->parent()) { - for (int i = 0; i < parent->childCount(); ++i) { - if (QAccessibleInterface *sibling = parent->child(i)) { - if ((sibling != accessible) && (sibling->state().selected)) { - if (QAccessibleActionInterface *siblingAction = sibling->actionInterface()) { - siblingAction->doAction(QAccessibleActionInterface::toggleAction()); - } - } - } - } - } - } - } - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.h deleted file mode 100644 index 1b3cce7495..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionitemprovider.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIASELECTIONITEMPROVIDER_H -#define QWINRTUIASELECTIONITEMPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Selection Item control pattern provider. Used for List items and radio buttons. -class QWinRTUiaSelectionItemProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ISelectionItemProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaSelectionItemProvider) - InspectableClass(L"QWinRTUiaSelectionItemProvider", BaseTrust); - -public: - explicit QWinRTUiaSelectionItemProvider(QAccessible::Id id); - virtual ~QWinRTUiaSelectionItemProvider(); - - // ISelectionItemProvider - HRESULT STDMETHODCALLTYPE get_IsSelected(boolean *value) override; - HRESULT STDMETHODCALLTYPE get_SelectionContainer(ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **value) override; - HRESULT STDMETHODCALLTYPE AddToSelection() override; - HRESULT STDMETHODCALLTYPE RemoveFromSelection() override; - HRESULT STDMETHODCALLTYPE Select() override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIASELECTIONITEMPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.cpp deleted file mode 100644 index 4d825351c8..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiaselectionprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; - -QWinRTUiaSelectionProvider::QWinRTUiaSelectionProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaSelectionProvider::~QWinRTUiaSelectionProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionProvider::get_CanSelectMultiple(boolean *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = (metadata->state().multiSelectable != 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionProvider::get_IsSelectionRequired(boolean *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - *value = false; - - auto accid = id(); - auto selectionRequired = std::make_shared<bool>(false); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, selectionRequired]() { - // Initially returns false if none are selected. After the first selection, it may be required. - bool anySelected = false; - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - int childCount = accessible->childCount(); - for (int i = 0; i < childCount; ++i) { - if (QAccessibleInterface *childAcc = accessible->child(i)) { - if (childAcc->state().selected) { - anySelected = true; - break; - } - } - } - *selectionRequired = anySelected && !accessible->state().multiSelectable && !accessible->state().extSelectable; - } - return S_OK; - }))) { - return E_FAIL; - } - - *value = *selectionRequired; - return S_OK; -} - -// Returns an array of providers with the selected items. -HRESULT STDMETHODCALLTYPE QWinRTUiaSelectionProvider::GetSelection(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto elementIds = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementIds]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - int childCount = accessible->childCount(); - for (int i = 0; i < childCount; ++i) { - if (QAccessibleInterface *childAcc = accessible->child(i)) { - if (childAcc->state().selected) { - QAccessible::Id childId = idForAccessible(childAcc); - QWinRTUiaMetadataCache::instance()->load(childId); - elementIds->append(childId); - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - return QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(*elementIds, returnValueSize, returnValue); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.h deleted file mode 100644 index dcd286800f..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiaselectionprovider.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIASELECTIONPROVIDER_H -#define QWINRTUIASELECTIONPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Selection control pattern provider. Used for Lists. -class QWinRTUiaSelectionProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ISelectionProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaSelectionProvider) - InspectableClass(L"QWinRTUiaSelectionProvider", BaseTrust); - -public: - explicit QWinRTUiaSelectionProvider(QAccessible::Id id); - virtual ~QWinRTUiaSelectionProvider(); - - // ISelectionProvider - HRESULT STDMETHODCALLTYPE get_CanSelectMultiple(boolean *value) override; - HRESULT STDMETHODCALLTYPE get_IsSelectionRequired(boolean *value) override; - HRESULT STDMETHODCALLTYPE GetSelection(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIASELECTIONPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.cpp deleted file mode 100644 index 7cd953de87..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiatableitemprovider.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaTableItemProvider::QWinRTUiaTableItemProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaTableItemProvider::~QWinRTUiaTableItemProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns the providers for the column headers associated with the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaTableItemProvider::GetColumnHeaderItems(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto elementIds = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementIds]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface()) { - QList<QAccessibleInterface *> headers = tableCellInterface->columnHeaderCells(); - for (auto header : qAsConst(headers)) { - QAccessible::Id headerId = idForAccessible(header); - QWinRTUiaMetadataCache::instance()->load(headerId); - elementIds->append(headerId); - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - return QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(*elementIds, returnValueSize, returnValue); -} - -// Returns the providers for the row headers associated with the item. -HRESULT STDMETHODCALLTYPE QWinRTUiaTableItemProvider::GetRowHeaderItems(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto elementIds = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementIds]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface()) { - QList<QAccessibleInterface *> headers = tableCellInterface->rowHeaderCells(); - for (auto header : qAsConst(headers)) { - QAccessible::Id headerId = idForAccessible(header); - QWinRTUiaMetadataCache::instance()->load(headerId); - elementIds->append(headerId); - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - return QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(*elementIds, returnValueSize, returnValue); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.h deleted file mode 100644 index cb759864ae..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableitemprovider.h +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIATABLEITEMPROVIDER_H -#define QWINRTUIATABLEITEMPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Table Item control pattern provider. Used by items within a table/tree. -class QWinRTUiaTableItemProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ITableItemProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaTableItemProvider) - InspectableClass(L"QWinRTUiaTableItemProvider", BaseTrust); - -public: - explicit QWinRTUiaTableItemProvider(QAccessible::Id id); - virtual ~QWinRTUiaTableItemProvider(); - - // ITableItemProvider - HRESULT STDMETHODCALLTYPE GetColumnHeaderItems(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; - HRESULT STDMETHODCALLTYPE GetRowHeaderItems(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIATABLEITEMPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.cpp deleted file mode 100644 index d763b320b1..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiatableprovider.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Peers; - -QWinRTUiaTableProvider::QWinRTUiaTableProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaTableProvider::~QWinRTUiaTableProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns the primary direction of traversal for the table. -HRESULT STDMETHODCALLTYPE QWinRTUiaTableProvider::get_RowOrColumnMajor(RowOrColumnMajor *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - *value = RowOrColumnMajor_Indeterminate; - return S_OK; -} - -// Gets the providers for all the column headers in the table. -HRESULT STDMETHODCALLTYPE QWinRTUiaTableProvider::GetColumnHeaders(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto elementIds = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementIds]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableInterface *tableInterface = accessible->tableInterface()) { - for (int i = 0; i < tableInterface->columnCount(); ++i) { - if (QAccessibleInterface *cell = tableInterface->cellAt(0, i)) { - QWinRTUiaMetadataCache::instance()->load(idForAccessible(cell)); - if (QAccessibleTableCellInterface *tableCellInterface = cell->tableCellInterface()) { - QList<QAccessibleInterface *> headers = tableCellInterface->columnHeaderCells(); - for (auto header : qAsConst(headers)) { - QAccessible::Id headerId = idForAccessible(header); - QWinRTUiaMetadataCache::instance()->load(headerId); - elementIds->append(headerId); - } - } - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - return QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(*elementIds, returnValueSize, returnValue); -} - -// Gets the providers for all the row headers in the table. -HRESULT STDMETHODCALLTYPE QWinRTUiaTableProvider::GetRowHeaders(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto elementIds = std::make_shared<QVarLengthArray<QAccessible::Id>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, elementIds]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTableInterface *tableInterface = accessible->tableInterface()) { - for (int i = 0; i < tableInterface->rowCount(); ++i) { - if (QAccessibleInterface *cell = tableInterface->cellAt(i, 0)) { - QWinRTUiaMetadataCache::instance()->load(idForAccessible(cell)); - if (QAccessibleTableCellInterface *tableCellInterface = cell->tableCellInterface()) { - QList<QAccessibleInterface *> headers = tableCellInterface->rowHeaderCells(); - for (auto header : qAsConst(headers)) { - QAccessible::Id headerId = idForAccessible(header); - QWinRTUiaMetadataCache::instance()->load(headerId); - elementIds->append(headerId); - } - } - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - return QWinRTUiaMainProvider::rawProviderArrayForAccessibleIdList(*elementIds, returnValueSize, returnValue); -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.h deleted file mode 100644 index 0cd174e401..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatableprovider.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIATABLEPROVIDER_H -#define QWINRTUIATABLEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Table control pattern provider. Used by tables/trees. -class QWinRTUiaTableProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ITableProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaTableProvider) - InspectableClass(L"QWinRTUiaTableProvider", BaseTrust); - -public: - explicit QWinRTUiaTableProvider(QAccessible::Id id); - virtual ~QWinRTUiaTableProvider(); - - // ITableProvider - HRESULT STDMETHODCALLTYPE get_RowOrColumnMajor(ABI::Windows::UI::Xaml::Automation::RowOrColumnMajor *value) override; - HRESULT STDMETHODCALLTYPE GetColumnHeaders(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; - HRESULT STDMETHODCALLTYPE GetRowHeaders(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIATABLEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.cpp deleted file mode 100644 index cd7420f360..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiatextprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiatextrangeprovider.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace Microsoft::WRL; -using namespace Microsoft::WRL::Wrappers; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaTextProvider::QWinRTUiaTextProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaTextProvider::~QWinRTUiaTextProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Returns a text range provider for the entire text. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::get_DocumentRange(ITextRangeProvider **value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider = Make<QWinRTUiaTextRangeProvider>(id(), 0, metadata->characterCount()); - return textRangeProvider.CopyTo(value); -} - -// Currently supporting single selection. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::get_SupportedTextSelection(SupportedTextSelection *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!value) - return E_INVALIDARG; - *value = SupportedTextSelection_Single; - return S_OK; - -} - -// Returns an array of providers for the selected text ranges. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::GetSelection(UINT32 *returnValueSize, ITextRangeProvider ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - struct Selection { int startOffset, endOffset; }; - - auto accid = id(); - auto selections = std::make_shared<QVarLengthArray<Selection>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, selections]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - for (int i = 0; i < textInterface->selectionCount(); ++i) { - int startOffset, endOffset; - textInterface->selection(i, &startOffset, &endOffset); - selections->append({startOffset, endOffset}); - } - if (selections->size() == 0) { - // If there is no selection, we return an array with a single degenerate (empty) text range at the cursor position. - auto cur = textInterface->cursorPosition(); - selections->append({cur, cur}); - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - int selCount = selections->size(); - if (selCount < 1) - return E_FAIL; - - ITextRangeProvider **providerArray = static_cast<ITextRangeProvider **>(CoTaskMemAlloc(selCount * sizeof(ITextRangeProvider *))); - if (!providerArray) - return E_OUTOFMEMORY; - - auto dst = providerArray; - for (auto sel : *selections) { - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider - = Make<QWinRTUiaTextRangeProvider>(id(), sel.startOffset, sel.endOffset); - textRangeProvider.CopyTo(dst++); - } - *returnValueSize = selCount; - *returnValue = providerArray; - return S_OK; -} - -// Returns an array of providers for the visible text ranges. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::GetVisibleRanges(UINT32 *returnValueSize, ITextRangeProvider ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - // Considering the entire text as visible. - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider = Make<QWinRTUiaTextRangeProvider>(id(), 0, metadata->characterCount()); - textRangeProvider.CopyTo(*returnValue); - *returnValueSize = 1; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::RangeFromChild(IIRawElementProviderSimple *childElement, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!childElement || !returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - // No children supported. - return S_OK; -} - -// Returns a degenerate text range at the specified point. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::RangeFromPoint(ABI::Windows::Foundation::Point screenLocation, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - const QPoint pt(screenLocation.X, screenLocation.Y); - auto accid = id(); - auto offset = std::make_shared<int>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, pt, offset]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) - *offset = qBound(0, textInterface->offsetAtPoint(pt), textInterface->characterCount() - 1); - return S_OK; - }))) { - return E_FAIL; - } - - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider = Make<QWinRTUiaTextRangeProvider>(id(), *offset, *offset); - textRangeProvider.CopyTo(returnValue); - return S_OK; -} - -// Not supporting annotations. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::RangeFromAnnotation(IIRawElementProviderSimple *annotationElement, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!annotationElement || !returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextProvider::GetCaretRange(boolean *isActive, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!isActive || !returnValue) - return E_INVALIDARG; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *isActive = metadata->state().focused; - - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider = Make<QWinRTUiaTextRangeProvider>(id(), metadata->cursorPosition(), metadata->cursorPosition()); - return textRangeProvider.CopyTo(returnValue); -} - - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.h deleted file mode 100644 index 80d88e4115..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextprovider.h +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIATEXTPROVIDER_H -#define QWINRTUIATEXTPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Text control pattern provider. Used for text controls. -class QWinRTUiaTextProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ITextProvider, ABI::Windows::UI::Xaml::Automation::Provider::ITextProvider2> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaTextProvider) - InspectableClass(L"QWinRTUiaTextProvider", BaseTrust); - -public: - explicit QWinRTUiaTextProvider(QAccessible::Id id); - virtual ~QWinRTUiaTextProvider(); - - // ITextProvider - HRESULT STDMETHODCALLTYPE get_DocumentRange(ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **value) override; - HRESULT STDMETHODCALLTYPE get_SupportedTextSelection(ABI::Windows::UI::Xaml::Automation::SupportedTextSelection *value) override; - HRESULT STDMETHODCALLTYPE GetSelection(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider ***returnValue) override; - HRESULT STDMETHODCALLTYPE GetVisibleRanges(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider ***returnValue) override; - HRESULT STDMETHODCALLTYPE RangeFromChild(ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple *childElement, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - HRESULT STDMETHODCALLTYPE RangeFromPoint(ABI::Windows::Foundation::Point screenLocation, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - - // ITextProvider2 - HRESULT STDMETHODCALLTYPE RangeFromAnnotation(ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple *annotationElement, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - HRESULT STDMETHODCALLTYPE GetCaretRange(boolean *isActive, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIATEXTPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.cpp deleted file mode 100644 index ca15feaff9..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiatextrangeprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiamainprovider.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -#include <memory> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace Microsoft::WRL; -using namespace Microsoft::WRL::Wrappers; -using namespace ABI::Windows::Foundation; -using namespace ABI::Windows::UI::Xaml; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; -using namespace ABI::Windows::UI::Xaml::Automation::Text; - -QWinRTUiaTextRangeProvider::QWinRTUiaTextRangeProvider(QAccessible::Id id, int startOffset, int endOffset) : - QWinRTUiaBaseProvider(id), - m_startOffset(startOffset), - m_endOffset(endOffset) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__ << startOffset << endOffset; -} - -QWinRTUiaTextRangeProvider::~QWinRTUiaTextRangeProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::Clone(ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - - ComPtr<QWinRTUiaTextRangeProvider> textRangeProvider = Make<QWinRTUiaTextRangeProvider>(id(), m_startOffset, m_endOffset); - textRangeProvider.CopyTo(returnValue); - return S_OK; -} - -// Two ranges are considered equal if their start/end points are the same. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::Compare(ITextRangeProvider *textRangeProvider, boolean *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!textRangeProvider || !returnValue) - return E_INVALIDARG; - - QWinRTUiaTextRangeProvider *targetProvider = static_cast<QWinRTUiaTextRangeProvider *>(textRangeProvider); - *returnValue = ((targetProvider->m_startOffset == m_startOffset) && (targetProvider->m_endOffset == m_endOffset)); - return S_OK; -} - -// Compare different endpoinds between two providers. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider *textRangeProvider, TextPatternRangeEndpoint targetEndpoint, INT32 *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!textRangeProvider || !returnValue) - return E_INVALIDARG; - - QWinRTUiaTextRangeProvider *targetProvider = static_cast<QWinRTUiaTextRangeProvider *>(textRangeProvider); - - int point = (endpoint == TextPatternRangeEndpoint_Start) ? m_startOffset : m_endOffset; - int targetPoint = (targetEndpoint == TextPatternRangeEndpoint_Start) ? - targetProvider->m_startOffset : targetProvider->m_endOffset; - *returnValue = point - targetPoint; - return S_OK; -} - -// Expands/normalizes the range for a given text unit. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::ExpandToEnclosingUnit(TextUnit unit) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "unit=" << unit << "this: " << this; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - int len = metadata->characterCount(); - if (len < 1) { - m_startOffset = 0; - m_endOffset = 0; - } else { - if (unit == TextUnit_Character) { - m_startOffset = qBound(0, m_startOffset, len - 1); - m_endOffset = m_startOffset + 1; - } else { - QString text = metadata->text(); - for (int t = m_startOffset; t >= 0; --t) { - if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) { - m_startOffset = t; - break; - } - } - for (int t = m_startOffset; t < len; ++t) { - if ((t == len - 1) || (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1])))) { - m_endOffset = t + 1; - break; - } - } - } - } - return S_OK; -} - -// Not supported. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::FindAttribute(INT32 /*attributeId*/, IInspectable * /*value*/, boolean /*backward*/, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::FindText(HSTRING /*text*/, boolean /*backward*/, boolean /*ignoreCase*/, ITextRangeProvider **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - return S_OK; -} - -// Returns the value of a given attribute. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::GetAttributeValue(INT32 attributeId, IInspectable **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "attributeId=" << attributeId; - - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - ComPtr<IPropertyValueStatics> propertyValueStatics; - if (FAILED(RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Foundation_PropertyValue).Get(), IID_PPV_ARGS(&propertyValueStatics)))) - return E_FAIL; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - switch (attributeId) { - case AutomationTextAttributesEnum_IsReadOnlyAttribute: - return propertyValueStatics->CreateBoolean(metadata->state().readOnly, returnValue); - case AutomationTextAttributesEnum_CaretPositionAttribute: - if (metadata->cursorPosition() == 0) - return propertyValueStatics->CreateInt32(AutomationCaretPosition_BeginningOfLine, returnValue); - else if (metadata->cursorPosition() == metadata->characterCount()) - return propertyValueStatics->CreateInt32(AutomationCaretPosition_EndOfLine, returnValue); - else - return propertyValueStatics->CreateInt32(AutomationCaretPosition_Unknown, returnValue); - default: - break; - } - return E_FAIL; -} - -// Returns an array of bounding rectangles for text lines within the range. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::GetBoundingRectangles(UINT32 *returnValueSize, DOUBLE **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValueSize || !returnValue) - return E_INVALIDARG; - *returnValueSize = 0; - *returnValue = nullptr; - - auto accid = id(); - auto startOffset = m_startOffset; - auto endOffset = m_endOffset; - auto rects = std::make_shared<QVarLengthArray<QRect>>(); - - if (!SUCCEEDED(QEventDispatcherWinRT::runOnMainThread([accid, startOffset, endOffset, rects]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - int len = textInterface->characterCount(); - if ((startOffset >= 0) && (endOffset <= len) && (startOffset < endOffset)) { - int start, end; - textInterface->textAtOffset(startOffset, QAccessible::LineBoundary, &start, &end); - while ((start >= 0) && (end >= 0)) { - int startRange = qMax(start, startOffset); - int endRange = qMin(end, endOffset); - if (startRange < endRange) { - // Calculates a bounding rectangle for the line and adds it to the list. - const QRect startRect = textInterface->characterRect(startRange); - const QRect endRect = textInterface->characterRect(endRange - 1); - const QRect lineRect(qMin(startRect.x(), endRect.x()), - qMin(startRect.y(), endRect.y()), - qMax(startRect.x() + startRect.width(), endRect.x() + endRect.width()) - qMin(startRect.x(), endRect.x()), - qMax(startRect.y() + startRect.height(), endRect.y() + endRect.height()) - qMin(startRect.y(), endRect.y())); - rects->append(lineRect); - } - if (end >= len) break; - textInterface->textAfterOffset(end + 1, QAccessible::LineBoundary, &start, &end); - } - } - } - } - return S_OK; - }))) { - return E_FAIL; - } - - DOUBLE *doubleArray = static_cast<DOUBLE *>(CoTaskMemAlloc(4 * rects->size() * sizeof(DOUBLE))); - if (!doubleArray) - return E_OUTOFMEMORY; - - DOUBLE *dst = doubleArray; - for (auto rect : *rects) { - *dst++ = rect.left(); - *dst++ = rect.top(); - *dst++ = rect.width(); - *dst++ = rect.height(); - } - *returnValue = doubleArray; - *returnValueSize = 4 * rects->size(); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::GetEnclosingElement(IIRawElementProviderSimple **returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - return QWinRTUiaMainProvider::rawProviderForAccessibleId(id(), returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::GetText(INT32 maxLength, HSTRING *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - *returnValue = nullptr; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - QString rangeText = metadata->text().mid(m_startOffset, m_endOffset - m_startOffset); - - if ((maxLength > -1) && (rangeText.size() > maxLength)) - rangeText.truncate(maxLength); - return qHString(rangeText, returnValue); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::Move(TextUnit unit, INT32 count, INT32 *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - *returnValue = 0; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - int len = metadata->characterCount(); - if (len < 1) - return S_OK; - - if (unit == TextUnit_Character) { - // Moves the start point, ensuring it lies within the bounds. - int start = qBound(0, m_startOffset + count, len - 1); - // If range was initially empty, leaves it as is; otherwise, normalizes it to one char. - m_endOffset = (m_endOffset > m_startOffset) ? start + 1 : start; - *returnValue = start - m_startOffset; // Returns the actually moved distance. - m_startOffset = start; - } else { - if (count > 0) { - MoveEndpointByUnit(TextPatternRangeEndpoint_End, unit, count, returnValue); - MoveEndpointByUnit(TextPatternRangeEndpoint_Start, unit, count, returnValue); - } else { - MoveEndpointByUnit(TextPatternRangeEndpoint_Start, unit, count, returnValue); - MoveEndpointByUnit(TextPatternRangeEndpoint_End, unit, count, returnValue); - } - } - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::MoveEndpointByUnit(TextPatternRangeEndpoint endpoint, TextUnit unit, INT32 count, INT32 *returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!returnValue) - return E_INVALIDARG; - *returnValue = 0; - - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - - int len = metadata->characterCount(); - if (len < 1) - return S_OK; - - if (unit == TextUnit_Character) { - if (endpoint == TextPatternRangeEndpoint_Start) { - int boundedValue = qBound(0, m_startOffset + count, len - 1); - *returnValue = boundedValue - m_startOffset; - m_startOffset = boundedValue; - m_endOffset = qBound(m_startOffset, m_endOffset, len); - } else { - int boundedValue = qBound(0, m_endOffset + count, len); - *returnValue = boundedValue - m_endOffset; - m_endOffset = boundedValue; - m_startOffset = qBound(0, m_startOffset, m_endOffset); - } - } else { - QString text = metadata->text(); - int moved = 0; - - if (endpoint == TextPatternRangeEndpoint_Start) { - if (count > 0) { - for (int t = m_startOffset; (t < len - 1) && (moved < count); ++t) { - if (isTextUnitSeparator(unit, text[t]) && !isTextUnitSeparator(unit, text[t + 1])) { - m_startOffset = t + 1; - ++moved; - } - } - m_endOffset = qBound(m_startOffset, m_endOffset, len); - } else { - for (int t = m_startOffset - 1; (t >= 0) && (moved > count); --t) { - if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) { - m_startOffset = t; - --moved; - } - } - } - } else { - if (count > 0) { - for (int t = m_endOffset; (t < len) && (moved < count); ++t) { - if ((t == len - 1) || (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1])))) { - m_endOffset = t + 1; - ++moved; - } - } - } else { - int end = 0; - for (int t = m_endOffset - 2; (t > 0) && (moved > count); --t) { - if (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1]))) { - end = t + 1; - --moved; - } - } - m_endOffset = end; - m_startOffset = qBound(0, m_startOffset, m_endOffset); - } - } - *returnValue = moved; - } - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::MoveEndpointByRange(TextPatternRangeEndpoint endpoint, ITextRangeProvider *textRangeProvider, TextPatternRangeEndpoint targetEndpoint) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - if (!textRangeProvider) - return E_INVALIDARG; - - QWinRTUiaTextRangeProvider *targetProvider = static_cast<QWinRTUiaTextRangeProvider *>(textRangeProvider); - - int targetPoint = (targetEndpoint == TextPatternRangeEndpoint_Start) ? - targetProvider->m_startOffset : targetProvider->m_endOffset; - - // If the moved endpoint crosses the other endpoint, that one is moved too. - if (endpoint == TextPatternRangeEndpoint_Start) { - m_startOffset = targetPoint; - if (m_endOffset < m_startOffset) - m_endOffset = m_startOffset; - } else { - m_endOffset = targetPoint; - if (m_endOffset < m_startOffset) - m_startOffset = m_endOffset; - } - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::Select() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - auto startOffset = m_startOffset; - auto endOffset = m_endOffset; - - QEventDispatcherWinRT::runOnMainThread([accid, startOffset, endOffset]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - // unselects all and adds a new selection - for (int i = textInterface->selectionCount() - 1; i >= 0; --i) - textInterface->removeSelection(i); - textInterface->addSelection(startOffset, endOffset); - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::AddToSelection() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - return Select(); -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::RemoveFromSelection() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - // unselects all - for (int i = textInterface->selectionCount() - 1; i >= 0; --i) - textInterface->removeSelection(i); - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::ScrollIntoView(boolean /*alignToTop*/) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - auto startOffset = m_startOffset; - auto endOffset = m_endOffset; - - QEventDispatcherWinRT::runOnMainThread([accid, startOffset, endOffset]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleTextInterface *textInterface = accessible->textInterface()) { - textInterface->scrollToSubstring(startOffset, endOffset); - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -// Returns an array of children elements embedded within the range. -HRESULT STDMETHODCALLTYPE QWinRTUiaTextRangeProvider::GetChildren(UINT32 *returnValueSize, IIRawElementProviderSimple ***returnValue) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!returnValue) - return E_INVALIDARG; - // Not supporting any children. - returnValueSize = 0; - *returnValue = nullptr; - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.h deleted file mode 100644 index 81b5f0d400..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatextrangeprovider.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIATEXTRANGEPROVIDER_H -#define QWINRTUIATEXTRANGEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Text Range control pattern provider. Used for text controls. -class QWinRTUiaTextRangeProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaTextRangeProvider) - InspectableClass(L"QWinRTUiaTextRangeProvider", BaseTrust); - -public: - explicit QWinRTUiaTextRangeProvider(QAccessible::Id id, int startOffset, int endOffset); - virtual ~QWinRTUiaTextRangeProvider(); - - // ITextRangeProvider - HRESULT STDMETHODCALLTYPE Clone(ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - HRESULT STDMETHODCALLTYPE Compare(ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider *textRangeProvider, boolean *returnValue) override; - HRESULT STDMETHODCALLTYPE CompareEndpoints(ABI::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider *textRangeProvider, ABI::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint targetEndpoint, INT32 *returnValue) override; - HRESULT STDMETHODCALLTYPE ExpandToEnclosingUnit(ABI::Windows::UI::Xaml::Automation::Text::TextUnit unit) override; - HRESULT STDMETHODCALLTYPE FindAttribute(INT32 attributeId, IInspectable *value, boolean backward, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - HRESULT STDMETHODCALLTYPE FindText(HSTRING text, boolean backward, boolean ignoreCase, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider **returnValue) override; - HRESULT STDMETHODCALLTYPE GetAttributeValue(INT32 attributeId, IInspectable **returnValue) override; - HRESULT STDMETHODCALLTYPE GetBoundingRectangles(UINT32 *returnValueSize, DOUBLE **returnValue) override; - HRESULT STDMETHODCALLTYPE GetEnclosingElement(ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple **returnValue) override; - HRESULT STDMETHODCALLTYPE GetText(INT32 maxLength, HSTRING *returnValue) override; - HRESULT STDMETHODCALLTYPE Move(ABI::Windows::UI::Xaml::Automation::Text::TextUnit unit, INT32 count, INT32 *returnValue) override; - HRESULT STDMETHODCALLTYPE MoveEndpointByUnit(ABI::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint, ABI::Windows::UI::Xaml::Automation::Text::TextUnit unit, INT32 count, INT32 *returnValue) override; - HRESULT STDMETHODCALLTYPE MoveEndpointByRange(ABI::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint, ABI::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider *textRangeProvider, ABI::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint targetEndpoint) override; - HRESULT STDMETHODCALLTYPE Select() override; - HRESULT STDMETHODCALLTYPE AddToSelection() override; - HRESULT STDMETHODCALLTYPE RemoveFromSelection() override; - HRESULT STDMETHODCALLTYPE ScrollIntoView(boolean alignToTop) override; - HRESULT STDMETHODCALLTYPE GetChildren(UINT32 *returnValueSize, ABI::Windows::UI::Xaml::Automation::Provider::IIRawElementProviderSimple ***returnValue) override; - -private: - int m_startOffset; - int m_endOffset; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIATEXTRANGEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.cpp deleted file mode 100644 index 59f55eb422..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiatoggleprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaToggleProvider::QWinRTUiaToggleProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaToggleProvider::~QWinRTUiaToggleProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// Gets the current toggle state. -HRESULT STDMETHODCALLTYPE QWinRTUiaToggleProvider::get_ToggleState(ToggleState *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - if (metadata->state().checked) - *value = metadata->state().checkStateMixed ? ToggleState_Indeterminate : ToggleState_On; - else - *value = ToggleState_Off; - return S_OK; -} - -// Toggles the state by invoking the toggle action. -HRESULT STDMETHODCALLTYPE QWinRTUiaToggleProvider::Toggle() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QEventDispatcherWinRT::runOnMainThread([accid]() { - if (QAccessibleInterface *accessible = accessibleForId(accid)) - if (QAccessibleActionInterface *actionInterface = accessible->actionInterface()) - actionInterface->doAction(QAccessibleActionInterface::toggleAction()); - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.h deleted file mode 100644 index 3d1740c0a1..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiatoggleprovider.h +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIATOGGLEPROVIDER_H -#define QWINRTUIATOGGLEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Toggle control pattern provider. Used for checkboxes. -class QWinRTUiaToggleProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IToggleProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaToggleProvider) - InspectableClass(L"QWinRTUiaToggleProvider", BaseTrust); - -public: - explicit QWinRTUiaToggleProvider(QAccessible::Id id); - virtual ~QWinRTUiaToggleProvider(); - - // IToggleProvider - HRESULT STDMETHODCALLTYPE get_ToggleState(ABI::Windows::UI::Xaml::Automation::ToggleState *value) override; - HRESULT STDMETHODCALLTYPE Toggle() override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIATOGGLEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.cpp deleted file mode 100644 index 16197c99b9..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiautils.h" - -using namespace ABI::Windows::UI::Xaml::Automation::Peers; -using namespace ABI::Windows::UI::Xaml::Automation::Text; -using namespace ABI::Windows::Foundation::Collections; - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(lcQpaUiAutomation, "qt.qpa.uiautomation") - -namespace QWinRTUiAutomation { - -// Returns the window containing the element (usually the top window), -QWindow *windowForAccessible(const QAccessibleInterface *accessible) -{ - QWindow *window = accessible->window(); - if (!window) { - QAccessibleInterface *acc = accessible->parent(); - while (acc && acc->isValid() && !window) { - window = acc->window(); - QAccessibleInterface *par = acc->parent(); - acc = par; - } - } - return window; -} - -QAccessibleInterface *accessibleForId(QAccessible::Id id) -{ - QAccessibleInterface *accessible = QAccessible::accessibleInterface(id); - if (!accessible || !accessible->isValid()) - return nullptr; - return accessible; -} - -QAccessible::Id idForAccessible(QAccessibleInterface *accessible) -{ - if (!accessible) - return QAccessible::Id(0); - return QAccessible::uniqueId(accessible); -} - -// Maps an accessibility role ID to an UI Automation control type ID. -AutomationControlType roleToControlType(QAccessible::Role role) -{ - static const QHash<QAccessible::Role, AutomationControlType> mapping { - {QAccessible::TitleBar, AutomationControlType::AutomationControlType_TitleBar}, - {QAccessible::MenuBar, AutomationControlType::AutomationControlType_MenuBar}, - {QAccessible::ScrollBar, AutomationControlType::AutomationControlType_ScrollBar}, - {QAccessible::Grip, AutomationControlType::AutomationControlType_Thumb}, - {QAccessible::Sound, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Cursor, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Caret, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::AlertMessage, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Window, AutomationControlType::AutomationControlType_Window}, - {QAccessible::Client, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::PopupMenu, AutomationControlType::AutomationControlType_Menu}, - {QAccessible::MenuItem, AutomationControlType::AutomationControlType_MenuItem}, - {QAccessible::ToolTip, AutomationControlType::AutomationControlType_ToolTip}, - {QAccessible::Application, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Document, AutomationControlType::AutomationControlType_Document}, - {QAccessible::Pane, AutomationControlType::AutomationControlType_Pane}, - {QAccessible::Chart, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Dialog, AutomationControlType::AutomationControlType_Window}, - {QAccessible::Border, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Grouping, AutomationControlType::AutomationControlType_Group}, - {QAccessible::Separator, AutomationControlType::AutomationControlType_Separator}, - {QAccessible::ToolBar, AutomationControlType::AutomationControlType_ToolBar}, - {QAccessible::StatusBar, AutomationControlType::AutomationControlType_StatusBar}, - {QAccessible::Table, AutomationControlType::AutomationControlType_Table}, - {QAccessible::ColumnHeader, AutomationControlType::AutomationControlType_Header}, - {QAccessible::RowHeader, AutomationControlType::AutomationControlType_Header}, - {QAccessible::Column, AutomationControlType::AutomationControlType_HeaderItem}, - {QAccessible::Row, AutomationControlType::AutomationControlType_HeaderItem}, - {QAccessible::Cell, AutomationControlType::AutomationControlType_DataItem}, - {QAccessible::Link, AutomationControlType::AutomationControlType_Hyperlink}, - {QAccessible::HelpBalloon, AutomationControlType::AutomationControlType_ToolTip}, - {QAccessible::Assistant, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::List, AutomationControlType::AutomationControlType_List}, - {QAccessible::ListItem, AutomationControlType::AutomationControlType_ListItem}, - {QAccessible::Tree, AutomationControlType::AutomationControlType_Tree}, - {QAccessible::TreeItem, AutomationControlType::AutomationControlType_TreeItem}, - {QAccessible::PageTab, AutomationControlType::AutomationControlType_TabItem}, - {QAccessible::PropertyPage, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Indicator, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Graphic, AutomationControlType::AutomationControlType_Image}, - {QAccessible::StaticText, AutomationControlType::AutomationControlType_Text}, - {QAccessible::EditableText, AutomationControlType::AutomationControlType_Edit}, - {QAccessible::Button, AutomationControlType::AutomationControlType_Button}, - {QAccessible::CheckBox, AutomationControlType::AutomationControlType_CheckBox}, - {QAccessible::RadioButton, AutomationControlType::AutomationControlType_RadioButton}, - {QAccessible::ComboBox, AutomationControlType::AutomationControlType_ComboBox}, - {QAccessible::ProgressBar, AutomationControlType::AutomationControlType_ProgressBar}, - {QAccessible::Dial, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::HotkeyField, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Slider, AutomationControlType::AutomationControlType_Slider}, - {QAccessible::SpinBox, AutomationControlType::AutomationControlType_Spinner}, - {QAccessible::Canvas, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Animation, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Equation, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::ButtonDropDown, AutomationControlType::AutomationControlType_Button}, - {QAccessible::ButtonMenu, AutomationControlType::AutomationControlType_Button}, - {QAccessible::ButtonDropGrid, AutomationControlType::AutomationControlType_Button}, - {QAccessible::Whitespace, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::PageTabList, AutomationControlType::AutomationControlType_Tab}, - {QAccessible::Clock, AutomationControlType::AutomationControlType_Custom}, - {QAccessible::Splitter, AutomationControlType::AutomationControlType_Custom}, - }; - - return mapping.value(role, AutomationControlType::AutomationControlType_Custom); -} - -// True if a character can be a separator for a text unit. -bool isTextUnitSeparator(TextUnit unit, const QChar &ch) -{ - return (((unit == TextUnit_Word) || (unit == TextUnit_Format)) && ch.isSpace()) - || ((unit == TextUnit_Line) && (ch.toLatin1() == '\n')); -} - -HRESULT qHString(const QString &str, HSTRING *returnValue) -{ - if (!returnValue) - return E_INVALIDARG; - - const wchar_t *wstr = reinterpret_cast<const wchar_t *>(str.utf16()); - return ::WindowsCreateString(wstr, static_cast<UINT32>(::wcslen(wstr)), returnValue); -} - -QString hStrToQStr(const HSTRING &hStr) -{ - quint32 len; - const wchar_t *wstr = ::WindowsGetStringRawBuffer(hStr, &len); - return QString::fromWCharArray(wstr, len); -} - -} // namespace QWinRTUiAutomation - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.h deleted file mode 100644 index 9519cb4eb5..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiautils.h +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAUTILS_H -#define QWINRTUIAUTILS_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include <QtCore/QString> -#include <QtCore/qt_windows.h> -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtGui/QWindow> -#include <QtCore/QLoggingCategory> - -#include <wrl.h> -#include <windows.ui.xaml.h> -#include <functional> - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(lcQpaUiAutomation) - -namespace QWinRTUiAutomation { - -QWindow *windowForAccessible(const QAccessibleInterface *accessible); - -QAccessibleInterface *accessibleForId(QAccessible::Id id); - -QAccessible::Id idForAccessible(QAccessibleInterface *accessible); - -ABI::Windows::UI::Xaml::Automation::Peers::AutomationControlType roleToControlType(QAccessible::Role role); - -bool isTextUnitSeparator(ABI::Windows::UI::Xaml::Automation::Text::TextUnit unit, const QChar &ch); - -HRESULT qHString(const QString &str, HSTRING *returnValue); - -QString hStrToQStr(const HSTRING &hStr); - -} // namespace QWinRTUiAutomation - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAUTILS_H diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp deleted file mode 100644 index 255d8ee49e..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiavalueprovider.h" -#include "qwinrtuiametadatacache.h" -#include "qwinrtuiautils.h" - -#include <QtGui/QAccessible> -#include <QtGui/QAccessibleInterface> -#include <QtCore/QLoggingCategory> -#include <QtCore/QString> -#include <QtCore/private/qeventdispatcher_winrt_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QWinRTUiAutomation; -using namespace ABI::Windows::UI::Xaml::Automation; -using namespace ABI::Windows::UI::Xaml::Automation::Provider; - -QWinRTUiaValueProvider::QWinRTUiaValueProvider(QAccessible::Id id) : - QWinRTUiaBaseProvider(id) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -QWinRTUiaValueProvider::~QWinRTUiaValueProvider() -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; -} - -// True for read-only controls. -HRESULT STDMETHODCALLTYPE QWinRTUiaValueProvider::get_IsReadOnly(boolean *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - *value = (metadata->state().readOnly != 0); - return S_OK; -} - -// Returns the value in text form. -HRESULT STDMETHODCALLTYPE QWinRTUiaValueProvider::get_Value(HSTRING *value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - if (!value) - return E_INVALIDARG; - QSharedPointer<QWinRTUiaControlMetadata> metadata = QWinRTUiaMetadataCache::instance()->metadataForId(id()); - return qHString(metadata->value(), value); -} - -// Sets the value associated with the control. -HRESULT STDMETHODCALLTYPE QWinRTUiaValueProvider::SetValue(HSTRING value) -{ - qCDebug(lcQpaUiAutomation) << __FUNCTION__; - - auto accid = id(); - - QString tmpValue = hStrToQStr(value); - - QEventDispatcherWinRT::runOnMainThread([accid, tmpValue]() { - - if (QAccessibleInterface *accessible = accessibleForId(accid)) { - - // First sets the value as a text. - accessible->setText(QAccessible::Value, tmpValue); - - // Then, if the control supports the value interface (range value) - // and the supplied text can be converted to a number, and that number - // lies within the min/max limits, sets it as the control's current (numeric) value. - if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { - bool ok = false; - double numval = tmpValue.toDouble(&ok); - if (ok) { - double minimum = valueInterface->minimumValue().toDouble(); - double maximum = valueInterface->maximumValue().toDouble(); - if ((numval >= minimum) && (numval <= maximum)) { - valueInterface->setCurrentValue(QVariant(numval)); - } - } - } - } - QWinRTUiaMetadataCache::instance()->load(accid); - return S_OK; - }, 0); - - return S_OK; -} - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.h b/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.h deleted file mode 100644 index d9cd5d200d..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINRTUIAVALUEPROVIDER_H -#define QWINRTUIAVALUEPROVIDER_H - -#include <QtGui/qtguiglobal.h> -#if QT_CONFIG(accessibility) - -#include "qwinrtuiabaseprovider.h" - -#include <wrl.h> -#include <windows.ui.xaml.h> - -QT_BEGIN_NAMESPACE - -// Implements the Value control pattern provider. -// Supported for all controls that can return text(QAccessible::Value). -class QWinRTUiaValueProvider : - public QWinRTUiaBaseProvider, - public Microsoft::WRL::RuntimeClass<ABI::Windows::UI::Xaml::Automation::Provider::IValueProvider> -{ - Q_OBJECT - Q_DISABLE_COPY(QWinRTUiaValueProvider) - InspectableClass(L"QWinRTUiaValueProvider", BaseTrust); - -public: - explicit QWinRTUiaValueProvider(QAccessible::Id id); - virtual ~QWinRTUiaValueProvider(); - - // IValueProvider - HRESULT STDMETHODCALLTYPE get_IsReadOnly(boolean *value) override; - HRESULT STDMETHODCALLTYPE get_Value(HSTRING *value) override; - HRESULT STDMETHODCALLTYPE SetValue(HSTRING value) override; -}; - -QT_END_NAMESPACE - -#endif // QT_CONFIG(accessibility) - -#endif // QWINRTUIAVALUEPROVIDER_H diff --git a/src/plugins/platforms/winrt/uiautomation/uiautomation.pri b/src/plugins/platforms/winrt/uiautomation/uiautomation.pri deleted file mode 100644 index ca0dfae53f..0000000000 --- a/src/plugins/platforms/winrt/uiautomation/uiautomation.pri +++ /dev/null @@ -1,45 +0,0 @@ - -SOURCES += \ - $$PWD/qwinrtuiaaccessibility.cpp \ - $$PWD/qwinrtuiabaseprovider.cpp \ - $$PWD/qwinrtuiacontrolmetadata.cpp \ - $$PWD/qwinrtuiagriditemprovider.cpp \ - $$PWD/qwinrtuiagridprovider.cpp \ - $$PWD/qwinrtuiainvokeprovider.cpp \ - $$PWD/qwinrtuiamainprovider.cpp \ - $$PWD/qwinrtuiametadatacache.cpp \ - $$PWD/qwinrtuiapeervector.cpp \ - $$PWD/qwinrtuiaprovidercache.cpp \ - $$PWD/qwinrtuiarangevalueprovider.cpp \ - $$PWD/qwinrtuiaselectionitemprovider.cpp \ - $$PWD/qwinrtuiaselectionprovider.cpp \ - $$PWD/qwinrtuiatableitemprovider.cpp \ - $$PWD/qwinrtuiatableprovider.cpp \ - $$PWD/qwinrtuiatextprovider.cpp \ - $$PWD/qwinrtuiatextrangeprovider.cpp \ - $$PWD/qwinrtuiatoggleprovider.cpp \ - $$PWD/qwinrtuiautils.cpp \ - $$PWD/qwinrtuiavalueprovider.cpp - -HEADERS += \ - $$PWD/qwinrtuiaaccessibility.h \ - $$PWD/qwinrtuiabaseprovider.h \ - $$PWD/qwinrtuiacontrolmetadata.h \ - $$PWD/qwinrtuiaemptypropertyvalue.h \ - $$PWD/qwinrtuiagriditemprovider.h \ - $$PWD/qwinrtuiagridprovider.h \ - $$PWD/qwinrtuiainvokeprovider.h \ - $$PWD/qwinrtuiamainprovider.h \ - $$PWD/qwinrtuiametadatacache.h \ - $$PWD/qwinrtuiapeervector.h \ - $$PWD/qwinrtuiaprovidercache.h \ - $$PWD/qwinrtuiarangevalueprovider.h \ - $$PWD/qwinrtuiaselectionitemprovider.h \ - $$PWD/qwinrtuiaselectionprovider.h \ - $$PWD/qwinrtuiatableitemprovider.h \ - $$PWD/qwinrtuiatableprovider.h \ - $$PWD/qwinrtuiatextprovider.h \ - $$PWD/qwinrtuiatextrangeprovider.h \ - $$PWD/qwinrtuiatoggleprovider.h \ - $$PWD/qwinrtuiautils.h \ - $$PWD/qwinrtuiavalueprovider.h |