Aurum  0.1.1
 All Classes Functions Variables Pages
AccessibleWatcher.h
1 #ifndef ACCESSIBLE_H
2 #define ACCESSIBLE_H
3 
4 #include <atspi/atspi.h>
5 #include "AccessibleNode.h"
6 #include "AccessibleUtils.h"
7 
8 #include <list>
9 #include <map>
10 #include <memory>
11 #include <vector>
12 #include <set>
13 
14 
15 #include <gio/gio.h>
16 #include <mutex>
17 #include <shared_mutex>
18 #include "config.h"
19 
20 
21 
26 enum class WindowActivateInfoType {
27  DEFAULT_LABEL_ENALBED = 0x00,
28  DEFAULT_LABEL_ENALBED_WITHOUT_WINDOW = 0x01,
29  DEFAULT_LABEL_DISABLED = 0x02,
30  KEYBOARD = 0x04,
31 };
32 
37 class IAtspiEvents {
38 public:
43  virtual ~IAtspiEvents() {}
44 
49  virtual void onWindowActivated(AtspiAccessible * node,
50  WindowActivateInfoType type) = 0;
55  virtual void onWindowDeactivated(AtspiAccessible *node) = 0;
56 
61  virtual void onWindowCreated(AtspiAccessible *node) = 0;
62 
67  virtual void onWindowDestroyed(AtspiAccessible *node) = 0;
68 
73  virtual void onVisibilityChanged(AtspiAccessible *node,
74  bool visible) = 0;
75 
80  virtual void onObjectDefunct(AtspiAccessible *node) = 0;
81 };
82 
88 private:
89 
95 
96 public:
101  static const AccessibleWatcher *getInstance();
106  virtual ~AccessibleWatcher();
107 
108 public:
113  std::unique_ptr<AccessibleNode> getRootNode() const;
118  std::vector<std::unique_ptr<AccessibleNode>> getTopNode() const;
124  void onWindowActivated(AtspiAccessible * node,
125  WindowActivateInfoType type) override;
130  void onWindowDeactivated(AtspiAccessible *node) override;
136  void onWindowCreated(AtspiAccessible *node) override;
141  void onWindowDestroyed(AtspiAccessible *node) override;
147  void onVisibilityChanged(AtspiAccessible *node,
148  bool visible) override;
153  void onObjectDefunct(AtspiAccessible *node) override;
159  void printDbgInformation() const;
160 
161 private:
162  void clearWindowList() const;
167  static void onAtspiWindowEvent(AtspiEvent *event, void *user_data);
173  bool removeFromActivatedList(AtspiAccessible *node);
178  bool addToActivatedList(AtspiAccessible *node);
183  bool removeFromWindowSet(AtspiAccessible *node);
188  bool addToWindowSet(AtspiAccessible *node);
189 
190 
191 private:
195  static AtspiEventListener * listener;
196 
200  mutable std::list<AtspiAccessible *> mActivatedWindowList;
201 
205  mutable std::list<AtspiAccessible *> mActivatedApplicationList;
206 
210  mutable std::set<AtspiAccessible *> mWindowSet;;
211 
215  GDBusProxy * mDbusProxy;
216 
220  std::map<AtspiAccessible *, AccessibleNode *> mAccessibleNode;
221 
225  mutable std::mutex mLock;
226 };
227 
228 #endif