File indexing completed on 2023-12-03 11:41:04
0001 /* 0002 SPDX-FileCopyrightText: 2012 Frederik Gladhorn <gladhorn@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #ifndef QACCESSIBILITYCLIENT_REGISTRY_P_H 0008 #define QACCESSIBILITYCLIENT_REGISTRY_P_H 0009 0010 #include <atspi/atspi-constants.h> 0011 0012 #include <QObject> 0013 #include <QMap> 0014 #include <QDBusContext> 0015 #include <QDBusArgument> 0016 #include <QSignalMapper> 0017 #include <QSharedPointer> 0018 0019 #include "atspi/dbusconnection.h" 0020 #include "qaccessibilityclient/registry.h" 0021 #include "qaccessibilityclient/accessibleobject.h" 0022 #include "qaccessibilityclient/accessibleobject_p.h" 0023 #include "atspi/qt-atspi.h" 0024 #include "cachestrategy_p.h" 0025 0026 class QDBusPendingCallWatcher; 0027 0028 namespace QAccessibleClient { 0029 0030 class DBusConnection; 0031 class AtSpiDBus; 0032 0033 class RegistryPrivate :public QObject, public QDBusContext 0034 { 0035 Q_OBJECT 0036 public: 0037 RegistryPrivate(Registry *qq); 0038 0039 void init(); 0040 0041 bool isEnabled() const; 0042 void setEnabled(bool enable); 0043 bool isScreenReaderEnabled() const; 0044 void setScreenReaderEnabled(bool enable); 0045 0046 QUrl url(const AccessibleObject &object) const; 0047 AccessibleObject fromUrl(const QUrl &url) const; 0048 0049 void subscribeEventListeners(const Registry::EventListeners & listeners); 0050 Registry::EventListeners eventListeners() const; 0051 0052 QString accessibleId(const AccessibleObject &object) const; 0053 QString name(const AccessibleObject &object) const; 0054 QString description(const AccessibleObject &object) const; 0055 AccessibleObject::Role role(const AccessibleObject &object) const; 0056 QString roleName(const AccessibleObject &object) const; 0057 QString localizedRoleName(const AccessibleObject &object) const; 0058 quint64 state(const AccessibleObject &object) const; 0059 int layer(const AccessibleObject &object) const; 0060 int mdiZOrder(const AccessibleObject &object) const; 0061 double alpha(const AccessibleObject &object) const; 0062 QRect boundingRect(const AccessibleObject &object) const; 0063 QRect characterRect(const AccessibleObject &object, int offset) const; 0064 AccessibleObject::Interfaces supportedInterfaces(const AccessibleObject &object) const; 0065 0066 int caretOffset(const AccessibleObject &object) const; 0067 int characterCount(const AccessibleObject &object) const; 0068 QList< QPair<int,int> > textSelections(const AccessibleObject &object) const; 0069 void setTextSelections(const AccessibleObject &object, const QList< QPair<int,int> > &selections); 0070 QString text(const AccessibleObject &object, int startOffset = 0, int endOffset = -1) const; 0071 QString textWithBoundary(const AccessibleObject &object, int offset, AccessibleObject::TextBoundary boundary, int *startOffset, int *endOffset) const; 0072 0073 bool setText(const AccessibleObject &object, const QString &text); 0074 bool insertText(const AccessibleObject &object, const QString &text, int position, int length = -1); 0075 bool copyText(const AccessibleObject &object, int startPos, int endPos); 0076 bool cutText(const AccessibleObject &object, int startPos, int endPos); 0077 bool deleteText(const AccessibleObject &object, int startPos, int endPos); 0078 bool pasteText(const AccessibleObject &object, int position); 0079 0080 AccessibleObject application(const AccessibleObject &object) const; 0081 QString appToolkitName(const AccessibleObject &object) const; 0082 QString appVersion(const AccessibleObject &object) const; 0083 int appId(const AccessibleObject &object) const; 0084 QString appLocale(const AccessibleObject &object, uint lctype) const; 0085 QString appBusAddress(const AccessibleObject &object) const; 0086 0087 double minimumValue(const AccessibleObject &object) const; 0088 double maximumValue(const AccessibleObject &object) const; 0089 double minimumValueIncrement(const AccessibleObject &object) const; 0090 double currentValue(const AccessibleObject &object) const; 0091 bool setCurrentValue(const AccessibleObject &object, double value); 0092 0093 QList<AccessibleObject> selection(const AccessibleObject &object) const; 0094 0095 QString imageDescription(const AccessibleObject &object) const; 0096 QString imageLocale(const AccessibleObject &object) const; 0097 QRect imageRect(const AccessibleObject &object) const; 0098 0099 QVector< QSharedPointer<QAction> > actions(const AccessibleObject &object); 0100 0101 QList<AccessibleObject> topLevelAccessibles() const; 0102 AccessibleObject parentAccessible(const AccessibleObject &object) const; 0103 0104 int childCount(const AccessibleObject &object) const; 0105 int indexInParent(const AccessibleObject &object) const; 0106 AccessibleObject child(const AccessibleObject &object, int index) const; 0107 QList<AccessibleObject> children(const AccessibleObject &object) const; 0108 0109 static QString ACCESSIBLE_OBJECT_SCHEME_STRING; 0110 0111 private Q_SLOTS: 0112 AccessibleObject accessibleFromPath(const QString &service, const QString &path) const; 0113 AccessibleObject accessibleFromReference(const QSpiObjectReference &reference) const; 0114 AccessibleObject accessibleFromContext() const; 0115 0116 void connectionFetched(); 0117 void slotSubscribeEventListenerFinished(QDBusPendingCallWatcher *call); 0118 void a11yConnectionChanged(const QString &interface,const QVariantMap &changedProperties, const QStringList &invalidatedProperties); 0119 0120 void slotPropertyChange(const QString &property, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0121 void slotWindowCreate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0122 void slotWindowDestroy(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0123 void slotWindowClose(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0124 void slotWindowReparent(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0125 void slotWindowMinimize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0126 void slotWindowMaximize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0127 void slotWindowRestore(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0128 void slotWindowActivate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0129 void slotWindowDeactivate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0130 void slotWindowDesktopCreate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0131 void slotWindowDesktopDestroy(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0132 void slotWindowRaise(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0133 void slotWindowLower(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0134 void slotWindowMove(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0135 void slotWindowResize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0136 void slotWindowShade(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0137 void slotWindowUnshade(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0138 0139 void slotStateChanged(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0140 //void slotPropertyChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0141 //void slotBoundsChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0142 //void slotLinkSelected(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0143 0144 void slotChildrenChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0145 void slotVisibleDataChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0146 void slotSelectionChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0147 void slotModelChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0148 0149 void slotTextCaretMoved(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0150 void slotTextSelectionChanged(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 0151 0152 //void slotTextBoundsChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0153 void slotTextChanged(const QString &state, int start, int end, const QDBusVariant &text, const QAccessibleClient::QSpiObjectReference &reference); 0154 //void slotTextAttributesChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0155 //void slotAttributesChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 0156 0157 void actionTriggered(const QString &action); 0158 0159 private: 0160 QVariant getProperty ( const QString &service, const QString &path, const QString &interface, const QString &name ) const; 0161 static AccessibleObject::Role atspiRoleToRole(AtspiRole role); 0162 0163 DBusConnection conn; 0164 QSignalMapper m_actionMapper; 0165 Registry *q; 0166 Registry::EventListeners m_subscriptions; 0167 Registry::EventListeners m_pendingSubscriptions; 0168 QHash<QString, AccessibleObject::Interface> interfaceHash; 0169 QSignalMapper m_eventMapper; 0170 ObjectCache *m_cache; 0171 // typedef QMap<QString, QSharedPointer<AccessibleObjectPrivate> >::Iterator AccessibleObjectsHashIterator; 0172 // typedef QMap<QString, QSharedPointer<AccessibleObjectPrivate> >::ConstIterator AccessibleObjectsHashConstIterator; 0173 // QMap<QString, QSharedPointer<AccessibleObjectPrivate> > accessibleObjectsHash; 0174 bool removeAccessibleObject(const QAccessibleClient::AccessibleObject &accessible); 0175 bool removeAccessibleObject(const QAccessibleClient::QSpiObjectReference &reference); 0176 0177 friend class Registry; 0178 friend class AccessibleObject; 0179 friend class AccessibleObjectPrivate; 0180 }; 0181 0182 } 0183 0184 #endif