libaurum: apply smart pointer wider and extract impl out
[platform/core/uifw/aurum.git] / libaurum / inc / Impl / Accessibility / AtspiAccessibleWatcher.h
1 #pragma once
2 #include "AccessibleNode.h"
3 #include "AccessibleWatcher.h"
4
5 #include <atspi/atspi.h>
6 #include <gio/gio.h>
7
8 #include <mutex>
9 #include <shared_mutex>
10 #include <memory>
11 #include <list>
12 #include <vector>
13 #include <set>
14 #include <map>
15
16 /**
17  * @brief WindowActivateInfoType enum class
18  * @since_tizen 5.5
19  */
20 enum class WindowActivateInfoType {
21     DEFAULT_LABEL_ENALBED = 0x00,
22     DEFAULT_LABEL_ENALBED_WITHOUT_WINDOW = 0x01,
23     DEFAULT_LABEL_DISABLED = 0x02,
24     KEYBOARD = 0x04,
25 };
26
27 /**
28  * @brief IAtspiEvents Interface
29  * @since_tizen 5.5
30  */
31 class IAtspiEvents {
32 public:
33     /**
34      * @brief TBD
35      * @since_tizen 5.5
36      */
37     virtual ~IAtspiEvents() {}
38
39     /**
40      * @brief TBD
41      * @since_tizen 5.5
42      */
43     virtual void onWindowActivated(AtspiAccessible* node, WindowActivateInfoType type) = 0;
44
45     /**
46      * @brief TBD
47      * @since_tizen 5.5
48      */
49     virtual void onWindowDeactivated(AtspiAccessible* node) = 0;
50
51     /**
52      * @brief TBD
53      * @since_tizen 5.5
54      */
55     virtual void onWindowCreated(AtspiAccessible* node) = 0;
56
57     /**
58      * @brief TBD
59      * @since_tizen 5.5
60      */
61     virtual void onWindowDestroyed(AtspiAccessible* node) = 0;
62
63     /**
64      * @brief TBD
65      * @since_tizen 5.5
66      */
67     virtual void onVisibilityChanged(AtspiAccessible* node, bool visible) = 0;
68
69     /**
70      * @brief TBD
71      * @since_tizen 5.5
72      */
73     virtual void onObjectDefunct(AtspiAccessible* node) = 0;
74 };
75
76
77 class AtspiAccessibleWatcher : public AccessibleWatcher, public IAtspiEvents {
78 public:
79     AtspiAccessibleWatcher();
80     virtual ~AtspiAccessibleWatcher();
81
82 public:
83     /**
84      * @brief TBD
85      * @since_tizen 5.5
86      */
87     virtual int getApplicationCount(void) const override;
88
89     /**
90      * @brief TBD
91      * @since_tizen 5.5
92      */
93     virtual std::shared_ptr<AccessibleApplication> getApplicationAt(int index) const override;
94
95     /**
96      * @brief TBD
97      * @since_tizen 5.5
98      */
99     virtual std::vector<std::shared_ptr<AccessibleApplication>> getApplications(void) const override;
100
101     /**
102      * @brief TBD
103      * @since_tizen 5.5
104      */
105     //std::shared_ptr<AccessibleNode> getRootNode() const override;
106
107     /**
108      * @brief TBD
109      * @since_tizen 5.5
110      */
111     //std::vector<std::shared_ptr<AccessibleNode>> getTopNode() const override;
112
113
114 public:
115     /**
116      * @brief TBD
117      * @since_tizen 5.5
118      */
119     static void onAtspiWindowEvent(AtspiEvent *event, void *user_data);
120
121     /**
122      * @brief TBD
123      * @since_tizen 5.5
124      */
125     void onWindowActivated(AtspiAccessible* node, WindowActivateInfoType type) override;
126
127     /**
128      * @brief TBD
129      * @since_tizen 5.5
130      */
131     void onWindowDeactivated(AtspiAccessible* node) override;
132
133     /**
134      * @brief TBD
135      * @since_tizen 5.5
136      */
137     void onWindowCreated(AtspiAccessible* node) override;
138
139     /**
140      * @brief TBD
141      * @since_tizen 5.5
142      */
143     void onWindowDestroyed(AtspiAccessible* node) override;
144
145     /**
146      * @brief TBD
147      * @since_tizen 5.5
148      */
149     void onVisibilityChanged(AtspiAccessible* node, bool visible) override;
150
151     /**
152      * @brief TBD
153      * @since_tizen 5.5
154      */
155     void onObjectDefunct(AtspiAccessible* node) override;
156
157 private:
158     /**
159      * @brief TBD
160      * @since_tizen 5.5
161      */
162     bool removeFromActivatedList(AtspiAccessible *node);
163
164     /**
165      * @brief TBD
166      * @since_tizen 5.5
167      */
168     bool addToActivatedList(AtspiAccessible *node);
169
170     /**
171      * @brief TBD
172      * @since_tizen 5.5
173      */
174     bool removeFromWindowSet(AtspiAccessible *node);
175
176     /**
177      * @brief TBD
178      * @since_tizen 5.5
179      */
180     bool addToWindowSet(AtspiAccessible *node);
181
182     void print_debug();
183
184 private:
185     /**
186      * @brief TBD
187      */
188     static AtspiEventListener *                   listener;
189
190     /**
191      * @brief TBD
192      */
193     GDBusProxy *                                  mDbusProxy;
194
195     /**
196      * @brief TBD
197      */
198     std::mutex                            mLock;
199
200     /**
201      * @brief TBD
202      */
203     std::list<AtspiAccessible *>          mActivatedWindowList;
204
205     /**
206      * @brief TBD
207      */
208     std::list<AtspiAccessible *>          mActivatedApplicationList;
209
210     /**
211      * @brief TBD
212      */
213     std::set<AtspiAccessible *>            mWindowSet;
214
215     std::map<AtspiAccessible *, AtspiAccessible *> mWindowAppMap;
216
217 };