1 /*
2 * OLD E hints
3 */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #ifdef STDC_HEADERS
10 # include <stdlib.h>
11 # include <stddef.h>
12 #else
13 # ifdef HAVE_STDLIB_H
14 # include <stdlib.h>
15 # endif
16 #endif
17
18 #include "Ecore.h"
19 #include "ecore_x_private.h"
20 #include "Ecore_X.h"
21 #include "Ecore_X_Atoms.h"
22
23 EAPI void
ecore_x_e_init(void)24 ecore_x_e_init(void)
25 {
26 }
27
28 EAPI void
ecore_x_e_frame_size_set(Ecore_X_Window win,int fl,int fr,int ft,int fb)29 ecore_x_e_frame_size_set(Ecore_X_Window win,
30 int fl,
31 int fr,
32 int ft,
33 int fb)
34 {
35 unsigned int frames[4];
36
37 LOGFN;
38 frames[0] = fl;
39 frames[1] = fr;
40 frames[2] = ft;
41 frames[3] = fb;
42 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
43 }
44
45 EAPI void
ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,unsigned int is_keyboard)46 ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
47 unsigned int is_keyboard)
48 {
49 LOGFN;
50 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
51 &is_keyboard, 1);
52 }
53
54 EAPI Eina_Bool
ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)55 ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
56 {
57 unsigned int val = 0;
58 int ret = 0;
59
60 LOGFN;
61 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
62 &val, 1);
63 if ((ret == 0) || (ret == -1))
64 return EINA_FALSE;
65
66 return val ? EINA_TRUE : EINA_FALSE;
67 }
68
69 static Ecore_X_Virtual_Keyboard_State
_ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)70 _ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)
71 {
72 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
73 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
74
75 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
76 return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
77
78 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
79 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
80
81 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
82 return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
83
84 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
85 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
86
87 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
88 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
89
90 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
91 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
92
93 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
94 return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
95
96 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
97 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
98
99 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
100 return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
101
102 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
103 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
104
105 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
106 return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
107
108 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
109 return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
110
111 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
112 return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
113
114 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
115 return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
116
117 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
118 }
119
120 static Ecore_X_Atom
_ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)121 _ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
122 {
123 switch (state)
124 {
125 case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
126 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
127
128 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
129 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
130
131 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
132 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
133
134 case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
135 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
136
137 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
138 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
139
140 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
141 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
142
143 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
144 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
145
146 case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
147 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
148
149 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
150 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
151
152 case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
153 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
154
155 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
156 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
157
158 case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
159 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
160
161 case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
162 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
163
164 case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
165 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
166
167 case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
168 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
169
170 default: break;
171 }
172 return 0;
173 }
174
175 EAPI void
ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,Ecore_X_Virtual_Keyboard_State state)176 ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
177 Ecore_X_Virtual_Keyboard_State state)
178 {
179 Ecore_X_Atom atom = 0;
180
181 LOGFN;
182 atom = _ecore_x_e_vkbd_atom_get(state);
183 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
184 &atom, 1);
185 }
186
187 EAPI Ecore_X_Virtual_Keyboard_State
ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)188 ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
189 {
190 Ecore_X_Atom atom = 0;
191
192 LOGFN;
193 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
194 &atom, 1))
195 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
196
197 return _ecore_x_e_vkbd_state_get(atom);
198 }
199
200 EAPI void
ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,Ecore_X_Virtual_Keyboard_State state)201 ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
202 Ecore_X_Virtual_Keyboard_State state)
203 {
204 LOGFN;
205 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
206 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
207 _ecore_x_e_vkbd_atom_get(state),
208 0, 0, 0, 0);
209 }
210
211 static Ecore_X_Atom
_ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)212 _ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)
213 {
214 switch (mode)
215 {
216 case ECORE_X_ILLUME_MODE_SINGLE:
217 return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
218
219 case ECORE_X_ILLUME_MODE_DUAL_TOP:
220 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
221
222 case ECORE_X_ILLUME_MODE_DUAL_LEFT:
223 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
224
225 default:
226 break;
227 }
228 return ECORE_X_ILLUME_MODE_UNKNOWN;
229 }
230
231 static Ecore_X_Illume_Mode
_ecore_x_e_illume_mode_get(Ecore_X_Atom atom)232 _ecore_x_e_illume_mode_get(Ecore_X_Atom atom)
233 {
234 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
235 return ECORE_X_ILLUME_MODE_SINGLE;
236
237 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
238 return ECORE_X_ILLUME_MODE_DUAL_TOP;
239
240 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
241 return ECORE_X_ILLUME_MODE_DUAL_LEFT;
242
243 return ECORE_X_ILLUME_MODE_UNKNOWN;
244 }
245
246 EAPI void
ecore_x_e_illume_zone_set(Ecore_X_Window win,Ecore_X_Window zone)247 ecore_x_e_illume_zone_set(Ecore_X_Window win,
248 Ecore_X_Window zone)
249 {
250 LOGFN;
251 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
252 &zone, 1);
253 }
254
255 EAPI Ecore_X_Window
ecore_x_e_illume_zone_get(Ecore_X_Window win)256 ecore_x_e_illume_zone_get(Ecore_X_Window win)
257 {
258 Ecore_X_Window zone = 0;
259 int ret;
260
261 LOGFN;
262 ret = ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
263 &zone, 1);
264 if ((ret == 0) || (ret == -1))
265 return 0;
266
267 return zone;
268 }
269
270 EAPI void
ecore_x_e_illume_zone_list_set(Ecore_X_Window win,Ecore_X_Window * zones,unsigned int n_zones)271 ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
272 Ecore_X_Window *zones,
273 unsigned int n_zones)
274 {
275 LOGFN;
276 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
277 zones, n_zones);
278 }
279
280 EAPI void
ecore_x_e_illume_conformant_set(Ecore_X_Window win,unsigned int is_conformant)281 ecore_x_e_illume_conformant_set(Ecore_X_Window win,
282 unsigned int is_conformant)
283 {
284 LOGFN;
285 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
286 &is_conformant, 1);
287 }
288
289 EAPI Eina_Bool
ecore_x_e_illume_conformant_get(Ecore_X_Window win)290 ecore_x_e_illume_conformant_get(Ecore_X_Window win)
291 {
292 unsigned int val = 0;
293 int ret = 0;
294
295 LOGFN;
296 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
297 &val, 1);
298 if ((ret == 0) || (ret == -1))
299 return EINA_FALSE;
300
301 return val ? EINA_TRUE : EINA_FALSE;
302 }
303
304 EAPI void
ecore_x_e_illume_mode_set(Ecore_X_Window win,Ecore_X_Illume_Mode mode)305 ecore_x_e_illume_mode_set(Ecore_X_Window win,
306 Ecore_X_Illume_Mode mode)
307 {
308 Ecore_X_Atom atom = 0;
309
310 LOGFN;
311 atom = _ecore_x_e_illume_atom_get(mode);
312 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
313 &atom, 1);
314 }
315
316 EAPI Ecore_X_Illume_Mode
ecore_x_e_illume_mode_get(Ecore_X_Window win)317 ecore_x_e_illume_mode_get(Ecore_X_Window win)
318 {
319 Ecore_X_Atom atom = 0;
320
321 LOGFN;
322 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
323 return ECORE_X_ILLUME_MODE_UNKNOWN;
324
325 return _ecore_x_e_illume_mode_get(atom);
326 }
327
328 EAPI void
ecore_x_e_illume_mode_send(Ecore_X_Window win,Ecore_X_Illume_Mode mode)329 ecore_x_e_illume_mode_send(Ecore_X_Window win,
330 Ecore_X_Illume_Mode mode)
331 {
332 LOGFN;
333 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
334 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
335 _ecore_x_e_illume_atom_get(mode),
336 0, 0, 0, 0);
337 }
338
339 EAPI void
ecore_x_e_illume_focus_back_send(Ecore_X_Window win)340 ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
341 {
342 LOGFN;
343 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
344 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
345 1, 0, 0, 0, 0);
346 }
347
348 EAPI void
ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)349 ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
350 {
351 LOGFN;
352 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
353 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
354 1, 0, 0, 0, 0);
355 }
356
357 EAPI void
ecore_x_e_illume_focus_home_send(Ecore_X_Window win)358 ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
359 {
360 LOGFN;
361 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
362 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
363 1, 0, 0, 0, 0);
364 }
365
366 EAPI void
ecore_x_e_illume_close_send(Ecore_X_Window win)367 ecore_x_e_illume_close_send(Ecore_X_Window win)
368 {
369 LOGFN;
370 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
371 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
372 1, 0, 0, 0, 0);
373 }
374
375 EAPI void
ecore_x_e_illume_home_new_send(Ecore_X_Window win)376 ecore_x_e_illume_home_new_send(Ecore_X_Window win)
377 {
378 LOGFN;
379 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
380 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
381 1, 0, 0, 0, 0);
382 }
383
384 EAPI void
ecore_x_e_illume_home_del_send(Ecore_X_Window win)385 ecore_x_e_illume_home_del_send(Ecore_X_Window win)
386 {
387 LOGFN;
388 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
389 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
390 1, 0, 0, 0, 0);
391 }
392
393 EAPI void
ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)394 ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)
395 {
396 LOGFN;
397 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
398 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
399 win,
400 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT,
401 0, 0, 0);
402 }
403
404 EAPI void
ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)405 ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)
406 {
407 LOGFN;
408 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
409 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
410 win,
411 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV,
412 0, 0, 0);
413 }
414
415 EAPI void
ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)416 ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)
417 {
418 LOGFN;
419 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
420 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
421 win,
422 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE,
423 0, 0, 0);
424 }
425
426 EAPI void
ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)427 ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)
428 {
429 LOGFN;
430 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
431 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
432 win,
433 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_OVER,
434 0, 0, 0);
435 }
436
437 EAPI void
ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)438 ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)
439 {
440 LOGFN;
441 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
442 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
443 win,
444 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ,
445 0, 0, 0);
446 }
447
448 EAPI void
ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)449 ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)
450 {
451 LOGFN;
452 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
453 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
454 win,
455 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_NEXT,
456 0, 0, 0);
457 }
458
459 EAPI void
ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)460 ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)
461 {
462 LOGFN;
463 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
464 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
465 win,
466 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_PREV,
467 0, 0, 0);
468 }
469
470 EAPI void
ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)471 ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)
472 {
473 LOGFN;
474 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
475 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
476 win,
477 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP,
478 0, 0, 0);
479 }
480
481 EAPI void
ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)482 ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)
483 {
484 LOGFN;
485 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
486 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
487 win,
488 ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN,
489 0, 0, 0);
490 }
491
492 EAPI void
ecore_x_e_illume_drag_set(Ecore_X_Window win,unsigned int drag)493 ecore_x_e_illume_drag_set(Ecore_X_Window win,
494 unsigned int drag)
495 {
496 LOGFN;
497 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
498 }
499
500 EAPI Eina_Bool
ecore_x_e_illume_drag_get(Ecore_X_Window win)501 ecore_x_e_illume_drag_get(Ecore_X_Window win)
502 {
503 unsigned int val = 0;
504 int ret = 0;
505
506 LOGFN;
507 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG,
508 &val, 1);
509 if ((ret == 0) || (ret == -1))
510 return EINA_FALSE;
511
512 return val ? EINA_TRUE : EINA_FALSE;
513 }
514
515 EAPI void
ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,unsigned int is_locked)516 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
517 unsigned int is_locked)
518 {
519 LOGFN;
520 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
521 &is_locked, 1);
522 }
523
524 EAPI Eina_Bool
ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)525 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
526 {
527 unsigned int val = 0;
528 int ret = 0;
529
530 LOGFN;
531 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
532 &val, 1);
533 if ((ret == 0) || (ret == -1))
534 return EINA_FALSE;
535
536 return val ? EINA_TRUE : EINA_FALSE;
537 }
538
539 EAPI void
ecore_x_e_illume_drag_start_send(Ecore_X_Window win)540 ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
541 {
542 LOGFN;
543 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
544 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
545 1, 0, 0, 0, 0);
546 }
547
548 EAPI void
ecore_x_e_illume_drag_end_send(Ecore_X_Window win)549 ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
550 {
551 LOGFN;
552 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
553 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
554 1, 0, 0, 0, 0);
555 }
556
557 EAPI void
ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)558 ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
559 int x,
560 int y,
561 int w,
562 int h)
563 {
564 unsigned int geom[4];
565
566 LOGFN;
567 geom[0] = x;
568 geom[1] = y;
569 geom[2] = w;
570 geom[3] = h;
571 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
572 geom, 4);
573 }
574
575 EAPI Eina_Bool
ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)576 ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
577 int *x,
578 int *y,
579 int *w,
580 int *h)
581 {
582 int ret = 0;
583 unsigned int geom[4];
584
585 LOGFN;
586 ret =
587 ecore_x_window_prop_card32_get(win,
588 ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
589 geom, 4);
590 if (ret != 4)
591 return EINA_FALSE;
592
593 if (x)
594 *x = geom[0];
595
596 if (y)
597 *y = geom[1];
598
599 if (w)
600 *w = geom[2];
601
602 if (h)
603 *h = geom[3];
604
605 return EINA_TRUE;
606 }
607
608 EAPI void
ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)609 ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
610 int x,
611 int y,
612 int w,
613 int h)
614 {
615 unsigned int geom[4];
616
617 LOGFN;
618 geom[0] = x;
619 geom[1] = y;
620 geom[2] = w;
621 geom[3] = h;
622 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
623 geom, 4);
624 }
625
626 EAPI Eina_Bool
ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)627 ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
628 int *x,
629 int *y,
630 int *w,
631 int *h)
632 {
633 int ret = 0;
634 unsigned int geom[4];
635
636 LOGFN;
637 ret =
638 ecore_x_window_prop_card32_get(win,
639 ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
640 geom, 4);
641 if (ret != 4)
642 return EINA_FALSE;
643
644 if (x)
645 *x = geom[0];
646
647 if (y)
648 *y = geom[1];
649
650 if (w)
651 *w = geom[2];
652
653 if (h)
654 *h = geom[3];
655
656 return EINA_TRUE;
657 }
658
659 EAPI void
ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)660 ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
661 int x,
662 int y,
663 int w,
664 int h)
665 {
666 unsigned int geom[4];
667
668 LOGFN;
669 geom[0] = x;
670 geom[1] = y;
671 geom[2] = w;
672 geom[3] = h;
673 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
674 geom, 4);
675 }
676
677 EAPI Eina_Bool
ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)678 ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
679 int *x,
680 int *y,
681 int *w,
682 int *h)
683 {
684 int ret = 0;
685 unsigned int geom[4];
686
687 LOGFN;
688 ret =
689 ecore_x_window_prop_card32_get(win,
690 ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
691 geom, 4);
692 if (ret != 4)
693 return EINA_FALSE;
694
695 if (x)
696 *x = geom[0];
697
698 if (y)
699 *y = geom[1];
700
701 if (w)
702 *w = geom[2];
703
704 if (h)
705 *h = geom[3];
706
707 return EINA_TRUE;
708 }
709
710 static Ecore_X_Atom
_ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)711 _ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
712 {
713 switch (state)
714 {
715 case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
716 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
717
718 case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
719 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
720
721 default:
722 break;
723 }
724 return 0;
725 }
726
727 static Ecore_X_Illume_Quickpanel_State
_ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)728 _ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)
729 {
730 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
731 return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
732
733 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
734 return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
735
736 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
737 }
738
739 EAPI void
ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,unsigned int is_quickpanel)740 ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
741 unsigned int is_quickpanel)
742 {
743 LOGFN;
744 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
745 &is_quickpanel, 1);
746 }
747
748 EAPI Eina_Bool
ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)749 ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
750 {
751 unsigned int val = 0;
752 int ret = 0;
753
754 LOGFN;
755 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
756 &val, 1);
757 if ((ret == 0) || (ret == -1))
758 return EINA_FALSE;
759
760 return val ? EINA_TRUE : EINA_FALSE;
761 }
762
763 EAPI void
ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,Ecore_X_Illume_Quickpanel_State state)764 ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
765 Ecore_X_Illume_Quickpanel_State state)
766 {
767 Ecore_X_Atom atom = 0;
768
769 LOGFN;
770 atom = _ecore_x_e_quickpanel_atom_get(state);
771 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
772 &atom, 1);
773 }
774
775 EAPI Ecore_X_Illume_Quickpanel_State
ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)776 ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
777 {
778 Ecore_X_Atom atom = 0;
779
780 LOGFN;
781 if (!ecore_x_window_prop_atom_get(win,
782 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
783 &atom, 1))
784 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
785
786 return _ecore_x_e_quickpanel_state_get(atom);
787 }
788
789 EAPI void
ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,Ecore_X_Illume_Quickpanel_State state)790 ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
791 Ecore_X_Illume_Quickpanel_State state)
792 {
793 LOGFN;
794 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
795 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
796 _ecore_x_e_quickpanel_atom_get(state),
797 0, 0, 0, 0);
798 }
799
800 EAPI void
ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)801 ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
802 {
803 LOGFN;
804 ecore_x_client_message32_send(win,
805 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
806 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
807 0, 0, 0, 0, 0);
808 }
809
810 EAPI void
ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,unsigned int priority)811 ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
812 unsigned int priority)
813 {
814 LOGFN;
815 ecore_x_window_prop_card32_set(win,
816 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
817 &priority, 1);
818 }
819
820 EAPI int
ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)821 ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
822 {
823 unsigned int val = 0;
824 int ret = 0;
825
826 LOGFN;
827 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
828 &val, 1);
829 if ((ret == 0) || (ret == -1))
830 return EINA_FALSE;
831
832 return val;
833 }
834
835 EAPI void
ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,unsigned int priority)836 ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
837 unsigned int priority)
838 {
839 LOGFN;
840 ecore_x_window_prop_card32_set(win,
841 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
842 &priority, 1);
843 }
844
845 EAPI int
ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)846 ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
847 {
848 unsigned int val = 0;
849 int ret = 0;
850
851 LOGFN;
852 ret = ecore_x_window_prop_card32_get(win,
853 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
854 &val, 1);
855 if ((ret == 0) || (ret == -1))
856 return 0;
857
858 return val;
859 }
860
861 EAPI void
ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,unsigned int zone)862 ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
863 unsigned int zone)
864 {
865 LOGFN;
866 ecore_x_window_prop_card32_set(win,
867 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
868 &zone, 1);
869 }
870
871 EAPI int
ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)872 ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
873 {
874 unsigned int val = 0;
875 int ret = 0;
876
877 LOGFN;
878 ret = ecore_x_window_prop_card32_get(win,
879 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
880 &val, 1);
881 if ((ret == 0) || (ret == -1))
882 return 0;
883
884 return val;
885 }
886
887 EAPI void
ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)888 ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
889 {
890 LOGFN;
891 ecore_x_client_message32_send(win,
892 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
893 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
894 1, 0, 0, 0, 0);
895 }
896
897 static Ecore_X_Atom
_ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)898 _ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)
899 {
900 switch (state)
901 {
902 case ECORE_X_ILLUME_CLIPBOARD_STATE_ON:
903 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
904 case ECORE_X_ILLUME_CLIPBOARD_STATE_OFF:
905 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
906 default:
907 break;
908 }
909 return 0;
910 }
911
912 static Ecore_X_Illume_Clipboard_State
_ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)913 _ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)
914 {
915 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON)
916 return ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
917
918 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF)
919 return ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
920
921 return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
922 }
923
924 EAPI void
ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,Ecore_X_Illume_Clipboard_State state)925 ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
926 Ecore_X_Illume_Clipboard_State state)
927 {
928 Ecore_X_Atom atom = 0;
929
930 LOGFN;
931 atom = _ecore_x_e_clipboard_atom_get(state);
932
933 ecore_x_window_prop_atom_set(win,
934 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
935 &atom, 1);
936 }
937
938 EAPI Ecore_X_Illume_Clipboard_State
ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)939 ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
940 {
941 Ecore_X_Atom atom = 0;
942
943 LOGFN;
944
945 if (!ecore_x_window_prop_atom_get(win,
946 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
947 &atom, 1))
948 return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
949 return _ecore_x_e_clipboard_state_get(atom);
950 }
951
952 EAPI void
ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)953 ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
954 int x, int y, int w, int h)
955 {
956 unsigned int geom[4];
957
958 LOGFN;
959 geom[0] = x;
960 geom[1] = y;
961 geom[2] = w;
962 geom[3] = h;
963 ecore_x_window_prop_card32_set(win,
964 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
965 geom, 4);
966 }
967
968 EAPI Eina_Bool
ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)969 ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
970 int *x, int *y, int *w, int *h)
971 {
972 int ret = 0;
973 unsigned int geom[4];
974
975 LOGFN;
976 ret =
977 ecore_x_window_prop_card32_get(win,
978 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
979 geom, 4);
980 if (ret != 4) return EINA_FALSE;
981
982 if (x) *x = geom[0];
983 if (y) *y = geom[1];
984 if (w) *w = geom[2];
985 if (h) *h = geom[3];
986
987 return EINA_TRUE;
988 }
989
990 /* for sliding window */
991 EAPI void
ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,unsigned int is_visible)992 ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
993 unsigned int is_visible)
994 {
995 LOGFN;
996 ecore_x_window_prop_card32_set(win,
997 ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
998 &is_visible, 1);
999 } /* ecore_x_e_illume_sliding_win_state_set */
1000
1001 EAPI int
ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)1002 ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
1003 {
1004 unsigned int is_visible = 0;
1005 int ret = 0;
1006
1007 LOGFN;
1008 ret = ecore_x_window_prop_card32_get(win,
1009 ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
1010 &is_visible, 1);
1011 if ((ret == 0) || (ret == -1))
1012 return 0;
1013
1014 return is_visible;
1015 }
1016
1017 EAPI void
ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)1018 ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
1019 int x,
1020 int y,
1021 int w,
1022 int h)
1023 {
1024 unsigned int geom[4];
1025
1026 LOGFN;
1027 geom[0] = x;
1028 geom[1] = y;
1029 geom[2] = w;
1030 geom[3] = h;
1031 ecore_x_window_prop_card32_set(win,
1032 ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
1033 geom, 4);
1034 } /* ecore_x_e_illume_sliding_win_geometry_set */
1035
1036 EAPI int
ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)1037 ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
1038 int *x,
1039 int *y,
1040 int *w,
1041 int *h)
1042 {
1043 int ret = 0;
1044 unsigned int geom[4];
1045
1046 LOGFN;
1047 ret =
1048 ecore_x_window_prop_card32_get(win,
1049 ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
1050 geom, 4);
1051 if (ret != 4)
1052 return 0;
1053
1054 if (x)
1055 *x = geom[0];
1056
1057 if (y)
1058 *y = geom[1];
1059
1060 if (w)
1061 *w = geom[2];
1062
1063 if (h)
1064 *h = geom[3];
1065
1066 return 1;
1067 }/* ecore_x_e_illume_sliding_win_geometry_get */
1068
1069 EAPI void
ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,Ecore_X_Sync_Counter counter)1070 ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
1071 Ecore_X_Sync_Counter counter)
1072 {
1073 LOGFN;
1074 if (counter)
1075 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1076 ECORE_X_ATOM_CARDINAL, &counter, 1);
1077 else
1078 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
1079 }
1080
1081 EAPI Ecore_X_Sync_Counter
ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)1082 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
1083 {
1084 int ret = 0;
1085 Ecore_X_Sync_Counter counter = 0;
1086
1087 LOGFN;
1088 ret =
1089 ecore_x_window_prop_xid_get(win,
1090 ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1091 ECORE_X_ATOM_CARDINAL,
1092 &counter, 1);
1093 if (ret != 1)
1094 return 0;
1095
1096 return counter;
1097 }
1098
1099 EAPI void
ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,Ecore_X_Window win)1100 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
1101 Ecore_X_Window win)
1102 {
1103 XEvent xev = { 0 };
1104
1105 LOGFN;
1106
1107 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1108
1109 if (!root)
1110 root = DefaultRootWindow(_ecore_x_disp);
1111
1112 xev.xclient.type = ClientMessage;
1113 xev.xclient.display = _ecore_x_disp;
1114 xev.xclient.window = win;
1115 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1116 xev.xclient.format = 32;
1117 xev.xclient.data.l[0] = win;
1118 xev.xclient.data.l[1] = 0; // version
1119 xev.xclient.data.l[2] = 0; // later
1120 xev.xclient.data.l[3] = 0; // later
1121 xev.xclient.data.l[4] = 0; // later
1122
1123 XSendEvent(_ecore_x_disp, root, False,
1124 SubstructureRedirectMask | SubstructureNotifyMask,
1125 &xev);
1126 if (_ecore_xlib_sync) ecore_x_sync();
1127 }
1128
1129 EAPI void
ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,Ecore_X_Window win,int w,int h)1130 ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
1131 Ecore_X_Window win,
1132 int w,
1133 int h)
1134 {
1135 XEvent xev = { 0 };
1136
1137 LOGFN;
1138
1139 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1140
1141 if (!root)
1142 root = DefaultRootWindow(_ecore_x_disp);
1143
1144 xev.xclient.type = ClientMessage;
1145 xev.xclient.display = _ecore_x_disp;
1146 xev.xclient.window = win;
1147 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1148 xev.xclient.format = 32;
1149 xev.xclient.data.l[0] = win;
1150 xev.xclient.data.l[1] = 1; // version
1151 xev.xclient.data.l[2] = w; // win width at draw time
1152 xev.xclient.data.l[3] = h; // win height at draw time
1153 xev.xclient.data.l[4] = 0; // later
1154
1155 XSendEvent(_ecore_x_disp, root, False,
1156 SubstructureRedirectMask | SubstructureNotifyMask,
1157 &xev);
1158 if (_ecore_xlib_sync) ecore_x_sync();
1159 }
1160
1161 /*
1162 * @since 1.3
1163 * @deprecated use ecore_x_e_window_available_profiles_set
1164 */
1165 EAPI void
ecore_x_e_window_profile_list_set(Ecore_X_Window win,const char ** profiles,unsigned int num_profiles)1166 ecore_x_e_window_profile_list_set(Ecore_X_Window win,
1167 const char **profiles,
1168 unsigned int num_profiles)
1169 {
1170 Ecore_X_Atom *atoms;
1171
1172 LOGFN;
1173 if (!win)
1174 return;
1175
1176 if ((!profiles) || (num_profiles == 0))
1177 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST);
1178 else
1179 {
1180 atoms = alloca(num_profiles * sizeof(Ecore_X_Atom));
1181 ecore_x_atoms_get(profiles, num_profiles, atoms);
1182 ecore_x_window_prop_property_set(win,
1183 ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1184 XA_ATOM, 32, (void *)atoms,
1185 num_profiles);
1186 }
1187 }
1188
1189 /*
1190 * @since 1.3
1191 * @deprecated use ecore_x_e_window_available_profiles_get
1192 */
1193 EAPI Eina_Bool
ecore_x_e_window_profile_list_get(Ecore_X_Window win,const char *** profiles,int * ret_num)1194 ecore_x_e_window_profile_list_get(Ecore_X_Window win,
1195 const char ***profiles,
1196 int *ret_num)
1197 {
1198 unsigned char *data;
1199 Ecore_X_Atom *atoms;
1200 int num, i;
1201
1202 LOGFN;
1203
1204 if (ret_num)
1205 *ret_num = 0;
1206
1207 if (profiles)
1208 *profiles = NULL;
1209
1210 if (!win)
1211 return EINA_FALSE;
1212
1213 if (!ecore_x_window_prop_property_get(win,
1214 ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1215 XA_ATOM, 32, &data, &num))
1216 {
1217 if (data) free(data);
1218 return EINA_FALSE;
1219 }
1220
1221 if (ret_num)
1222 *ret_num = num;
1223
1224 if (profiles)
1225 {
1226 (*profiles) = calloc(num, sizeof(char *));
1227 if (!(*profiles))
1228 {
1229 if (ret_num)
1230 *ret_num = 0;
1231
1232 if (data)
1233 free(data);
1234
1235 return EINA_FALSE;
1236 }
1237
1238 atoms = (Ecore_X_Atom *)data;
1239 for (i = 0; i < num; i++)
1240 (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
1241 }
1242
1243 if (data) free(data);
1244
1245 return EINA_TRUE;
1246 }
1247
1248 /*
1249 * @since 1.3
1250 */
1251 EAPI void
ecore_x_e_window_profile_set(Ecore_X_Window win,const char * profile)1252 ecore_x_e_window_profile_set(Ecore_X_Window win,
1253 const char *profile)
1254 {
1255 Ecore_X_Atom atom;
1256
1257 LOGFN;
1258 if (!win)
1259 return;
1260
1261 if (!profile)
1262 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE);
1263 else
1264 {
1265 atom = ecore_x_atom_get(profile);
1266 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_E_WINDOW_PROFILE,
1267 XA_ATOM, 32, (void *)&atom, 1);
1268 }
1269 }
1270
1271 /*
1272 * @since 1.3
1273 */
1274 EAPI char *
ecore_x_e_window_profile_get(Ecore_X_Window win)1275 ecore_x_e_window_profile_get(Ecore_X_Window win)
1276 {
1277 Ecore_X_Atom *atom = NULL;
1278 unsigned char *data;
1279 char *profile = NULL;
1280 int num;
1281
1282 LOGFN;
1283 if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_WINDOW_PROFILE,
1284 XA_ATOM, 32, &data, &num))
1285 {
1286 if (data) free(data);
1287 return NULL;
1288 }
1289
1290 if (data)
1291 atom = (Ecore_X_Atom *)data;
1292
1293 if (atom)
1294 profile = ecore_x_atom_name_get(atom[0]);
1295
1296 if (data) free(data);
1297
1298 return profile;
1299 }
1300
1301 EAPI void
ecore_x_e_window_profile_supported_set(Ecore_X_Window root,Eina_Bool enabled)1302 ecore_x_e_window_profile_supported_set(Ecore_X_Window root,
1303 Eina_Bool enabled)
1304 {
1305 Ecore_X_Window win;
1306
1307 LOGFN;
1308
1309 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1310
1311 if (!root)
1312 root = DefaultRootWindow(_ecore_x_disp);
1313
1314 if (enabled)
1315 {
1316 win = ecore_x_window_new(root, 1, 2, 3, 4);
1317 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1318 ECORE_X_ATOM_WINDOW, &win, 1);
1319 ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1320 ECORE_X_ATOM_WINDOW, &win, 1);
1321 }
1322 else
1323 {
1324 int ret;
1325
1326 ret =
1327 ecore_x_window_prop_xid_get(root,
1328 ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1329 ECORE_X_ATOM_WINDOW,
1330 &win, 1);
1331 if ((ret == 1) && (win))
1332 {
1333 ecore_x_window_prop_property_del(
1334 root,
1335 ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED);
1336 ecore_x_window_free(win);
1337 }
1338 }
1339 }
1340
1341 EAPI Eina_Bool
ecore_x_e_window_profile_supported_get(Ecore_X_Window root)1342 ecore_x_e_window_profile_supported_get(Ecore_X_Window root)
1343 {
1344 Ecore_X_Window win, win2;
1345 int ret;
1346
1347 LOGFN;
1348
1349 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
1350
1351 if (!root)
1352 root = DefaultRootWindow(_ecore_x_disp);
1353
1354 ret =
1355 ecore_x_window_prop_xid_get(root,
1356 ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1357 ECORE_X_ATOM_WINDOW,
1358 &win, 1);
1359 if ((ret == 1) && (win))
1360 {
1361 ret =
1362 ecore_x_window_prop_xid_get(win,
1363 ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1364 ECORE_X_ATOM_WINDOW,
1365 &win2, 1);
1366 if ((ret == 1) && (win2 == win))
1367 return EINA_TRUE;
1368 }
1369
1370 return EINA_FALSE;
1371 }
1372
1373 EAPI void
ecore_x_e_window_available_profiles_set(Ecore_X_Window win,const char ** profiles,unsigned int count)1374 ecore_x_e_window_available_profiles_set(Ecore_X_Window win,
1375 const char **profiles,
1376 unsigned int count)
1377 {
1378 Ecore_X_Atom *atoms;
1379
1380 LOGFN;
1381
1382 if (!win)
1383 return;
1384
1385 if ((!profiles) || (count == 0))
1386 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST);
1387 else
1388 {
1389 atoms = alloca(count * sizeof(Ecore_X_Atom));
1390 ecore_x_atoms_get(profiles, count, atoms);
1391 ecore_x_window_prop_property_set(win,
1392 ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1393 XA_ATOM, 32, (void *)atoms,
1394 count);
1395 }
1396 }
1397
1398 EAPI Eina_Bool
ecore_x_e_window_available_profiles_get(Ecore_X_Window win,const char *** profiles,int * count)1399 ecore_x_e_window_available_profiles_get(Ecore_X_Window win,
1400 const char ***profiles,
1401 int *count)
1402 {
1403 unsigned char *data;
1404 Ecore_X_Atom *atoms;
1405 int num, i;
1406
1407 LOGFN;
1408
1409 if (count)
1410 *count = 0;
1411
1412 if (profiles)
1413 *profiles = NULL;
1414
1415 if (!win)
1416 return EINA_FALSE;
1417
1418 if (!ecore_x_window_prop_property_get(win,
1419 ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1420 XA_ATOM, 32, &data, &num))
1421 {
1422 if (data)
1423 free(data);
1424 return EINA_FALSE;
1425 }
1426
1427 if (count)
1428 *count = num;
1429
1430 if (profiles)
1431 {
1432 (*profiles) = calloc(num, sizeof(char *));
1433 if (!(*profiles))
1434 {
1435 if (count)
1436 *count = 0;
1437
1438 if (data)
1439 free(data);
1440
1441 return EINA_FALSE;
1442 }
1443
1444 atoms = (Ecore_X_Atom *)data;
1445 for (i = 0; i < num; i++)
1446 (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
1447 }
1448
1449 if (data)
1450 XFree(data);
1451
1452 return EINA_TRUE;
1453 }
1454
1455 EAPI void
ecore_x_e_window_profile_change_send(Ecore_X_Window root,Ecore_X_Window win,const char * profile)1456 ecore_x_e_window_profile_change_send(Ecore_X_Window root,
1457 Ecore_X_Window win,
1458 const char *profile)
1459 {
1460 XEvent xev = { 0 };
1461 Ecore_X_Atom atom;
1462
1463 LOGFN;
1464
1465 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1466
1467 if (!root)
1468 root = DefaultRootWindow(_ecore_x_disp);
1469
1470 if (!win)
1471 return;
1472
1473 atom = ecore_x_atom_get(profile);
1474
1475 xev.xclient.type = ClientMessage;
1476 xev.xclient.display = _ecore_x_disp;
1477 xev.xclient.window = win;
1478 xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE;
1479 xev.xclient.format = 32;
1480 xev.xclient.data.l[0] = win;
1481 xev.xclient.data.l[1] = atom;
1482 xev.xclient.data.l[2] = 0; // later
1483 xev.xclient.data.l[3] = 0; // later
1484 xev.xclient.data.l[4] = 0; // later
1485
1486 XSendEvent(_ecore_x_disp, root, False,
1487 SubstructureRedirectMask | SubstructureNotifyMask,
1488 &xev);
1489 if (_ecore_xlib_sync) ecore_x_sync();
1490 }
1491
1492 EAPI void
ecore_x_e_window_profile_change_request_send(Ecore_X_Window win,const char * profile)1493 ecore_x_e_window_profile_change_request_send(Ecore_X_Window win,
1494 const char *profile)
1495 {
1496 XEvent xev = { 0 };
1497 Ecore_X_Atom atom;
1498
1499 LOGFN;
1500
1501 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1502
1503 if (!win)
1504 return;
1505
1506 atom = ecore_x_atom_get(profile);
1507
1508 xev.xclient.type = ClientMessage;
1509 xev.xclient.display = _ecore_x_disp;
1510 xev.xclient.window = win;
1511 xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE_REQUEST;
1512 xev.xclient.format = 32;
1513 xev.xclient.data.l[0] = win;
1514 xev.xclient.data.l[1] = atom;
1515 xev.xclient.data.l[2] = 0; // later
1516 xev.xclient.data.l[3] = 0; // later
1517 xev.xclient.data.l[4] = 0; // later
1518
1519 XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
1520 if (_ecore_xlib_sync) ecore_x_sync();
1521 }
1522
1523
1524 EAPI void
ecore_x_e_window_profile_change_done_send(Ecore_X_Window root,Ecore_X_Window win,const char * profile)1525 ecore_x_e_window_profile_change_done_send(Ecore_X_Window root,
1526 Ecore_X_Window win,
1527 const char *profile)
1528 {
1529 XEvent xev = { 0 };
1530 Ecore_X_Atom atom;
1531
1532 LOGFN;
1533
1534 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1535
1536 if (!root)
1537 root = DefaultRootWindow(_ecore_x_disp);
1538
1539 atom = ecore_x_atom_get(profile);
1540
1541 xev.xclient.type = ClientMessage;
1542 xev.xclient.display = _ecore_x_disp;
1543 xev.xclient.window = win;
1544 xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE_DONE;
1545 xev.xclient.format = 32;
1546 xev.xclient.data.l[0] = win;
1547 xev.xclient.data.l[1] = atom;
1548 xev.xclient.data.l[2] = 0; // later
1549 xev.xclient.data.l[3] = 0; // later
1550 xev.xclient.data.l[4] = 0; // later
1551
1552 XSendEvent(_ecore_x_disp, root, False,
1553 SubstructureRedirectMask | SubstructureNotifyMask,
1554 &xev);
1555 if (_ecore_xlib_sync) ecore_x_sync();
1556 }
1557
1558 EAPI void
ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,Eina_Bool enabled)1559 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
1560 Eina_Bool enabled)
1561 {
1562 Ecore_X_Window win;
1563
1564 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1565
1566 if (!root)
1567 root = DefaultRootWindow(_ecore_x_disp);
1568
1569 LOGFN;
1570 if (enabled)
1571 {
1572 win = ecore_x_window_new(root, 1, 2, 3, 4);
1573 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1574 ECORE_X_ATOM_WINDOW, &win, 1);
1575 ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1576 ECORE_X_ATOM_WINDOW, &win, 1);
1577 }
1578 else
1579 {
1580 int ret;
1581
1582 ret =
1583 ecore_x_window_prop_xid_get(root,
1584 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1585 ECORE_X_ATOM_WINDOW,
1586 &win, 1);
1587 if ((ret == 1) && (win))
1588 {
1589 ecore_x_window_prop_property_del(
1590 root,
1591 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
1592 ecore_x_window_free(win);
1593 }
1594 }
1595 }
1596
1597 EAPI Eina_Bool
ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)1598 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
1599 {
1600 Ecore_X_Window win, win2;
1601 int ret;
1602
1603 LOGFN;
1604
1605 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
1606
1607 if (!root)
1608 root = DefaultRootWindow(_ecore_x_disp);
1609
1610 ret =
1611 ecore_x_window_prop_xid_get(root,
1612 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1613 ECORE_X_ATOM_WINDOW,
1614 &win, 1);
1615 if ((ret == 1) && (win))
1616 {
1617 ret =
1618 ecore_x_window_prop_xid_get(win,
1619 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1620 ECORE_X_ATOM_WINDOW,
1621 &win2, 1);
1622 if ((ret == 1) && (win2 == win))
1623 return EINA_TRUE;
1624 }
1625
1626 return EINA_FALSE;
1627 }
1628
1629 EAPI void
ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)1630 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
1631 {
1632 XEvent xev = { 0 };
1633
1634 LOGFN;
1635
1636 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1637
1638 xev.xclient.type = ClientMessage;
1639 xev.xclient.display = _ecore_x_disp;
1640 xev.xclient.window = win;
1641 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
1642 xev.xclient.format = 32;
1643 xev.xclient.data.l[0] = win;
1644 xev.xclient.data.l[1] = 0; // later
1645 xev.xclient.data.l[2] = 0; // later
1646 xev.xclient.data.l[3] = 0; // later
1647 xev.xclient.data.l[4] = 0; // later
1648
1649 XSendEvent(_ecore_x_disp, win, False,
1650 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1651 &xev);
1652 if (_ecore_xlib_sync) ecore_x_sync();
1653 }
1654
1655 EAPI void
ecore_x_e_comp_sync_end_send(Ecore_X_Window win)1656 ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
1657 {
1658 XEvent xev = { 0 };
1659
1660 LOGFN;
1661
1662 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1663
1664 xev.xclient.type = ClientMessage;
1665 xev.xclient.display = _ecore_x_disp;
1666 xev.xclient.window = win;
1667 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
1668 xev.xclient.format = 32;
1669 xev.xclient.data.l[0] = win;
1670 xev.xclient.data.l[1] = 0; // later
1671 xev.xclient.data.l[2] = 0; // later
1672 xev.xclient.data.l[3] = 0; // later
1673 xev.xclient.data.l[4] = 0; // later
1674
1675 XSendEvent(_ecore_x_disp, win, False,
1676 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1677 &xev);
1678 if (_ecore_xlib_sync) ecore_x_sync();
1679 }
1680
1681 EAPI void
ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)1682 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
1683 {
1684 XEvent xev = { 0 };
1685
1686 LOGFN;
1687
1688 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1689
1690 xev.xclient.type = ClientMessage;
1691 xev.xclient.display = _ecore_x_disp;
1692 xev.xclient.window = win;
1693 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
1694 xev.xclient.format = 32;
1695 xev.xclient.data.l[0] = win;
1696 xev.xclient.data.l[1] = 0; // later
1697 xev.xclient.data.l[2] = 0; // later
1698 xev.xclient.data.l[3] = 0; // later
1699 xev.xclient.data.l[4] = 0; // later
1700
1701 XSendEvent(_ecore_x_disp, win, False,
1702 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1703 &xev);
1704 if (_ecore_xlib_sync) ecore_x_sync();
1705 }
1706
1707 EAPI void
ecore_x_e_comp_flush_send(Ecore_X_Window win)1708 ecore_x_e_comp_flush_send(Ecore_X_Window win)
1709 {
1710 XEvent xev = { 0 };
1711
1712 LOGFN;
1713
1714 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1715
1716 xev.xclient.type = ClientMessage;
1717 xev.xclient.display = _ecore_x_disp;
1718 xev.xclient.window = win;
1719 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
1720 xev.xclient.format = 32;
1721 xev.xclient.data.l[0] = win;
1722 xev.xclient.data.l[1] = 0; // later
1723 xev.xclient.data.l[2] = 0; // later
1724 xev.xclient.data.l[3] = 0; // later
1725 xev.xclient.data.l[4] = 0; // later
1726
1727 XSendEvent(_ecore_x_disp, win, False,
1728 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1729 &xev);
1730 if (_ecore_xlib_sync) ecore_x_sync();
1731 }
1732
1733 EAPI void
ecore_x_e_comp_dump_send(Ecore_X_Window win)1734 ecore_x_e_comp_dump_send(Ecore_X_Window win)
1735 {
1736 XEvent xev = { 0 };
1737
1738 LOGFN;
1739
1740 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1741
1742 xev.xclient.type = ClientMessage;
1743 xev.xclient.display = _ecore_x_disp;
1744 xev.xclient.window = win;
1745 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1746 xev.xclient.format = 32;
1747 xev.xclient.data.l[0] = win;
1748 xev.xclient.data.l[1] = 0; // later
1749 xev.xclient.data.l[2] = 0; // later
1750 xev.xclient.data.l[3] = 0; // later
1751 xev.xclient.data.l[4] = 0; // later
1752
1753 XSendEvent(_ecore_x_disp, win, False,
1754 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1755 &xev);
1756 if (_ecore_xlib_sync) ecore_x_sync();
1757 }
1758
1759 EAPI void
ecore_x_e_comp_pixmap_set(Ecore_X_Window win,Ecore_X_Pixmap pixmap)1760 ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
1761 Ecore_X_Pixmap pixmap)
1762 {
1763 LOGFN;
1764 if (pixmap)
1765 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
1766 ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1767 else
1768 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_PIXMAP);
1769 }
1770
1771 EAPI Ecore_X_Pixmap
ecore_x_e_comp_pixmap_get(Ecore_X_Window win)1772 ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1773 {
1774 int ret = 0;
1775 Ecore_X_Pixmap pixmap = 0;
1776
1777 LOGFN;
1778 ret =
1779 ecore_x_window_prop_xid_get(win,
1780 ECORE_X_ATOM_E_COMP_PIXMAP,
1781 ECORE_X_ATOM_PIXMAP,
1782 &pixmap, 1);
1783 if (ret != 1)
1784 return 0;
1785
1786 return pixmap;
1787 }
1788
1789 static Ecore_X_Atom
_ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)1790 _ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1791 {
1792 switch (state)
1793 {
1794 case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1795 return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1796
1797 case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1798 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1799
1800 default:
1801 break;
1802 }
1803 return 0;
1804 }
1805
1806 static Ecore_X_Illume_Indicator_State
_ecore_x_e_indicator_state_get(Ecore_X_Atom atom)1807 _ecore_x_e_indicator_state_get(Ecore_X_Atom atom)
1808 {
1809 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1810 return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1811
1812 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1813 return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1814
1815 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1816 }
1817
1818 EAPI void
ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_State state)1819 ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
1820 Ecore_X_Illume_Indicator_State state)
1821 {
1822 Ecore_X_Atom atom = 0;
1823
1824 LOGFN;
1825 atom = _ecore_x_e_indicator_atom_get(state);
1826 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1827 &atom, 1);
1828 }
1829
1830 EAPI Ecore_X_Illume_Indicator_State
ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)1831 ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1832 {
1833 Ecore_X_Atom atom = 0;
1834
1835 LOGFN;
1836 if (!ecore_x_window_prop_atom_get(win,
1837 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1838 &atom, 1))
1839 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1840
1841 return _ecore_x_e_indicator_state_get(atom);
1842 }
1843
1844 EAPI void
ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_State state)1845 ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
1846 Ecore_X_Illume_Indicator_State state)
1847 {
1848 LOGFN;
1849 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1850 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1851 _ecore_x_e_indicator_atom_get(state),
1852 0, 0, 0, 0);
1853 }
1854
1855 static Ecore_X_Atom
_ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)1856 _ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1857 {
1858 switch (mode)
1859 {
1860 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1861 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1862
1863 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1864 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1865
1866 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1867 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1868
1869 default:
1870 break;
1871 }
1872 return 0;
1873 }
1874
1875 static Ecore_X_Illume_Indicator_Opacity_Mode
_ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)1876 _ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1877 {
1878 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1879 return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1880
1881 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1882 return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1883
1884 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1885 return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1886
1887 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1888 }
1889
1890 EAPI void
ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_Opacity_Mode mode)1891 ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1892 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1893 {
1894 Ecore_X_Atom atom = 0;
1895
1896 LOGFN;
1897 atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1898 ecore_x_window_prop_atom_set(win,
1899 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1900 &atom, 1);
1901 }
1902
1903 EAPI Ecore_X_Illume_Indicator_Opacity_Mode
ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)1904 ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1905 {
1906 Ecore_X_Atom atom = 0;
1907
1908 LOGFN;
1909 if (!ecore_x_window_prop_atom_get(win,
1910 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1911 &atom, 1))
1912 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1913
1914 return _ecore_x_e_indicator_opacity_get(atom);
1915 }
1916
1917 EAPI void
ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_Opacity_Mode mode)1918 ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1919 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1920 {
1921 LOGFN;
1922 ecore_x_client_message32_send(win,
1923 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1924 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1925 _ecore_x_e_indicator_opacity_atom_get(mode),
1926 0, 0, 0, 0);
1927 }
1928
1929 static Ecore_X_Atom
_ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode)1930 _ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode)
1931 {
1932 switch (mode)
1933 {
1934 case ECORE_X_ILLUME_INDICATOR_TYPE_1:
1935 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1;
1936
1937 case ECORE_X_ILLUME_INDICATOR_TYPE_2:
1938 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2;
1939
1940 case ECORE_X_ILLUME_INDICATOR_TYPE_3:
1941 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_3;
1942
1943 default:
1944 break;
1945 }
1946 return 0;
1947 }
1948
1949 static Ecore_X_Illume_Indicator_Type_Mode
_ecore_x_e_indicator_type_get(Ecore_X_Atom atom)1950 _ecore_x_e_indicator_type_get(Ecore_X_Atom atom)
1951 {
1952 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1)
1953 return ECORE_X_ILLUME_INDICATOR_TYPE_1;
1954
1955 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2)
1956 return ECORE_X_ILLUME_INDICATOR_TYPE_2;
1957
1958 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_3)
1959 return ECORE_X_ILLUME_INDICATOR_TYPE_3;
1960
1961 return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN;
1962 }
1963
1964 EAPI void
ecore_x_e_illume_indicator_type_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_Type_Mode mode)1965 ecore_x_e_illume_indicator_type_set(Ecore_X_Window win,
1966 Ecore_X_Illume_Indicator_Type_Mode mode)
1967 {
1968 Ecore_X_Atom atom = 0;
1969
1970 LOGFN;
1971 atom = _ecore_x_e_indicator_type_atom_get(mode);
1972 ecore_x_window_prop_atom_set(win,
1973 ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1974 &atom, 1);
1975 }
1976
1977 EAPI Ecore_X_Illume_Indicator_Type_Mode
ecore_x_e_illume_indicator_type_get(Ecore_X_Window win)1978 ecore_x_e_illume_indicator_type_get(Ecore_X_Window win)
1979 {
1980 Ecore_X_Atom atom = 0;
1981
1982 LOGFN;
1983 if (!ecore_x_window_prop_atom_get(win,
1984 ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1985 &atom, 1))
1986 return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN;
1987
1988 return _ecore_x_e_indicator_type_get(atom);
1989 }
1990
1991 EAPI void
ecore_x_e_illume_indicator_type_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_Type_Mode mode)1992 ecore_x_e_illume_indicator_type_send(Ecore_X_Window win,
1993 Ecore_X_Illume_Indicator_Type_Mode mode)
1994 {
1995 LOGFN;
1996 ecore_x_client_message32_send(win,
1997 ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1998 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1999 _ecore_x_e_indicator_type_atom_get(mode),
2000 0, 0, 0, 0);
2001 }
2002
2003 static Ecore_X_Atom
_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)2004 _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
2005 {
2006 switch (state)
2007 {
2008 case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
2009 return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
2010
2011 case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
2012 return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
2013
2014 default:
2015 break;
2016 }
2017 return 0;
2018 }
2019
2020 static Ecore_X_Illume_Window_State
_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)2021 _ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
2022 {
2023 if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
2024 return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2025
2026 if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
2027 return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
2028
2029 return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2030 }
2031
2032 EAPI void
ecore_x_e_illume_window_state_set(Ecore_X_Window win,Ecore_X_Illume_Window_State state)2033 ecore_x_e_illume_window_state_set(Ecore_X_Window win,
2034 Ecore_X_Illume_Window_State state)
2035 {
2036 Ecore_X_Atom atom = 0;
2037
2038 LOGFN;
2039 atom = _ecore_x_e_illume_window_state_atom_get(state);
2040 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2041 &atom, 1);
2042 }
2043
2044 EAPI Ecore_X_Illume_Window_State
ecore_x_e_illume_window_state_get(Ecore_X_Window win)2045 ecore_x_e_illume_window_state_get(Ecore_X_Window win)
2046 {
2047 Ecore_X_Atom atom;
2048
2049 LOGFN;
2050 if (!ecore_x_window_prop_atom_get(win,
2051 ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2052 &atom, 1))
2053 return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2054
2055 return _ecore_x_e_illume_window_state_get(atom);
2056 }
2057
2058 EAPI void
ecore_x_e_illume_window_state_send(Ecore_X_Window win,Ecore_X_Illume_Window_State state)2059 ecore_x_e_illume_window_state_send(Ecore_X_Window win,
2060 Ecore_X_Illume_Window_State state)
2061 {
2062 LOGFN;
2063 ecore_x_client_message32_send(win,
2064 ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2065 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
2066 _ecore_x_e_illume_window_state_atom_get(state),
2067 0, 0, 0, 0);
2068 }
2069
2070 EAPI void
ecore_x_e_window_rotation_supported_set(Ecore_X_Window root,Eina_Bool enabled)2071 ecore_x_e_window_rotation_supported_set(Ecore_X_Window root,
2072 Eina_Bool enabled)
2073 {
2074 Ecore_X_Window win;
2075
2076 LOGFN;
2077
2078 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2079
2080 if (!root)
2081 root = DefaultRootWindow(_ecore_x_disp);
2082
2083 if (enabled)
2084 {
2085 win = ecore_x_window_new(root, 1, 2, 3, 4);
2086 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2087 ECORE_X_ATOM_WINDOW, &win, 1);
2088 ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2089 ECORE_X_ATOM_WINDOW, &win, 1);
2090 }
2091 else
2092 {
2093 int ret;
2094
2095 ret =
2096 ecore_x_window_prop_xid_get(root,
2097 ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2098 ECORE_X_ATOM_WINDOW,
2099 &win, 1);
2100 if ((ret == 1) && (win))
2101 {
2102 ecore_x_window_prop_property_del
2103 (root, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED);
2104 ecore_x_window_free(win);
2105 }
2106 }
2107 }
2108
2109 EAPI Eina_Bool
ecore_x_e_window_rotation_supported_get(Ecore_X_Window root)2110 ecore_x_e_window_rotation_supported_get(Ecore_X_Window root)
2111 {
2112 Ecore_X_Window win, win2;
2113 int ret;
2114
2115 LOGFN;
2116
2117 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
2118
2119 if (!root)
2120 root = DefaultRootWindow(_ecore_x_disp);
2121
2122 ret =
2123 ecore_x_window_prop_xid_get(root,
2124 ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2125 ECORE_X_ATOM_WINDOW,
2126 &win, 1);
2127 if ((ret == 1) && (win))
2128 {
2129 ret =
2130 ecore_x_window_prop_xid_get(win,
2131 ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2132 ECORE_X_ATOM_WINDOW,
2133 &win2, 1);
2134 if ((ret == 1) && (win2 == win))
2135 return EINA_TRUE;
2136 }
2137
2138 return EINA_FALSE;
2139 }
2140
2141 EAPI void
ecore_x_e_window_rotation_app_set(Ecore_X_Window win,Eina_Bool set)2142 ecore_x_e_window_rotation_app_set(Ecore_X_Window win,
2143 Eina_Bool set)
2144 {
2145 unsigned int val = 0;
2146
2147 LOGFN;
2148
2149 if (set) val = 1;
2150
2151 ecore_x_window_prop_card32_set(win,
2152 ECORE_X_ATOM_E_WINDOW_ROTATION_APP_SUPPORTED,
2153 &val, 1);
2154 }
2155
2156 EAPI Eina_Bool
ecore_x_e_window_rotation_app_get(Ecore_X_Window win)2157 ecore_x_e_window_rotation_app_get(Ecore_X_Window win)
2158 {
2159 unsigned int val = 0;
2160
2161 LOGFN;
2162 if (!ecore_x_window_prop_card32_get(win,
2163 ECORE_X_ATOM_E_WINDOW_ROTATION_APP_SUPPORTED,
2164 &val, 1))
2165 return EINA_FALSE;
2166
2167 return val ? EINA_TRUE : EINA_FALSE;
2168 }
2169
2170 EAPI void
ecore_x_e_window_rotation_preferred_rotation_set(Ecore_X_Window win,int rot)2171 ecore_x_e_window_rotation_preferred_rotation_set(Ecore_X_Window win,
2172 int rot)
2173 {
2174 unsigned int val = 0;
2175
2176 LOGFN;
2177
2178 if (rot != -1)
2179 {
2180 val = (unsigned int)rot;
2181 ecore_x_window_prop_card32_set(win,
2182 ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION,
2183 &val, 1);
2184 }
2185 else
2186 {
2187 ecore_x_window_prop_property_del(win,
2188 ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION);
2189 }
2190 }
2191
2192 EAPI Eina_Bool
ecore_x_e_window_rotation_preferred_rotation_get(Ecore_X_Window win,int * rot)2193 ecore_x_e_window_rotation_preferred_rotation_get(Ecore_X_Window win,
2194 int *rot)
2195 {
2196 unsigned int val = 0;
2197 int ret = 0;
2198
2199 LOGFN;
2200
2201 ret = ecore_x_window_prop_card32_get(win,
2202 ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION,
2203 &val, 1);
2204 if (ret == 1)
2205 {
2206 if (rot) *rot = (int)val;
2207 return EINA_TRUE;
2208 }
2209 return EINA_FALSE;
2210 }
2211
2212 EAPI void
ecore_x_e_window_rotation_available_rotations_set(Ecore_X_Window win,const int * rots,unsigned int count)2213 ecore_x_e_window_rotation_available_rotations_set(Ecore_X_Window win,
2214 const int *rots,
2215 unsigned int count)
2216 {
2217 LOGFN;
2218
2219 if (!win) return;
2220
2221 if ((rots) && (count > 0))
2222 ecore_x_window_prop_card32_set(win,
2223 ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST,
2224 (unsigned int *)rots, count);
2225 else
2226 ecore_x_window_prop_property_del(win,
2227 ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST);
2228 }
2229
2230 EAPI Eina_Bool
ecore_x_e_window_rotation_available_rotations_get(Ecore_X_Window win,int ** rots,unsigned int * count)2231 ecore_x_e_window_rotation_available_rotations_get(Ecore_X_Window win,
2232 int **rots,
2233 unsigned int *count)
2234 {
2235 unsigned char *data = NULL;
2236 int num, i;
2237 int *val = NULL;
2238
2239 LOGFN;
2240
2241 if ((!win) || (!rots) || (!count))
2242 return EINA_FALSE;
2243
2244 *rots = NULL;
2245 *count = 0;
2246
2247 if (!ecore_x_window_prop_property_get(win,
2248 ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST,
2249 XA_CARDINAL, 32, &data, &num))
2250 return EINA_FALSE;
2251
2252 *count = num;
2253
2254 if ((num >= 1) && (data))
2255 {
2256 val = calloc(num, sizeof(int));
2257 if (!val)
2258 {
2259 if (data) XFree(data);
2260 return EINA_FALSE;
2261 }
2262 for (i = 0; i < num; i++)
2263 val[i] = ((int *)data)[i];
2264 if (data) XFree(data);
2265 *rots = val;
2266 return EINA_TRUE;
2267 }
2268 if (data) XFree(data);
2269 return EINA_FALSE;
2270 }
2271
2272 EAPI void
ecore_x_e_window_rotation_change_prepare_send(Ecore_X_Window win,int rot,Eina_Bool resize,int w,int h)2273 ecore_x_e_window_rotation_change_prepare_send(Ecore_X_Window win,
2274 int rot,
2275 Eina_Bool resize,
2276 int w,
2277 int h)
2278 {
2279 LOGFN;
2280 ecore_x_client_message32_send
2281 (win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE,
2282 ECORE_X_EVENT_MASK_NONE,
2283 win, rot, resize, w, h);
2284 }
2285
2286 EAPI void
ecore_x_e_window_rotation_change_prepare_done_send(Ecore_X_Window root,Ecore_X_Window win,int rot)2287 ecore_x_e_window_rotation_change_prepare_done_send(Ecore_X_Window root,
2288 Ecore_X_Window win,
2289 int rot)
2290 {
2291 XEvent xev = { 0 };
2292
2293 LOGFN;
2294
2295 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2296
2297 if (!root)
2298 root = DefaultRootWindow(_ecore_x_disp);
2299
2300 xev.xclient.type = ClientMessage;
2301 xev.xclient.display = _ecore_x_disp;
2302 xev.xclient.window = win;
2303 xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE_DONE;
2304 xev.xclient.format = 32;
2305 xev.xclient.data.l[0] = win;
2306 xev.xclient.data.l[1] = rot;
2307 xev.xclient.data.l[2] = 0;
2308 xev.xclient.data.l[3] = 0;
2309 xev.xclient.data.l[4] = 0;
2310
2311 XSendEvent(_ecore_x_disp, root, False,
2312 SubstructureRedirectMask | SubstructureNotifyMask,
2313 &xev);
2314 }
2315
2316 EAPI void
ecore_x_e_window_rotation_change_request_send(Ecore_X_Window win,int rot)2317 ecore_x_e_window_rotation_change_request_send(Ecore_X_Window win,
2318 int rot)
2319 {
2320 LOGFN;
2321 ecore_x_client_message32_send
2322 (win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST,
2323 ECORE_X_EVENT_MASK_NONE,
2324 win, rot, 0, 0, 0);
2325 }
2326
2327 EAPI void
ecore_x_e_window_rotation_change_done_send(Ecore_X_Window root,Ecore_X_Window win,int rot,int w,int h)2328 ecore_x_e_window_rotation_change_done_send(Ecore_X_Window root,
2329 Ecore_X_Window win,
2330 int rot,
2331 int w,
2332 int h)
2333 {
2334 XEvent xev = { 0 };
2335
2336 LOGFN;
2337
2338 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2339
2340 if (!root)
2341 root = DefaultRootWindow(_ecore_x_disp);
2342
2343 xev.xclient.type = ClientMessage;
2344 xev.xclient.display = _ecore_x_disp;
2345 xev.xclient.window = win;
2346 xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_DONE;
2347 xev.xclient.format = 32;
2348 xev.xclient.data.l[0] = win;
2349 xev.xclient.data.l[1] = rot;
2350 xev.xclient.data.l[2] = w;
2351 xev.xclient.data.l[3] = h;
2352 xev.xclient.data.l[4] = 0;
2353
2354 XSendEvent(_ecore_x_disp, root, False,
2355 SubstructureRedirectMask | SubstructureNotifyMask,
2356 &xev);
2357 }
2358
2359 /*
2360 * Does keyrouter exist?
2361 */
2362 EAPI void
ecore_x_e_keyrouter_set(Ecore_X_Window win EINA_UNUSED,Eina_Bool on)2363 ecore_x_e_keyrouter_set(Ecore_X_Window win EINA_UNUSED,
2364 Eina_Bool on)
2365 {
2366 //key router call this api when it start running
2367 unsigned int val;
2368 Ecore_X_Window root;
2369
2370 LOGFN;
2371
2372 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2373
2374 root = DefaultRootWindow(_ecore_x_disp);
2375
2376 val = (on) ? 1 : 0;
2377 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_E_KEYROUTER_SUPPORTED,
2378 &val, 1);
2379 }
2380
2381 EAPI Eina_Bool
ecore_x_e_keyrouter_get(Ecore_X_Window win EINA_UNUSED)2382 ecore_x_e_keyrouter_get(Ecore_X_Window win EINA_UNUSED)
2383 {
2384 //check the existance of keyrouter
2385 int ret;
2386 unsigned int val;
2387 Ecore_X_Window root;
2388
2389 LOGFN;
2390
2391 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
2392
2393 root = DefaultRootWindow(_ecore_x_disp);
2394
2395 ret = ecore_x_window_prop_card32_get(root, ECORE_X_ATOM_E_KEYROUTER_SUPPORTED,
2396 &val, 1);
2397 if (ret != 1) return EINA_FALSE;
2398
2399 return val == 1 ? EINA_TRUE : EINA_FALSE;
2400 }
2401
2402 EAPI void
ecore_x_e_stack_type_set(Ecore_X_Window win,Ecore_X_Stack_Type stack_type)2403 ecore_x_e_stack_type_set(Ecore_X_Window win,
2404 Ecore_X_Stack_Type stack_type)
2405 {
2406 unsigned int val = stack_type;
2407 LOGFN;
2408
2409 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2410
2411 if (stack_type == ECORE_X_STACK_NONE)
2412 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_STACK_TYPE);
2413 else
2414 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_STACK_TYPE,
2415 &val, 1);
2416 }
2417
2418 EAPI Ecore_X_Stack_Type
ecore_x_e_stack_type_get(Ecore_X_Window win)2419 ecore_x_e_stack_type_get(Ecore_X_Window win)
2420 {
2421 int ret;
2422 unsigned int val;
2423 LOGFN;
2424
2425 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_NONE);
2426
2427 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_STACK_TYPE,
2428 &val, 1);
2429 if (ret != 1) return ECORE_X_STACK_NONE;
2430 if (val >= ECORE_X_STACK_LAST) val = ECORE_X_STACK_STANDARD;
2431 return (Ecore_X_Stack_Type)val;
2432 }
2433
2434 EAPI void
ecore_x_e_stack_position_set(Ecore_X_Window win,Ecore_X_Stack_Position stack_position)2435 ecore_x_e_stack_position_set(Ecore_X_Window win,
2436 Ecore_X_Stack_Position stack_position)
2437 {
2438 unsigned int val = stack_position;
2439 LOGFN;
2440
2441 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2442
2443 if (stack_position == ECORE_X_STACK_POSITION_NONE)
2444 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_STACK_POSITION);
2445 else
2446 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_STACK_POSITION,
2447 &val, 1);
2448 }
2449
2450 EAPI Ecore_X_Stack_Position
ecore_x_e_stack_position_get(Ecore_X_Window win)2451 ecore_x_e_stack_position_get(Ecore_X_Window win)
2452 {
2453 int ret;
2454 unsigned int val;
2455 LOGFN;
2456
2457 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_POSITION_NONE);
2458
2459 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_STACK_POSITION,
2460 &val, 1);
2461 if (ret != 1) return ECORE_X_STACK_POSITION_NONE;
2462 if (val >= ECORE_X_STACK_POSITION_LAST) val = ECORE_X_STACK_POSITION_BOTTOM;
2463 return (Ecore_X_Stack_Position)val;
2464 }
2465