libaurum: extract methods into Utils class
[platform/core/uifw/aurum.git] / libaurum / inc / 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
22 enum class WindowActivateInfoType {
23     DEFAULT_LABEL_ENALBED = 0x00,
24     DEFAULT_LABEL_ENALBED_WITHOUT_WINDOW = 0x01,
25     DEFAULT_LABEL_DISABLED = 0x02,
26     KEYBOARD = 0x04,
27 };
28
29 class IAtspiEvents {
30 public:
31     virtual ~IAtspiEvents() {}
32     virtual void onWindowActivated(AtspiAccessible *      node,
33                                    WindowActivateInfoType type) = 0;
34     virtual void onWindowDeactivated(AtspiAccessible *node) = 0;
35
36     virtual void onWindowCreated(AtspiAccessible *node) = 0;
37     virtual void onWindowDestroyed(AtspiAccessible *node) = 0;
38
39     virtual void onVisibilityChanged(AtspiAccessible *node,
40                                      bool             visible) = 0;
41     virtual void onObjectDefunct(AtspiAccessible *node) = 0;
42 };
43
44 class AccessibleWatcher : public IAtspiEvents {
45 private:
46     AccessibleWatcher();
47
48 public:
49     static const AccessibleWatcher *getInstance();
50     virtual ~AccessibleWatcher();
51
52 public:
53     AccessibleNode *getRootNode() const;
54     AccessibleNode *getTopNode() const;
55
56     void onWindowActivated(AtspiAccessible *      node,
57                                    WindowActivateInfoType type) override;
58     void onWindowDeactivated(AtspiAccessible *node) override;
59
60     void onWindowCreated(AtspiAccessible *node) override;
61     void onWindowDestroyed(AtspiAccessible *node) override;
62
63     void onVisibilityChanged(AtspiAccessible *node,
64                                      bool             visible) override;
65     void onObjectDefunct(AtspiAccessible *node) override;
66
67     void printDbgInformation() const;
68
69 private:
70     void        clearWindowList() const;
71     static void onAtspiWindowEvent(AtspiEvent *event, void *user_data);
72
73     bool removeFromActivatedList(AtspiAccessible *node);
74     bool addToActivatedList(AtspiAccessible *node);
75     bool removeFromWindowSet(AtspiAccessible *node);
76     bool addToWindowSet(AtspiAccessible *node);
77
78 private:
79     static AtspiEventListener *                   listener;
80     mutable std::list<AtspiAccessible *>          mActivatedWindowList;
81     mutable std::list<AtspiAccessible *>          mActivatedApplicationList;
82     mutable std::set<AtspiAccessible *>           mWindowSet;;
83
84     GDBusProxy *                                  mDbusProxy;
85     std::map<AtspiAccessible *, AccessibleNode *> mAccessibleNode;
86     mutable std::mutex                            mLock;
87 };
88
89 #endif