diff options
author | David Walter Seikel | 2013-01-13 17:29:19 +1000 |
---|---|---|
committer | David Walter Seikel | 2013-01-13 17:29:19 +1000 |
commit | 07274513e984f0b5544586c74508ccd16e7dcafa (patch) | |
tree | b32ff2a9136fbc1a4a6a0ed1e4d79cde0f5f16d9 /libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c | |
parent | Added Irrlicht 1.8, but without all the Windows binaries. (diff) | |
download | SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.zip SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.gz SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.bz2 SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.xz |
Remove EFL, since it's been released now.
Diffstat (limited to '')
-rw-r--r-- | libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c | 338 |
1 files changed, 0 insertions, 338 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c deleted file mode 100644 index 75f4e4f..0000000 --- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c +++ /dev/null | |||
@@ -1,338 +0,0 @@ | |||
1 | #include "ecore_xcb_private.h" | ||
2 | # ifdef ECORE_XCB_SYNC | ||
3 | # include <xcb/sync.h> | ||
4 | # endif | ||
5 | |||
6 | /* local variables */ | ||
7 | static Eina_Bool _sync_avail = EINA_FALSE; | ||
8 | |||
9 | /* external variables */ | ||
10 | int _ecore_xcb_event_sync = -1; | ||
11 | |||
12 | void | ||
13 | _ecore_xcb_sync_init(void) | ||
14 | { | ||
15 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
16 | |||
17 | #ifdef ECORE_XCB_SYNC | ||
18 | xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_sync_id); | ||
19 | #endif | ||
20 | } | ||
21 | |||
22 | void | ||
23 | _ecore_xcb_sync_finalize(void) | ||
24 | { | ||
25 | #ifdef ECORE_XCB_SYNC | ||
26 | const xcb_query_extension_reply_t *ext_reply; | ||
27 | #endif | ||
28 | |||
29 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
30 | |||
31 | #ifdef ECORE_XCB_SYNC | ||
32 | ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_sync_id); | ||
33 | if ((ext_reply) && (ext_reply->present)) | ||
34 | { | ||
35 | xcb_sync_initialize_cookie_t cookie; | ||
36 | xcb_sync_initialize_reply_t *reply; | ||
37 | |||
38 | cookie = | ||
39 | xcb_sync_initialize_unchecked(_ecore_xcb_conn, | ||
40 | XCB_SYNC_MAJOR_VERSION, | ||
41 | XCB_SYNC_MINOR_VERSION); | ||
42 | reply = xcb_sync_initialize_reply(_ecore_xcb_conn, cookie, NULL); | ||
43 | if (reply) | ||
44 | { | ||
45 | if (reply->major_version >= 3) _sync_avail = EINA_TRUE; | ||
46 | free(reply); | ||
47 | } | ||
48 | |||
49 | if (_sync_avail) | ||
50 | _ecore_xcb_event_sync = ext_reply->first_event; | ||
51 | } | ||
52 | #endif | ||
53 | } | ||
54 | |||
55 | void | ||
56 | _ecore_xcb_sync_magic_send(int val, | ||
57 | Ecore_X_Window win) | ||
58 | { | ||
59 | xcb_client_message_event_t ev; | ||
60 | |||
61 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
62 | |||
63 | memset(&ev, 0, sizeof(xcb_client_message_event_t)); | ||
64 | ev.response_type = XCB_CLIENT_MESSAGE; | ||
65 | ev.format = 32; | ||
66 | ev.window = win; | ||
67 | ev.type = 27777; | ||
68 | ev.data.data32[0] = 0x7162534; | ||
69 | ev.data.data32[1] = (0x10000000 + val); | ||
70 | ev.data.data32[2] = win; | ||
71 | |||
72 | xcb_send_event(_ecore_xcb_conn, 0, win, XCB_EVENT_MASK_NO_EVENT, | ||
73 | (const char *)&ev); | ||
74 | // ecore_x_flush(); | ||
75 | } | ||
76 | |||
77 | /* public functions */ | ||
78 | EAPI Ecore_X_Sync_Alarm | ||
79 | ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter) | ||
80 | { | ||
81 | #ifdef ECORE_XCB_SYNC | ||
82 | uint32_t list[6], mask; | ||
83 | xcb_sync_int64_t init; | ||
84 | Ecore_X_Sync_Alarm alarm; | ||
85 | #endif | ||
86 | |||
87 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
88 | CHECK_XCB_CONN; | ||
89 | |||
90 | if ((!_sync_avail) || (!counter)) return 0; | ||
91 | |||
92 | #ifdef ECORE_XCB_SYNC | ||
93 | init.lo = 0; | ||
94 | init.hi = 0; | ||
95 | xcb_sync_set_counter(_ecore_xcb_conn, counter, init); | ||
96 | |||
97 | mask = (XCB_SYNC_CA_COUNTER | XCB_SYNC_CA_VALUE_TYPE | | ||
98 | XCB_SYNC_CA_VALUE | XCB_SYNC_CA_TEST_TYPE | | ||
99 | XCB_SYNC_CA_DELTA | XCB_SYNC_CA_EVENTS); | ||
100 | list[0] = counter; | ||
101 | list[1] = XCB_SYNC_VALUETYPE_ABSOLUTE; | ||
102 | list[2] = 1; | ||
103 | list[3] = XCB_SYNC_TESTTYPE_POSITIVE_COMPARISON; | ||
104 | list[4] = 1; | ||
105 | list[5] = 1; | ||
106 | alarm = xcb_generate_id(_ecore_xcb_conn); | ||
107 | |||
108 | xcb_sync_create_alarm(_ecore_xcb_conn, alarm, mask, list); | ||
109 | ecore_x_sync(); // needed | ||
110 | |||
111 | return alarm; | ||
112 | #endif | ||
113 | return 0; | ||
114 | } | ||
115 | |||
116 | EAPI Eina_Bool | ||
117 | ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm) | ||
118 | { | ||
119 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
120 | CHECK_XCB_CONN; | ||
121 | |||
122 | if ((!_sync_avail) || (!alarm)) return EINA_FALSE; | ||
123 | |||
124 | #ifdef ECORE_XCB_SYNC | ||
125 | xcb_sync_destroy_alarm(_ecore_xcb_conn, alarm); | ||
126 | // ecore_x_flush(); | ||
127 | return EINA_TRUE; | ||
128 | #endif | ||
129 | |||
130 | return EINA_FALSE; | ||
131 | } | ||
132 | |||
133 | EAPI Eina_Bool | ||
134 | ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, | ||
135 | unsigned int *val) | ||
136 | { | ||
137 | #ifdef ECORE_XCB_SYNC | ||
138 | xcb_sync_query_counter_cookie_t cookie; | ||
139 | xcb_sync_query_counter_reply_t *reply; | ||
140 | #endif | ||
141 | |||
142 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
143 | CHECK_XCB_CONN; | ||
144 | |||
145 | if ((!_sync_avail) || (!counter)) return EINA_FALSE; | ||
146 | |||
147 | #ifdef ECORE_XCB_SYNC | ||
148 | cookie = xcb_sync_query_counter_unchecked(_ecore_xcb_conn, counter); | ||
149 | reply = xcb_sync_query_counter_reply(_ecore_xcb_conn, cookie, NULL); | ||
150 | if (reply) | ||
151 | { | ||
152 | if (val) *val = (unsigned int)reply->counter_value.lo; | ||
153 | free(reply); | ||
154 | return EINA_TRUE; | ||
155 | } | ||
156 | #endif | ||
157 | return EINA_FALSE; | ||
158 | } | ||
159 | |||
160 | EAPI void | ||
161 | ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, | ||
162 | int by) | ||
163 | { | ||
164 | #ifdef ECORE_XCB_SYNC | ||
165 | xcb_sync_int64_t v; | ||
166 | #endif | ||
167 | |||
168 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
169 | CHECK_XCB_CONN; | ||
170 | |||
171 | if ((!_sync_avail) || (!counter)) return; | ||
172 | |||
173 | #ifdef ECORE_XCB_SYNC | ||
174 | v.hi = (by < 0) ? ~0 : 0; | ||
175 | v.lo = by; | ||
176 | |||
177 | xcb_sync_change_counter(_ecore_xcb_conn, counter, v); | ||
178 | // ecore_x_flush(); | ||
179 | #endif | ||
180 | } | ||
181 | |||
182 | EAPI void | ||
183 | ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, | ||
184 | int val) | ||
185 | { | ||
186 | #ifdef ECORE_XCB_SYNC | ||
187 | xcb_sync_query_counter_cookie_t cookie; | ||
188 | xcb_sync_query_counter_reply_t *reply; | ||
189 | xcb_sync_int64_t v1, v2; | ||
190 | xcb_sync_waitcondition_t cond; | ||
191 | #endif | ||
192 | |||
193 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
194 | CHECK_XCB_CONN; | ||
195 | |||
196 | if ((!_sync_avail) || (!counter)) return; | ||
197 | |||
198 | #ifdef ECORE_XCB_SYNC | ||
199 | cookie = xcb_sync_query_counter_unchecked(_ecore_xcb_conn, counter); | ||
200 | reply = xcb_sync_query_counter_reply(_ecore_xcb_conn, cookie, NULL); | ||
201 | if (!reply) return; | ||
202 | v1 = reply->counter_value; | ||
203 | free(reply); | ||
204 | |||
205 | v1.hi = (val < 0) ? ~0 : 0; | ||
206 | v1.lo = val; | ||
207 | v2.hi = ((val + 1) < 0) ? ~0 : 0; | ||
208 | v2.lo = (val + 1); | ||
209 | |||
210 | cond.trigger.counter = counter; | ||
211 | cond.trigger.wait_type = XCB_SYNC_VALUETYPE_ABSOLUTE; | ||
212 | cond.trigger.wait_value = v1; | ||
213 | cond.trigger.test_type = XCB_SYNC_TESTTYPE_POSITIVE_COMPARISON; | ||
214 | cond.event_threshold = v2; | ||
215 | |||
216 | xcb_sync_await(_ecore_xcb_conn, 1, &cond); | ||
217 | // ecore_x_flush(); | ||
218 | #endif | ||
219 | } | ||
220 | |||
221 | EAPI Ecore_X_Sync_Counter | ||
222 | ecore_x_sync_counter_new(int val) | ||
223 | { | ||
224 | #ifdef ECORE_XCB_SYNC | ||
225 | xcb_sync_counter_t counter; | ||
226 | xcb_sync_int64_t v; | ||
227 | #endif | ||
228 | |||
229 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
230 | CHECK_XCB_CONN; | ||
231 | |||
232 | if (!_sync_avail) return 0; | ||
233 | |||
234 | #ifdef ECORE_XCB_SYNC | ||
235 | v.hi = (val < 0) ? ~0 : 0; | ||
236 | v.lo = val; | ||
237 | |||
238 | counter = xcb_generate_id(_ecore_xcb_conn); | ||
239 | xcb_sync_create_counter(_ecore_xcb_conn, counter, v); | ||
240 | // ecore_x_flush(); | ||
241 | |||
242 | return counter; | ||
243 | #endif | ||
244 | |||
245 | return 0; | ||
246 | } | ||
247 | |||
248 | EAPI void | ||
249 | ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter) | ||
250 | { | ||
251 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
252 | CHECK_XCB_CONN; | ||
253 | |||
254 | if ((!_sync_avail) || (!counter)) return; | ||
255 | |||
256 | #ifdef ECORE_XCB_SYNC | ||
257 | xcb_sync_destroy_counter(_ecore_xcb_conn, counter); | ||
258 | // ecore_x_flush(); | ||
259 | #endif | ||
260 | } | ||
261 | |||
262 | EAPI void | ||
263 | ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter, | ||
264 | int val) | ||
265 | { | ||
266 | #ifdef ECORE_XCB_SYNC | ||
267 | xcb_sync_int64_t v; | ||
268 | #endif | ||
269 | |||
270 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
271 | CHECK_XCB_CONN; | ||
272 | |||
273 | if ((!_sync_avail) || (!counter)) return; | ||
274 | |||
275 | #ifdef ECORE_XCB_SYNC | ||
276 | v.hi = (val < 0) ? ~0 : 0; | ||
277 | v.lo = val; | ||
278 | |||
279 | xcb_sync_set_counter(_ecore_xcb_conn, counter, v); | ||
280 | // ecore_x_flush(); | ||
281 | #endif | ||
282 | } | ||
283 | |||
284 | EAPI void | ||
285 | ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter, | ||
286 | int val_hi, | ||
287 | unsigned int val_lo) | ||
288 | { | ||
289 | #ifdef ECORE_XCB_SYNC | ||
290 | xcb_sync_int64_t v; | ||
291 | #endif | ||
292 | |||
293 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
294 | CHECK_XCB_CONN; | ||
295 | |||
296 | if ((!_sync_avail) || (!counter)) return; | ||
297 | |||
298 | #ifdef ECORE_XCB_SYNC | ||
299 | v.hi = val_hi; | ||
300 | v.lo = val_lo; | ||
301 | |||
302 | xcb_sync_set_counter(_ecore_xcb_conn, counter, v); | ||
303 | // ecore_x_flush(); | ||
304 | #endif | ||
305 | } | ||
306 | |||
307 | EAPI Eina_Bool | ||
308 | ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter, | ||
309 | int *val_hi, | ||
310 | unsigned int *val_lo) | ||
311 | { | ||
312 | #ifdef ECORE_XCB_SYNC | ||
313 | xcb_sync_query_counter_cookie_t cookie; | ||
314 | xcb_sync_query_counter_reply_t *reply; | ||
315 | xcb_sync_int64_t value; | ||
316 | #endif | ||
317 | |||
318 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
319 | CHECK_XCB_CONN; | ||
320 | |||
321 | if ((!_sync_avail) || (!counter)) return EINA_FALSE; | ||
322 | |||
323 | #ifdef ECORE_XCB_SYNC | ||
324 | cookie = | ||
325 | xcb_sync_query_counter_unchecked(_ecore_xcb_conn, | ||
326 | (xcb_sync_counter_t)counter); | ||
327 | reply = xcb_sync_query_counter_reply(_ecore_xcb_conn, cookie, NULL); | ||
328 | if (!reply) return EINA_FALSE; | ||
329 | value = reply->counter_value; | ||
330 | free(reply); | ||
331 | if (val_hi) *val_hi = (int)value.hi; | ||
332 | if (val_lo) *val_lo = (unsigned int)value.lo; | ||
333 | return EINA_TRUE; | ||
334 | #endif | ||
335 | |||
336 | return EINA_FALSE; | ||
337 | } | ||
338 | |||