File indexing completed on 2024-10-13 04:16:05
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 DBUSCONNECTION_H 0008 #define DBUSCONNECTION_H 0009 0010 #include <QObject> 0011 #include <QDBusConnection> 0012 #include <QDBusPendingCallWatcher> 0013 0014 namespace QAccessibleClient { 0015 0016 0017 /** 0018 Connection to the a11y dbus bus. 0019 \internal 0020 */ 0021 class DBusConnection : public QObject 0022 { 0023 Q_OBJECT 0024 public: 0025 /** 0026 \brief Constructor. 0027 0028 When called, means the instance is created, we try instantly 0029 to fetch the \a connection . When done the \a connectionFetched 0030 will be emitted. If \a connection is called before it will 0031 block till the connection was fetched and is ready for use. 0032 */ 0033 DBusConnection(); 0034 0035 /** 0036 \brief Returns true if the \a connection is not ready yet. 0037 0038 The initial fetch of the comnnection happens over dbus and 0039 as such can block for a longer time means may need longer. 0040 To make it possible that users of this class do not block 0041 while that happens it is possible to use this method to 0042 determinate if fetching the connection is currently work 0043 in progress and if so connect with the \a connectionFetched 0044 signal to be called back when the connection is ready. 0045 */ 0046 bool isFetchingConnection() const; 0047 0048 /** 0049 \brief Returns the accessibility dbus connection. 0050 0051 This may either be the session bus or a referenced 0052 accessibility bus. If the connection was not fetched 0053 yet, means \a isFetchingConnection returns true, then 0054 calling this method will block till the connection was 0055 fetched. 0056 */ 0057 QDBusConnection connection() const; 0058 0059 enum Status { 0060 Disconnected, 0061 ConnectionError, 0062 Connected 0063 }; 0064 0065 /** 0066 \brief Returns the state the connection is in. 0067 0068 If Disconnected then we got not asked to connect yet or 0069 connection is in progress but not finished yet (see 0070 signal \a connectionFetched which will be emitted if the 0071 connection is not Disconnected any longer. 0072 If connection failed then the state is set to ConnectionError 0073 otherwise, in the case everything went fine and we are 0074 proper connected with tthe atspi daemon now Connected 0075 is returned. 0076 */ 0077 Status status() const; 0078 0079 Q_SIGNALS: 0080 0081 /** 0082 \brief Emitted when the \a connection was fetched. 0083 0084 This will happen exactly one time during the lifetime 0085 of a DBusConnection instance at the very beginning when 0086 the instance is created. 0087 */ 0088 void connectionFetched(); 0089 0090 private Q_SLOTS: 0091 void initFinished(); 0092 0093 private: 0094 void init(); 0095 0096 QDBusConnection m_connection; 0097 mutable Status m_status = Disconnected; 0098 QDBusPendingCallWatcher *m_initWatcher = nullptr; 0099 }; 0100 } 0101 0102 #endif // DBUSCONNECTION_H