| /**************************************************************************** |
| ** |
| ** Copyright (C) 2015 The Qt Company Ltd. |
| ** Contact: http://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtGui module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL21$ |
| ** 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 http://www.qt.io/terms-conditions. For further |
| ** information use the contact form at http://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 2.1 or version 3 as published by the Free |
| ** Software Foundation and appearing in the file LICENSE.LGPLv21 and |
| ** LICENSE.LGPLv3 included in the packaging of this file. Please review the |
| ** following information to ensure the GNU Lesser General Public License |
| ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and |
| ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
| ** |
| ** As a special exception, The Qt Company gives you certain additional |
| ** rights. These rights are described in The Qt Company LGPL Exception |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| |
| #ifndef ATSPIADAPTOR_H |
| #define ATSPIADAPTOR_H |
| |
| // |
| // W A R N I N G |
| // ------------- |
| // |
| // This file is not part of the Qt API. It exists purely as an |
| // implementation detail. This header file may change from version to |
| // version without notice, or even be removed. |
| // |
| // We mean it. |
| // |
| |
| #include <atspi/atspi-constants.h> |
| |
| #include <QtCore/qsharedpointer.h> |
| #include <QtDBus/qdbusvirtualobject.h> |
| #include <QtGui/qaccessible.h> |
| |
| #include "dbusconnection_p.h" |
| #include "struct_marshallers_p.h" |
| |
| #ifndef QT_NO_ACCESSIBILITY |
| QT_BEGIN_NAMESPACE |
| |
| class QAccessibleInterface; |
| class QSpiAccessibleInterface; |
| class QSpiApplicationAdaptor; |
| |
| |
| 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 init(); |
| void checkInitializedAndEnabled(); |
| 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(QAccessibleInterface *interface) const; |
| void notifyAboutCreation(QAccessibleInterface *interface) const; |
| void notifyAboutDestruction(QAccessibleInterface *interface) const; |
| void childrenChanged(QAccessibleInterface *interface) const; |
| |
| // handlers for the different accessible interfaces |
| bool applicationInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool accessibleInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool componentInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool actionInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool textInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool editableTextInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool valueInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| bool tableInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection); |
| |
| void sendReply(const QDBusConnection &connection, const QDBusMessage &message, const QVariant &argument) const; |
| |
| QAccessibleInterface *interfaceFromPath(const QString& dbusPath) const; |
| QString pathForInterface(QAccessibleInterface *interface) const; |
| QString pathForObject(QObject *object) const; |
| |
| void notifyStateChange(QAccessibleInterface *interface, const QString& state, int value); |
| |
| // accessible helper functions |
| AtspiRole getRole(QAccessibleInterface *interface) const; |
| QSpiRelationArray relationSet(QAccessibleInterface *interface, const QDBusConnection &connection) const; |
| QStringList accessibleInterfaces(QAccessibleInterface *interface) const; |
| |
| // component helper functions |
| static QRect getExtents(QAccessibleInterface *interface, uint coordType); |
| static QRect translateRectToWindowCoordinates(QAccessibleInterface *interface, const QRect &rect); |
| |
| // action helper functions |
| QSpiActionArray getActions(QAccessibleInterface *interface) const; |
| |
| // text helper functions |
| QVariantList getAttributes(QAccessibleInterface *, int offset, bool includeDefaults) const; |
| QVariantList getAttributeValue(QAccessibleInterface *, int offset, const QString &attributeName) const; |
| QList<QVariant> getCharacterExtents(QAccessibleInterface *, int offset, uint coordType) const; |
| QList<QVariant> getRangeExtents(QAccessibleInterface *, int startOffset, int endOffset, uint coordType) const; |
| QAccessible::TextBoundaryType 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; |
| |
| // 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 |
| #endif //QT_NO_ACCESSIBILITY |
| |
| #endif |