3 #include "AccessibleNode.h"
4 #include "AccessibleWatcher.h"
6 #include <atspi/atspi.h>
9 #include <shared_mutex>
17 * @brief WindowActivateInfoType enum class
20 enum class WindowActivateInfoType {
21 DEFAULT_LABEL_ENALBED = 0x00,
22 DEFAULT_LABEL_ENALBED_WITHOUT_WINDOW = 0x01,
23 DEFAULT_LABEL_DISABLED = 0x02,
28 * @brief IAtspiEvents Interface
37 virtual ~IAtspiEvents() {}
43 virtual void onWindowActivated(AtspiAccessible *node, WindowActivateInfoType type) = 0;
49 virtual void onWindowDeactivated(AtspiAccessible *node) = 0;
55 virtual void onWindowCreated(AtspiAccessible *node) = 0;
61 virtual void onWindowDestroyed(AtspiAccessible *node) = 0;
67 virtual void onVisibilityChanged(AtspiAccessible *node, bool visible) = 0;
73 virtual void onObjectDefunct(AtspiAccessible *node) = 0;
77 class AtspiAccessibleWatcher : public AccessibleWatcher, public IAtspiEvents {
79 AtspiAccessibleWatcher();
80 virtual ~AtspiAccessibleWatcher();
87 virtual int getApplicationCount(void) const override;
93 virtual std::shared_ptr<AccessibleApplication> getApplicationAt(int index) const override;
99 virtual std::vector<std::shared_ptr<AccessibleApplication>> getApplications(void) const override;
105 virtual bool executeAndWaitForEvents(const Runnable *cmd, const A11yEvent type, const int timeout) override;
112 static void onAtspiEvents(AtspiEvent *event, void *user_data);
118 void onWindowActivated(AtspiAccessible *node, WindowActivateInfoType type) override;
124 void onWindowDeactivated(AtspiAccessible *node) override;
130 void onWindowCreated(AtspiAccessible *node) override;
136 void onWindowDestroyed(AtspiAccessible *node) override;
142 void onVisibilityChanged(AtspiAccessible *node, bool visible) override;
148 void onObjectDefunct(AtspiAccessible *node) override;
154 static void onEventListener(AtspiEvent *event, void *user_data);
160 bool removeFromActivatedList(AtspiAccessible *node);
166 bool addToActivatedList(AtspiAccessible *node);
172 bool removeFromWindowSet(AtspiAccessible *node);
178 bool addToWindowSet(AtspiAccessible *node);
186 void addEventListener(AtspiEventListener *listener, A11yEvent type);
192 void removeEventListener(AtspiEventListener *listener, A11yEvent type);
198 static guint timeoutId;
204 GDBusProxy * mDbusProxy;
209 std::list<AtspiAccessible *> mActivatedWindowList;
214 std::list<AtspiAccessible *> mActivatedApplicationList;
219 std::set<AtspiAccessible *> mWindowSet;
224 std::map<AtspiAccessible *, AtspiAccessible *> mWindowAppMap;
229 static GThread * mEventThread;
234 static std::vector<std::shared_ptr<A11yEventInfo>> mEventQueue;