diff options
author | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2012-05-10 23:52:05 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-14 01:40:06 +0200 |
commit | 8e1ff45e74f529c7f49688242ea0fd25ce2913f3 (patch) | |
tree | ae13e233a4b9da58d2f4cf5ae0b733e86fe0d5a9 /src/platformsupport/linuxaccessibility/atspiadaptor_p.h | |
parent | 85b624a969c2674f726b6e80af1418bdd9f91969 (diff) |
Add Linux Accessibility Bridge
This is a plugin that bridges the QAccessible world
to AT-SPI 2 on Linux.
Change-Id: I7af22621ee6a3cefc723b137b7f227a611cf6641
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
Diffstat (limited to 'src/platformsupport/linuxaccessibility/atspiadaptor_p.h')
-rw-r--r-- | src/platformsupport/linuxaccessibility/atspiadaptor_p.h | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h new file mode 100644 index 0000000000..a649784909 --- /dev/null +++ b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h @@ -0,0 +1,220 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef ATSPIADAPTOR_H +#define ATSPIADAPTOR_H + +#include <atspi/atspi-constants.h> + +#include <QtCore/qsharedpointer.h> +#include <QtDBus/qdbusvirtualobject.h> +#include <QtGui/qaccessible.h> +#include <QtGui/qaccessible2.h> + +#include "dbusconnection_p.h" +#include "struct_marshallers_p.h" + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +class QAccessibleInterface; +class QSpiAccessibleInterface; +class QSpiApplicationAdaptor; + +typedef QSharedPointer<QAccessibleInterface> QAIPointer; + +class AtSpiAdaptor :public QDBusVirtualObject +{ + Q_OBJECT + +public: + explicit AtSpiAdaptor(DBusConnection *connection, QObject *parent = 0); + ~AtSpiAdaptor(); + + void registerApplication(); + QString introspect(const QString &path) const; + bool handleMessage(const QDBusMessage &message, const QDBusConnection &connection); + void notify(QAccessibleEvent *event); + + void setInitialized(bool init); + +public Q_SLOTS: + void eventListenerRegistered(const QString &bus, const QString &path); + void eventListenerDeregistered(const QString &bus, const QString &path); + void windowActivated(QObject* window, bool active); + +private: + void updateEventListeners(); + void setBitFlag(const QString &flag); + + // sending messages + QVariantList packDBusSignalArguments(const QString &type, int data1, int data2, const QVariant &variantData) const; + bool sendDBusSignal(const QString &path, const QString &interface, const QString &name, const QVariantList &arguments) const; + QVariant variantForPath(const QString &path) const; + + void sendFocusChanged(const QAIPointer &interface) const; + void notifyAboutCreation(const QAIPointer &interface) const; + void notifyAboutDestruction(const QAIPointer &interface) const; + + // handlers for the different accessible interfaces + bool applicationInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool accessibleInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool componentInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool actionInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool textInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool editableTextInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool valueInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + bool tableInterface(const QAIPointer &interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); + + void sendReply(const QDBusConnection &connection, const QDBusMessage &message, const QVariant &argument) const; + + QAIPointer interfaceFromPath(const QString& dbusPath) const; + QString pathForInterface(const QAIPointer &interface, bool inDestructor = false) const; + QString pathForObject(QObject *object) const; + + // accessible helper functions + AtspiRole getRole(const QAIPointer &interface) const; + QSpiRelationArray relationSet(const QAIPointer &interface, const QDBusConnection &connection) const; + QStringList accessibleInterfaces(const QAIPointer &interface) const; + + // component helper functions + static QRect getExtents(const QAIPointer &interface, uint coordType); + static QRect translateRectToWindowCoordinates(const QAIPointer &interface, const QRect &rect); + + // action helper functions + QSpiActionArray getActions(QAccessibleActionInterface* interface) const; + + // text helper functions + QVariantList getAttributes(const QAIPointer &, int offset, bool includeDefaults) const; + QVariantList getAttributeValue(const QAIPointer &, int offset, const QString &attributeName) const; + QRect getCharacterExtents(const QAIPointer &, int offset, uint coordType) const; + QRect getRangeExtents(const QAIPointer &, int startOffset, int endOffset, uint coordType) const; + QAccessible2::BoundaryType qAccessibleBoundaryType(int atspiTextBoundaryType) const; + static bool inheritsQAction(QObject *object); + + // private vars + QSpiObjectReference accessibilityRegistry; + DBusConnection *m_dbus; + QSpiApplicationAdaptor *m_applicationAdaptor; + + /// Assigned from the accessibility registry. + int m_applicationId; + bool initialized; + + mutable QHash<quintptr, QPointer<QObject> > m_handledObjects; + + // Bit fields - which updates to send + + // AT-SPI has some events that we do not care about: + // document + // document-load-complete + // document-load-stopped + // document-reload + uint sendFocus : 1; + // mouse abs/rel/button + + // all of object + uint sendObject : 1; + uint sendObject_active_descendant_changed : 1; + uint sendObject_attributes_changed : 1; + uint sendObject_bounds_changed : 1; + uint sendObject_children_changed : 1; +// uint sendObject_children_changed_add : 1; +// uint sendObject_children_changed_remove : 1; + uint sendObject_column_deleted : 1; + uint sendObject_column_inserted : 1; + uint sendObject_column_reordered : 1; + uint sendObject_link_selected : 1; + uint sendObject_model_changed : 1; + uint sendObject_property_change : 1; + uint sendObject_property_change_accessible_description : 1; + uint sendObject_property_change_accessible_name : 1; + uint sendObject_property_change_accessible_parent : 1; + uint sendObject_property_change_accessible_role : 1; + uint sendObject_property_change_accessible_table_caption : 1; + uint sendObject_property_change_accessible_table_column_description : 1; + uint sendObject_property_change_accessible_table_column_header : 1; + uint sendObject_property_change_accessible_table_row_description : 1; + uint sendObject_property_change_accessible_table_row_header : 1; + uint sendObject_property_change_accessible_table_summary : 1; + uint sendObject_property_change_accessible_value : 1; + uint sendObject_row_deleted : 1; + uint sendObject_row_inserted : 1; + uint sendObject_row_reordered : 1; + uint sendObject_selection_changed : 1; + uint sendObject_state_changed : 1; + uint sendObject_text_attributes_changed : 1; + uint sendObject_text_bounds_changed : 1; + uint sendObject_text_caret_moved : 1; + uint sendObject_text_changed : 1; +// uint sendObject_text_changed_delete : 1; +// uint sendObject_text_changed_insert : 1; + uint sendObject_text_selection_changed : 1; + uint sendObject_value_changed : 1; + uint sendObject_visible_data_changed : 1; + + // we don't implement terminal + // terminal-application_changed/charwidth_changed/columncount_changed/line_changed/linecount_changed + uint sendWindow : 1; + uint sendWindow_activate : 1; + uint sendWindow_close: 1; + uint sendWindow_create : 1; + uint sendWindow_deactivate : 1; +// uint sendWindow_desktop_create : 1; +// uint sendWindow_desktop_destroy : 1; + uint sendWindow_lower : 1; + uint sendWindow_maximize : 1; + uint sendWindow_minimize : 1; + uint sendWindow_move : 1; + uint sendWindow_raise : 1; + uint sendWindow_reparent : 1; + uint sendWindow_resize : 1; + uint sendWindow_restore : 1; + uint sendWindow_restyle : 1; + uint sendWindow_shade : 1; + uint sendWindow_unshade : 1; +}; + +QT_END_NAMESPACE +QT_END_HEADER + +#endif |