build: get doxygen generating selective
[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 /**
23  * @brief WindowActivateInfoType enum class
24  * @since_tizen 5.5
25  */
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
33 /**
34  * @brief IAtspiEvents Interface
35  * @since_tizen 5.5
36  */
37 class IAtspiEvents {
38 public:
39     /**
40      * @brief TBD
41      * @since_tizen 5.5
42      */
43     virtual ~IAtspiEvents() {}
44
45     /**
46      * @brief TBD
47      * @since_tizen 5.5
48      */
49     virtual void onWindowActivated(AtspiAccessible *      node,
50                                    WindowActivateInfoType type) = 0;
51     /**
52      * @brief TBD
53      * @since_tizen 5.5
54      */
55     virtual void onWindowDeactivated(AtspiAccessible *node) = 0;
56
57     /**
58      * @brief TBD
59      * @since_tizen 5.5
60      */
61     virtual void onWindowCreated(AtspiAccessible *node) = 0;
62
63     /**
64      * @brief TBD
65      * @since_tizen 5.5
66      */
67     virtual void onWindowDestroyed(AtspiAccessible *node) = 0;
68
69     /**
70      * @brief TBD
71      * @since_tizen 5.5
72      */
73     virtual void onVisibilityChanged(AtspiAccessible *node,
74                                      bool             visible) = 0;
75
76     /**
77      * @brief TBD
78      * @since_tizen 5.5
79      */
80     virtual void onObjectDefunct(AtspiAccessible *node) = 0;
81 };
82
83 /**
84  * @brief AccessibleWatcher class
85  * @since_tizen 5.5
86  */
87 class AccessibleWatcher : public IAtspiEvents {
88 private:
89
90     /**
91      * @brief TBD
92      * @since_tizen 5.5
93      */
94     AccessibleWatcher();
95
96 public:
97     /**
98      * @brief TBD
99      * @since_tizen 5.5
100      */
101     static const AccessibleWatcher *getInstance();
102         /**
103      * @brief TBD
104      * @since_tizen 5.5
105      */
106     virtual ~AccessibleWatcher();
107
108 public:
109     /**
110      * @brief TBD
111      * @since_tizen 5.5
112      */
113     std::unique_ptr<AccessibleNode> getRootNode() const;
114     /**
115      * @brief TBD
116      * @since_tizen 5.5
117      */
118     std::vector<std::unique_ptr<AccessibleNode>> getTopNode() const;
119     /**
120      * @brief TBD
121      * @since_tizen 5.5
122      */
123
124     void onWindowActivated(AtspiAccessible *      node,
125                                    WindowActivateInfoType type) override;
126     /**
127      * @brief TBD
128      * @since_tizen 5.5
129      */
130     void onWindowDeactivated(AtspiAccessible *node) override;
131     /**
132      * @brief TBD
133      * @since_tizen 5.5
134      */
135
136     void onWindowCreated(AtspiAccessible *node) override;
137     /**
138      * @brief TBD
139      * @since_tizen 5.5
140      */
141     void onWindowDestroyed(AtspiAccessible *node) override;
142     /**
143      * @brief TBD
144      * @since_tizen 5.5
145      */
146
147     void onVisibilityChanged(AtspiAccessible *node,
148                                      bool             visible) override;
149     /**
150      * @brief TBD
151      * @since_tizen 5.5
152      */
153     void onObjectDefunct(AtspiAccessible *node) override;
154     /**
155      * @brief TBD
156      * @since_tizen 5.5
157      */
158
159     void printDbgInformation() const;
160
161 private:
162     void        clearWindowList() const;
163     /**
164      * @brief TBD
165      * @since_tizen 5.5
166      */
167     static void onAtspiWindowEvent(AtspiEvent *event, void *user_data);
168     /**
169      * @brief TBD
170      * @since_tizen 5.5
171      */
172
173     bool removeFromActivatedList(AtspiAccessible *node);
174     /**
175      * @brief TBD
176      * @since_tizen 5.5
177      */
178     bool addToActivatedList(AtspiAccessible *node);
179     /**
180      * @brief TBD
181      * @since_tizen 5.5
182      */
183     bool removeFromWindowSet(AtspiAccessible *node);
184     /**
185      * @brief TBD
186      * @since_tizen 5.5
187      */
188     bool addToWindowSet(AtspiAccessible *node);
189
190
191 private:
192     /**
193      * @brief TBD
194      */
195     static AtspiEventListener *                   listener;
196
197     /**
198      * @brief TBD
199      */
200     mutable std::list<AtspiAccessible *>          mActivatedWindowList;
201
202     /**
203      * @brief TBD
204      */
205     mutable std::list<AtspiAccessible *>          mActivatedApplicationList;
206
207     /**
208      * @brief TBD
209      */
210     mutable std::set<AtspiAccessible *>           mWindowSet;;
211
212     /**
213      * @brief TBD
214      */
215     GDBusProxy *                                  mDbusProxy;
216
217     /**
218      * @brief TBD
219      */
220     std::map<AtspiAccessible *, AccessibleNode *> mAccessibleNode;
221
222     /**
223      * @brief TBD
224      */
225     mutable std::mutex                            mLock;
226 };
227
228 #endif