aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_x
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 17:29:19 +1000
committerDavid Walter Seikel2013-01-13 17:29:19 +1000
commit07274513e984f0b5544586c74508ccd16e7dcafa (patch)
treeb32ff2a9136fbc1a4a6a0ed1e4d79cde0f5f16d9 /libraries/ecore/src/lib/ecore_x
parentAdded Irrlicht 1.8, but without all the Windows binaries. (diff)
downloadSledjHamr-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 'libraries/ecore/src/lib/ecore_x')
-rw-r--r--libraries/ecore/src/lib/ecore_x/Ecore_X.h3714
-rw-r--r--libraries/ecore/src/lib/ecore_x/Ecore_X_Atoms.h269
-rw-r--r--libraries/ecore/src/lib/ecore_x/Ecore_X_Cursor.h87
-rw-r--r--libraries/ecore/src/lib/ecore_x/Makefile.am30
-rw-r--r--libraries/ecore/src/lib/ecore_x/Makefile.in948
-rw-r--r--libraries/ecore/src/lib/ecore_x/ecore_x_atoms_decl.h295
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/Makefile.am99
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/Makefile.in905
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb.c1470
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_atoms.c421
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c289
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c400
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c155
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c688
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dpms.c318
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_drawable.c123
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c1307
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_error.c123
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c2805
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_extensions.c148
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gc.c173
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gesture.c203
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_icccm.c1569
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_image.c740
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_input.c274
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c490
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_mwm.c104
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c1575
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c128
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h451
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c3699
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_region.c159
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c225
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c338
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c1039
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c50
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c338
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_textlist.c509
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_vsync.c375
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c2234
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_prop.c720
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c408
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c790
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xdefaults.c116
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c750
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xinerama.c139
-rw-r--r--libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xtest.c215
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/Makefile.am94
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/Makefile.in888
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x.c2098
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_atoms.c367
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_composite.c176
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_cursor.c246
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_damage.c71
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dnd.c706
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dpms.c247
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_drawable.c118
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_e.c1293
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c125
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_events.c2487
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_fixes.c365
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gc.c171
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gesture.c136
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_icccm.c1214
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_image.c600
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_mwm.c106
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c2056
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_pixmap.c121
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_private.h385
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.c102
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.h7
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_11.c335
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12.c2360
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12_edid.c463
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_13.c68
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_region.c158
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c173
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c1002
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c159
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_test.c167
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_vsync.c351
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window.c1723
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_prop.c752
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_shape.c658
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xi2.c283
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xinerama.c91
86 files changed, 0 insertions, 55327 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/Ecore_X.h b/libraries/ecore/src/lib/ecore_x/Ecore_X.h
deleted file mode 100644
index 336b656..0000000
--- a/libraries/ecore/src/lib/ecore_x/Ecore_X.h
+++ /dev/null
@@ -1,3714 +0,0 @@
1#ifndef _ECORE_X_H
2#define _ECORE_X_H
3
4#include <Eina.h>
5
6#ifdef EAPI
7# undef EAPI
8#endif // ifdef EAPI
9
10#ifdef _MSC_VER
11# ifdef BUILDING_DLL
12# define EAPI __declspec(dllexport)
13# else // ifdef BUILDING_DLL
14# define EAPI __declspec(dllimport)
15# endif // ifdef BUILDING_DLL
16#else // ifdef _MSC_VER
17# ifdef __GNUC__
18# if __GNUC__ >= 4
19# define EAPI __attribute__ ((visibility("default")))
20# else // if __GNUC__ >= 4
21# define EAPI
22# endif // if __GNUC__ >= 4
23# else // ifdef __GNUC__
24# define EAPI
25# endif // ifdef __GNUC__
26#endif // ifdef _MSC_VER
27
28#include <sys/types.h>
29
30/**
31 * @file
32 * @brief Ecore functions for dealing with the X Windows System
33 *
34 * Ecore_X provides a wrapper and convenience functions for using the
35 * X Windows System. Function groups for this part of the library
36 * include the following:
37 * @li @ref Ecore_X_Init_Group
38 * @li @ref Ecore_X_Display_Attr_Group
39 * @li @ref Ecore_X_Flush_Group
40 */
41
42typedef unsigned int Ecore_X_ID;
43#ifndef _ECORE_X_WINDOW_PREDEF
44typedef Ecore_X_ID Ecore_X_Window;
45#endif // ifndef _ECORE_X_WINDOW_PREDEF
46typedef void *Ecore_X_Visual;
47typedef Ecore_X_ID Ecore_X_Pixmap;
48typedef Ecore_X_ID Ecore_X_Drawable;
49#ifdef HAVE_ECORE_X_XCB
50typedef Ecore_X_ID Ecore_X_GC;
51#else // ifdef HAVE_ECORE_X_XCB
52typedef void *Ecore_X_GC;
53#endif /* HAVE_ECORE_X_XCB */
54typedef Ecore_X_ID Ecore_X_Atom;
55typedef Ecore_X_ID Ecore_X_Colormap;
56typedef Ecore_X_ID Ecore_X_Time;
57typedef Ecore_X_ID Ecore_X_Cursor;
58typedef void Ecore_X_Display;
59typedef void Ecore_X_Connection;
60typedef void Ecore_X_Screen;
61typedef Ecore_X_ID Ecore_X_Sync_Counter;
62typedef Ecore_X_ID Ecore_X_Sync_Alarm;
63typedef void Ecore_X_XRegion;
64
65typedef Ecore_X_ID Ecore_X_Randr_Output;
66typedef Ecore_X_ID Ecore_X_Randr_Crtc;
67typedef Ecore_X_ID Ecore_X_Randr_Mode;
68typedef unsigned short Ecore_X_Randr_Size_ID;
69typedef int Ecore_X_Randr_Screen;
70
71typedef Ecore_X_ID Ecore_X_Device;
72
73#ifdef __cplusplus
74extern "C" {
75#endif // ifdef __cplusplus
76
77typedef struct _Ecore_X_Rectangle
78{
79 int x, y;
80 unsigned int width, height;
81} Ecore_X_Rectangle;
82
83typedef struct _Ecore_X_Icon
84{
85 unsigned int width, height;
86 unsigned int *data;
87} Ecore_X_Icon;
88
89typedef enum _Ecore_X_GC_Value_Mask
90{
91 ECORE_X_GC_VALUE_MASK_FUNCTION = (1L << 0),
92 ECORE_X_GC_VALUE_MASK_PLANE_MASK = (1L << 1),
93 ECORE_X_GC_VALUE_MASK_FOREGROUND = (1L << 2),
94 ECORE_X_GC_VALUE_MASK_BACKGROUND = (1L << 3),
95 ECORE_X_GC_VALUE_MASK_LINE_WIDTH = (1L << 4),
96 ECORE_X_GC_VALUE_MASK_LINE_STYLE = (1L << 5),
97 ECORE_X_GC_VALUE_MASK_CAP_STYLE = (1L << 6),
98 ECORE_X_GC_VALUE_MASK_JOIN_STYLE = (1L << 7),
99 ECORE_X_GC_VALUE_MASK_FILL_STYLE = (1L << 8),
100 ECORE_X_GC_VALUE_MASK_FILL_RULE = (1L << 9),
101 ECORE_X_GC_VALUE_MASK_TILE = (1L << 10),
102 ECORE_X_GC_VALUE_MASK_STIPPLE = (1L << 11),
103 ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X = (1L << 12),
104 ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y = (1L << 13),
105 ECORE_X_GC_VALUE_MASK_FONT = (1L << 14),
106 ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE = (1L << 15),
107 ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES = (1L << 16),
108 ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X = (1L << 17),
109 ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y = (1L << 18),
110 ECORE_X_GC_VALUE_MASK_CLIP_MASK = (1L << 19),
111 ECORE_X_GC_VALUE_MASK_DASH_OFFSET = (1L << 20),
112 ECORE_X_GC_VALUE_MASK_DASH_LIST = (1L << 21),
113 ECORE_X_GC_VALUE_MASK_ARC_MODE = (1L << 22)
114} Ecore_X_GC_Value_Mask;
115
116typedef enum _Ecore_X_Composite_Update_Type
117{
118 ECORE_X_COMPOSITE_UPDATE_AUTOMATIC,
119 ECORE_X_COMPOSITE_UPDATE_MANUAL
120} Ecore_X_Composite_Update_Type;
121
122typedef enum _Ecore_X_Window_State
123{
124 /* Unknown state */
125 ECORE_X_WINDOW_STATE_UNKNOWN = 0,
126 /** The window is iconified. */
127 ECORE_X_WINDOW_STATE_ICONIFIED,
128 /** The window is a modal dialog box. */
129 ECORE_X_WINDOW_STATE_MODAL,
130 /** The window manager should keep the window's position fixed
131 * even if the virtual desktop scrolls. */
132 ECORE_X_WINDOW_STATE_STICKY,
133 /** The window has the maximum vertical size. */
134 ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
135 /** The window has the maximum horizontal size. */
136 ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
137 /** The window is shaded. */
138 ECORE_X_WINDOW_STATE_SHADED,
139 /** The window should not be included in the taskbar. */
140 ECORE_X_WINDOW_STATE_SKIP_TASKBAR,
141 /** The window should not be included in the pager. */
142 ECORE_X_WINDOW_STATE_SKIP_PAGER,
143 /** The window is invisible (i.e. minimized/iconified) */
144 ECORE_X_WINDOW_STATE_HIDDEN,
145 /** The window should fill the entire screen and have no
146 * window border/decorations */
147 ECORE_X_WINDOW_STATE_FULLSCREEN,
148 /* The following are not documented because they are not
149 * intended for use in applications. */
150 ECORE_X_WINDOW_STATE_ABOVE,
151 ECORE_X_WINDOW_STATE_BELOW,
152 /* FIXME: Documentation */
153 ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION
154} Ecore_X_Window_State;
155
156typedef enum _Ecore_X_Window_State_Action
157{
158 ECORE_X_WINDOW_STATE_ACTION_REMOVE,
159 ECORE_X_WINDOW_STATE_ACTION_ADD,
160 ECORE_X_WINDOW_STATE_ACTION_TOGGLE
161} Ecore_X_Window_State_Action;
162
163typedef enum _Ecore_X_Window_Stack_Mode
164{
165 ECORE_X_WINDOW_STACK_ABOVE = 0,
166 ECORE_X_WINDOW_STACK_BELOW = 1,
167 ECORE_X_WINDOW_STACK_TOP_IF = 2,
168 ECORE_X_WINDOW_STACK_BOTTOM_IF = 3,
169 ECORE_X_WINDOW_STACK_OPPOSITE = 4
170} Ecore_X_Window_Stack_Mode;
171
172typedef enum _Ecore_X_Randr_Orientation
173{
174 ECORE_X_RANDR_ORIENTATION_ROT_0 = (1 << 0),
175 ECORE_X_RANDR_ORIENTATION_ROT_90 = (1 << 1),
176 ECORE_X_RANDR_ORIENTATION_ROT_180 = (1 << 2),
177 ECORE_X_RANDR_ORIENTATION_ROT_270 = (1 << 3),
178 ECORE_X_RANDR_ORIENTATION_FLIP_X = (1 << 4),
179 ECORE_X_RANDR_ORIENTATION_FLIP_Y = (1 << 5)
180} Ecore_X_Randr_Orientation;
181
182typedef enum _Ecore_X_Randr_Connection_Status
183{
184 ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED = 0,
185 ECORE_X_RANDR_CONNECTION_STATUS_DISCONNECTED = 1,
186 ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN = 2
187} Ecore_X_Randr_Connection_Status;
188
189typedef enum _Ecore_X_Randr_Output_Policy
190{
191 ECORE_X_RANDR_OUTPUT_POLICY_ABOVE = 1,
192 ECORE_X_RANDR_OUTPUT_POLICY_RIGHT = 2,
193 ECORE_X_RANDR_OUTPUT_POLICY_BELOW = 3,
194 ECORE_X_RANDR_OUTPUT_POLICY_LEFT = 4,
195 ECORE_X_RANDR_OUTPUT_POLICY_CLONE = 5,
196 ECORE_X_RANDR_OUTPUT_POLICY_NONE = 6
197} Ecore_X_Randr_Output_Policy;
198
199typedef enum _Ecore_X_Randr_Relative_Alignment
200{
201 ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE = 0,
202 ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL = 1,
203 ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR = 2
204} Ecore_X_Randr_Relative_Alignment;
205
206typedef enum _Ecore_X_Render_Subpixel_Order
207{
208 ECORE_X_RENDER_SUBPIXEL_ORDER_UNKNOWN = 0,
209 ECORE_X_RENDER_SUBPIXEL_ORDER_HORIZONTAL_RGB = 1,
210 ECORE_X_RENDER_SUBPIXEL_ORDER_HORIZONTAL_BGR = 2,
211 ECORE_X_RENDER_SUBPIXEL_ORDER_VERTICAL_RGB = 3,
212 ECORE_X_RENDER_SUBPIXEL_ORDER_VERTICAL_BGR = 4,
213 ECORE_X_RENDER_SUBPIXEL_ORDER_NONE = 5
214} Ecore_X_Render_Subpixel_Order;
215
216typedef enum _Ecore_X_Randr_Edid_Display_Interface_Type
217{
218 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_UNDEFINED,
219 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_DVI,
220 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_HDMI_A,
221 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_HDMI_B,
222 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_MDDI,
223 ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_DISPLAY_PORT
224} Ecore_X_Randr_Edid_Display_Interface_Type;
225
226typedef enum _Ecore_X_Randr_Edid_Display_Colorscheme
227{
228 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_MONOCHROME_GRAYSCALE = 0x00,
229 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB = 0x08,
230 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_NON_RGB = 0x10,
231 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_UNDEFINED = 0x18,
232 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_4_4_4 = 0x444000,
233 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_YCRCB_4_4_4 = 0x444,
234 ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_YCRCB_4_2_2 = 0x422
235} Ecore_X_Randr_Edid_Display_Colorscheme;
236
237typedef enum _Ecore_X_Randr_Edid_Aspect_Ratio
238{
239 ECORE_X_RANDR_EDID_ASPECT_RATIO_4_3 = 0x0,
240 ECORE_X_RANDR_EDID_ASPECT_RATIO_16_9 = 0x1,
241 ECORE_X_RANDR_EDID_ASPECT_RATIO_16_10 = 0x2,
242 ECORE_X_RANDR_EDID_ASPECT_RATIO_5_4 = 0x4,
243 ECORE_X_RANDR_EDID_ASPECT_RATIO_15_9 = 0x8
244} Ecore_X_Randr_Edid_Aspect_Ratio;
245
246#define ECORE_X_RANDR_EDID_UNKNOWN_VALUE -1
247
248#define ECORE_X_SELECTION_TARGET_TARGETS "TARGETS"
249#define ECORE_X_SELECTION_TARGET_TEXT "TEXT"
250#define ECORE_X_SELECTION_TARGET_COMPOUND_TEXT "COMPOUND_TEXT"
251#define ECORE_X_SELECTION_TARGET_STRING "STRING"
252#define ECORE_X_SELECTION_TARGET_UTF8_STRING "UTF8_STRING"
253#define ECORE_X_SELECTION_TARGET_FILENAME "FILENAME"
254
255#define ECORE_X_DND_VERSION 5
256
257typedef enum _Ecore_X_Selection
258{
259 ECORE_X_SELECTION_PRIMARY,
260 ECORE_X_SELECTION_SECONDARY,
261 ECORE_X_SELECTION_XDND,
262 ECORE_X_SELECTION_CLIPBOARD,
263 ECORE_X_SELECTION_OTHER
264} Ecore_X_Selection;
265
266typedef enum _Ecore_X_Event_Mode
267{
268 ECORE_X_EVENT_MODE_NORMAL,
269 ECORE_X_EVENT_MODE_WHILE_GRABBED,
270 ECORE_X_EVENT_MODE_GRAB,
271 ECORE_X_EVENT_MODE_UNGRAB
272} Ecore_X_Event_Mode;
273
274typedef enum _Ecore_X_Event_Detail
275{
276 ECORE_X_EVENT_DETAIL_ANCESTOR,
277 ECORE_X_EVENT_DETAIL_VIRTUAL,
278 ECORE_X_EVENT_DETAIL_INFERIOR,
279 ECORE_X_EVENT_DETAIL_NON_LINEAR,
280 ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL,
281 ECORE_X_EVENT_DETAIL_POINTER,
282 ECORE_X_EVENT_DETAIL_POINTER_ROOT,
283 ECORE_X_EVENT_DETAIL_DETAIL_NONE
284} Ecore_X_Event_Detail;
285
286typedef enum _Ecore_X_Event_Mask
287{
288 ECORE_X_EVENT_MASK_NONE = 0L,
289 ECORE_X_EVENT_MASK_KEY_DOWN = (1L << 0),
290 ECORE_X_EVENT_MASK_KEY_UP = (1L << 1),
291 ECORE_X_EVENT_MASK_MOUSE_DOWN = (1L << 2),
292 ECORE_X_EVENT_MASK_MOUSE_UP = (1L << 3),
293 ECORE_X_EVENT_MASK_MOUSE_IN = (1L << 4),
294 ECORE_X_EVENT_MASK_MOUSE_OUT = (1L << 5),
295 ECORE_X_EVENT_MASK_MOUSE_MOVE = (1L << 6),
296 ECORE_X_EVENT_MASK_WINDOW_DAMAGE = (1L << 15),
297 ECORE_X_EVENT_MASK_WINDOW_VISIBILITY = (1L << 16),
298 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE = (1L << 17),
299 ECORE_X_EVENT_MASK_WINDOW_RESIZE_MANAGE = (1L << 18),
300 ECORE_X_EVENT_MASK_WINDOW_MANAGE = (1L << 19),
301 ECORE_X_EVENT_MASK_WINDOW_CHILD_CONFIGURE = (1L << 20),
302 ECORE_X_EVENT_MASK_WINDOW_FOCUS_CHANGE = (1L << 21),
303 ECORE_X_EVENT_MASK_WINDOW_PROPERTY = (1L << 22),
304 ECORE_X_EVENT_MASK_WINDOW_COLORMAP = (1L << 23),
305 ECORE_X_EVENT_MASK_WINDOW_GRAB = (1L << 24),
306 ECORE_X_EVENT_MASK_MOUSE_WHEEL = (1L << 29),
307 ECORE_X_EVENT_MASK_WINDOW_FOCUS_IN = (1L << 30),
308 ECORE_X_EVENT_MASK_WINDOW_FOCUS_OUT = (1L << 31)
309} Ecore_X_Event_Mask;
310
311typedef enum _Ecore_X_Gravity
312{
313 ECORE_X_GRAVITY_FORGET = 0,
314 ECORE_X_GRAVITY_UNMAP = 0,
315 ECORE_X_GRAVITY_NW = 1,
316 ECORE_X_GRAVITY_N = 2,
317 ECORE_X_GRAVITY_NE = 3,
318 ECORE_X_GRAVITY_W = 4,
319 ECORE_X_GRAVITY_CENTER = 5,
320 ECORE_X_GRAVITY_E = 6,
321 ECORE_X_GRAVITY_SW = 7,
322 ECORE_X_GRAVITY_S = 8,
323 ECORE_X_GRAVITY_SE = 9,
324 ECORE_X_GRAVITY_STATIC = 10
325} Ecore_X_Gravity;
326
327/* Needed for ecore_x_region_window_shape_set */
328typedef enum _Ecore_X_Shape_Type
329{
330 ECORE_X_SHAPE_BOUNDING,
331 ECORE_X_SHAPE_CLIP,
332 ECORE_X_SHAPE_INPUT
333} Ecore_X_Shape_Type;
334
335typedef enum _Ecore_X_Mapping_Type
336{
337 ECORE_X_MAPPING_MODIFIER,
338 ECORE_X_MAPPING_KEYBOARD,
339 ECORE_X_MAPPING_MOUSE
340} Ecore_X_Mapping_Type;
341
342typedef enum _Ecore_X_Randr_Property_Change
343{
344 ECORE_X_RANDR_PROPERTY_CHANGE_ADD,
345 ECORE_X_RANDR_PROPERTY_CHANGE_DEL
346} Ecore_X_Randr_Property_Change;
347
348typedef struct _Ecore_X_Event_Mouse_In Ecore_X_Event_Mouse_In;
349typedef struct _Ecore_X_Event_Mouse_Out Ecore_X_Event_Mouse_Out;
350typedef struct _Ecore_X_Event_Window_Focus_In Ecore_X_Event_Window_Focus_In;
351typedef struct _Ecore_X_Event_Window_Focus_Out Ecore_X_Event_Window_Focus_Out;
352typedef struct _Ecore_X_Event_Window_Keymap Ecore_X_Event_Window_Keymap;
353typedef struct _Ecore_X_Event_Window_Damage Ecore_X_Event_Window_Damage;
354typedef struct _Ecore_X_Event_Window_Visibility_Change Ecore_X_Event_Window_Visibility_Change;
355typedef struct _Ecore_X_Event_Window_Create Ecore_X_Event_Window_Create;
356typedef struct _Ecore_X_Event_Window_Destroy Ecore_X_Event_Window_Destroy;
357typedef struct _Ecore_X_Event_Window_Hide Ecore_X_Event_Window_Hide;
358typedef struct _Ecore_X_Event_Window_Show Ecore_X_Event_Window_Show;
359typedef struct _Ecore_X_Event_Window_Show_Request Ecore_X_Event_Window_Show_Request;
360typedef struct _Ecore_X_Event_Window_Reparent Ecore_X_Event_Window_Reparent;
361typedef struct _Ecore_X_Event_Window_Configure Ecore_X_Event_Window_Configure;
362typedef struct _Ecore_X_Event_Window_Configure_Request Ecore_X_Event_Window_Configure_Request;
363typedef struct _Ecore_X_Event_Window_Gravity Ecore_X_Event_Window_Gravity;
364typedef struct _Ecore_X_Event_Window_Resize_Request Ecore_X_Event_Window_Resize_Request;
365typedef struct _Ecore_X_Event_Window_Stack Ecore_X_Event_Window_Stack;
366typedef struct _Ecore_X_Event_Window_Stack_Request Ecore_X_Event_Window_Stack_Request;
367typedef struct _Ecore_X_Event_Window_Property Ecore_X_Event_Window_Property;
368typedef struct _Ecore_X_Event_Window_Colormap Ecore_X_Event_Window_Colormap;
369typedef struct _Ecore_X_Event_Mapping_Change Ecore_X_Event_Mapping_Change;
370typedef struct _Ecore_X_Event_Window_Mapping Ecore_X_Event_Window_Mapping;
371typedef struct _Ecore_X_Event_Selection_Clear Ecore_X_Event_Selection_Clear;
372typedef struct _Ecore_X_Event_Selection_Request Ecore_X_Event_Selection_Request;
373typedef struct _Ecore_X_Event_Selection_Notify Ecore_X_Event_Selection_Notify;
374typedef struct _Ecore_X_Event_Fixes_Selection_Notify Ecore_X_Event_Fixes_Selection_Notify;
375typedef struct _Ecore_X_Selection_Data Ecore_X_Selection_Data;
376typedef struct _Ecore_X_Selection_Data_Files Ecore_X_Selection_Data_Files;
377typedef struct _Ecore_X_Selection_Data_Text Ecore_X_Selection_Data_Text;
378typedef struct _Ecore_X_Selection_Data_Targets Ecore_X_Selection_Data_Targets;
379typedef struct _Ecore_X_Event_Xdnd_Enter Ecore_X_Event_Xdnd_Enter;
380typedef struct _Ecore_X_Event_Xdnd_Position Ecore_X_Event_Xdnd_Position;
381typedef struct _Ecore_X_Event_Xdnd_Status Ecore_X_Event_Xdnd_Status;
382typedef struct _Ecore_X_Event_Xdnd_Leave Ecore_X_Event_Xdnd_Leave;
383typedef struct _Ecore_X_Event_Xdnd_Drop Ecore_X_Event_Xdnd_Drop;
384typedef struct _Ecore_X_Event_Xdnd_Finished Ecore_X_Event_Xdnd_Finished;
385typedef struct _Ecore_X_Event_Client_Message Ecore_X_Event_Client_Message;
386typedef struct _Ecore_X_Event_Window_Shape Ecore_X_Event_Window_Shape;
387typedef struct _Ecore_X_Event_Screensaver_Notify Ecore_X_Event_Screensaver_Notify;
388typedef struct _Ecore_X_Event_Gesture_Notify_Flick Ecore_X_Event_Gesture_Notify_Flick;
389typedef struct _Ecore_X_Event_Gesture_Notify_Pan Ecore_X_Event_Gesture_Notify_Pan;
390typedef struct _Ecore_X_Event_Gesture_Notify_PinchRotation Ecore_X_Event_Gesture_Notify_PinchRotation;
391typedef struct _Ecore_X_Event_Gesture_Notify_Tap Ecore_X_Event_Gesture_Notify_Tap;
392typedef struct _Ecore_X_Event_Gesture_Notify_TapNHold Ecore_X_Event_Gesture_Notify_TapNHold;
393typedef struct _Ecore_X_Event_Gesture_Notify_Hold Ecore_X_Event_Gesture_Notify_Hold;
394typedef struct _Ecore_X_Event_Gesture_Notify_Group Ecore_X_Event_Gesture_Notify_Group;
395typedef struct _Ecore_X_Event_Sync_Counter Ecore_X_Event_Sync_Counter;
396typedef struct _Ecore_X_Event_Sync_Alarm Ecore_X_Event_Sync_Alarm;
397typedef struct _Ecore_X_Event_Screen_Change Ecore_X_Event_Screen_Change;
398typedef struct _Ecore_X_Event_Randr_Crtc_Change Ecore_X_Event_Randr_Crtc_Change;
399typedef struct _Ecore_X_Event_Randr_Output_Change Ecore_X_Event_Randr_Output_Change;
400typedef struct _Ecore_X_Event_Randr_Output_Property_Notify Ecore_X_Event_Randr_Output_Property_Notify;
401
402typedef struct _Ecore_X_Event_Window_Delete_Request Ecore_X_Event_Window_Delete_Request;
403typedef struct _Ecore_X_Event_Window_Move_Resize_Request Ecore_X_Event_Window_Move_Resize_Request;
404typedef struct _Ecore_X_Event_Window_State_Request Ecore_X_Event_Window_State_Request;
405typedef struct _Ecore_X_Event_Frame_Extents_Request Ecore_X_Event_Frame_Extents_Request;
406typedef struct _Ecore_X_Event_Ping Ecore_X_Event_Ping;
407typedef struct _Ecore_X_Event_Desktop_Change Ecore_X_Event_Desktop_Change;
408
409typedef struct _Ecore_X_Event_Startup_Sequence Ecore_X_Event_Startup_Sequence;
410
411typedef struct _Ecore_X_Event_Generic Ecore_X_Event_Generic;
412
413typedef struct _Ecore_X_Randr_Screen_Size Ecore_X_Randr_Screen_Size;
414typedef struct _Ecore_X_Randr_Screen_Size_MM Ecore_X_Randr_Screen_Size_MM;
415
416typedef struct _Ecore_X_Xdnd_Position Ecore_X_Xdnd_Position;
417
418struct _Ecore_X_Event_Mouse_In
419{
420 int modifiers;
421 int x, y;
422 Eina_Bool same_screen : 1;
423 struct
424 {
425 int x, y;
426 } root;
427 Ecore_X_Window win;
428 Ecore_X_Window event_win;
429 Ecore_X_Window root_win;
430 Ecore_X_Event_Mode mode;
431 Ecore_X_Event_Detail detail;
432 Ecore_X_Time time;
433};
434
435struct _Ecore_X_Event_Mouse_Out
436{
437 int modifiers;
438 int x, y;
439 int same_screen;
440 struct
441 {
442 int x, y;
443 } root;
444 Ecore_X_Window win;
445 Ecore_X_Window event_win;
446 Ecore_X_Window root_win;
447 Ecore_X_Event_Mode mode;
448 Ecore_X_Event_Detail detail;
449 Ecore_X_Time time;
450};
451
452struct _Ecore_X_Event_Window_Focus_In
453{
454 Ecore_X_Window win;
455 Ecore_X_Event_Mode mode;
456 Ecore_X_Event_Detail detail;
457 Ecore_X_Time time;
458};
459
460struct _Ecore_X_Event_Window_Focus_Out
461{
462 Ecore_X_Window win;
463 Ecore_X_Event_Mode mode;
464 Ecore_X_Event_Detail detail;
465 Ecore_X_Time time;
466};
467
468struct _Ecore_X_Event_Window_Keymap
469{
470 Ecore_X_Window win;
471};
472
473struct _Ecore_X_Event_Window_Damage
474{
475 Ecore_X_Window win;
476 int x, y, w, h;
477 int count;
478 Ecore_X_Time time;
479};
480
481struct _Ecore_X_Event_Window_Visibility_Change
482{
483 Ecore_X_Window win;
484 int fully_obscured;
485 Ecore_X_Time time;
486};
487
488struct _Ecore_X_Event_Window_Create
489{
490 Ecore_X_Window win;
491 Ecore_X_Window parent;
492 int override;
493 int x, y, w, h;
494 int border;
495 Ecore_X_Time time;
496};
497
498struct _Ecore_X_Event_Window_Destroy
499{
500 Ecore_X_Window win;
501 Ecore_X_Window event_win;
502 Ecore_X_Time time;
503};
504
505struct _Ecore_X_Event_Window_Hide
506{
507 Ecore_X_Window win;
508 Ecore_X_Window event_win;
509 Ecore_X_Time time;
510};
511
512struct _Ecore_X_Event_Window_Show
513{
514 Ecore_X_Window win;
515 Ecore_X_Window event_win;
516 Ecore_X_Time time;
517};
518
519struct _Ecore_X_Event_Window_Show_Request
520{
521 Ecore_X_Window win;
522 Ecore_X_Window parent;
523 Ecore_X_Time time;
524};
525
526struct _Ecore_X_Event_Window_Reparent
527{
528 Ecore_X_Window win;
529 Ecore_X_Window event_win;
530 Ecore_X_Window parent;
531 Ecore_X_Time time;
532};
533
534struct _Ecore_X_Event_Window_Configure
535{
536 Ecore_X_Window win;
537 Ecore_X_Window event_win;
538 Ecore_X_Window abovewin;
539 int x, y, w, h;
540 int border;
541 Eina_Bool override : 1;
542 Eina_Bool from_wm : 1;
543 Ecore_X_Time time;
544};
545
546struct _Ecore_X_Event_Window_Configure_Request
547{
548 Ecore_X_Window win;
549 Ecore_X_Window parent_win;
550 Ecore_X_Window abovewin;
551 int x, y, w, h;
552 int border;
553 Ecore_X_Window_Stack_Mode detail;
554 unsigned long value_mask;
555 Ecore_X_Time time;
556};
557
558struct _Ecore_X_Event_Window_Gravity
559{
560 Ecore_X_Window win;
561 Ecore_X_Window event_win;
562 Ecore_X_Time time;
563};
564
565struct _Ecore_X_Event_Window_Resize_Request
566{
567 Ecore_X_Window win;
568 int w, h;
569 Ecore_X_Time time;
570};
571
572struct _Ecore_X_Event_Window_Stack
573{
574 Ecore_X_Window win;
575 Ecore_X_Window event_win;
576 Ecore_X_Window_Stack_Mode detail;
577 Ecore_X_Time time;
578};
579
580struct _Ecore_X_Event_Window_Stack_Request
581{
582 Ecore_X_Window win;
583 Ecore_X_Window parent;
584 Ecore_X_Window_Stack_Mode detail;
585 Ecore_X_Time time;
586};
587
588struct _Ecore_X_Event_Window_Property
589{
590 Ecore_X_Window win;
591 Ecore_X_Atom atom;
592 Ecore_X_Time time;
593};
594
595struct _Ecore_X_Event_Window_Colormap
596{
597 Ecore_X_Window win;
598 Ecore_X_Colormap cmap;
599 Eina_Bool installed : 1;
600 Ecore_X_Time time;
601};
602
603struct _Ecore_X_Event_Mapping_Change
604{
605 Ecore_X_Mapping_Type type;
606 int keycode;
607 int num;
608};
609
610struct _Ecore_X_Event_Selection_Clear
611{
612 Ecore_X_Window win;
613 Ecore_X_Selection selection;
614 Ecore_X_Atom atom;
615 Ecore_X_Time time;
616};
617
618struct _Ecore_X_Event_Selection_Request
619{
620 Ecore_X_Window owner;
621 Ecore_X_Window requestor;
622 Ecore_X_Time time;
623 Ecore_X_Atom selection;
624 Ecore_X_Atom target;
625 Ecore_X_Atom property;
626};
627
628typedef enum
629{
630 ECORE_X_OWNER_CHANGE_REASON_NEW_OWNER,
631 ECORE_X_OWNER_CHANGE_REASON_DESTROY,
632 ECORE_X_OWNER_CHANGE_REASON_CLOSE
633} Ecore_X_Owner_Change_Reason;
634
635struct _Ecore_X_Event_Fixes_Selection_Notify
636{
637 Ecore_X_Window win;
638 Ecore_X_Window owner;
639 Ecore_X_Time time;
640 Ecore_X_Time selection_time;
641 Ecore_X_Selection selection;
642 Ecore_X_Atom atom;
643 Ecore_X_Owner_Change_Reason reason;
644};
645
646struct _Ecore_X_Event_Selection_Notify
647{
648 Ecore_X_Window win;
649 Ecore_X_Time time;
650 Ecore_X_Selection selection;
651 Ecore_X_Atom atom;
652 char *target;
653 void *data;
654};
655
656struct _Ecore_X_Selection_Data
657{
658 enum
659 {
660 ECORE_X_SELECTION_CONTENT_NONE,
661 ECORE_X_SELECTION_CONTENT_TEXT,
662 ECORE_X_SELECTION_CONTENT_FILES,
663 ECORE_X_SELECTION_CONTENT_TARGETS,
664 ECORE_X_SELECTION_CONTENT_CUSTOM
665 } content;
666 unsigned char *data;
667 int length;
668 int format;
669 int (*free)(void *data);
670};
671
672struct _Ecore_X_Selection_Data_Files
673{
674 Ecore_X_Selection_Data data;
675 char **files;
676 int num_files;
677};
678
679struct _Ecore_X_Selection_Data_Text
680{
681 Ecore_X_Selection_Data data;
682 char *text;
683};
684
685struct _Ecore_X_Selection_Data_Targets
686{
687 Ecore_X_Selection_Data data;
688 char **targets;
689 int num_targets;
690};
691
692struct _Ecore_X_Event_Xdnd_Enter
693{
694 Ecore_X_Window win, source;
695
696 char **types;
697 int num_types;
698};
699
700struct _Ecore_X_Event_Xdnd_Position
701{
702 Ecore_X_Window win, source;
703 struct
704 {
705 int x, y;
706 } position;
707 Ecore_X_Atom action;
708};
709
710struct _Ecore_X_Xdnd_Position
711{
712 Ecore_X_Window win, prev;
713 struct
714 {
715 int x, y;
716 } position;
717};
718
719struct _Ecore_X_Event_Xdnd_Status
720{
721 Ecore_X_Window win, target;
722 Eina_Bool will_accept : 1;
723 Ecore_X_Rectangle rectangle;
724 Ecore_X_Atom action;
725};
726
727struct _Ecore_X_Event_Xdnd_Leave
728{
729 Ecore_X_Window win, source;
730};
731
732struct _Ecore_X_Event_Xdnd_Drop
733{
734 Ecore_X_Window win, source;
735 Ecore_X_Atom action;
736 struct
737 {
738 int x, y;
739 } position;
740};
741
742struct _Ecore_X_Event_Xdnd_Finished
743{
744 Ecore_X_Window win, target;
745 Eina_Bool completed : 1;
746 Ecore_X_Atom action;
747};
748
749struct _Ecore_X_Event_Client_Message
750{
751 Ecore_X_Window win;
752 Ecore_X_Atom message_type;
753 int format;
754 union
755 {
756 char b[20];
757 short s[10];
758 long l[5];
759 } data;
760 Ecore_X_Time time;
761};
762
763struct _Ecore_X_Event_Window_Shape
764{
765 Ecore_X_Window win;
766 Ecore_X_Time time;
767 Ecore_X_Shape_Type type;
768 int x, y, w, h;
769 Eina_Bool shaped : 1;
770};
771
772struct _Ecore_X_Event_Screensaver_Notify
773{
774 Ecore_X_Window win;
775 Eina_Bool on : 1;
776 Ecore_X_Time time;
777};
778
779struct _Ecore_X_Event_Sync_Counter
780{
781 Ecore_X_Time time;
782};
783
784struct _Ecore_X_Event_Sync_Alarm
785{
786 Ecore_X_Time time;
787 Ecore_X_Sync_Alarm alarm;
788};
789
790struct _Ecore_X_Randr_Screen_Size
791{
792 int width, height;
793};
794
795struct _Ecore_X_Randr_Screen_Size_MM
796{
797 int width, height, width_mm, height_mm;
798};
799
800struct _Ecore_X_Event_Screen_Change
801{
802 Ecore_X_Window win;
803 Ecore_X_Window root;
804 Ecore_X_Randr_Screen_Size_MM size; /* in pixel and millimeters */
805 Ecore_X_Time time;
806 Ecore_X_Time config_time;
807 Ecore_X_Randr_Orientation orientation;
808 Ecore_X_Render_Subpixel_Order subpixel_order;
809 Ecore_X_Randr_Size_ID size_id;
810};
811
812struct _Ecore_X_Event_Randr_Crtc_Change
813{
814 Ecore_X_Window win;
815 Ecore_X_Randr_Crtc crtc;
816 Ecore_X_Randr_Mode mode;
817 Ecore_X_Randr_Orientation orientation;
818 Eina_Rectangle geo;
819};
820
821struct _Ecore_X_Event_Randr_Output_Change
822{
823 Ecore_X_Window win;
824 Ecore_X_Randr_Output output;
825 Ecore_X_Randr_Crtc crtc;
826 Ecore_X_Randr_Mode mode;
827 Ecore_X_Randr_Orientation orientation;
828 Ecore_X_Randr_Connection_Status connection;
829 Ecore_X_Render_Subpixel_Order subpixel_order;
830};
831
832struct _Ecore_X_Event_Randr_Output_Property_Notify
833{
834 Ecore_X_Window win;
835 Ecore_X_Randr_Output output;
836 Ecore_X_Atom property;
837 Ecore_X_Time time;
838 Ecore_X_Randr_Property_Change state;
839};
840
841struct _Ecore_X_Event_Window_Delete_Request
842{
843 Ecore_X_Window win;
844 Ecore_X_Time time;
845};
846
847struct _Ecore_X_Event_Startup_Sequence
848{
849 Ecore_X_Window win;
850};
851
852struct _Ecore_X_Event_Window_Move_Resize_Request
853{
854 Ecore_X_Window win;
855 int x, y;
856 int direction;
857 int button;
858 int source;
859};
860
861struct _Ecore_X_Event_Window_State_Request
862{
863 Ecore_X_Window win;
864 Ecore_X_Window_State_Action action;
865 Ecore_X_Window_State state[2];
866 int source;
867};
868
869struct _Ecore_X_Event_Frame_Extents_Request
870{
871 Ecore_X_Window win;
872};
873
874struct _Ecore_X_Event_Ping
875{
876 Ecore_X_Window win;
877 Ecore_X_Window event_win;
878 Ecore_X_Time time;
879};
880
881struct _Ecore_X_Event_Desktop_Change
882{
883 Ecore_X_Window win;
884 unsigned int desk;
885 int source;
886};
887
888struct _Ecore_X_Event_Generic
889{
890 int extension;
891 int evtype;
892 unsigned int cookie;
893 void *data;
894};
895
896EAPI extern int ECORE_X_EVENT_ANY; /**< low level event dependent on
897 backend in use, if Xlib will be XEvent,
898 if XCB will be xcb_generic_event_t.
899 @warning avoid using it.
900 */
901EAPI extern int ECORE_X_EVENT_MOUSE_IN;
902EAPI extern int ECORE_X_EVENT_MOUSE_OUT;
903EAPI extern int ECORE_X_EVENT_WINDOW_FOCUS_IN;
904EAPI extern int ECORE_X_EVENT_WINDOW_FOCUS_OUT;
905EAPI extern int ECORE_X_EVENT_WINDOW_KEYMAP;
906EAPI extern int ECORE_X_EVENT_WINDOW_DAMAGE;
907EAPI extern int ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE;
908EAPI extern int ECORE_X_EVENT_WINDOW_CREATE;
909EAPI extern int ECORE_X_EVENT_WINDOW_DESTROY;
910EAPI extern int ECORE_X_EVENT_WINDOW_HIDE;
911EAPI extern int ECORE_X_EVENT_WINDOW_SHOW;
912EAPI extern int ECORE_X_EVENT_WINDOW_SHOW_REQUEST;
913EAPI extern int ECORE_X_EVENT_WINDOW_REPARENT;
914EAPI extern int ECORE_X_EVENT_WINDOW_CONFIGURE;
915EAPI extern int ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST;
916EAPI extern int ECORE_X_EVENT_WINDOW_GRAVITY;
917EAPI extern int ECORE_X_EVENT_WINDOW_RESIZE_REQUEST;
918EAPI extern int ECORE_X_EVENT_WINDOW_STACK;
919EAPI extern int ECORE_X_EVENT_WINDOW_STACK_REQUEST;
920EAPI extern int ECORE_X_EVENT_WINDOW_PROPERTY;
921EAPI extern int ECORE_X_EVENT_WINDOW_COLORMAP;
922EAPI extern int ECORE_X_EVENT_WINDOW_MAPPING;
923EAPI extern int ECORE_X_EVENT_MAPPING_CHANGE;
924EAPI extern int ECORE_X_EVENT_SELECTION_CLEAR;
925EAPI extern int ECORE_X_EVENT_SELECTION_REQUEST;
926EAPI extern int ECORE_X_EVENT_SELECTION_NOTIFY;
927EAPI extern int ECORE_X_EVENT_FIXES_SELECTION_NOTIFY;
928EAPI extern int ECORE_X_EVENT_CLIENT_MESSAGE;
929EAPI extern int ECORE_X_EVENT_WINDOW_SHAPE;
930EAPI extern int ECORE_X_EVENT_SCREENSAVER_NOTIFY;
931EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_FLICK;
932EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_PAN;
933EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION;
934EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_TAP;
935EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD;
936EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_HOLD;
937EAPI extern int ECORE_X_EVENT_GESTURE_NOTIFY_GROUP;
938EAPI extern int ECORE_X_EVENT_SYNC_COUNTER;
939EAPI extern int ECORE_X_EVENT_SYNC_ALARM;
940EAPI extern int ECORE_X_EVENT_SCREEN_CHANGE;
941EAPI extern int ECORE_X_EVENT_RANDR_CRTC_CHANGE;
942EAPI extern int ECORE_X_EVENT_RANDR_OUTPUT_CHANGE;
943EAPI extern int ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY;
944EAPI extern int ECORE_X_EVENT_DAMAGE_NOTIFY;
945
946EAPI extern int ECORE_X_EVENT_WINDOW_DELETE_REQUEST;
947
948EAPI extern int ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST;
949EAPI extern int ECORE_X_EVENT_WINDOW_STATE_REQUEST;
950EAPI extern int ECORE_X_EVENT_FRAME_EXTENTS_REQUEST;
951EAPI extern int ECORE_X_EVENT_PING;
952EAPI extern int ECORE_X_EVENT_DESKTOP_CHANGE;
953
954EAPI extern int ECORE_X_EVENT_STARTUP_SEQUENCE_NEW;
955EAPI extern int ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE;
956EAPI extern int ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE;
957
958EAPI extern int ECORE_X_EVENT_GENERIC;
959
960EAPI extern int ECORE_X_EVENT_XDND_ENTER;
961EAPI extern int ECORE_X_EVENT_XDND_POSITION;
962EAPI extern int ECORE_X_EVENT_XDND_STATUS;
963EAPI extern int ECORE_X_EVENT_XDND_LEAVE;
964EAPI extern int ECORE_X_EVENT_XDND_DROP;
965EAPI extern int ECORE_X_EVENT_XDND_FINISHED;
966
967EAPI extern int ECORE_X_LOCK_SCROLL;
968EAPI extern int ECORE_X_LOCK_NUM;
969EAPI extern int ECORE_X_LOCK_CAPS;
970EAPI extern int ECORE_X_LOCK_SHIFT;
971
972typedef enum _Ecore_X_WM_Protocol
973{
974 /* If enabled the window manager will be asked to send a
975 * delete message instead of just closing (destroying) the window. */
976 ECORE_X_WM_PROTOCOL_DELETE_REQUEST,
977
978 /* If enabled the window manager will be told that the window
979 * explicitly sets input focus. */
980 ECORE_X_WM_PROTOCOL_TAKE_FOCUS,
981
982 /* If enabled the window manager can ping the window to check
983 * if it is alive. */
984 ECORE_X_NET_WM_PROTOCOL_PING,
985
986 /* If enabled the window manager can sync updating with the
987 * window (?) */
988 ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST,
989
990 /* Number of defined items */
991 ECORE_X_WM_PROTOCOL_NUM
992} Ecore_X_WM_Protocol;
993
994typedef enum _Ecore_X_Window_Input_Mode
995{
996 /* The window can never be focused */
997 ECORE_X_WINDOW_INPUT_MODE_NONE,
998
999 /* The window can be focused by the WM but doesn't focus itself */
1000 ECORE_X_WINDOW_INPUT_MODE_PASSIVE,
1001
1002 /* The window sets the focus itself if one of its sub-windows
1003 * already is focused */
1004 ECORE_X_WINDOW_INPUT_MODE_ACTIVE_LOCAL,
1005
1006 /* The window sets the focus itself even if another window
1007 * is currently focused */
1008 ECORE_X_WINDOW_INPUT_MODE_ACTIVE_GLOBAL
1009} Ecore_X_Window_Input_Mode;
1010
1011typedef enum _Ecore_X_Window_State_Hint
1012{
1013 /** Do not provide any state hint to the window manager */
1014 ECORE_X_WINDOW_STATE_HINT_NONE = -1,
1015
1016 /** The window wants to remain hidden and NOT iconified */
1017 ECORE_X_WINDOW_STATE_HINT_WITHDRAWN,
1018
1019 /** The window wants to be mapped normally */
1020 ECORE_X_WINDOW_STATE_HINT_NORMAL,
1021
1022 /** The window wants to start in an iconified state */
1023 ECORE_X_WINDOW_STATE_HINT_ICONIC
1024} Ecore_X_Window_State_Hint;
1025
1026typedef enum _Ecore_X_Window_Type
1027{
1028 ECORE_X_WINDOW_TYPE_UNKNOWN = 0,
1029 ECORE_X_WINDOW_TYPE_DESKTOP,
1030 ECORE_X_WINDOW_TYPE_DOCK,
1031 ECORE_X_WINDOW_TYPE_TOOLBAR,
1032 ECORE_X_WINDOW_TYPE_MENU,
1033 ECORE_X_WINDOW_TYPE_UTILITY,
1034 ECORE_X_WINDOW_TYPE_SPLASH,
1035 ECORE_X_WINDOW_TYPE_DIALOG,
1036 ECORE_X_WINDOW_TYPE_NORMAL,
1037 ECORE_X_WINDOW_TYPE_DROPDOWN_MENU,
1038 ECORE_X_WINDOW_TYPE_POPUP_MENU,
1039 ECORE_X_WINDOW_TYPE_TOOLTIP,
1040 ECORE_X_WINDOW_TYPE_NOTIFICATION,
1041 ECORE_X_WINDOW_TYPE_COMBO,
1042 ECORE_X_WINDOW_TYPE_DND
1043} Ecore_X_Window_Type;
1044
1045typedef enum _Ecore_X_Action
1046{
1047 ECORE_X_ACTION_MOVE,
1048 ECORE_X_ACTION_RESIZE,
1049 ECORE_X_ACTION_MINIMIZE,
1050 ECORE_X_ACTION_SHADE,
1051 ECORE_X_ACTION_STICK,
1052 ECORE_X_ACTION_MAXIMIZE_HORZ,
1053 ECORE_X_ACTION_MAXIMIZE_VERT,
1054 ECORE_X_ACTION_FULLSCREEN,
1055 ECORE_X_ACTION_CHANGE_DESKTOP,
1056 ECORE_X_ACTION_CLOSE,
1057 ECORE_X_ACTION_ABOVE,
1058 ECORE_X_ACTION_BELOW
1059} Ecore_X_Action;
1060
1061typedef enum _Ecore_X_Window_Configure_Mask
1062{
1063 ECORE_X_WINDOW_CONFIGURE_MASK_X = (1 << 0),
1064 ECORE_X_WINDOW_CONFIGURE_MASK_Y = (1 << 1),
1065 ECORE_X_WINDOW_CONFIGURE_MASK_W = (1 << 2),
1066 ECORE_X_WINDOW_CONFIGURE_MASK_H = (1 << 3),
1067 ECORE_X_WINDOW_CONFIGURE_MASK_BORDER_WIDTH = (1 << 4),
1068 ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING = (1 << 5),
1069 ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE = (1 << 6)
1070} Ecore_X_Window_Configure_Mask;
1071
1072typedef enum _Ecore_X_Virtual_Keyboard_State
1073{
1074 ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN = 0,
1075 ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF,
1076 ECORE_X_VIRTUAL_KEYBOARD_STATE_ON,
1077 ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA,
1078 ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC,
1079 ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN,
1080 ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER,
1081 ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX,
1082 ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL,
1083 ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD,
1084 ECORE_X_VIRTUAL_KEYBOARD_STATE_IP,
1085 ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST,
1086 ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE,
1087 ECORE_X_VIRTUAL_KEYBOARD_STATE_URL,
1088 ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD,
1089 ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME
1090} Ecore_X_Virtual_Keyboard_State;
1091
1092typedef enum _Ecore_X_Illume_Mode
1093{
1094 ECORE_X_ILLUME_MODE_UNKNOWN = 0,
1095 ECORE_X_ILLUME_MODE_SINGLE,
1096 ECORE_X_ILLUME_MODE_DUAL_TOP,
1097 ECORE_X_ILLUME_MODE_DUAL_LEFT
1098} Ecore_X_Illume_Mode;
1099
1100typedef enum _Ecore_X_Illume_Quickpanel_State
1101{
1102 ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN = 0,
1103 ECORE_X_ILLUME_QUICKPANEL_STATE_OFF,
1104 ECORE_X_ILLUME_QUICKPANEL_STATE_ON
1105} Ecore_X_Illume_Quickpanel_State;
1106
1107typedef enum _Ecore_X_Illume_Indicator_State
1108{
1109 ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN = 0,
1110 ECORE_X_ILLUME_INDICATOR_STATE_OFF,
1111 ECORE_X_ILLUME_INDICATOR_STATE_ON
1112} Ecore_X_Illume_Indicator_State;
1113
1114typedef enum _Ecore_X_Illume_Clipboard_State
1115{
1116 ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN = 0,
1117 ECORE_X_ILLUME_CLIPBOARD_STATE_OFF,
1118 ECORE_X_ILLUME_CLIPBOARD_STATE_ON
1119} Ecore_X_Illume_Clipboard_State;
1120
1121typedef enum _Ecore_X_Illume_Indicator_Opacity_Mode
1122{
1123 ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN = 0,
1124 ECORE_X_ILLUME_INDICATOR_OPAQUE,
1125 ECORE_X_ILLUME_INDICATOR_TRANSLUCENT,
1126 ECORE_X_ILLUME_INDICATOR_TRANSPARENT
1127} Ecore_X_Illume_Indicator_Opacity_Mode;
1128
1129/* Window layer constants */
1130#define ECORE_X_WINDOW_LAYER_BELOW 2
1131#define ECORE_X_WINDOW_LAYER_NORMAL 4
1132#define ECORE_X_WINDOW_LAYER_ABOVE 6
1133
1134/* Property list operations */
1135#define ECORE_X_PROP_LIST_REMOVE 0
1136#define ECORE_X_PROP_LIST_ADD 1
1137#define ECORE_X_PROP_LIST_TOGGLE 2
1138
1139EAPI int
1140 ecore_x_init(const char *name);
1141EAPI int
1142 ecore_x_shutdown(void);
1143EAPI int
1144 ecore_x_disconnect(void);
1145EAPI Ecore_X_Display *
1146 ecore_x_display_get(void);
1147EAPI Ecore_X_Connection *
1148 ecore_x_connection_get(void);
1149EAPI int
1150 ecore_x_fd_get(void);
1151EAPI Ecore_X_Screen *
1152 ecore_x_default_screen_get(void);
1153EAPI void
1154 ecore_x_screen_size_get(const Ecore_X_Screen *screen,
1155 int *w,
1156 int *h);
1157EAPI int
1158 ecore_x_screen_count_get(void);
1159EAPI int
1160 ecore_x_screen_index_get(const Ecore_X_Screen *screen);
1161EAPI Ecore_X_Screen *
1162 ecore_x_screen_get(int index);
1163
1164EAPI void
1165 ecore_x_double_click_time_set(double t);
1166EAPI double
1167 ecore_x_double_click_time_get(void);
1168EAPI void
1169 ecore_x_flush(void);
1170EAPI void
1171 ecore_x_sync(void);
1172EAPI void
1173 ecore_x_killall(Ecore_X_Window root);
1174EAPI void
1175 ecore_x_kill(Ecore_X_Window win);
1176EAPI int
1177 ecore_x_dpi_get(void);
1178EAPI Eina_Bool
1179 ecore_x_bell(int percent);
1180EAPI unsigned int
1181 ecore_x_visual_id_get(Ecore_X_Visual visual);
1182
1183EAPI Ecore_X_Visual
1184ecore_x_default_visual_get(Ecore_X_Display *disp,
1185 Ecore_X_Screen *screen);
1186EAPI Ecore_X_Colormap
1187ecore_x_default_colormap_get(Ecore_X_Display *disp,
1188 Ecore_X_Screen *screen);
1189EAPI int
1190ecore_x_default_depth_get(Ecore_X_Display *disp,
1191 Ecore_X_Screen *screen);
1192
1193EAPI Ecore_X_Time
1194ecore_x_current_time_get(void);
1195
1196EAPI void
1197ecore_x_error_handler_set(void (*func)(void *data),
1198 const void *data);
1199EAPI void
1200ecore_x_io_error_handler_set(void (*func)(void *data),
1201 const void *data);
1202EAPI int
1203 ecore_x_error_request_get(void);
1204EAPI int
1205 ecore_x_error_code_get(void);
1206EAPI Ecore_X_ID
1207ecore_x_error_resource_id_get(void);
1208
1209EAPI void
1210ecore_x_event_mask_set(Ecore_X_Window w,
1211 Ecore_X_Event_Mask mask);
1212EAPI void
1213ecore_x_event_mask_unset(Ecore_X_Window w,
1214 Ecore_X_Event_Mask mask);
1215
1216EAPI Eina_Bool
1217ecore_x_selection_notify_send(Ecore_X_Window requestor,
1218 Ecore_X_Atom selection,
1219 Ecore_X_Atom target,
1220 Ecore_X_Atom property,
1221 Ecore_X_Time time);
1222EAPI Eina_Bool
1223ecore_x_selection_primary_set(Ecore_X_Window w,
1224 const void *data,
1225 int size);
1226EAPI Eina_Bool
1227 ecore_x_selection_primary_clear(void);
1228EAPI Eina_Bool
1229 ecore_x_selection_secondary_set(Ecore_X_Window w,
1230 const void *data,
1231 int size);
1232EAPI Eina_Bool
1233 ecore_x_selection_secondary_clear(void);
1234EAPI Eina_Bool
1235 ecore_x_selection_xdnd_set(Ecore_X_Window w,
1236 const void *data,
1237 int size);
1238EAPI Eina_Bool
1239 ecore_x_selection_xdnd_clear(void);
1240EAPI Eina_Bool
1241 ecore_x_selection_clipboard_set(Ecore_X_Window w,
1242 const void *data,
1243 int size);
1244EAPI Eina_Bool
1245 ecore_x_selection_clipboard_clear(void);
1246EAPI void
1247 ecore_x_selection_primary_request(Ecore_X_Window w,
1248 const char *target);
1249EAPI void
1250ecore_x_selection_secondary_request(Ecore_X_Window w,
1251 const char *target);
1252EAPI void
1253ecore_x_selection_xdnd_request(Ecore_X_Window w,
1254 const char *target);
1255EAPI void
1256ecore_x_selection_clipboard_request(Ecore_X_Window w,
1257 const char *target);
1258EAPI Eina_Bool
1259ecore_x_selection_convert(Ecore_X_Atom selection,
1260 Ecore_X_Atom target,
1261 void **data_ret,
1262 int *len,
1263 Ecore_X_Atom *targprop,
1264 int *targsize);
1265EAPI void
1266ecore_x_selection_converter_add(char *target,
1267 Eina_Bool (*func)(char *target,
1268 void *data,
1269 int size,
1270 void **data_ret,
1271 int *size_ret,
1272 Ecore_X_Atom *,
1273 int *));
1274EAPI void
1275ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
1276 Eina_Bool (*func)(char *target,
1277 void *data,
1278 int size,
1279 void **data_ret,
1280 int *size_ret,
1281 Ecore_X_Atom *tprop,
1282 int *tsize));
1283EAPI void
1284 ecore_x_selection_converter_del(char *target);
1285EAPI void
1286 ecore_x_selection_converter_atom_del(Ecore_X_Atom target);
1287EAPI void
1288 ecore_x_selection_parser_add(const char *target,
1289 void *(*func)(const char *target, void *data, int size, int format));
1290EAPI void
1291 ecore_x_selection_parser_del(const char *target);
1292EAPI void
1293 ecore_x_selection_owner_set(Ecore_X_Window win,
1294 Ecore_X_Atom atom,
1295 Ecore_X_Time tm);
1296EAPI Ecore_X_Window
1297ecore_x_selection_owner_get(Ecore_X_Atom atom);
1298
1299EAPI void
1300ecore_x_dnd_aware_set(Ecore_X_Window win,
1301 Eina_Bool on);
1302EAPI int
1303 ecore_x_dnd_version_get(Ecore_X_Window win);
1304EAPI Eina_Bool
1305 ecore_x_dnd_type_isset(Ecore_X_Window win,
1306 const char *type);
1307EAPI void
1308ecore_x_dnd_type_set(Ecore_X_Window win,
1309 const char *type,
1310 Eina_Bool on);
1311EAPI void
1312ecore_x_dnd_types_set(Ecore_X_Window win,
1313 const char **types,
1314 unsigned int num_types);
1315EAPI void
1316ecore_x_dnd_actions_set(Ecore_X_Window win,
1317 Ecore_X_Atom *actions,
1318 unsigned int num_actions);
1319EAPI Eina_Bool
1320ecore_x_dnd_begin(Ecore_X_Window source,
1321 unsigned char *data,
1322 int size);
1323EAPI Eina_Bool
1324 ecore_x_dnd_drop(void);
1325EAPI void
1326 ecore_x_dnd_send_status(Eina_Bool will_accept,
1327 Eina_Bool suppress,
1328 Ecore_X_Rectangle rectangle,
1329 Ecore_X_Atom action);
1330EAPI void
1331 ecore_x_dnd_send_finished(void);
1332EAPI void
1333 ecore_x_dnd_source_action_set(Ecore_X_Atom action);
1334EAPI Ecore_X_Atom
1335 ecore_x_dnd_source_action_get(void);
1336EAPI void
1337 ecore_x_dnd_callback_pos_update_set(void (*cb)(void *,
1338 Ecore_X_Xdnd_Position *data),
1339 const void *data);
1340
1341EAPI Ecore_X_Window
1342ecore_x_window_new(Ecore_X_Window parent,
1343 int x,
1344 int y,
1345 int w,
1346 int h);
1347EAPI Ecore_X_Window
1348ecore_x_window_override_new(Ecore_X_Window parent,
1349 int x,
1350 int y,
1351 int w,
1352 int h);
1353EAPI int
1354 ecore_x_window_argb_get(Ecore_X_Window win);
1355EAPI Ecore_X_Window
1356 ecore_x_window_manager_argb_new(Ecore_X_Window parent,
1357 int x,
1358 int y,
1359 int w,
1360 int h);
1361EAPI Ecore_X_Window
1362ecore_x_window_argb_new(Ecore_X_Window parent,
1363 int x,
1364 int y,
1365 int w,
1366 int h);
1367EAPI Ecore_X_Window
1368ecore_x_window_override_argb_new(Ecore_X_Window parent,
1369 int x,
1370 int y,
1371 int w,
1372 int h);
1373EAPI Ecore_X_Window
1374ecore_x_window_input_new(Ecore_X_Window parent,
1375 int x,
1376 int y,
1377 int w,
1378 int h);
1379EAPI void
1380ecore_x_window_configure(Ecore_X_Window win,
1381 Ecore_X_Window_Configure_Mask mask,
1382 int x,
1383 int y,
1384 int w,
1385 int h,
1386 int border_width,
1387 Ecore_X_Window sibling,
1388 int stack_mode);
1389EAPI void
1390ecore_x_window_cursor_set(Ecore_X_Window win,
1391 Ecore_X_Cursor c);
1392EAPI void
1393 ecore_x_window_free(Ecore_X_Window win);
1394EAPI void
1395 ecore_x_window_ignore_set(Ecore_X_Window win,
1396 int ignore);
1397EAPI Ecore_X_Window *
1398ecore_x_window_ignore_list(int *num);
1399
1400EAPI void
1401 ecore_x_window_delete_request_send(Ecore_X_Window win);
1402EAPI void
1403 ecore_x_window_show(Ecore_X_Window win);
1404EAPI void
1405 ecore_x_window_hide(Ecore_X_Window win);
1406EAPI void
1407 ecore_x_window_move(Ecore_X_Window win,
1408 int x,
1409 int y);
1410EAPI void
1411ecore_x_window_resize(Ecore_X_Window win,
1412 int w,
1413 int h);
1414EAPI void
1415ecore_x_window_move_resize(Ecore_X_Window win,
1416 int x,
1417 int y,
1418 int w,
1419 int h);
1420EAPI void
1421 ecore_x_window_focus(Ecore_X_Window win);
1422EAPI void
1423 ecore_x_window_focus_at_time(Ecore_X_Window win,
1424 Ecore_X_Time t);
1425EAPI Ecore_X_Window
1426 ecore_x_window_focus_get(void);
1427EAPI void
1428 ecore_x_window_raise(Ecore_X_Window win);
1429EAPI void
1430 ecore_x_window_lower(Ecore_X_Window win);
1431EAPI void
1432 ecore_x_window_reparent(Ecore_X_Window win,
1433 Ecore_X_Window new_parent,
1434 int x,
1435 int y);
1436EAPI void
1437ecore_x_window_size_get(Ecore_X_Window win,
1438 int *w,
1439 int *h);
1440EAPI void
1441ecore_x_window_geometry_get(Ecore_X_Window win,
1442 int *x,
1443 int *y,
1444 int *w,
1445 int *h);
1446EAPI int
1447 ecore_x_window_border_width_get(Ecore_X_Window win);
1448EAPI void
1449 ecore_x_window_border_width_set(Ecore_X_Window win,
1450 int width);
1451EAPI int
1452 ecore_x_window_depth_get(Ecore_X_Window win);
1453EAPI void
1454 ecore_x_window_cursor_show(Ecore_X_Window win,
1455 Eina_Bool show);
1456EAPI void
1457 ecore_x_window_defaults_set(Ecore_X_Window win);
1458EAPI int
1459 ecore_x_window_visible_get(Ecore_X_Window win);
1460EAPI Ecore_X_Window
1461 ecore_x_window_shadow_tree_at_xy_with_skip_get(Ecore_X_Window base,
1462 int x,
1463 int y,
1464 Ecore_X_Window *skip,
1465 int skip_num);
1466EAPI Ecore_X_Window
1467ecore_x_window_shadow_parent_get(Ecore_X_Window root,
1468 Ecore_X_Window win);
1469EAPI void
1470 ecore_x_window_shadow_tree_flush(void);
1471EAPI Ecore_X_Window
1472 ecore_x_window_root_get(Ecore_X_Window win);
1473EAPI Ecore_X_Window
1474 ecore_x_window_at_xy_get(int x,
1475 int y);
1476EAPI Ecore_X_Window
1477ecore_x_window_at_xy_with_skip_get(int x,
1478 int y,
1479 Ecore_X_Window *skip,
1480 int skip_num);
1481EAPI Ecore_X_Window
1482ecore_x_window_at_xy_begin_get(Ecore_X_Window begin,
1483 int x,
1484 int y);
1485EAPI Ecore_X_Window
1486ecore_x_window_parent_get(Ecore_X_Window win);
1487
1488EAPI void
1489ecore_x_window_background_color_set(Ecore_X_Window win,
1490 unsigned short r,
1491 unsigned short g,
1492 unsigned short b);
1493EAPI void
1494ecore_x_window_gravity_set(Ecore_X_Window win,
1495 Ecore_X_Gravity grav);
1496EAPI void
1497ecore_x_window_pixel_gravity_set(Ecore_X_Window win,
1498 Ecore_X_Gravity grav);
1499EAPI void
1500ecore_x_window_pixmap_set(Ecore_X_Window win,
1501 Ecore_X_Pixmap pmap);
1502EAPI void
1503ecore_x_window_area_clear(Ecore_X_Window win,
1504 int x,
1505 int y,
1506 int w,
1507 int h);
1508EAPI void
1509ecore_x_window_area_expose(Ecore_X_Window win,
1510 int x,
1511 int y,
1512 int w,
1513 int h);
1514EAPI void
1515ecore_x_window_override_set(Ecore_X_Window win,
1516 Eina_Bool override);
1517
1518EAPI void
1519ecore_x_window_prop_card32_set(Ecore_X_Window win,
1520 Ecore_X_Atom atom,
1521 unsigned int *val,
1522 unsigned int num);
1523EAPI int
1524ecore_x_window_prop_card32_get(Ecore_X_Window win,
1525 Ecore_X_Atom atom,
1526 unsigned int *val,
1527 unsigned int len);
1528EAPI int
1529ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
1530 Ecore_X_Atom atom,
1531 unsigned int **plst);
1532
1533EAPI void
1534ecore_x_window_prop_xid_set(Ecore_X_Window win,
1535 Ecore_X_Atom atom,
1536 Ecore_X_Atom type,
1537 Ecore_X_ID *lst,
1538 unsigned int num);
1539EAPI int
1540ecore_x_window_prop_xid_get(Ecore_X_Window win,
1541 Ecore_X_Atom atom,
1542 Ecore_X_Atom type,
1543 Ecore_X_ID *lst,
1544 unsigned int len);
1545EAPI int
1546ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
1547 Ecore_X_Atom atom,
1548 Ecore_X_Atom type,
1549 Ecore_X_ID **plst);
1550EAPI void
1551ecore_x_window_prop_xid_list_change(Ecore_X_Window win,
1552 Ecore_X_Atom atom,
1553 Ecore_X_Atom type,
1554 Ecore_X_ID item,
1555 int op);
1556EAPI void
1557ecore_x_window_prop_atom_set(Ecore_X_Window win,
1558 Ecore_X_Atom atom,
1559 Ecore_X_Atom *val,
1560 unsigned int num);
1561EAPI int
1562ecore_x_window_prop_atom_get(Ecore_X_Window win,
1563 Ecore_X_Atom atom,
1564 Ecore_X_Atom *val,
1565 unsigned int len);
1566EAPI int
1567ecore_x_window_prop_atom_list_get(Ecore_X_Window win,
1568 Ecore_X_Atom atom,
1569 Ecore_X_Atom **plst);
1570EAPI void
1571ecore_x_window_prop_atom_list_change(Ecore_X_Window win,
1572 Ecore_X_Atom atom,
1573 Ecore_X_Atom item,
1574 int op);
1575EAPI void
1576ecore_x_window_prop_window_set(Ecore_X_Window win,
1577 Ecore_X_Atom atom,
1578 Ecore_X_Window *val,
1579 unsigned int num);
1580EAPI int
1581ecore_x_window_prop_window_get(Ecore_X_Window win,
1582 Ecore_X_Atom atom,
1583 Ecore_X_Window *val,
1584 unsigned int len);
1585EAPI int
1586ecore_x_window_prop_window_list_get(Ecore_X_Window win,
1587 Ecore_X_Atom atom,
1588 Ecore_X_Window **plst);
1589
1590EAPI Ecore_X_Atom
1591 ecore_x_window_prop_any_type(void);
1592EAPI void
1593 ecore_x_window_prop_property_set(Ecore_X_Window win,
1594 Ecore_X_Atom type,
1595 Ecore_X_Atom format,
1596 int size,
1597 void *data,
1598 int number);
1599EAPI int
1600ecore_x_window_prop_property_get(Ecore_X_Window win,
1601 Ecore_X_Atom property,
1602 Ecore_X_Atom type,
1603 int size,
1604 unsigned char **data,
1605 int *num);
1606EAPI void
1607ecore_x_window_prop_property_del(Ecore_X_Window win,
1608 Ecore_X_Atom property);
1609EAPI Ecore_X_Atom *
1610ecore_x_window_prop_list(Ecore_X_Window win,
1611 int *num_ret);
1612EAPI void
1613ecore_x_window_prop_string_set(Ecore_X_Window win,
1614 Ecore_X_Atom type,
1615 const char *str);
1616EAPI char *
1617ecore_x_window_prop_string_get(Ecore_X_Window win,
1618 Ecore_X_Atom type);
1619EAPI Eina_Bool
1620ecore_x_window_prop_protocol_isset(Ecore_X_Window win,
1621 Ecore_X_WM_Protocol protocol);
1622EAPI Ecore_X_WM_Protocol *
1623ecore_x_window_prop_protocol_list_get(Ecore_X_Window win,
1624 int *num_ret);
1625
1626EAPI void
1627ecore_x_window_shape_mask_set(Ecore_X_Window win,
1628 Ecore_X_Pixmap mask);
1629EAPI void
1630ecore_x_window_shape_window_set(Ecore_X_Window win,
1631 Ecore_X_Window shape_win);
1632EAPI void
1633ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
1634 Ecore_X_Window shape_win,
1635 int x,
1636 int y);
1637EAPI void
1638ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
1639 int x,
1640 int y,
1641 int w,
1642 int h);
1643EAPI void
1644ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
1645 Ecore_X_Rectangle *rects,
1646 int num);
1647EAPI void
1648ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win,
1649 int x,
1650 int y,
1651 int w,
1652 int h);
1653EAPI void
1654ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win,
1655 Ecore_X_Rectangle *rects,
1656 int num);
1657EAPI void
1658ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win,
1659 int x,
1660 int y,
1661 int w,
1662 int h);
1663EAPI void
1664ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win,
1665 int x,
1666 int y,
1667 int w,
1668 int h);
1669EAPI void
1670ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win,
1671 int x,
1672 int y,
1673 int w,
1674 int h);
1675EAPI void
1676ecore_x_window_shape_input_window_set_xy(Ecore_X_Window win,
1677 Ecore_X_Window shape_win,
1678 int x,
1679 int y);
1680EAPI void
1681ecore_x_window_shape_input_window_set(Ecore_X_Window win,
1682 Ecore_X_Window shape_win);
1683EAPI void
1684ecore_x_window_shape_window_add(Ecore_X_Window win,
1685 Ecore_X_Window shape_win);
1686EAPI void
1687ecore_x_window_shape_window_add_xy(Ecore_X_Window win,
1688 Ecore_X_Window shape_win,
1689 int x,
1690 int y);
1691EAPI void
1692ecore_x_window_shape_input_window_add_xy(Ecore_X_Window win,
1693 Ecore_X_Window shape_win,
1694 int x,
1695 int y);
1696EAPI void
1697ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
1698 int x,
1699 int y,
1700 int w,
1701 int h);
1702EAPI void
1703ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
1704 int x,
1705 int y,
1706 int w,
1707 int h);
1708EAPI void
1709ecore_x_window_shape_input_rectangle_clip(Ecore_X_Window win,
1710 int x,
1711 int y,
1712 int w,
1713 int h);
1714EAPI void
1715ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
1716 Ecore_X_Rectangle *rects,
1717 int num);
1718EAPI void
1719ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win,
1720 Ecore_X_Rectangle *rects,
1721 int num);
1722EAPI Ecore_X_Rectangle *
1723ecore_x_window_shape_rectangles_get(Ecore_X_Window win,
1724 int *num_ret);
1725EAPI Ecore_X_Rectangle *
1726ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win,
1727 int *num_ret);
1728EAPI void
1729ecore_x_window_shape_events_select(Ecore_X_Window win,
1730 Eina_Bool on);
1731EAPI void
1732ecore_x_window_shape_input_mask_set(Ecore_X_Window win,
1733 Ecore_X_Pixmap mask);
1734
1735EAPI Ecore_X_Pixmap
1736ecore_x_pixmap_new(Ecore_X_Window win,
1737 int w,
1738 int h,
1739 int dep);
1740EAPI void
1741 ecore_x_pixmap_free(Ecore_X_Pixmap pmap);
1742EAPI void
1743 ecore_x_pixmap_paste(Ecore_X_Pixmap pmap,
1744 Ecore_X_Drawable dest,
1745 Ecore_X_GC gc,
1746 int sx,
1747 int sy,
1748 int w,
1749 int h,
1750 int dx,
1751 int dy);
1752EAPI void
1753ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap,
1754 int *x,
1755 int *y,
1756 int *w,
1757 int *h);
1758EAPI int
1759ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap);
1760
1761EAPI Ecore_X_GC
1762ecore_x_gc_new(Ecore_X_Drawable draw,
1763 Ecore_X_GC_Value_Mask value_mask,
1764 const unsigned int *value_list);
1765EAPI void
1766 ecore_x_gc_free(Ecore_X_GC gc);
1767EAPI void
1768 ecore_x_gc_foreground_set(Ecore_X_GC gc,
1769 unsigned long foreground);
1770EAPI void
1771ecore_x_gc_background_set(Ecore_X_GC gc,
1772 unsigned long background);
1773
1774EAPI Eina_Bool
1775ecore_x_client_message32_send(Ecore_X_Window win,
1776 Ecore_X_Atom type,
1777 Ecore_X_Event_Mask mask,
1778 long d0,
1779 long d1,
1780 long d2,
1781 long d3,
1782 long d4);
1783EAPI Eina_Bool
1784ecore_x_client_message8_send(Ecore_X_Window win,
1785 Ecore_X_Atom type,
1786 const void *data,
1787 int len);
1788EAPI Eina_Bool
1789ecore_x_mouse_move_send(Ecore_X_Window win,
1790 int x,
1791 int y);
1792EAPI Eina_Bool
1793ecore_x_mouse_down_send(Ecore_X_Window win,
1794 int x,
1795 int y,
1796 int b);
1797EAPI Eina_Bool
1798ecore_x_mouse_up_send(Ecore_X_Window win,
1799 int x,
1800 int y,
1801 int b);
1802
1803EAPI void
1804ecore_x_drawable_geometry_get(Ecore_X_Drawable d,
1805 int *x,
1806 int *y,
1807 int *w,
1808 int *h);
1809EAPI int
1810 ecore_x_drawable_border_width_get(Ecore_X_Drawable d);
1811EAPI int
1812 ecore_x_drawable_depth_get(Ecore_X_Drawable d);
1813EAPI void
1814 ecore_x_drawable_rectangle_fill(Ecore_X_Drawable d,
1815 Ecore_X_GC gc,
1816 int x,
1817 int y,
1818 int width,
1819 int height);
1820
1821EAPI Eina_Bool
1822 ecore_x_cursor_color_supported_get(void);
1823EAPI Ecore_X_Cursor
1824 ecore_x_cursor_new(Ecore_X_Window win,
1825 int *pixels,
1826 int w,
1827 int h,
1828 int hot_x,
1829 int hot_y);
1830EAPI void
1831 ecore_x_cursor_free(Ecore_X_Cursor c);
1832EAPI Ecore_X_Cursor
1833 ecore_x_cursor_shape_get(int shape);
1834EAPI void
1835 ecore_x_cursor_size_set(int size);
1836EAPI int
1837 ecore_x_cursor_size_get(void);
1838
1839/* FIXME: these funcs need categorising */
1840EAPI Ecore_X_Window *
1841 ecore_x_window_root_list(int *num_ret);
1842EAPI Ecore_X_Window
1843 ecore_x_window_root_first_get(void);
1844EAPI Eina_Bool
1845 ecore_x_window_manage(Ecore_X_Window win);
1846EAPI void
1847 ecore_x_window_container_manage(Ecore_X_Window win);
1848EAPI void
1849 ecore_x_window_client_manage(Ecore_X_Window win);
1850EAPI void
1851 ecore_x_window_sniff(Ecore_X_Window win);
1852EAPI void
1853 ecore_x_window_client_sniff(Ecore_X_Window win);
1854
1855EAPI Ecore_X_Atom
1856 ecore_x_atom_get(const char *name);
1857EAPI void
1858 ecore_x_atoms_get(const char **names,
1859 int num,
1860 Ecore_X_Atom *atoms);
1861EAPI char *
1862ecore_x_atom_name_get(Ecore_X_Atom atom);
1863
1864EAPI void
1865 ecore_x_icccm_init(void);
1866EAPI void
1867 ecore_x_icccm_state_set(Ecore_X_Window win,
1868 Ecore_X_Window_State_Hint state);
1869EAPI Ecore_X_Window_State_Hint
1870 ecore_x_icccm_state_get(Ecore_X_Window win);
1871EAPI void
1872 ecore_x_icccm_delete_window_send(Ecore_X_Window win,
1873 Ecore_X_Time t);
1874EAPI void
1875ecore_x_icccm_take_focus_send(Ecore_X_Window win,
1876 Ecore_X_Time t);
1877EAPI void
1878ecore_x_icccm_save_yourself_send(Ecore_X_Window win,
1879 Ecore_X_Time t);
1880EAPI void
1881ecore_x_icccm_move_resize_send(Ecore_X_Window win,
1882 int x,
1883 int y,
1884 int w,
1885 int h);
1886EAPI void
1887ecore_x_icccm_hints_set(Ecore_X_Window win,
1888 Eina_Bool accepts_focus,
1889 Ecore_X_Window_State_Hint initial_state,
1890 Ecore_X_Pixmap icon_pixmap,
1891 Ecore_X_Pixmap icon_mask,
1892 Ecore_X_Window icon_window,
1893 Ecore_X_Window window_group,
1894 Eina_Bool is_urgent);
1895EAPI Eina_Bool
1896ecore_x_icccm_hints_get(Ecore_X_Window win,
1897 Eina_Bool *accepts_focus,
1898 Ecore_X_Window_State_Hint *initial_state,
1899 Ecore_X_Pixmap *icon_pixmap,
1900 Ecore_X_Pixmap *icon_mask,
1901 Ecore_X_Window *icon_window,
1902 Ecore_X_Window *window_group,
1903 Eina_Bool *is_urgent);
1904EAPI void
1905ecore_x_icccm_size_pos_hints_set(Ecore_X_Window win,
1906 Eina_Bool request_pos,
1907 Ecore_X_Gravity gravity,
1908 int min_w,
1909 int min_h,
1910 int max_w,
1911 int max_h,
1912 int base_w,
1913 int base_h,
1914 int step_x,
1915 int step_y,
1916 double min_aspect,
1917 double max_aspect);
1918EAPI Eina_Bool
1919ecore_x_icccm_size_pos_hints_get(Ecore_X_Window win,
1920 Eina_Bool *request_pos,
1921 Ecore_X_Gravity *gravity,
1922 int *min_w,
1923 int *min_h,
1924 int *max_w,
1925 int *max_h,
1926 int *base_w,
1927 int *base_h,
1928 int *step_x,
1929 int *step_y,
1930 double *min_aspect,
1931 double *max_aspect);
1932EAPI void
1933ecore_x_icccm_title_set(Ecore_X_Window win,
1934 const char *t);
1935EAPI char *
1936 ecore_x_icccm_title_get(Ecore_X_Window win);
1937EAPI void
1938 ecore_x_icccm_protocol_atoms_set(Ecore_X_Window win,
1939 Ecore_X_Atom *protos,
1940 int num);
1941EAPI void
1942ecore_x_icccm_protocol_set(Ecore_X_Window win,
1943 Ecore_X_WM_Protocol protocol,
1944 Eina_Bool on);
1945EAPI Eina_Bool
1946ecore_x_icccm_protocol_isset(Ecore_X_Window win,
1947 Ecore_X_WM_Protocol protocol);
1948EAPI void
1949ecore_x_icccm_name_class_set(Ecore_X_Window win,
1950 const char *n,
1951 const char *c);
1952EAPI void
1953ecore_x_icccm_name_class_get(Ecore_X_Window win,
1954 char **n,
1955 char **c);
1956EAPI char *
1957 ecore_x_icccm_client_machine_get(Ecore_X_Window win);
1958EAPI void
1959 ecore_x_icccm_command_set(Ecore_X_Window win,
1960 int argc,
1961 char **argv);
1962EAPI void
1963ecore_x_icccm_command_get(Ecore_X_Window win,
1964 int *argc,
1965 char ***argv);
1966EAPI char *
1967 ecore_x_icccm_icon_name_get(Ecore_X_Window win);
1968EAPI void
1969 ecore_x_icccm_icon_name_set(Ecore_X_Window win,
1970 const char *t);
1971EAPI void
1972ecore_x_icccm_colormap_window_set(Ecore_X_Window win,
1973 Ecore_X_Window subwin);
1974EAPI void
1975ecore_x_icccm_colormap_window_unset(Ecore_X_Window win,
1976 Ecore_X_Window subwin);
1977EAPI void
1978ecore_x_icccm_transient_for_set(Ecore_X_Window win,
1979 Ecore_X_Window forwin);
1980EAPI void
1981 ecore_x_icccm_transient_for_unset(Ecore_X_Window win);
1982EAPI Ecore_X_Window
1983 ecore_x_icccm_transient_for_get(Ecore_X_Window win);
1984EAPI void
1985 ecore_x_icccm_window_role_set(Ecore_X_Window win,
1986 const char *role);
1987EAPI char *
1988 ecore_x_icccm_window_role_get(Ecore_X_Window win);
1989EAPI void
1990 ecore_x_icccm_client_leader_set(Ecore_X_Window win,
1991 Ecore_X_Window l);
1992EAPI Ecore_X_Window
1993 ecore_x_icccm_client_leader_get(Ecore_X_Window win);
1994EAPI void
1995 ecore_x_icccm_iconic_request_send(Ecore_X_Window win,
1996 Ecore_X_Window root);
1997
1998typedef enum _Ecore_X_MWM_Hint_Func
1999{
2000 ECORE_X_MWM_HINT_FUNC_ALL = (1 << 0),
2001 ECORE_X_MWM_HINT_FUNC_RESIZE = (1 << 1),
2002 ECORE_X_MWM_HINT_FUNC_MOVE = (1 << 2),
2003 ECORE_X_MWM_HINT_FUNC_MINIMIZE = (1 << 3),
2004 ECORE_X_MWM_HINT_FUNC_MAXIMIZE = (1 << 4),
2005 ECORE_X_MWM_HINT_FUNC_CLOSE = (1 << 5)
2006} Ecore_X_MWM_Hint_Func;
2007
2008typedef enum _Ecore_X_MWM_Hint_Decor
2009{
2010 ECORE_X_MWM_HINT_DECOR_ALL = (1 << 0),
2011 ECORE_X_MWM_HINT_DECOR_BORDER = (1 << 1),
2012 ECORE_X_MWM_HINT_DECOR_RESIZEH = (1 << 2),
2013 ECORE_X_MWM_HINT_DECOR_TITLE = (1 << 3),
2014 ECORE_X_MWM_HINT_DECOR_MENU = (1 << 4),
2015 ECORE_X_MWM_HINT_DECOR_MINIMIZE = (1 << 5),
2016 ECORE_X_MWM_HINT_DECOR_MAXIMIZE = (1 << 6)
2017} Ecore_X_MWM_Hint_Decor;
2018
2019typedef enum _Ecore_X_MWM_Hint_Input
2020{
2021 ECORE_X_MWM_HINT_INPUT_MODELESS = 0,
2022 ECORE_X_MWM_HINT_INPUT_PRIMARY_APPLICATION_MODAL = 1,
2023 ECORE_X_MWM_HINT_INPUT_SYSTEM_MODAL = 2,
2024 ECORE_X_MWM_HINT_INPUT_FULL_APPLICATION_MODAL = 3
2025} Ecore_X_MWM_Hint_Input;
2026
2027EAPI Eina_Bool
2028ecore_x_mwm_hints_get(Ecore_X_Window win,
2029 Ecore_X_MWM_Hint_Func *fhint,
2030 Ecore_X_MWM_Hint_Decor *dhint,
2031 Ecore_X_MWM_Hint_Input *ihint);
2032EAPI void
2033ecore_x_mwm_borderless_set(Ecore_X_Window win,
2034 Eina_Bool borderless);
2035
2036/* netwm */
2037EAPI void
2038 ecore_x_netwm_init(void);
2039EAPI void
2040 ecore_x_netwm_shutdown(void);
2041EAPI void
2042 ecore_x_netwm_wm_identify(Ecore_X_Window root,
2043 Ecore_X_Window check,
2044 const char *wm_name);
2045EAPI void
2046ecore_x_netwm_supported_set(Ecore_X_Window root,
2047 Ecore_X_Atom *supported,
2048 int num);
2049EAPI Eina_Bool
2050ecore_x_netwm_supported_get(Ecore_X_Window root,
2051 Ecore_X_Atom **supported,
2052 int *num);
2053EAPI void
2054ecore_x_netwm_desk_count_set(Ecore_X_Window root,
2055 unsigned int n_desks);
2056EAPI void
2057ecore_x_netwm_desk_roots_set(Ecore_X_Window root,
2058 Ecore_X_Window *vroots,
2059 unsigned int n_desks);
2060EAPI void
2061ecore_x_netwm_desk_names_set(Ecore_X_Window root,
2062 const char **names,
2063 unsigned int n_desks);
2064EAPI void
2065ecore_x_netwm_desk_size_set(Ecore_X_Window root,
2066 unsigned int width,
2067 unsigned int height);
2068EAPI void
2069ecore_x_netwm_desk_workareas_set(Ecore_X_Window root,
2070 unsigned int *areas,
2071 unsigned int n_desks);
2072EAPI unsigned int *
2073ecore_x_netwm_desk_workareas_get(Ecore_X_Window root,
2074 unsigned int *n_desks);
2075EAPI void
2076ecore_x_netwm_desk_current_set(Ecore_X_Window root,
2077 unsigned int desk);
2078EAPI void
2079ecore_x_netwm_desk_viewports_set(Ecore_X_Window root,
2080 unsigned int *origins,
2081 unsigned int n_desks);
2082EAPI void
2083ecore_x_netwm_desk_layout_set(Ecore_X_Window root,
2084 int orientation,
2085 int columns,
2086 int rows,
2087 int starting_corner);
2088EAPI void
2089ecore_x_netwm_showing_desktop_set(Ecore_X_Window root,
2090 Eina_Bool on);
2091EAPI void
2092ecore_x_netwm_client_list_set(Ecore_X_Window root,
2093 Ecore_X_Window *p_clients,
2094 unsigned int n_clients);
2095EAPI void
2096ecore_x_netwm_client_list_stacking_set(Ecore_X_Window root,
2097 Ecore_X_Window *p_clients,
2098 unsigned int n_clients);
2099EAPI void
2100ecore_x_netwm_client_active_set(Ecore_X_Window root,
2101 Ecore_X_Window win);
2102EAPI void
2103ecore_x_netwm_client_active_request(Ecore_X_Window root,
2104 Ecore_X_Window win,
2105 int type,
2106 Ecore_X_Window current_win);
2107EAPI void
2108ecore_x_netwm_name_set(Ecore_X_Window win,
2109 const char *name);
2110EAPI int
2111ecore_x_netwm_name_get(Ecore_X_Window win,
2112 char **name);
2113EAPI void
2114ecore_x_netwm_startup_id_set(Ecore_X_Window win,
2115 const char *id);
2116EAPI int
2117ecore_x_netwm_startup_id_get(Ecore_X_Window win,
2118 char **id);
2119EAPI void
2120ecore_x_netwm_visible_name_set(Ecore_X_Window win,
2121 const char *name);
2122EAPI int
2123ecore_x_netwm_visible_name_get(Ecore_X_Window win,
2124 char **name);
2125EAPI void
2126ecore_x_netwm_icon_name_set(Ecore_X_Window win,
2127 const char *name);
2128EAPI int
2129ecore_x_netwm_icon_name_get(Ecore_X_Window win,
2130 char **name);
2131EAPI void
2132ecore_x_netwm_visible_icon_name_set(Ecore_X_Window win,
2133 const char *name);
2134EAPI int
2135ecore_x_netwm_visible_icon_name_get(Ecore_X_Window win,
2136 char **name);
2137EAPI void
2138ecore_x_netwm_desktop_set(Ecore_X_Window win,
2139 unsigned int desk);
2140EAPI Eina_Bool
2141ecore_x_netwm_desktop_get(Ecore_X_Window win,
2142 unsigned int *desk);
2143EAPI void
2144ecore_x_netwm_strut_set(Ecore_X_Window win,
2145 int left,
2146 int right,
2147 int top,
2148 int bottom);
2149EAPI Eina_Bool
2150ecore_x_netwm_strut_get(Ecore_X_Window win,
2151 int *left,
2152 int *right,
2153 int *top,
2154 int *bottom);
2155EAPI void
2156ecore_x_netwm_strut_partial_set(Ecore_X_Window win,
2157 int left,
2158 int right,
2159 int top,
2160 int bottom,
2161 int left_start_y,
2162 int left_end_y,
2163 int right_start_y,
2164 int right_end_y,
2165 int top_start_x,
2166 int top_end_x,
2167 int bottom_start_x,
2168 int bottom_end_x);
2169EAPI Eina_Bool
2170ecore_x_netwm_strut_partial_get(Ecore_X_Window win,
2171 int *left,
2172 int *right,
2173 int *top,
2174 int *bottom,
2175 int *left_start_y,
2176 int *left_end_y,
2177 int *right_start_y,
2178 int *right_end_y,
2179 int *top_start_x,
2180 int *top_end_x,
2181 int *bottom_start_x,
2182 int *bottom_end_x);
2183
2184EAPI void
2185ecore_x_netwm_icons_set(Ecore_X_Window win,
2186 Ecore_X_Icon *icon,
2187 int num);
2188
2189EAPI Eina_Bool
2190ecore_x_netwm_icons_get(Ecore_X_Window win,
2191 Ecore_X_Icon **icon,
2192 int *num);
2193EAPI void
2194ecore_x_netwm_icon_geometry_set(Ecore_X_Window win,
2195 int x,
2196 int y,
2197 int width,
2198 int height);
2199EAPI Eina_Bool
2200ecore_x_netwm_icon_geometry_get(Ecore_X_Window win,
2201 int *x,
2202 int *y,
2203 int *width,
2204 int *height);
2205EAPI void
2206ecore_x_netwm_pid_set(Ecore_X_Window win,
2207 int pid);
2208EAPI Eina_Bool
2209ecore_x_netwm_pid_get(Ecore_X_Window win,
2210 int *pid);
2211EAPI void
2212 ecore_x_netwm_handled_icons_set(Ecore_X_Window win);
2213EAPI Eina_Bool
2214 ecore_x_netwm_handled_icons_get(Ecore_X_Window win);
2215EAPI void
2216 ecore_x_netwm_user_time_set(Ecore_X_Window win,
2217 unsigned int time);
2218EAPI Eina_Bool
2219ecore_x_netwm_user_time_get(Ecore_X_Window win,
2220 unsigned int *time);
2221EAPI void
2222ecore_x_netwm_window_state_set(Ecore_X_Window win,
2223 Ecore_X_Window_State *state,
2224 unsigned int num);
2225EAPI Eina_Bool
2226ecore_x_netwm_window_state_get(Ecore_X_Window win,
2227 Ecore_X_Window_State **state,
2228 unsigned int *num);
2229EAPI void
2230ecore_x_netwm_window_type_set(Ecore_X_Window win,
2231 Ecore_X_Window_Type type);
2232EAPI Eina_Bool
2233ecore_x_netwm_window_type_get(Ecore_X_Window win,
2234 Ecore_X_Window_Type *type);
2235EAPI int
2236ecore_x_netwm_window_types_get(Ecore_X_Window win,
2237 Ecore_X_Window_Type **types);
2238EAPI Eina_Bool
2239ecore_x_netwm_allowed_action_isset(Ecore_X_Window win,
2240 Ecore_X_Action action);
2241EAPI void
2242ecore_x_netwm_allowed_action_set(Ecore_X_Window win,
2243 Ecore_X_Action *action,
2244 unsigned int num);
2245EAPI Eina_Bool
2246ecore_x_netwm_allowed_action_get(Ecore_X_Window win,
2247 Ecore_X_Action **action,
2248 unsigned int *num);
2249EAPI void
2250ecore_x_netwm_opacity_set(Ecore_X_Window win,
2251 unsigned int opacity);
2252EAPI Eina_Bool
2253ecore_x_netwm_opacity_get(Ecore_X_Window win,
2254 unsigned int *opacity);
2255EAPI void
2256ecore_x_netwm_frame_size_set(Ecore_X_Window win,
2257 int fl,
2258 int fr,
2259 int ft,
2260 int fb);
2261EAPI Eina_Bool
2262ecore_x_netwm_frame_size_get(Ecore_X_Window win,
2263 int *fl,
2264 int *fr,
2265 int *ft,
2266 int *fb);
2267EAPI Eina_Bool
2268ecore_x_netwm_sync_counter_get(Ecore_X_Window win,
2269 Ecore_X_Sync_Counter *counter);
2270EAPI void
2271 ecore_x_netwm_ping_send(Ecore_X_Window win);
2272EAPI void
2273 ecore_x_netwm_sync_request_send(Ecore_X_Window win,
2274 unsigned int serial);
2275EAPI void
2276ecore_x_netwm_state_request_send(Ecore_X_Window win,
2277 Ecore_X_Window root,
2278 Ecore_X_Window_State s1,
2279 Ecore_X_Window_State s2,
2280 Eina_Bool set);
2281EAPI void
2282ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
2283 Ecore_X_Window root,
2284 unsigned int desktop);
2285
2286EAPI void
2287 ecore_x_e_init(void);
2288EAPI void
2289 ecore_x_e_frame_size_set(Ecore_X_Window win,
2290 int fl,
2291 int fr,
2292 int ft,
2293 int fb);
2294EAPI void
2295ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
2296 unsigned int is_keyboard);
2297EAPI Eina_Bool
2298 ecore_x_e_virtual_keyboard_get(Ecore_X_Window win);
2299EAPI void
2300 ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
2301 Ecore_X_Virtual_Keyboard_State state);
2302EAPI Ecore_X_Virtual_Keyboard_State
2303 ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win);
2304EAPI void
2305 ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
2306 Ecore_X_Virtual_Keyboard_State state);
2307
2308/* Illume functions */
2309EAPI void
2310ecore_x_e_illume_zone_set(Ecore_X_Window win,
2311 Ecore_X_Window zone);
2312EAPI Ecore_X_Window
2313 ecore_x_e_illume_zone_get(Ecore_X_Window win);
2314EAPI void
2315 ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
2316 Ecore_X_Window *zones,
2317 unsigned int n_zones);
2318EAPI void
2319ecore_x_e_illume_conformant_set(Ecore_X_Window win,
2320 unsigned int is_conformant);
2321EAPI Eina_Bool
2322 ecore_x_e_illume_conformant_get(Ecore_X_Window win);
2323EAPI void
2324 ecore_x_e_illume_mode_set(Ecore_X_Window win,
2325 Ecore_X_Illume_Mode mode);
2326EAPI Ecore_X_Illume_Mode
2327 ecore_x_e_illume_mode_get(Ecore_X_Window win);
2328EAPI void
2329 ecore_x_e_illume_mode_send(Ecore_X_Window win,
2330 Ecore_X_Illume_Mode mode);
2331EAPI void
2332 ecore_x_e_illume_focus_back_send(Ecore_X_Window win);
2333EAPI void
2334 ecore_x_e_illume_focus_forward_send(Ecore_X_Window win);
2335EAPI void
2336 ecore_x_e_illume_focus_home_send(Ecore_X_Window win);
2337EAPI void
2338 ecore_x_e_illume_close_send(Ecore_X_Window win);
2339EAPI void
2340 ecore_x_e_illume_home_new_send(Ecore_X_Window win);
2341EAPI void
2342 ecore_x_e_illume_home_del_send(Ecore_X_Window win);
2343EAPI void
2344 ecore_x_e_illume_drag_set(Ecore_X_Window win,
2345 unsigned int drag);
2346EAPI Eina_Bool
2347 ecore_x_e_illume_drag_get(Ecore_X_Window win);
2348EAPI void
2349 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
2350 unsigned int is_locked);
2351EAPI Eina_Bool
2352 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win);
2353EAPI void
2354 ecore_x_e_illume_drag_start_send(Ecore_X_Window win);
2355EAPI void
2356 ecore_x_e_illume_drag_end_send(Ecore_X_Window win);
2357EAPI void
2358 ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
2359 int x,
2360 int y,
2361 int w,
2362 int h);
2363EAPI Eina_Bool
2364ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
2365 int *x,
2366 int *y,
2367 int *w,
2368 int *h);
2369EAPI void
2370ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
2371 int x,
2372 int y,
2373 int w,
2374 int h);
2375EAPI Eina_Bool
2376ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
2377 int *x,
2378 int *y,
2379 int *w,
2380 int *h);
2381EAPI void
2382ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
2383 int x,
2384 int y,
2385 int w,
2386 int h);
2387EAPI Eina_Bool
2388ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
2389 int *x,
2390 int *y,
2391 int *w,
2392 int *h);
2393EAPI void
2394ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
2395 unsigned int is_quickpanel);
2396EAPI Eina_Bool
2397 ecore_x_e_illume_quickpanel_get(Ecore_X_Window win);
2398EAPI void
2399 ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
2400 Ecore_X_Illume_Quickpanel_State state);
2401EAPI Ecore_X_Illume_Quickpanel_State
2402 ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win);
2403EAPI void
2404 ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
2405 Ecore_X_Illume_Quickpanel_State state);
2406EAPI void
2407 ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win);
2408EAPI void
2409 ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
2410 unsigned int priority);
2411EAPI int
2412 ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win);
2413EAPI void
2414 ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
2415 unsigned int priority);
2416EAPI int
2417 ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win);
2418EAPI void
2419 ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
2420 unsigned int zone);
2421EAPI int
2422 ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win);
2423EAPI void
2424 ecore_x_e_illume_quickpanel_zone_request_send(Ecore_X_Window win);
2425EAPI void
2426 ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win);
2427
2428EAPI void
2429ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
2430 Ecore_X_Illume_Clipboard_State state);
2431
2432EAPI Ecore_X_Illume_Clipboard_State
2433ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win);
2434
2435EAPI void
2436ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
2437 int x,
2438 int y,
2439 int w,
2440 int h);
2441EAPI Eina_Bool
2442ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
2443 int *x,
2444 int *y,
2445 int *w,
2446 int *h);
2447EAPI void
2448ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
2449 Ecore_X_Sync_Counter counter);
2450EAPI Ecore_X_Sync_Counter
2451 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win);
2452EAPI void
2453 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
2454 Ecore_X_Window win);
2455EAPI void
2456ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
2457 Ecore_X_Window win,
2458 int w,
2459 int h);
2460EAPI void
2461ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
2462 Eina_Bool enabled);
2463EAPI Eina_Bool
2464 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root);
2465EAPI void
2466 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win);
2467EAPI void
2468 ecore_x_e_comp_sync_end_send(Ecore_X_Window win);
2469EAPI void
2470 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win);
2471
2472EAPI void
2473 ecore_x_e_comp_flush_send(Ecore_X_Window win);
2474EAPI void
2475 ecore_x_e_comp_dump_send(Ecore_X_Window win);
2476EAPI void
2477 ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
2478 Ecore_X_Pixmap pixmap);
2479EAPI Ecore_X_Pixmap
2480ecore_x_e_comp_pixmap_get(Ecore_X_Window win);
2481
2482EAPI Ecore_X_Sync_Alarm
2483 ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter);
2484EAPI Eina_Bool
2485 ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm);
2486EAPI Eina_Bool
2487 ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter,
2488 unsigned int *val);
2489EAPI Ecore_X_Sync_Counter
2490 ecore_x_sync_counter_new(int val);
2491EAPI void
2492 ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter);
2493EAPI void
2494 ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter,
2495 int by);
2496EAPI void
2497ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter,
2498 int val);
2499
2500EAPI void
2501ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter,
2502 int val);
2503EAPI void
2504ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter,
2505 int val_hi,
2506 unsigned int val_lo);
2507EAPI Eina_Bool
2508ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter,
2509 int *val_hi,
2510 unsigned int *val_lo);
2511
2512EAPI int
2513 ecore_x_xinerama_screen_count_get(void);
2514EAPI Eina_Bool
2515 ecore_x_xinerama_screen_geometry_get(int screen,
2516 int *x,
2517 int *y,
2518 int *w,
2519 int *h);
2520
2521EAPI Eina_Bool
2522 ecore_x_screensaver_event_available_get(void);
2523EAPI int
2524 ecore_x_screensaver_idle_time_get(void);
2525EAPI void
2526 ecore_x_screensaver_set(int timeout,
2527 int interval,
2528 int prefer_blanking,
2529 int allow_exposures);
2530EAPI void
2531 ecore_x_screensaver_timeout_set(int timeout);
2532EAPI int
2533 ecore_x_screensaver_timeout_get(void);
2534EAPI void
2535 ecore_x_screensaver_blank_set(int timeout);
2536EAPI int
2537 ecore_x_screensaver_blank_get(void);
2538EAPI void
2539 ecore_x_screensaver_expose_set(int timeout);
2540EAPI int
2541 ecore_x_screensaver_expose_get(void);
2542EAPI void
2543 ecore_x_screensaver_interval_set(int timeout);
2544EAPI int
2545 ecore_x_screensaver_interval_get(void);
2546EAPI void
2547 ecore_x_screensaver_event_listen_set(Eina_Bool on);
2548
2549/* FIXME: these funcs need categorising */
2550
2551typedef struct _Ecore_X_Window_Attributes
2552{
2553 Ecore_X_Window root;
2554 int x, y, w, h;
2555 int border;
2556 int depth;
2557 Eina_Bool visible : 1;
2558 Eina_Bool viewable : 1;
2559 Eina_Bool override : 1;
2560 Eina_Bool input_only : 1;
2561 Eina_Bool save_under : 1;
2562 struct
2563 {
2564 Ecore_X_Event_Mask mine;
2565 Ecore_X_Event_Mask all;
2566 Ecore_X_Event_Mask no_propagate;
2567 } event_mask;
2568 Ecore_X_Gravity window_gravity;
2569 Ecore_X_Gravity pixel_gravity;
2570 Ecore_X_Colormap colormap;
2571 Ecore_X_Visual visual;
2572 /* FIXME: missing
2573 * int map_installed;
2574 * Screen *screen;
2575 */
2576} Ecore_X_Window_Attributes;
2577
2578EAPI Eina_Bool
2579ecore_x_window_attributes_get(Ecore_X_Window win,
2580 Ecore_X_Window_Attributes *att_ret);
2581EAPI void
2582 ecore_x_window_save_set_add(Ecore_X_Window win);
2583EAPI void
2584 ecore_x_window_save_set_del(Ecore_X_Window win);
2585EAPI Ecore_X_Window *
2586 ecore_x_window_children_get(Ecore_X_Window win,
2587 int *num);
2588
2589EAPI Eina_Bool
2590ecore_x_pointer_control_set(int accel_num,
2591 int accel_denom,
2592 int threshold);
2593EAPI Eina_Bool
2594ecore_x_pointer_control_get(int *accel_num,
2595 int *accel_denom,
2596 int *threshold);
2597EAPI Eina_Bool
2598ecore_x_pointer_mapping_set(unsigned char *map,
2599 int nmap);
2600EAPI Eina_Bool
2601ecore_x_pointer_mapping_get(unsigned char *map,
2602 int nmap);
2603EAPI Eina_Bool
2604 ecore_x_pointer_grab(Ecore_X_Window win);
2605EAPI Eina_Bool
2606 ecore_x_pointer_confine_grab(Ecore_X_Window win);
2607EAPI void
2608 ecore_x_pointer_ungrab(void);
2609EAPI Eina_Bool
2610 ecore_x_pointer_warp(Ecore_X_Window win,
2611 int x,
2612 int y);
2613EAPI Eina_Bool
2614 ecore_x_keyboard_grab(Ecore_X_Window win);
2615EAPI void
2616 ecore_x_keyboard_ungrab(void);
2617EAPI void
2618 ecore_x_grab(void);
2619EAPI void
2620 ecore_x_ungrab(void);
2621EAPI void
2622 ecore_x_passive_grab_replay_func_set(Eina_Bool (*func)(void *data,
2623 int event_type,
2624 void *event),
2625 void *data);
2626EAPI void
2627ecore_x_window_button_grab(Ecore_X_Window win,
2628 int button,
2629 Ecore_X_Event_Mask event_mask,
2630 int mod,
2631 int any_mod);
2632EAPI void
2633ecore_x_window_button_ungrab(Ecore_X_Window win,
2634 int button,
2635 int mod,
2636 int any_mod);
2637EAPI void
2638ecore_x_window_key_grab(Ecore_X_Window win,
2639 const char *key,
2640 int mod,
2641 int any_mod);
2642EAPI void
2643ecore_x_window_key_ungrab(Ecore_X_Window win,
2644 const char *key,
2645 int mod,
2646 int any_mod);
2647
2648EAPI void
2649 ecore_x_focus_reset(void);
2650EAPI void
2651 ecore_x_events_allow_all(void);
2652EAPI void
2653 ecore_x_pointer_last_xy_get(int *x,
2654 int *y);
2655EAPI void
2656ecore_x_pointer_xy_get(Ecore_X_Window win,
2657 int *x,
2658 int *y);
2659
2660/* ecore_x_region.c */
2661EAPI Ecore_X_XRegion *
2662 ecore_x_xregion_new(void);
2663EAPI void
2664 ecore_x_xregion_free(Ecore_X_XRegion *region);
2665EAPI Eina_Bool
2666 ecore_x_xregion_set(Ecore_X_XRegion *region,
2667 Ecore_X_GC gc);
2668EAPI void
2669ecore_x_xregion_translate(Ecore_X_XRegion *region,
2670 int x,
2671 int y);
2672EAPI Eina_Bool
2673ecore_x_xregion_intersect(Ecore_X_XRegion *dst,
2674 Ecore_X_XRegion *r1,
2675 Ecore_X_XRegion *r2);
2676EAPI Eina_Bool
2677ecore_x_xregion_union(Ecore_X_XRegion *dst,
2678 Ecore_X_XRegion *r1,
2679 Ecore_X_XRegion *r2);
2680EAPI Eina_Bool
2681ecore_x_xregion_union_rect(Ecore_X_XRegion *dst,
2682 Ecore_X_XRegion *src,
2683 Ecore_X_Rectangle *rect);
2684EAPI Eina_Bool
2685ecore_x_xregion_subtract(Ecore_X_XRegion *dst,
2686 Ecore_X_XRegion *r1,
2687 Ecore_X_XRegion *r2);
2688EAPI Eina_Bool
2689 ecore_x_xregion_is_empty(Ecore_X_XRegion *region);
2690EAPI Eina_Bool
2691 ecore_x_xregion_is_equal(Ecore_X_XRegion *r1,
2692 Ecore_X_XRegion *r2);
2693EAPI Eina_Bool
2694ecore_x_xregion_point_contain(Ecore_X_XRegion *region,
2695 int x,
2696 int y);
2697EAPI Eina_Bool
2698ecore_x_xregion_rect_contain(Ecore_X_XRegion *region,
2699 Ecore_X_Rectangle *rect);
2700
2701/* ecore_x_randr.c */
2702
2703/* The usage of 'Ecore_X_Randr_None' or 'Ecore_X_Randr_Unset'
2704 * depends on the context. In most cases 'Ecore_X_Randr_Unset'
2705 * can be used, but in some cases -1 is a special value to
2706 * functions, thus 'Ecore_X_Randr_None' (=0) must be used.
2707 */
2708
2709typedef short Ecore_X_Randr_Refresh_Rate;
2710typedef int Ecore_X_Randr_Crtc_Gamma;
2711typedef int Ecore_X_Randr_Signal_Format;
2712typedef int Ecore_X_Randr_Signal_Property;
2713typedef int Ecore_X_Randr_Connector_Type;
2714
2715typedef struct _Ecore_X_Randr_Mode_Info
2716{
2717 Ecore_X_ID xid;
2718 unsigned int width;
2719 unsigned int height;
2720 unsigned long dotClock;
2721 unsigned int hSyncStart;
2722 unsigned int hSyncEnd;
2723 unsigned int hTotal;
2724 unsigned int hSkew;
2725 unsigned int vSyncStart;
2726 unsigned int vSyncEnd;
2727 unsigned int vTotal;
2728 char *name;
2729 unsigned int nameLength;
2730 unsigned long modeFlags;
2731} Ecore_X_Randr_Mode_Info;
2732
2733EAPI int
2734 ecore_x_randr_version_get(void);
2735EAPI Eina_Bool
2736 ecore_x_randr_query(void);
2737
2738/* ecore_x_randr_11.c */
2739EAPI Ecore_X_Randr_Orientation
2740 ecore_x_randr_screen_primary_output_orientations_get(Ecore_X_Window root);
2741EAPI Ecore_X_Randr_Orientation
2742 ecore_x_randr_screen_primary_output_orientation_get(Ecore_X_Window root);
2743EAPI Eina_Bool
2744 ecore_x_randr_screen_primary_output_orientation_set(Ecore_X_Window root,
2745 Ecore_X_Randr_Orientation orientation);
2746EAPI Ecore_X_Randr_Screen_Size_MM *
2747ecore_x_randr_screen_primary_output_sizes_get(Ecore_X_Window root,
2748 int *num);
2749EAPI void
2750ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root,
2751 int *w,
2752 int *h,
2753 int *w_mm,
2754 int *h_mm,
2755 int *size_index);
2756EAPI Eina_Bool
2757ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root,
2758 int size_index);
2759EAPI Ecore_X_Randr_Refresh_Rate
2760 ecore_x_randr_screen_primary_output_current_refresh_rate_get(Ecore_X_Window root);
2761EAPI Ecore_X_Randr_Refresh_Rate *
2762 ecore_x_randr_screen_primary_output_refresh_rates_get(Ecore_X_Window root,
2763 int size_index,
2764 int *num);
2765EAPI Eina_Bool
2766ecore_x_randr_screen_primary_output_refresh_rate_set(Ecore_X_Window root,
2767 int size_index,
2768 Ecore_X_Randr_Refresh_Rate rate);
2769
2770/* ecore_x_randr_12.c */
2771EAPI void
2772ecore_x_randr_events_select(Ecore_X_Window win,
2773 Eina_Bool on);
2774
2775EAPI void
2776ecore_x_randr_screen_current_size_get(Ecore_X_Window root,
2777 int *w,
2778 int *h,
2779 int *w_mm,
2780 int *h_mm);
2781EAPI void
2782ecore_x_randr_screen_size_range_get(Ecore_X_Window root,
2783 int *wmin,
2784 int *hmin,
2785 int *wmax,
2786 int *hmax);
2787EAPI void
2788 ecore_x_randr_screen_reset(Ecore_X_Window root);
2789EAPI Eina_Bool
2790 ecore_x_randr_screen_current_size_set(Ecore_X_Window root,
2791 int w,
2792 int h,
2793 int w_mm,
2794 int h_mm);
2795EAPI Ecore_X_Randr_Mode_Info **
2796ecore_x_randr_modes_info_get(Ecore_X_Window root,
2797 int *num);
2798EAPI Ecore_X_Randr_Mode
2799ecore_x_randr_mode_info_add(Ecore_X_Window root,
2800 Ecore_X_Randr_Mode_Info *mode_info);
2801EAPI void
2802ecore_x_randr_mode_del(Ecore_X_Randr_Mode mode);
2803EAPI Ecore_X_Randr_Mode_Info *
2804ecore_x_randr_mode_info_get(Ecore_X_Window root,
2805 Ecore_X_Randr_Mode mode);
2806EAPI void
2807 ecore_x_randr_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info);
2808EAPI Ecore_X_Randr_Crtc *
2809 ecore_x_randr_crtcs_get(Ecore_X_Window root,
2810 int *num);
2811EAPI Ecore_X_Randr_Output *ecore_x_randr_outputs_get(Ecore_X_Window root,
2812 int *num);
2813EAPI Ecore_X_Randr_Output *
2814ecore_x_randr_window_outputs_get(Ecore_X_Window window,
2815 int *num);
2816EAPI Ecore_X_Randr_Output *
2817ecore_x_randr_current_output_get(Ecore_X_Window window,
2818 int *num);
2819EAPI Ecore_X_Randr_Crtc *
2820ecore_x_randr_window_crtcs_get(Ecore_X_Window window,
2821 int *num);
2822EAPI Ecore_X_Randr_Crtc *
2823ecore_x_randr_current_crtc_get(Ecore_X_Window window,
2824 int *num);
2825EAPI Ecore_X_Randr_Output *
2826ecore_x_randr_crtc_outputs_get(Ecore_X_Window root,
2827 Ecore_X_Randr_Crtc crtc,
2828 int *num);
2829EAPI Ecore_X_Randr_Output *
2830ecore_x_randr_crtc_possible_outputs_get(Ecore_X_Window root,
2831 Ecore_X_Randr_Crtc crtc,
2832 int *num);
2833EAPI void
2834ecore_x_randr_crtc_geometry_get(Ecore_X_Window root,
2835 Ecore_X_Randr_Crtc crtc,
2836 int *x,
2837 int *y,
2838 int *w,
2839 int *h);
2840EAPI void
2841ecore_x_randr_crtc_pos_get(Ecore_X_Window root,
2842 Ecore_X_Randr_Crtc crtc,
2843 int *x,
2844 int *y);
2845EAPI Eina_Bool
2846ecore_x_randr_crtc_pos_set(Ecore_X_Window root,
2847 Ecore_X_Randr_Crtc crtc,
2848 int x,
2849 int y);
2850EAPI Ecore_X_Randr_Mode
2851ecore_x_randr_crtc_mode_get(Ecore_X_Window root,
2852 Ecore_X_Randr_Crtc crtc);
2853EAPI Eina_Bool
2854ecore_x_randr_crtc_mode_set(Ecore_X_Window root,
2855 Ecore_X_Randr_Crtc crtc,
2856 Ecore_X_Randr_Output *outputs,
2857 int noutputs,
2858 Ecore_X_Randr_Mode mode);
2859EAPI void
2860ecore_x_randr_crtc_size_get(Ecore_X_Window root,
2861 Ecore_X_Randr_Crtc crtc,
2862 int *w,
2863 int *h);
2864EAPI Ecore_X_Randr_Refresh_Rate
2865ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root,
2866 Ecore_X_Randr_Crtc crtc,
2867 Ecore_X_Randr_Mode mode);
2868EAPI Ecore_X_Randr_Orientation
2869ecore_x_randr_crtc_orientations_get(Ecore_X_Window root,
2870 Ecore_X_Randr_Crtc crtc);
2871EAPI Ecore_X_Randr_Orientation
2872ecore_x_randr_crtc_orientation_get(Ecore_X_Window root,
2873 Ecore_X_Randr_Crtc crtc);
2874EAPI Eina_Bool
2875ecore_x_randr_crtc_orientation_set(Ecore_X_Window root,
2876 Ecore_X_Randr_Crtc crtc,
2877 const Ecore_X_Randr_Orientation orientation);
2878EAPI Eina_Bool
2879ecore_x_randr_crtc_clone_set(Ecore_X_Window root,
2880 Ecore_X_Randr_Crtc original,
2881 Ecore_X_Randr_Crtc clone);
2882EAPI Eina_Bool
2883ecore_x_randr_crtc_settings_set(Ecore_X_Window root,
2884 Ecore_X_Randr_Crtc crtc,
2885 Ecore_X_Randr_Output *outputs,
2886 int noutputs,
2887 int x,
2888 int y,
2889 Ecore_X_Randr_Mode mode,
2890 Ecore_X_Randr_Orientation orientation);
2891EAPI Eina_Bool
2892ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root,
2893 Ecore_X_Randr_Crtc crtc_r1,
2894 Ecore_X_Randr_Crtc crtc_r2,
2895 Ecore_X_Randr_Output_Policy policy,
2896 Ecore_X_Randr_Relative_Alignment alignment);
2897EAPI Eina_Bool
2898ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output,
2899 Ecore_X_Randr_Mode mode);
2900EAPI void
2901ecore_x_randr_output_mode_del(Ecore_X_Randr_Output output,
2902 Ecore_X_Randr_Mode mode);
2903EAPI Ecore_X_Randr_Mode *
2904ecore_x_randr_output_modes_get(Ecore_X_Window root,
2905 Ecore_X_Randr_Output output,
2906 int *num,
2907 int *npreferred);
2908EAPI Ecore_X_Randr_Output *ecore_x_randr_output_clones_get(Ecore_X_Window root,
2909 Ecore_X_Randr_Output output,
2910 int *num);
2911EAPI Ecore_X_Randr_Crtc *ecore_x_randr_output_possible_crtcs_get(Ecore_X_Window root,
2912 Ecore_X_Randr_Output output,
2913 int *num);
2914EAPI Ecore_X_Randr_Crtc
2915ecore_x_randr_output_crtc_get(Ecore_X_Window root,
2916 Ecore_X_Randr_Output output);
2917EAPI char *
2918ecore_x_randr_output_name_get(Ecore_X_Window root,
2919 Ecore_X_Randr_Output output,
2920 int *len);
2921EAPI int
2922 ecore_x_randr_crtc_gamma_ramp_size_get(Ecore_X_Randr_Crtc crtc);
2923EAPI Ecore_X_Randr_Crtc_Gamma **
2924 ecore_x_randr_crtc_gamma_ramps_get(Ecore_X_Randr_Crtc crtc);
2925EAPI Eina_Bool
2926 ecore_x_randr_crtc_gamma_ramps_set(Ecore_X_Randr_Crtc crtc,
2927 const Ecore_X_Randr_Crtc_Gamma *red,
2928 const Ecore_X_Randr_Crtc_Gamma *green,
2929 const Ecore_X_Randr_Crtc_Gamma *blue);
2930EAPI Eina_Bool
2931ecore_x_randr_move_all_crtcs_but(Ecore_X_Window root,
2932 const Ecore_X_Randr_Crtc *not_moved,
2933 int nnot_moved,
2934 int dx,
2935 int dy);
2936EAPI Eina_Bool
2937ecore_x_randr_move_crtcs(Ecore_X_Window root,
2938 const Ecore_X_Randr_Crtc *crtcs,
2939 int ncrtc,
2940 int dx,
2941 int dy);
2942EAPI void
2943ecore_x_randr_mode_size_get(Ecore_X_Window root,
2944 Ecore_X_Randr_Mode mode,
2945 int *w,
2946 int *h);
2947EAPI Ecore_X_Randr_Connection_Status
2948ecore_x_randr_output_connection_status_get(Ecore_X_Window root,
2949 Ecore_X_Randr_Output output);
2950EAPI void
2951ecore_x_randr_output_size_mm_get(Ecore_X_Window root,
2952 Ecore_X_Randr_Output output,
2953 int *w,
2954 int *h);
2955EAPI Eina_Bool
2956ecore_x_randr_output_crtc_set(Ecore_X_Window root,
2957 Ecore_X_Randr_Output output,
2958 const Ecore_X_Randr_Crtc crtc);
2959
2960/* ecore_x_randr_12_edid.c */
2961
2962/*
2963 * @brief Validates the header from raw EDID data.
2964 *
2965 * @param edid the edid structure
2966 * @param edid_length length of the edid structure
2967 * @return EINA_TRUE, if the header is valid. Else EINA_FALSE.
2968 */
2969EAPI Eina_Bool
2970ecore_x_randr_edid_has_valid_header(unsigned char *edid,
2971 unsigned long edid_length);
2972
2973/*
2974 * @brief Checks whether a display's EDID has a valid checksum.
2975 *
2976 * @param edid the edid structure
2977 * @param edid_length length of the edid structure
2978 * @return EINA_TRUE, if the checksum is valid. Else EINA_FALSE.
2979 */
2980EAPI Eina_Bool
2981ecore_x_randr_edid_info_has_valid_checksum(unsigned char *edid,
2982 unsigned long edid_length);
2983
2984/*
2985 * @brief Get the encoded version from raw EDID data.
2986 *
2987 * The return value has the minor version in the lowest 8 bits, and the major
2988 * version in all the rest of the bits. i.e.
2989 *
2990 * minor = (version & 0x000000ff);
2991 * major = (version & 0xffffff00) >> 8;
2992 *
2993 * @param edid the edid structure
2994 * @param edid_length length of the edid structure
2995 * @return The encoded major and minor version encasuplated an int.
2996 */
2997EAPI int
2998ecore_x_randr_edid_version_get(unsigned char *edid,
2999 unsigned long edid_length);
3000
3001/*
3002 * @brief Get the encoded manufacturer from raw EDID data.
3003 *
3004 * @param edid the edid structure
3005 * @param edid_length length of the edid structure
3006 * @return The encoded manufacturer identifier.
3007 */
3008EAPI char *
3009ecore_x_randr_edid_manufacturer_name_get(unsigned char *edid,
3010 unsigned long edid_length);
3011
3012/*
3013 * @brief Get the encoded name from raw EDID data.
3014 *
3015 * @param edid the edid structure
3016 * @param edid_length length of the edid structure
3017 * @return The encoded manufacturer identifier.
3018 */
3019EAPI char *
3020ecore_x_randr_edid_display_name_get(unsigned char *edid,
3021 unsigned long edid_length);
3022
3023/*
3024 * @brief Get the encoded ASCII from raw EDID data.
3025 *
3026 * @param edid the edid structure
3027 * @param edid_length length of the edid structure
3028 * @return The encoded ASCII display identifier.
3029 */
3030EAPI char *
3031ecore_x_randr_edid_display_ascii_get(unsigned char *edid,
3032 unsigned long edid_length);
3033
3034/*
3035 * @brief Get the encoded serial identifier from raw EDID data.
3036 *
3037 * @param edid the edid structure
3038 * @param edid_length length of the edid structure
3039 * @return The encoded serial identifier.
3040 */
3041EAPI char *
3042ecore_x_randr_edid_display_serial_get(unsigned char *edid,
3043 unsigned long edid_length);
3044
3045/*
3046 * @brief Get the encoded model number from raw EDID data.
3047 *
3048 * The manufacturer ID table is necessary for a useful description.
3049 *
3050 * @param edid the edid structure
3051 * @param edid_length length of the edid structure
3052 * @return The encoded model number.
3053 */
3054EAPI int
3055ecore_x_randr_edid_model_get(unsigned char *edid,
3056 unsigned long edid_length);
3057
3058/*
3059 * @brief Get the manufacturer serial number from raw EDID data.
3060 *
3061 * @param edid the edid structure
3062 * @param edid_length length of the edid structure
3063 * @return The encoded serial manufacturer serial number.
3064 */
3065EAPI int
3066ecore_x_randr_edid_manufacturer_serial_number_get(unsigned char *edid,
3067 unsigned long edid_length);
3068
3069/*
3070 * @brief Get the manufacturer model number from raw EDID data.
3071 *
3072 * @param edid the edid structure
3073 * @param edid_length length of the edid structure
3074 * @return The manufacturer's model number.
3075 */
3076EAPI int
3077ecore_x_randr_edid_manufacturer_model_get(unsigned char *edid,
3078 unsigned long edid_length);
3079
3080/*
3081 * @brief Looks up the DPMS support from raw EDID data.
3082 *
3083 * @param edid the edid structure
3084 * @param edid_length length of the edid structure
3085 * @return EINA_TRUE, if DPMS is supported in some way. Else EINA_FALSE.
3086 */
3087EAPI Eina_Bool
3088ecore_x_randr_edid_dpms_available_get(unsigned char *edid,
3089 unsigned long edid_length);
3090
3091/*
3092 * @brief Looks up the DPMS Standby support from raw EDID data.
3093 *
3094 * @param edid the edid structure
3095 * @param edid_length length of the edid structure
3096 * @return EINA_TRUE, if DPMS Standby is supported. Else EINA_FALSE.
3097 */
3098EAPI Eina_Bool
3099ecore_x_randr_edid_dpms_standby_available_get(unsigned char *edid,
3100 unsigned long edid_length);
3101
3102/*
3103 * @brief Looks up the DPMS Suspend support from raw EDID data.
3104 *
3105 * @param edid the edid structure
3106 * @param edid_length length of the edid structure
3107 * @return EINA_TRUE, if DPMS Suspend is supported. Else EINA_FALSE.
3108 */
3109EAPI Eina_Bool
3110ecore_x_randr_edid_dpms_suspend_available_get(unsigned char *edid,
3111 unsigned long edid_length);
3112
3113/*
3114 * @brief Looks up the DPMS Off support from raw EDID data.
3115 *
3116 * @param edid the edid structure
3117 * @param edid_length length of the edid structure
3118 * @return EINA_TRUE, if DPMS Off is supported. Else EINA_FALSE.
3119 */
3120EAPI Eina_Bool
3121ecore_x_randr_edid_dpms_off_available_get(unsigned char *edid,
3122 unsigned long edid_length);
3123
3124/*
3125 * @brief Get the preferred aspect ratio from raw EDID data.
3126 *
3127 * @param edid the edid structure
3128 * @param edid_length length of the edid structure
3129 * @return The preferred aspect ratio.
3130 */
3131EAPI Ecore_X_Randr_Edid_Aspect_Ratio
3132ecore_x_randr_edid_display_aspect_ratio_preferred_get(unsigned char *edid,
3133 unsigned long edid_length);
3134
3135/*
3136 * @brief Get the supported aspect ratios from raw EDID data.
3137 *
3138 * @param edid the edid structure
3139 * @param edid_length length of the edid structure
3140 * @return The supported aspect ratios.
3141 */
3142EAPI Ecore_X_Randr_Edid_Aspect_Ratio
3143ecore_x_randr_edid_display_aspect_ratios_get(unsigned char *edid,
3144 unsigned long edid_length);
3145
3146/*
3147 * @brief Get the supported colorschemes from raw EDID data.
3148 *
3149 * @param edid the edid structure
3150 * @param edid_length length of the edid structure
3151 * @return The supported colorschemes.
3152 */
3153EAPI Ecore_X_Randr_Edid_Display_Colorscheme
3154ecore_x_randr_edid_display_colorscheme_get(unsigned char *edid,
3155 unsigned long edid_length);
3156
3157/*
3158 * @brief Get the display type from raw EDID data.
3159 *
3160 * @param edid the edid structure
3161 * @param edid_length length of the edid structure
3162 * @return EINA_TRUE, if the display is a digital one. Else EINA_FALSE.
3163 */
3164EAPI Eina_Bool
3165ecore_x_randr_edid_display_type_digital_get(unsigned char *edid,
3166 unsigned long edid_length);
3167
3168/*
3169 * @brief Get the display interface type from raw EDID data.
3170 *
3171 * @param edid the edid structure
3172 * @param edid_length length of the edid structure
3173 * @return The interface type.
3174 */
3175EAPI Ecore_X_Randr_Edid_Display_Interface_Type
3176ecore_x_randr_edid_display_interface_type_get(unsigned char *edid,
3177 unsigned long edid_length);
3178
3179/* ecore_x_randr_12.c */
3180
3181EAPI Eina_Bool
3182ecore_x_randr_output_backlight_available(void);
3183EAPI void
3184ecore_x_randr_screen_backlight_level_set(Ecore_X_Window root,
3185 double level);
3186EAPI double
3187ecore_x_randr_output_backlight_level_get(Ecore_X_Window root,
3188 Ecore_X_Randr_Output output);
3189EAPI Eina_Bool
3190ecore_x_randr_output_backlight_level_set(Ecore_X_Window root,
3191 Ecore_X_Randr_Output output,
3192 double level);
3193EAPI Ecore_X_Randr_Output
3194 ecore_x_randr_primary_output_get(Ecore_X_Window root);
3195EAPI void
3196 ecore_x_randr_primary_output_set(Ecore_X_Window root,
3197 Ecore_X_Randr_Output output);
3198EAPI Ecore_X_Render_Subpixel_Order
3199ecore_x_randr_output_subpixel_order_get(Ecore_X_Window root,
3200 Ecore_X_Randr_Output output);
3201EAPI unsigned char *
3202ecore_x_randr_output_edid_get(Ecore_X_Window root,
3203 Ecore_X_Randr_Output output,
3204 unsigned long *length);
3205EAPI Ecore_X_Randr_Output *
3206ecore_x_randr_output_wired_clones_get(Ecore_X_Window root,
3207 Ecore_X_Randr_Output output,
3208 int *num);
3209EAPI Ecore_X_Randr_Output **
3210ecore_x_randr_output_compatibility_list_get(Ecore_X_Window root,
3211 Ecore_X_Randr_Output output,
3212 int *num);
3213EAPI Ecore_X_Randr_Signal_Format *
3214ecore_x_randr_output_signal_formats_get(Ecore_X_Window root,
3215 Ecore_X_Randr_Output output,
3216 int *num);
3217EAPI Eina_Bool
3218ecore_x_randr_output_signal_format_set(Ecore_X_Window root,
3219 Ecore_X_Randr_Output output,
3220 Ecore_X_Randr_Signal_Format *signal);
3221EAPI Ecore_X_Randr_Signal_Property *
3222ecore_x_randr_output_signal_properties_get(Ecore_X_Window root,
3223 Ecore_X_Randr_Output output,
3224 int *num);
3225EAPI int
3226ecore_x_randr_output_connector_number_get(Ecore_X_Window root,
3227 Ecore_X_Randr_Output output);
3228EAPI Ecore_X_Randr_Connector_Type
3229ecore_x_randr_output_connector_type_get(Ecore_X_Window root,
3230 Ecore_X_Randr_Output output);
3231EAPI Eina_Rectangle *
3232ecore_x_randr_crtc_panning_area_get(Ecore_X_Window root,
3233 Ecore_X_Randr_Crtc crtc,
3234 int *x,
3235 int *y,
3236 int *w,
3237 int *h);
3238EAPI Eina_Bool
3239ecore_x_randr_crtc_panning_area_set(Ecore_X_Window root,
3240 Ecore_X_Randr_Crtc crtc,
3241 int x,
3242 const int y,
3243 const int w,
3244 const int h);
3245EAPI Eina_Rectangle *
3246ecore_x_randr_crtc_tracking_area_get(Ecore_X_Window root,
3247 Ecore_X_Randr_Crtc crtc,
3248 int *x,
3249 int *y,
3250 int *w,
3251 int *h);
3252EAPI Eina_Bool
3253ecore_x_randr_crtc_tracking_area_set(Ecore_X_Window root,
3254 Ecore_X_Randr_Crtc crtc,
3255 int x,
3256 const int y,
3257 const int w,
3258 const int h);
3259EAPI Eina_Rectangle *
3260ecore_x_randr_crtc_border_area_get(Ecore_X_Window root,
3261 Ecore_X_Randr_Crtc crtc);
3262EAPI Eina_Bool
3263ecore_x_randr_crtc_border_area_set(Ecore_X_Window root,
3264 Ecore_X_Randr_Crtc crtc,
3265 int left,
3266 const int top,
3267 const int right,
3268 const int bottom);
3269
3270/* XRender Support (horrendously incomplete) */
3271typedef Ecore_X_ID Ecore_X_Picture;
3272
3273/* XFixes Extension Support */
3274typedef Ecore_X_ID Ecore_X_Region;
3275
3276typedef enum _Ecore_X_Region_Type
3277{
3278 ECORE_X_REGION_BOUNDING,
3279 ECORE_X_REGION_CLIP
3280} Ecore_X_Region_Type;
3281
3282EAPI Ecore_X_Region
3283ecore_x_region_new(Ecore_X_Rectangle *rects,
3284 int num);
3285EAPI Ecore_X_Region
3286 ecore_x_region_new_from_bitmap(Ecore_X_Pixmap bitmap);
3287EAPI Ecore_X_Region
3288 ecore_x_region_new_from_window(Ecore_X_Window win,
3289 Ecore_X_Region_Type type);
3290EAPI Ecore_X_Region
3291 ecore_x_region_new_from_gc(Ecore_X_GC gc);
3292EAPI Ecore_X_Region
3293 ecore_x_region_new_from_picture(Ecore_X_Picture picture);
3294EAPI void
3295 ecore_x_region_free(Ecore_X_Region region);
3296EAPI void
3297 ecore_x_region_set(Ecore_X_Region region,
3298 Ecore_X_Rectangle *rects,
3299 int num);
3300EAPI void
3301ecore_x_region_copy(Ecore_X_Region dest,
3302 Ecore_X_Region source);
3303EAPI void
3304ecore_x_region_combine(Ecore_X_Region dest,
3305 Ecore_X_Region source1,
3306 Ecore_X_Region source2);
3307EAPI void
3308ecore_x_region_intersect(Ecore_X_Region dest,
3309 Ecore_X_Region source1,
3310 Ecore_X_Region source2);
3311EAPI void
3312ecore_x_region_subtract(Ecore_X_Region dest,
3313 Ecore_X_Region source1,
3314 Ecore_X_Region source2);
3315EAPI void
3316ecore_x_region_invert(Ecore_X_Region dest,
3317 Ecore_X_Rectangle *bounds,
3318 Ecore_X_Region source);
3319EAPI void
3320ecore_x_region_translate(Ecore_X_Region region,
3321 int dx,
3322 int dy);
3323EAPI void
3324ecore_x_region_extents(Ecore_X_Region dest,
3325 Ecore_X_Region source);
3326EAPI Ecore_X_Rectangle *
3327ecore_x_region_fetch(Ecore_X_Region region,
3328 int *num,
3329 Ecore_X_Rectangle *bounds);
3330EAPI void
3331ecore_x_region_expand(Ecore_X_Region dest,
3332 Ecore_X_Region source,
3333 unsigned int left,
3334 unsigned int right,
3335 unsigned int top,
3336 unsigned int bottom);
3337EAPI void
3338ecore_x_region_gc_clip_set(Ecore_X_Region region,
3339 Ecore_X_GC gc,
3340 int x_origin,
3341 int y_origin);
3342EAPI void
3343ecore_x_region_window_shape_set(Ecore_X_Region region,
3344 Ecore_X_Window win,
3345 Ecore_X_Shape_Type type,
3346 int x_offset,
3347 int y_offset);
3348EAPI void
3349ecore_x_region_picture_clip_set(Ecore_X_Region region,
3350 Ecore_X_Picture picture,
3351 int x_origin,
3352 int y_origin);
3353
3354/**
3355 * xfixes selection notification request.
3356 *
3357 * This lets you choose which selections you want to get notifications for.
3358 * @param selection the selection atom.
3359 * @return EINA_TRUE on success, EINA_FALSE otherwise.
3360 * @since 1.1.0
3361 */
3362EAPI Eina_Bool
3363ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection);
3364
3365/* XComposite Extension Support */
3366EAPI Eina_Bool
3367 ecore_x_composite_query(void);
3368EAPI void
3369 ecore_x_composite_redirect_window(Ecore_X_Window win,
3370 Ecore_X_Composite_Update_Type type);
3371EAPI void
3372ecore_x_composite_redirect_subwindows(Ecore_X_Window win,
3373 Ecore_X_Composite_Update_Type type);
3374EAPI void
3375ecore_x_composite_unredirect_window(Ecore_X_Window win,
3376 Ecore_X_Composite_Update_Type type);
3377EAPI void
3378ecore_x_composite_unredirect_subwindows(Ecore_X_Window win,
3379 Ecore_X_Composite_Update_Type type);
3380EAPI Ecore_X_Pixmap
3381 ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win);
3382EAPI void
3383 ecore_x_composite_window_events_disable(Ecore_X_Window win);
3384EAPI void
3385 ecore_x_composite_window_events_enable(Ecore_X_Window win);
3386EAPI Ecore_X_Window
3387 ecore_x_composite_render_window_enable(Ecore_X_Window root);
3388EAPI void
3389 ecore_x_composite_render_window_disable(Ecore_X_Window root);
3390
3391/* XDamage Extension Support */
3392typedef Ecore_X_ID Ecore_X_Damage;
3393
3394typedef enum _Ecore_X_Damage_Report_Level
3395{
3396 ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES,
3397 ECORE_X_DAMAGE_REPORT_DELTA_RECTANGLES,
3398 ECORE_X_DAMAGE_REPORT_BOUNDING_BOX,
3399 ECORE_X_DAMAGE_REPORT_NON_EMPTY
3400} Ecore_X_Damage_Report_Level;
3401
3402struct _Ecore_X_Event_Damage
3403{
3404 Ecore_X_Damage_Report_Level level;
3405 Ecore_X_Drawable drawable;
3406 Ecore_X_Damage damage;
3407 int more;
3408 Ecore_X_Time time;
3409 Ecore_X_Rectangle area;
3410 Ecore_X_Rectangle geometry;
3411};
3412
3413typedef struct _Ecore_X_Event_Damage Ecore_X_Event_Damage;
3414
3415EAPI Eina_Bool
3416 ecore_x_damage_query(void);
3417EAPI Ecore_X_Damage
3418 ecore_x_damage_new(Ecore_X_Drawable d,
3419 Ecore_X_Damage_Report_Level level);
3420EAPI void
3421 ecore_x_damage_free(Ecore_X_Damage damage);
3422EAPI void
3423 ecore_x_damage_subtract(Ecore_X_Damage damage,
3424 Ecore_X_Region repair,
3425 Ecore_X_Region parts);
3426
3427EAPI Eina_Bool
3428 ecore_x_screen_is_composited(int screen);
3429EAPI void
3430 ecore_x_screen_is_composited_set(int screen,
3431 Ecore_X_Window win);
3432
3433EAPI Eina_Bool
3434 ecore_x_dpms_query(void);
3435EAPI Eina_Bool
3436 ecore_x_dpms_capable_get(void);
3437EAPI Eina_Bool
3438 ecore_x_dpms_enabled_get(void);
3439EAPI void
3440 ecore_x_dpms_enabled_set(int enabled);
3441EAPI void
3442 ecore_x_dpms_timeouts_get(unsigned int *standby,
3443 unsigned int *suspend,
3444 unsigned int *off);
3445EAPI Eina_Bool
3446ecore_x_dpms_timeouts_set(unsigned int standby,
3447 unsigned int suspend,
3448 unsigned int off);
3449EAPI unsigned int
3450 ecore_x_dpms_timeout_standby_get(void);
3451EAPI unsigned int
3452 ecore_x_dpms_timeout_suspend_get(void);
3453EAPI unsigned int
3454 ecore_x_dpms_timeout_off_get(void);
3455EAPI void
3456 ecore_x_dpms_timeout_standby_set(unsigned int new_timeout);
3457EAPI void
3458 ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout);
3459EAPI void
3460 ecore_x_dpms_timeout_off_set(unsigned int new_timeout);
3461
3462EAPI Eina_Bool
3463 ecore_x_test_fake_key_down(const char *key);
3464EAPI Eina_Bool
3465 ecore_x_test_fake_key_up(const char *key);
3466EAPI Eina_Bool
3467 ecore_x_test_fake_key_press(const char *key);
3468EAPI const char *
3469 ecore_x_keysym_string_get(int keysym);
3470
3471/**
3472 * Given a keyname, return the keycode representing that key
3473 *
3474 * @since 1.2.0
3475 */
3476EAPI int ecore_x_keysym_keycode_get(const char *keyname);
3477
3478typedef struct _Ecore_X_Image Ecore_X_Image;
3479
3480EAPI Ecore_X_Image *
3481ecore_x_image_new(int w,
3482 int h,
3483 Ecore_X_Visual vis,
3484 int depth);
3485EAPI void
3486 ecore_x_image_free(Ecore_X_Image *im);
3487EAPI Eina_Bool
3488 ecore_x_image_get(Ecore_X_Image *im,
3489 Ecore_X_Drawable draw,
3490 int x,
3491 int y,
3492 int sx,
3493 int sy,
3494 int w,
3495 int h);
3496EAPI void
3497ecore_x_image_put(Ecore_X_Image *im,
3498 Ecore_X_Drawable draw,
3499 Ecore_X_GC gc,
3500 int x,
3501 int y,
3502 int sx,
3503 int sy,
3504 int w,
3505 int h);
3506EAPI void *
3507ecore_x_image_data_get(Ecore_X_Image *im,
3508 int *bpl,
3509 int *rows,
3510 int *bpp);
3511EAPI Eina_Bool
3512ecore_x_image_is_argb32_get(Ecore_X_Image *im);
3513
3514EAPI Eina_Bool
3515ecore_x_image_to_argb_convert(void *src,
3516 int sbpp,
3517 int sbpl,
3518 Ecore_X_Colormap c,
3519 Ecore_X_Visual v,
3520 int x,
3521 int y,
3522 int w,
3523 int h,
3524 unsigned int *dst,
3525 int dbpl,
3526 int dx,
3527 int dy);
3528
3529EAPI Eina_Bool
3530ecore_x_input_multi_select(Ecore_X_Window win);
3531
3532EAPI Eina_Bool
3533ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win);
3534
3535typedef enum _Ecore_X_Gesture_Event_Mask
3536{
3537 ECORE_X_GESTURE_EVENT_MASK_NONE = 0L,
3538 ECORE_X_GESTURE_EVENT_MASK_FLICK = (1L << 0),
3539 ECORE_X_GESTURE_EVENT_MASK_PAN = (1L << 1),
3540 ECORE_X_GESTURE_EVENT_MASK_PINCHROTATION = (1L << 2),
3541 ECORE_X_GESTURE_EVENT_MASK_TAP = (1L << 3),
3542 ECORE_X_GESTURE_EVENT_MASK_TAPNHOLD = (1L << 4),
3543 ECORE_X_GESTURE_EVENT_MASK_HOLD = (1L << 5),
3544 ECORE_X_GESTURE_EVENT_MASK_GROUP = (1L << 6)
3545} Ecore_X_Gesture_Event_Mask;
3546
3547typedef enum _Ecore_X_Gesture_Event_Type
3548{
3549 ECORE_X_GESTURE_EVENT_FLICK,
3550 ECORE_X_GESTURE_EVENT_PAN,
3551 ECORE_X_GESTURE_EVENT_PINCHROTATION,
3552 ECORE_X_GESTURE_EVENT_TAP,
3553 ECORE_X_GESTURE_EVENT_TAPNHOLD,
3554 ECORE_X_GESTURE_EVENT_HOLD,
3555 ECORE_X_GESTURE_EVENT_GROUP
3556} Ecore_X_Gesture_Event_Type;
3557
3558typedef enum _Ecore_X_Gesture_Event_Subtype
3559{
3560 ECORE_X_GESTURE_END,
3561 ECORE_X_GESTURE_BEGIN,
3562 ECORE_X_GESTURE_UPDATE,
3563 ECORE_X_GESTURE_DONE
3564} Ecore_X_Gesture_Event_Subtype;
3565
3566typedef enum _Ecore_X_Gesture_Group_Subtype
3567{
3568 ECORE_X_GESTURE_GROUP_REMOVED,
3569 ECORE_X_GESTURE_GROUP_ADDED,
3570 ECORE_X_GESTURE_GROUP_CURRENT
3571} Ecore_X_Gesture_Group_Subtype;
3572
3573typedef enum _Ecore_X_Gesture_Direction
3574{
3575 ECORE_X_GESTURE_NORTHWARD,
3576 ECORE_X_GESTURE_NORTHEASTWARD,
3577 ECORE_X_GESTURE_EASTWARD,
3578 ECORE_X_GESTURE_SOUTHEASTWARD,
3579 ECORE_X_GESTURE_SOUTHWARD,
3580 ECORE_X_GESTURE_SOUTHWESTWARD,
3581 ECORE_X_GESTURE_WESTWARD,
3582 ECORE_X_GESTURE_NORTHWESTWARD
3583} Ecore_X_Gesture_Direction;
3584
3585struct _Ecore_X_Event_Gesture_Notify_Flick
3586{
3587 Ecore_X_Window win;
3588 Ecore_X_Time time;
3589 Ecore_X_Gesture_Event_Subtype subtype;
3590 int num_fingers;
3591 int distance;
3592 Ecore_X_Time duration;
3593 Ecore_X_Gesture_Direction direction;
3594 double angle;
3595};
3596
3597struct _Ecore_X_Event_Gesture_Notify_Pan
3598{
3599 Ecore_X_Window win;
3600 Ecore_X_Time time;
3601 Ecore_X_Gesture_Event_Subtype subtype;
3602 int num_fingers;
3603 int dx;
3604 int dy;
3605 int distance;
3606 Ecore_X_Time duration;
3607 Ecore_X_Gesture_Direction direction;
3608};
3609
3610struct _Ecore_X_Event_Gesture_Notify_PinchRotation
3611{
3612 Ecore_X_Window win;
3613 Ecore_X_Time time;
3614 Ecore_X_Gesture_Event_Subtype subtype;
3615 int num_fingers;
3616 int distance;
3617 int cx;
3618 int cy;
3619 double zoom;
3620 double angle;
3621};
3622
3623struct _Ecore_X_Event_Gesture_Notify_Tap
3624{
3625 Ecore_X_Window win;
3626 Ecore_X_Time time;
3627 Ecore_X_Gesture_Event_Subtype subtype;
3628 int num_fingers;
3629 int cx;
3630 int cy;
3631 int tap_repeat;
3632 Ecore_X_Time interval;
3633};
3634
3635struct _Ecore_X_Event_Gesture_Notify_TapNHold
3636{
3637 Ecore_X_Window win;
3638 Ecore_X_Time time;
3639 Ecore_X_Gesture_Event_Subtype subtype;
3640 int num_fingers;
3641 int cx;
3642 int cy;
3643 Ecore_X_Time interval;
3644 Ecore_X_Time hold_time;
3645};
3646
3647struct _Ecore_X_Event_Gesture_Notify_Hold
3648{
3649 Ecore_X_Window win;
3650 Ecore_X_Time time;
3651 Ecore_X_Gesture_Event_Subtype subtype;
3652 int num_fingers;
3653 int cx;
3654 int cy;
3655 Ecore_X_Time hold_time;
3656};
3657
3658struct _Ecore_X_Event_Gesture_Notify_Group
3659{
3660 Ecore_X_Window win;
3661 Ecore_X_Time time;
3662 Ecore_X_Gesture_Group_Subtype subtype;
3663 int num_groups;
3664 int group_id;
3665};
3666
3667EAPI Eina_Bool
3668ecore_x_gesture_supported(void);
3669
3670EAPI Eina_Bool
3671ecore_x_gesture_events_select(Ecore_X_Window win,
3672 Ecore_X_Gesture_Event_Mask mask);
3673
3674EAPI Ecore_X_Gesture_Event_Mask
3675ecore_x_gesture_events_selected_get(Ecore_X_Window win);
3676
3677EAPI Eina_Bool
3678ecore_x_gesture_event_grab(Ecore_X_Window win,
3679 Ecore_X_Gesture_Event_Type type,
3680 int num_fingers);
3681
3682EAPI Eina_Bool
3683ecore_x_gesture_event_ungrab(Ecore_X_Window win,
3684 Ecore_X_Gesture_Event_Type type,
3685 int num_fingers);
3686
3687EAPI void
3688ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
3689 Ecore_X_Illume_Indicator_State state);
3690EAPI Ecore_X_Illume_Indicator_State
3691ecore_x_e_illume_indicator_state_get(Ecore_X_Window win);
3692EAPI void
3693ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
3694 Ecore_X_Illume_Indicator_State state);
3695
3696EAPI void
3697ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
3698 Ecore_X_Illume_Indicator_Opacity_Mode mode);
3699
3700EAPI Ecore_X_Illume_Indicator_Opacity_Mode
3701ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win);
3702
3703EAPI void
3704ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
3705 Ecore_X_Illume_Indicator_Opacity_Mode mode);
3706
3707#ifdef __cplusplus
3708}
3709#endif // ifdef __cplusplus
3710
3711#include <Ecore_X_Atoms.h>
3712#include <Ecore_X_Cursor.h>
3713
3714#endif // ifndef _ECORE_X_H
diff --git a/libraries/ecore/src/lib/ecore_x/Ecore_X_Atoms.h b/libraries/ecore/src/lib/ecore_x/Ecore_X_Atoms.h
deleted file mode 100644
index 1341716..0000000
--- a/libraries/ecore/src/lib/ecore_x/Ecore_X_Atoms.h
+++ /dev/null
@@ -1,269 +0,0 @@
1#ifndef _ECORE_X_ATOMS_H
2#define _ECORE_X_ATOMS_H
3
4/**
5 * @file
6 * @brief Ecore X atoms
7 */
8
9/* generic atoms */
10EAPI extern Ecore_X_Atom ECORE_X_ATOM_ATOM;
11EAPI extern Ecore_X_Atom ECORE_X_ATOM_CARDINAL;
12EAPI extern Ecore_X_Atom ECORE_X_ATOM_COMPOUND_TEXT;
13EAPI extern Ecore_X_Atom ECORE_X_ATOM_FILE_NAME;
14EAPI extern Ecore_X_Atom ECORE_X_ATOM_STRING;
15EAPI extern Ecore_X_Atom ECORE_X_ATOM_TEXT;
16EAPI extern Ecore_X_Atom ECORE_X_ATOM_UTF8_STRING;
17EAPI extern Ecore_X_Atom ECORE_X_ATOM_WINDOW;
18EAPI extern Ecore_X_Atom ECORE_X_ATOM_PIXMAP;
19EAPI extern Ecore_X_Atom ECORE_X_ATOM_VISUALID;
20
21/* dnd atoms */
22EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_XDND;
23EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_XDND;
24EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_AWARE;
25EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ENTER;
26EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_TYPE_LIST;
27EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_POSITION;
28EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_COPY;
29EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_MOVE;
30EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_PRIVATE;
31EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_ASK;
32EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_LIST;
33EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_LINK;
34EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_DESCRIPTION;
35EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_PROXY;
36EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_STATUS;
37EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_LEAVE;
38EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_DROP;
39EAPI extern Ecore_X_Atom ECORE_X_ATOM_XDND_FINISHED;
40
41/* dnd atoms that need to be exposed to the application interface */
42EAPI extern Ecore_X_Atom ECORE_X_DND_ACTION_COPY;
43EAPI extern Ecore_X_Atom ECORE_X_DND_ACTION_MOVE;
44EAPI extern Ecore_X_Atom ECORE_X_DND_ACTION_LINK;
45EAPI extern Ecore_X_Atom ECORE_X_DND_ACTION_ASK;
46EAPI extern Ecore_X_Atom ECORE_X_DND_ACTION_PRIVATE;
47
48/* old E atom */
49EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_FRAME_SIZE;
50
51/* old Gnome atom */
52EAPI extern Ecore_X_Atom ECORE_X_ATOM_WIN_LAYER;
53
54/* ICCCM: client properties */
55EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_NAME;
56EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_ICON_NAME;
57EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_NORMAL_HINTS;
58EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_SIZE_HINTS;
59EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_HINTS;
60EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_CLASS;
61EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_TRANSIENT_FOR;
62EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_PROTOCOLS;
63EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_COLORMAP_WINDOWS;
64EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_COMMAND;
65EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_CLIENT_MACHINE;
66
67/* ICCCM: window manager properties */
68EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_STATE;
69EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_ICON_SIZE;
70
71/* ICCCM: WM_STATEproperty */
72EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_CHANGE_STATE;
73
74/* ICCCM: WM_PROTOCOLS properties */
75EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_TAKE_FOCUS;
76EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_SAVE_YOURSELF;
77EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_DELETE_WINDOW;
78
79/* ICCCM: WM_COLORMAP properties */
80EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_COLORMAP_NOTIFY;
81
82/* ICCCM: session management properties */
83EAPI extern Ecore_X_Atom ECORE_X_ATOM_SM_CLIENT_ID;
84EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_CLIENT_LEADER;
85EAPI extern Ecore_X_Atom ECORE_X_ATOM_WM_WINDOW_ROLE;
86
87/* Motif WM atom */
88EAPI extern Ecore_X_Atom ECORE_X_ATOM_MOTIF_WM_HINTS;
89
90EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_SUPPORTED;
91EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_CLIENT_LIST;
92EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_CLIENT_LIST_STACKING;
93EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS;
94EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_GEOMETRY;
95EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_VIEWPORT;
96EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_CURRENT_DESKTOP;
97EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_NAMES;
98EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_ACTIVE_WINDOW;
99EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WORKAREA;
100EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK;
101EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_VIRTUAL_ROOTS;
102EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_LAYOUT;
103EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_SHOWING_DESKTOP;
104
105/* pager */
106EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_CLOSE_WINDOW;
107EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_MOVERESIZE_WINDOW;
108EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_MOVERESIZE;
109EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_RESTACK_WINDOW;
110
111EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS;
112EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_NAME;
113EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_VISIBLE_NAME;
114EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON_NAME;
115EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME;
116EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_DESKTOP;
117
118/* window type */
119EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE;
120EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
121EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
122EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
123EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
124EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
125EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
126EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
127EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
128EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU;
129EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU;
130EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP;
131EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION;
132EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO;
133EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND;
134
135/* state */
136EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE;
137EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MODAL;
138EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_STICKY;
139EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT;
140EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ;
141EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SHADED;
142EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR;
143EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER;
144EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_HIDDEN;
145EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN;
146EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_ABOVE;
147EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_BELOW;
148EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION;
149
150/* allowed actions */
151EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS;
152EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MOVE;
153EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_RESIZE;
154EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE;
155EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_SHADE;
156EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_STICK;
157EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ;
158EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT;
159EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN;
160EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP;
161EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_CLOSE;
162EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_ABOVE;
163EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_BELOW;
164
165EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STRUT;
166EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_STRUT_PARTIAL;
167EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON_GEOMETRY;
168EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON;
169EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_PID;
170EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_HANDLED_ICONS;
171EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_USER_TIME;
172EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_ID;
173EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_FRAME_EXTENTS;
174EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_PING;
175EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
176EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER;
177EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_OPACITY;
178EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_SHADOW;
179EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_SHADE;
180EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN;
181EAPI extern Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_INFO;
182EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_TARGETS;
183EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_PRIMARY;
184EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_SECONDARY;
185EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_CLIPBOARD;
186EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_PRIMARY;
187EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_SECONDARY;
188EAPI extern Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD;
189
190/* currently E specific virtual keyboard extension, aim to submit to netwm spec
191 * later */
192
193EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD;
194EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE;
195EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
196EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
197EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
198EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
199EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
200EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
201EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
202EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
203EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
204EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
205EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
206EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
207EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
208EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
209EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
210
211/* Illume specific atoms */
212EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ZONE;
213EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ZONE_LIST;
214EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CONFORMANT;
215EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE;
216EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
217EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
218EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
219EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_BACK;
220EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD;
221EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_HOME;
222EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_HOME_NEW;
223EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_HOME_DEL;
224EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLOSE;
225EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG;
226EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED;
227EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_START;
228EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_END;
229EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY;
230EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY;
231EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY;
232EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL;
233EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE;
234EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE;
235EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
236EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
237EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR;
238EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR;
239EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE;
240EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE;
241EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE;
242EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
243EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
244EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE;
245EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
246EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
247EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
248EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE;
249EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE;
250EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE;
251EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE;
252EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
253EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
254EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY;
255
256EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER;
257EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
258EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED;
259EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
260EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_END;
261EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
262EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_FLUSH;
263EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_DUMP;
264EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_COMP_PIXMAP;
265
266EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_PARENT;
267EAPI extern Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_POSITION;
268
269#endif /* _ECORE_X_ATOMS_H */
diff --git a/libraries/ecore/src/lib/ecore_x/Ecore_X_Cursor.h b/libraries/ecore/src/lib/ecore_x/Ecore_X_Cursor.h
deleted file mode 100644
index 807541e..0000000
--- a/libraries/ecore/src/lib/ecore_x/Ecore_X_Cursor.h
+++ /dev/null
@@ -1,87 +0,0 @@
1#ifndef _ECORE_X_CURSOR_H
2#define _ECORE_X_CURSOR_H
3
4/**
5 * @file
6 * @brief Defines the various cursor types for the X Windows system.
7 */
8
9#define ECORE_X_CURSOR_X 0
10#define ECORE_X_CURSOR_ARROW 2
11#define ECORE_X_CURSOR_BASED_ARROW_DOWN 4
12#define ECORE_X_CURSOR_UP 6
13#define ECORE_X_CURSOR_BOAT 8
14#define ECORE_X_CURSOR_BOGOSITY 10
15#define ECORE_X_CURSOR_BOTTOM_LEFT_CORNER 12
16#define ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER 14
17#define ECORE_X_CURSOR_BOTTOM_SIDE 16
18#define ECORE_X_CURSOR_BOTTOM_TEE 18
19#define ECORE_X_CURSOR_BOX_SPIRAL 20
20#define ECORE_X_CURSOR_CENTER_PTR 22
21#define ECORE_X_CURSOR_CIRCLE 24
22#define ECORE_X_CURSOR_CLOCK 26
23#define ECORE_X_CURSOR_COFFEE_MUG 28
24#define ECORE_X_CURSOR_CROSS 30
25#define ECORE_X_CURSOR_CROSS_REVERSE 32
26#define ECORE_X_CURSOR_CROSSHAIR 34
27#define ECORE_X_CURSOR_DIAMOND_CROSS 36
28#define ECORE_X_CURSOR_DOT 38
29#define ECORE_X_CURSOR_DOT_BOX_MASK 40
30#define ECORE_X_CURSOR_DOUBLE_ARROW 42
31#define ECORE_X_CURSOR_DRAFT_LARGE 44
32#define ECORE_X_CURSOR_DRAFT_SMALL 46
33#define ECORE_X_CURSOR_DRAPED_BOX 48
34#define ECORE_X_CURSOR_EXCHANGE 50
35#define ECORE_X_CURSOR_FLEUR 52
36#define ECORE_X_CURSOR_GOBBLER 54
37#define ECORE_X_CURSOR_GUMBY 56
38#define ECORE_X_CURSOR_HAND1 58
39#define ECORE_X_CURSOR_HAND2 60
40#define ECORE_X_CURSOR_HEART 62
41#define ECORE_X_CURSOR_ICON 64
42#define ECORE_X_CURSOR_IRON_CROSS 66
43#define ECORE_X_CURSOR_LEFT_PTR 68
44#define ECORE_X_CURSOR_LEFT_SIDE 70
45#define ECORE_X_CURSOR_LEFT_TEE 72
46#define ECORE_X_CURSOR_LEFTBUTTON 74
47#define ECORE_X_CURSOR_LL_ANGLE 76
48#define ECORE_X_CURSOR_LR_ANGLE 78
49#define ECORE_X_CURSOR_MAN 80
50#define ECORE_X_CURSOR_MIDDLEBUTTON 82
51#define ECORE_X_CURSOR_MOUSE 84
52#define ECORE_X_CURSOR_PENCIL 86
53#define ECORE_X_CURSOR_PIRATE 88
54#define ECORE_X_CURSOR_PLUS 90
55#define ECORE_X_CURSOR_QUESTION_ARROW 92
56#define ECORE_X_CURSOR_RIGHT_PTR 94
57#define ECORE_X_CURSOR_RIGHT_SIDE 96
58#define ECORE_X_CURSOR_RIGHT_TEE 98
59#define ECORE_X_CURSOR_RIGHTBUTTON 100
60#define ECORE_X_CURSOR_RTL_LOGO 102
61#define ECORE_X_CURSOR_SAILBOAT 104
62#define ECORE_X_CURSOR_SB_DOWN_ARROW 106
63#define ECORE_X_CURSOR_SB_H_DOUBLE_ARROW 108
64#define ECORE_X_CURSOR_SB_LEFT_ARROW 110
65#define ECORE_X_CURSOR_SB_RIGHT_ARROW 112
66#define ECORE_X_CURSOR_SB_UP_ARROW 114
67#define ECORE_X_CURSOR_SB_V_DOUBLE_ARROW 116
68#define ECORE_X_CURSOR_SHUTTLE 118
69#define ECORE_X_CURSOR_SIZING 120
70#define ECORE_X_CURSOR_SPIDER 122
71#define ECORE_X_CURSOR_SPRAYCAN 124
72#define ECORE_X_CURSOR_STAR 126
73#define ECORE_X_CURSOR_TARGET 128
74#define ECORE_X_CURSOR_TCROSS 130
75#define ECORE_X_CURSOR_TOP_LEFT_ARROW 132
76#define ECORE_X_CURSOR_TOP_LEFT_CORNER 134
77#define ECORE_X_CURSOR_TOP_RIGHT_CORNER 136
78#define ECORE_X_CURSOR_TOP_SIDE 138
79#define ECORE_X_CURSOR_TOP_TEE 140
80#define ECORE_X_CURSOR_TREK 142
81#define ECORE_X_CURSOR_UL_ANGLE 144
82#define ECORE_X_CURSOR_UMBRELLA 146
83#define ECORE_X_CURSOR_UR_ANGLE 148
84#define ECORE_X_CURSOR_WATCH 150
85#define ECORE_X_CURSOR_XTERM 152
86
87#endif // ifndef _ECORE_X_CURSOR_H
diff --git a/libraries/ecore/src/lib/ecore_x/Makefile.am b/libraries/ecore/src/lib/ecore_x/Makefile.am
deleted file mode 100644
index b14fc7d..0000000
--- a/libraries/ecore/src/lib/ecore_x/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3SUBDIRS = xlib xcb
4
5if BUILD_ECORE_X_XCB
6DEP = xcb/libecore_x_xcb.la
7else
8DEP = xlib/libecore_x_xlib.la
9endif
10
11AM_CPPFLAGS = \
12-I$(top_srcdir)/src/lib/ecore \
13-I$(top_builddir)/src/lib/ecore \
14@EINA_CFLAGS@
15
16lib_LTLIBRARIES = libecore_x.la
17
18libecore_x_la_SOURCES =
19
20libecore_x_la_LIBADD = $(DEP) @EINA_LIBS@
21libecore_x_la_LDFLAGS = -version-info @version_info@ @release_info@
22libecore_x_la_DEPENDENCIES = $(DEP)
23
24includes_HEADERS = \
25Ecore_X.h \
26Ecore_X_Atoms.h \
27Ecore_X_Cursor.h
28includesdir = $(includedir)/ecore-@VMAJ@
29
30EXTRA_DIST = ecore_x_atoms_decl.h
diff --git a/libraries/ecore/src/lib/ecore_x/Makefile.in b/libraries/ecore/src/lib/ecore_x/Makefile.in
deleted file mode 100644
index fb446ef..0000000
--- a/libraries/ecore/src/lib/ecore_x/Makefile.in
+++ /dev/null
@@ -1,948 +0,0 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/lib/ecore_x
39DIST_COMMON = $(includes_HEADERS) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/ac_attribute.m4 \
43 $(top_srcdir)/m4/ac_path_generic.m4 \
44 $(top_srcdir)/m4/check_x_extension.m4 \
45 $(top_srcdir)/m4/ecore_check_module.m4 \
46 $(top_srcdir)/m4/ecore_check_options.m4 \
47 $(top_srcdir)/m4/efl_compiler_flag.m4 \
48 $(top_srcdir)/m4/efl_doxygen.m4 \
49 $(top_srcdir)/m4/efl_examples.m4 \
50 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
51 $(top_srcdir)/m4/efl_threads.m4 $(top_srcdir)/m4/gettext.m4 \
52 $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
53 $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
54 $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
55 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
56 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
57 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
58 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
59am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
60 $(ACLOCAL_M4)
61mkinstalldirs = $(install_sh) -d
62CONFIG_HEADER = $(top_builddir)/config.h
63CONFIG_CLEAN_FILES =
64CONFIG_CLEAN_VPATH_FILES =
65am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
66am__vpath_adj = case $$p in \
67 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
68 *) f=$$p;; \
69 esac;
70am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
71am__install_max = 40
72am__nobase_strip_setup = \
73 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
74am__nobase_strip = \
75 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
76am__nobase_list = $(am__nobase_strip_setup); \
77 for p in $$list; do echo "$$p $$p"; done | \
78 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
79 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
80 if (++n[$$2] == $(am__install_max)) \
81 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
82 END { for (dir in files) print dir, files[dir] }'
83am__base_list = \
84 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
85 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
86am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includesdir)"
87LTLIBRARIES = $(lib_LTLIBRARIES)
88am_libecore_x_la_OBJECTS =
89libecore_x_la_OBJECTS = $(am_libecore_x_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93libecore_x_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
94 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
95 $(libecore_x_la_LDFLAGS) $(LDFLAGS) -o $@
96DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(libecore_x_la_SOURCES)
120DIST_SOURCES = $(libecore_x_la_SOURCES)
121RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
122 html-recursive info-recursive install-data-recursive \
123 install-dvi-recursive install-exec-recursive \
124 install-html-recursive install-info-recursive \
125 install-pdf-recursive install-ps-recursive install-recursive \
126 installcheck-recursive installdirs-recursive pdf-recursive \
127 ps-recursive uninstall-recursive
128HEADERS = $(includes_HEADERS)
129RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
130 distclean-recursive maintainer-clean-recursive
131AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
132 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
133 distdir
134ETAGS = etags
135CTAGS = ctags
136DIST_SUBDIRS = $(SUBDIRS)
137DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
138am__relativize = \
139 dir0=`pwd`; \
140 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
141 sed_rest='s,^[^/]*/*,,'; \
142 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
143 sed_butlast='s,/*[^/]*$$,,'; \
144 while test -n "$$dir1"; do \
145 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
146 if test "$$first" != "."; then \
147 if test "$$first" = ".."; then \
148 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
149 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
150 else \
151 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
152 if test "$$first2" = "$$first"; then \
153 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
154 else \
155 dir2="../$$dir2"; \
156 fi; \
157 dir0="$$dir0"/"$$first"; \
158 fi; \
159 fi; \
160 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
161 done; \
162 reldir="$$dir2"
163ACLOCAL = @ACLOCAL@
164ALLOCA = @ALLOCA@
165AMTAR = @AMTAR@
166AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
167AR = @AR@
168AS = @AS@
169AUTOCONF = @AUTOCONF@
170AUTOHEADER = @AUTOHEADER@
171AUTOMAKE = @AUTOMAKE@
172AWK = @AWK@
173CARES_CFLAGS = @CARES_CFLAGS@
174CARES_LIBS = @CARES_LIBS@
175CC = @CC@
176CCDEPMODE = @CCDEPMODE@
177CFLAGS = @CFLAGS@
178CHECK_CFLAGS = @CHECK_CFLAGS@
179CHECK_LIBS = @CHECK_LIBS@
180CPP = @CPP@
181CPPFLAGS = @CPPFLAGS@
182CURL_CFLAGS = @CURL_CFLAGS@
183CURL_LIBS = @CURL_LIBS@
184CXX = @CXX@
185CXXCPP = @CXXCPP@
186CXXDEPMODE = @CXXDEPMODE@
187CXXFLAGS = @CXXFLAGS@
188CYGPATH_W = @CYGPATH_W@
189DEFS = @DEFS@
190DEPDIR = @DEPDIR@
191DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
192DIRECTFB_LIBS = @DIRECTFB_LIBS@
193DLLTOOL = @DLLTOOL@
194DSYMUTIL = @DSYMUTIL@
195DUMPBIN = @DUMPBIN@
196ECHO_C = @ECHO_C@
197ECHO_N = @ECHO_N@
198ECHO_T = @ECHO_T@
199ECORE_XCB_CFLAGS = @ECORE_XCB_CFLAGS@
200ECORE_XCB_LIBS = @ECORE_XCB_LIBS@
201EFL_ECORE_BUILD = @EFL_ECORE_BUILD@
202EFL_ECORE_CON_BUILD = @EFL_ECORE_CON_BUILD@
203EFL_ECORE_EVAS_BUILD = @EFL_ECORE_EVAS_BUILD@
204EFL_ECORE_FILE_BUILD = @EFL_ECORE_FILE_BUILD@
205EFL_ECORE_IMF_BUILD = @EFL_ECORE_IMF_BUILD@
206EFL_ECORE_IMF_EVAS_BUILD = @EFL_ECORE_IMF_EVAS_BUILD@
207EFL_ECORE_INPUT_BUILD = @EFL_ECORE_INPUT_BUILD@
208EFL_ECORE_INPUT_EVAS_BUILD = @EFL_ECORE_INPUT_EVAS_BUILD@
209EFL_ECORE_IPC_BUILD = @EFL_ECORE_IPC_BUILD@
210EFL_ECORE_PSL1GHT_BUILD = @EFL_ECORE_PSL1GHT_BUILD@
211EFL_ECORE_SDL_BUILD = @EFL_ECORE_SDL_BUILD@
212EFL_ECORE_WIN32_BUILD = @EFL_ECORE_WIN32_BUILD@
213EFL_ECORE_WINCE_BUILD = @EFL_ECORE_WINCE_BUILD@
214EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
215EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
216EGREP = @EGREP@
217EINA_CFLAGS = @EINA_CFLAGS@
218EINA_LIBS = @EINA_LIBS@
219ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
220ESCAPE_LIBS = @ESCAPE_LIBS@
221EVAS_CFLAGS = @EVAS_CFLAGS@
222EVAS_LIBS = @EVAS_LIBS@
223EVIL_CFLAGS = @EVIL_CFLAGS@
224EVIL_LIBS = @EVIL_LIBS@
225EXEEXT = @EXEEXT@
226EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
227EXOTIC_LIBS = @EXOTIC_LIBS@
228FGREP = @FGREP@
229GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
230GLIB_CFLAGS = @GLIB_CFLAGS@
231GLIB_LIBS = @GLIB_LIBS@
232GMSGFMT = @GMSGFMT@
233GMSGFMT_015 = @GMSGFMT_015@
234GREP = @GREP@
235INSTALL = @INSTALL@
236INSTALL_DATA = @INSTALL_DATA@
237INSTALL_PROGRAM = @INSTALL_PROGRAM@
238INSTALL_SCRIPT = @INSTALL_SCRIPT@
239INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
240INTLLIBS = @INTLLIBS@
241INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
242KEYSYMDEFS = @KEYSYMDEFS@
243LD = @LD@
244LDFLAGS = @LDFLAGS@
245LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
246LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
247LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
248LIBICONV = @LIBICONV@
249LIBINTL = @LIBINTL@
250LIBOBJS = @LIBOBJS@
251LIBS = @LIBS@
252LIBTOOL = @LIBTOOL@
253LIPO = @LIPO@
254LN_S = @LN_S@
255LTLIBICONV = @LTLIBICONV@
256LTLIBINTL = @LTLIBINTL@
257LTLIBOBJS = @LTLIBOBJS@
258MAKEINFO = @MAKEINFO@
259MKDIR_P = @MKDIR_P@
260MSGFMT = @MSGFMT@
261MSGFMT_015 = @MSGFMT_015@
262MSGMERGE = @MSGMERGE@
263NM = @NM@
264NMEDIT = @NMEDIT@
265OBJC = @OBJC@
266OBJCDEPMODE = @OBJCDEPMODE@
267OBJCFLAGS = @OBJCFLAGS@
268OBJDUMP = @OBJDUMP@
269OBJEXT = @OBJEXT@
270OTOOL = @OTOOL@
271OTOOL64 = @OTOOL64@
272PACKAGE = @PACKAGE@
273PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
274PACKAGE_NAME = @PACKAGE_NAME@
275PACKAGE_STRING = @PACKAGE_STRING@
276PACKAGE_TARNAME = @PACKAGE_TARNAME@
277PACKAGE_URL = @PACKAGE_URL@
278PACKAGE_VERSION = @PACKAGE_VERSION@
279PATH_SEPARATOR = @PATH_SEPARATOR@
280PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
281PIXMAN_LIBS = @PIXMAN_LIBS@
282PKG_CONFIG = @PKG_CONFIG@
283PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
284PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
285POSUB = @POSUB@
286RANLIB = @RANLIB@
287SCIM_CFLAGS = @SCIM_CFLAGS@
288SCIM_LIBS = @SCIM_LIBS@
289SDL_CFLAGS = @SDL_CFLAGS@
290SDL_CONFIG = @SDL_CONFIG@
291SDL_LIBS = @SDL_LIBS@
292SED = @SED@
293SET_MAKE = @SET_MAKE@
294SHELL = @SHELL@
295SHM_OPEN_LIBS = @SHM_OPEN_LIBS@
296SSL_CFLAGS = @SSL_CFLAGS@
297SSL_LIBS = @SSL_LIBS@
298STRIP = @STRIP@
299TLS2_CFLAGS = @TLS2_CFLAGS@
300TLS2_LIBS = @TLS2_LIBS@
301TLS_CFLAGS = @TLS_CFLAGS@
302TLS_LIBS = @TLS_LIBS@
303TSLIB_CFLAGS = @TSLIB_CFLAGS@
304TSLIB_LIBS = @TSLIB_LIBS@
305USE_NLS = @USE_NLS@
306VERSION = @VERSION@
307VMAJ = @VMAJ@
308WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
309WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
310WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
311WAYLAND_LIBS = @WAYLAND_LIBS@
312WIN32_CFLAGS = @WIN32_CFLAGS@
313WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
314WIN32_LIBS = @WIN32_LIBS@
315XCB_COMPOSITE_CFLAGS = @XCB_COMPOSITE_CFLAGS@
316XCB_COMPOSITE_LIBS = @XCB_COMPOSITE_LIBS@
317XCB_CURSOR_CFLAGS = @XCB_CURSOR_CFLAGS@
318XCB_CURSOR_LIBS = @XCB_CURSOR_LIBS@
319XCB_DAMAGE_CFLAGS = @XCB_DAMAGE_CFLAGS@
320XCB_DAMAGE_LIBS = @XCB_DAMAGE_LIBS@
321XCB_DPMS_CFLAGS = @XCB_DPMS_CFLAGS@
322XCB_DPMS_LIBS = @XCB_DPMS_LIBS@
323XCB_RANDR_CFLAGS = @XCB_RANDR_CFLAGS@
324XCB_RANDR_LIBS = @XCB_RANDR_LIBS@
325XCB_RENDER_CFLAGS = @XCB_RENDER_CFLAGS@
326XCB_RENDER_LIBS = @XCB_RENDER_LIBS@
327XCB_SCREENSAVER_CFLAGS = @XCB_SCREENSAVER_CFLAGS@
328XCB_SCREENSAVER_LIBS = @XCB_SCREENSAVER_LIBS@
329XCB_SHAPE_CFLAGS = @XCB_SHAPE_CFLAGS@
330XCB_SHAPE_LIBS = @XCB_SHAPE_LIBS@
331XCB_SYNC_CFLAGS = @XCB_SYNC_CFLAGS@
332XCB_SYNC_LIBS = @XCB_SYNC_LIBS@
333XCB_X11_CFLAGS = @XCB_X11_CFLAGS@
334XCB_X11_LIBS = @XCB_X11_LIBS@
335XCB_XFIXES_CFLAGS = @XCB_XFIXES_CFLAGS@
336XCB_XFIXES_LIBS = @XCB_XFIXES_LIBS@
337XCB_XGESTURE_CFLAGS = @XCB_XGESTURE_CFLAGS@
338XCB_XGESTURE_LIBS = @XCB_XGESTURE_LIBS@
339XCB_XINERAMA_CFLAGS = @XCB_XINERAMA_CFLAGS@
340XCB_XINERAMA_LIBS = @XCB_XINERAMA_LIBS@
341XCB_XINPUT_CFLAGS = @XCB_XINPUT_CFLAGS@
342XCB_XINPUT_LIBS = @XCB_XINPUT_LIBS@
343XCB_XPRINT_CFLAGS = @XCB_XPRINT_CFLAGS@
344XCB_XPRINT_LIBS = @XCB_XPRINT_LIBS@
345XCB_XTEST_CFLAGS = @XCB_XTEST_CFLAGS@
346XCB_XTEST_LIBS = @XCB_XTEST_LIBS@
347XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
348XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
349XDAMAGE_CFLAGS = @XDAMAGE_CFLAGS@
350XDAMAGE_LIBS = @XDAMAGE_LIBS@
351XDPMS_CFLAGS = @XDPMS_CFLAGS@
352XDPMS_LIBS = @XDPMS_LIBS@
353XFIXES_CFLAGS = @XFIXES_CFLAGS@
354XFIXES_LIBS = @XFIXES_LIBS@
355XGESTURE_CFLAGS = @XGESTURE_CFLAGS@
356XGESTURE_LIBS = @XGESTURE_LIBS@
357XGETTEXT = @XGETTEXT@
358XGETTEXT_015 = @XGETTEXT_015@
359XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
360XI2_CFLAGS = @XI2_CFLAGS@
361XI2_LIBS = @XI2_LIBS@
362XINERAMA_CFLAGS = @XINERAMA_CFLAGS@
363XINERAMA_LIBS = @XINERAMA_LIBS@
364XKB_CFLAGS = @XKB_CFLAGS@
365XKB_LIBS = @XKB_LIBS@
366XMKMF = @XMKMF@
367XPRINT_CFLAGS = @XPRINT_CFLAGS@
368XPRINT_LIBS = @XPRINT_LIBS@
369XRANDR_CFLAGS = @XRANDR_CFLAGS@
370XRANDR_LIBS = @XRANDR_LIBS@
371XRENDER_CFLAGS = @XRENDER_CFLAGS@
372XRENDER_LIBS = @XRENDER_LIBS@
373XSS_CFLAGS = @XSS_CFLAGS@
374XSS_LIBS = @XSS_LIBS@
375XTEST_CFLAGS = @XTEST_CFLAGS@
376XTEST_LIBS = @XTEST_LIBS@
377X_CFLAGS = @X_CFLAGS@
378X_EXTRA_LIBS = @X_EXTRA_LIBS@
379X_LIBS = @X_LIBS@
380X_PRE_LIBS = @X_PRE_LIBS@
381Xcursor_cflags = @Xcursor_cflags@
382Xcursor_libs = @Xcursor_libs@
383abs_builddir = @abs_builddir@
384abs_srcdir = @abs_srcdir@
385abs_top_builddir = @abs_top_builddir@
386abs_top_srcdir = @abs_top_srcdir@
387ac_ct_CC = @ac_ct_CC@
388ac_ct_CXX = @ac_ct_CXX@
389ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
390ac_ct_OBJC = @ac_ct_OBJC@
391am__include = @am__include@
392am__leading_dot = @am__leading_dot@
393am__quote = @am__quote@
394am__tar = @am__tar@
395am__untar = @am__untar@
396bindir = @bindir@
397build = @build@
398build_alias = @build_alias@
399build_cpu = @build_cpu@
400build_os = @build_os@
401build_vendor = @build_vendor@
402builddir = @builddir@
403cocoa_ldflags = @cocoa_ldflags@
404datadir = @datadir@
405datarootdir = @datarootdir@
406dlopen_libs = @dlopen_libs@
407docdir = @docdir@
408dvidir = @dvidir@
409ecore_cocoa_cflags = @ecore_cocoa_cflags@
410ecore_cocoa_libs = @ecore_cocoa_libs@
411ecore_con_cflags = @ecore_con_cflags@
412ecore_con_libs = @ecore_con_libs@
413ecore_directfb_cflags = @ecore_directfb_cflags@
414ecore_directfb_libs = @ecore_directfb_libs@
415ecore_evas_cflags = @ecore_evas_cflags@
416ecore_evas_libs = @ecore_evas_libs@
417ecore_fb_cflags = @ecore_fb_cflags@
418ecore_fb_libs = @ecore_fb_libs@
419ecore_file_cflags = @ecore_file_cflags@
420ecore_file_libs = @ecore_file_libs@
421ecore_imf_cflags = @ecore_imf_cflags@
422ecore_imf_evas_cflags = @ecore_imf_evas_cflags@
423ecore_imf_evas_libs = @ecore_imf_evas_libs@
424ecore_imf_libs = @ecore_imf_libs@
425ecore_imf_scim_cflags = @ecore_imf_scim_cflags@
426ecore_imf_scim_libs = @ecore_imf_scim_libs@
427ecore_imf_xim_cflags = @ecore_imf_xim_cflags@
428ecore_imf_xim_libs = @ecore_imf_xim_libs@
429ecore_input_cflags = @ecore_input_cflags@
430ecore_input_evas_cflags = @ecore_input_evas_cflags@
431ecore_input_evas_libs = @ecore_input_evas_libs@
432ecore_input_libs = @ecore_input_libs@
433ecore_ipc_cflags = @ecore_ipc_cflags@
434ecore_ipc_libs = @ecore_ipc_libs@
435ecore_psl1ght_cflags = @ecore_psl1ght_cflags@
436ecore_psl1ght_libs = @ecore_psl1ght_libs@
437ecore_sdl_cflags = @ecore_sdl_cflags@
438ecore_sdl_libs = @ecore_sdl_libs@
439ecore_wayland_cflags = @ecore_wayland_cflags@
440ecore_wayland_libs = @ecore_wayland_libs@
441ecore_win32_cflags = @ecore_win32_cflags@
442ecore_win32_libs = @ecore_win32_libs@
443ecore_wince_cflags = @ecore_wince_cflags@
444ecore_wince_libs = @ecore_wince_libs@
445ecore_x_cflags = @ecore_x_cflags@
446ecore_x_libs = @ecore_x_libs@
447ecore_x_libs_private = @ecore_x_libs_private@
448efl_doxygen = @efl_doxygen@
449efl_have_doxygen = @efl_have_doxygen@
450exec_prefix = @exec_prefix@
451have_ecore_x_xcb_define = @have_ecore_x_xcb_define@
452host = @host@
453host_alias = @host_alias@
454host_cpu = @host_cpu@
455host_os = @host_os@
456host_vendor = @host_vendor@
457htmldir = @htmldir@
458includedir = @includedir@
459infodir = @infodir@
460install_sh = @install_sh@
461libdir = @libdir@
462libexecdir = @libexecdir@
463localedir = @localedir@
464localstatedir = @localstatedir@
465lt_ECHO = @lt_ECHO@
466lt_enable_auto_import = @lt_enable_auto_import@
467mandir = @mandir@
468mkdir_p = @mkdir_p@
469oldincludedir = @oldincludedir@
470pdfdir = @pdfdir@
471pkgconfig_requires_private = @pkgconfig_requires_private@
472prefix = @prefix@
473program_transform_name = @program_transform_name@
474psdir = @psdir@
475release_info = @release_info@
476requirements_ecore = @requirements_ecore@
477requirements_ecore_cocoa = @requirements_ecore_cocoa@
478requirements_ecore_con = @requirements_ecore_con@
479requirements_ecore_directfb = @requirements_ecore_directfb@
480requirements_ecore_evas = @requirements_ecore_evas@
481requirements_ecore_fb = @requirements_ecore_fb@
482requirements_ecore_file = @requirements_ecore_file@
483requirements_ecore_imf = @requirements_ecore_imf@
484requirements_ecore_imf_evas = @requirements_ecore_imf_evas@
485requirements_ecore_imf_scim = @requirements_ecore_imf_scim@
486requirements_ecore_imf_xim = @requirements_ecore_imf_xim@
487requirements_ecore_input = @requirements_ecore_input@
488requirements_ecore_input_evas = @requirements_ecore_input_evas@
489requirements_ecore_ipc = @requirements_ecore_ipc@
490requirements_ecore_psl1ght = @requirements_ecore_psl1ght@
491requirements_ecore_sdl = @requirements_ecore_sdl@
492requirements_ecore_wayland = @requirements_ecore_wayland@
493requirements_ecore_win32 = @requirements_ecore_win32@
494requirements_ecore_wince = @requirements_ecore_wince@
495requirements_ecore_x = @requirements_ecore_x@
496rt_libs = @rt_libs@
497sbindir = @sbindir@
498sharedstatedir = @sharedstatedir@
499srcdir = @srcdir@
500sysconfdir = @sysconfdir@
501target_alias = @target_alias@
502top_build_prefix = @top_build_prefix@
503top_builddir = @top_builddir@
504top_srcdir = @top_srcdir@
505version_info = @version_info@
506x_cflags = @x_cflags@
507x_includes = @x_includes@
508x_libs = @x_libs@
509MAINTAINERCLEANFILES = Makefile.in
510SUBDIRS = xlib xcb
511@BUILD_ECORE_X_XCB_FALSE@DEP = xlib/libecore_x_xlib.la
512@BUILD_ECORE_X_XCB_TRUE@DEP = xcb/libecore_x_xcb.la
513AM_CPPFLAGS = \
514-I$(top_srcdir)/src/lib/ecore \
515-I$(top_builddir)/src/lib/ecore \
516@EINA_CFLAGS@
517
518lib_LTLIBRARIES = libecore_x.la
519libecore_x_la_SOURCES =
520libecore_x_la_LIBADD = $(DEP) @EINA_LIBS@
521libecore_x_la_LDFLAGS = -version-info @version_info@ @release_info@
522libecore_x_la_DEPENDENCIES = $(DEP)
523includes_HEADERS = \
524Ecore_X.h \
525Ecore_X_Atoms.h \
526Ecore_X_Cursor.h
527
528includesdir = $(includedir)/ecore-@VMAJ@
529EXTRA_DIST = ecore_x_atoms_decl.h
530all: all-recursive
531
532.SUFFIXES:
533$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
534 @for dep in $?; do \
535 case '$(am__configure_deps)' in \
536 *$$dep*) \
537 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
538 && { if test -f $@; then exit 0; else break; fi; }; \
539 exit 1;; \
540 esac; \
541 done; \
542 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/ecore_x/Makefile'; \
543 $(am__cd) $(top_srcdir) && \
544 $(AUTOMAKE) --gnu src/lib/ecore_x/Makefile
545.PRECIOUS: Makefile
546Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
547 @case '$?' in \
548 *config.status*) \
549 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
550 *) \
551 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
552 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
553 esac;
554
555$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
556 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
557
558$(top_srcdir)/configure: $(am__configure_deps)
559 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
560$(ACLOCAL_M4): $(am__aclocal_m4_deps)
561 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
562$(am__aclocal_m4_deps):
563install-libLTLIBRARIES: $(lib_LTLIBRARIES)
564 @$(NORMAL_INSTALL)
565 test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
566 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
567 list2=; for p in $$list; do \
568 if test -f $$p; then \
569 list2="$$list2 $$p"; \
570 else :; fi; \
571 done; \
572 test -z "$$list2" || { \
573 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
574 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
575 }
576
577uninstall-libLTLIBRARIES:
578 @$(NORMAL_UNINSTALL)
579 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
580 for p in $$list; do \
581 $(am__strip_dir) \
582 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
583 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
584 done
585
586clean-libLTLIBRARIES:
587 -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
588 @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
589 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
590 test "$$dir" != "$$p" || dir=.; \
591 echo "rm -f \"$${dir}/so_locations\""; \
592 rm -f "$${dir}/so_locations"; \
593 done
594libecore_x.la: $(libecore_x_la_OBJECTS) $(libecore_x_la_DEPENDENCIES)
595 $(AM_V_CCLD)$(libecore_x_la_LINK) -rpath $(libdir) $(libecore_x_la_OBJECTS) $(libecore_x_la_LIBADD) $(LIBS)
596
597mostlyclean-compile:
598 -rm -f *.$(OBJEXT)
599
600distclean-compile:
601 -rm -f *.tab.c
602
603mostlyclean-libtool:
604 -rm -f *.lo
605
606clean-libtool:
607 -rm -rf .libs _libs
608install-includesHEADERS: $(includes_HEADERS)
609 @$(NORMAL_INSTALL)
610 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
611 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
612 for p in $$list; do \
613 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
614 echo "$$d$$p"; \
615 done | $(am__base_list) | \
616 while read files; do \
617 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
618 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
619 done
620
621uninstall-includesHEADERS:
622 @$(NORMAL_UNINSTALL)
623 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
624 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
625 test -n "$$files" || exit 0; \
626 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
627 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
628
629# This directory's subdirectories are mostly independent; you can cd
630# into them and run `make' without going through this Makefile.
631# To change the values of `make' variables: instead of editing Makefiles,
632# (1) if the variable is set in `config.status', edit `config.status'
633# (which will cause the Makefiles to be regenerated when you run `make');
634# (2) otherwise, pass the desired values on the `make' command line.
635$(RECURSIVE_TARGETS):
636 @fail= failcom='exit 1'; \
637 for f in x $$MAKEFLAGS; do \
638 case $$f in \
639 *=* | --[!k]*);; \
640 *k*) failcom='fail=yes';; \
641 esac; \
642 done; \
643 dot_seen=no; \
644 target=`echo $@ | sed s/-recursive//`; \
645 list='$(SUBDIRS)'; for subdir in $$list; do \
646 echo "Making $$target in $$subdir"; \
647 if test "$$subdir" = "."; then \
648 dot_seen=yes; \
649 local_target="$$target-am"; \
650 else \
651 local_target="$$target"; \
652 fi; \
653 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
654 || eval $$failcom; \
655 done; \
656 if test "$$dot_seen" = "no"; then \
657 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
658 fi; test -z "$$fail"
659
660$(RECURSIVE_CLEAN_TARGETS):
661 @fail= failcom='exit 1'; \
662 for f in x $$MAKEFLAGS; do \
663 case $$f in \
664 *=* | --[!k]*);; \
665 *k*) failcom='fail=yes';; \
666 esac; \
667 done; \
668 dot_seen=no; \
669 case "$@" in \
670 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
671 *) list='$(SUBDIRS)' ;; \
672 esac; \
673 rev=''; for subdir in $$list; do \
674 if test "$$subdir" = "."; then :; else \
675 rev="$$subdir $$rev"; \
676 fi; \
677 done; \
678 rev="$$rev ."; \
679 target=`echo $@ | sed s/-recursive//`; \
680 for subdir in $$rev; do \
681 echo "Making $$target in $$subdir"; \
682 if test "$$subdir" = "."; then \
683 local_target="$$target-am"; \
684 else \
685 local_target="$$target"; \
686 fi; \
687 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
688 || eval $$failcom; \
689 done && test -z "$$fail"
690tags-recursive:
691 list='$(SUBDIRS)'; for subdir in $$list; do \
692 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
693 done
694ctags-recursive:
695 list='$(SUBDIRS)'; for subdir in $$list; do \
696 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
697 done
698
699ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
700 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
701 unique=`for i in $$list; do \
702 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
703 done | \
704 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
705 END { if (nonempty) { for (i in files) print i; }; }'`; \
706 mkid -fID $$unique
707tags: TAGS
708
709TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
710 $(TAGS_FILES) $(LISP)
711 set x; \
712 here=`pwd`; \
713 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
714 include_option=--etags-include; \
715 empty_fix=.; \
716 else \
717 include_option=--include; \
718 empty_fix=; \
719 fi; \
720 list='$(SUBDIRS)'; for subdir in $$list; do \
721 if test "$$subdir" = .; then :; else \
722 test ! -f $$subdir/TAGS || \
723 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
724 fi; \
725 done; \
726 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
727 unique=`for i in $$list; do \
728 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
729 done | \
730 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
731 END { if (nonempty) { for (i in files) print i; }; }'`; \
732 shift; \
733 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
734 test -n "$$unique" || unique=$$empty_fix; \
735 if test $$# -gt 0; then \
736 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
737 "$$@" $$unique; \
738 else \
739 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
740 $$unique; \
741 fi; \
742 fi
743ctags: CTAGS
744CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
745 $(TAGS_FILES) $(LISP)
746 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
747 unique=`for i in $$list; do \
748 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
749 done | \
750 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
751 END { if (nonempty) { for (i in files) print i; }; }'`; \
752 test -z "$(CTAGS_ARGS)$$unique" \
753 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
754 $$unique
755
756GTAGS:
757 here=`$(am__cd) $(top_builddir) && pwd` \
758 && $(am__cd) $(top_srcdir) \
759 && gtags -i $(GTAGS_ARGS) "$$here"
760
761distclean-tags:
762 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
763
764distdir: $(DISTFILES)
765 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
766 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
767 list='$(DISTFILES)'; \
768 dist_files=`for file in $$list; do echo $$file; done | \
769 sed -e "s|^$$srcdirstrip/||;t" \
770 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
771 case $$dist_files in \
772 */*) $(MKDIR_P) `echo "$$dist_files" | \
773 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
774 sort -u` ;; \
775 esac; \
776 for file in $$dist_files; do \
777 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
778 if test -d $$d/$$file; then \
779 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
780 if test -d "$(distdir)/$$file"; then \
781 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
782 fi; \
783 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
784 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
785 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
786 fi; \
787 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
788 else \
789 test -f "$(distdir)/$$file" \
790 || cp -p $$d/$$file "$(distdir)/$$file" \
791 || exit 1; \
792 fi; \
793 done
794 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
795 if test "$$subdir" = .; then :; else \
796 test -d "$(distdir)/$$subdir" \
797 || $(MKDIR_P) "$(distdir)/$$subdir" \
798 || exit 1; \
799 fi; \
800 done
801 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
802 if test "$$subdir" = .; then :; else \
803 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
804 $(am__relativize); \
805 new_distdir=$$reldir; \
806 dir1=$$subdir; dir2="$(top_distdir)"; \
807 $(am__relativize); \
808 new_top_distdir=$$reldir; \
809 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
810 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
811 ($(am__cd) $$subdir && \
812 $(MAKE) $(AM_MAKEFLAGS) \
813 top_distdir="$$new_top_distdir" \
814 distdir="$$new_distdir" \
815 am__remove_distdir=: \
816 am__skip_length_check=: \
817 am__skip_mode_fix=: \
818 distdir) \
819 || exit 1; \
820 fi; \
821 done
822check-am: all-am
823check: check-recursive
824all-am: Makefile $(LTLIBRARIES) $(HEADERS)
825installdirs: installdirs-recursive
826installdirs-am:
827 for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includesdir)"; do \
828 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
829 done
830install: install-recursive
831install-exec: install-exec-recursive
832install-data: install-data-recursive
833uninstall: uninstall-recursive
834
835install-am: all-am
836 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
837
838installcheck: installcheck-recursive
839install-strip:
840 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
841 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
842 `test -z '$(STRIP)' || \
843 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
844mostlyclean-generic:
845
846clean-generic:
847
848distclean-generic:
849 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
850 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
851
852maintainer-clean-generic:
853 @echo "This command is intended for maintainers to use"
854 @echo "it deletes files that may require special tools to rebuild."
855 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
856clean: clean-recursive
857
858clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
859 mostlyclean-am
860
861distclean: distclean-recursive
862 -rm -f Makefile
863distclean-am: clean-am distclean-compile distclean-generic \
864 distclean-tags
865
866dvi: dvi-recursive
867
868dvi-am:
869
870html: html-recursive
871
872html-am:
873
874info: info-recursive
875
876info-am:
877
878install-data-am: install-includesHEADERS
879
880install-dvi: install-dvi-recursive
881
882install-dvi-am:
883
884install-exec-am: install-libLTLIBRARIES
885
886install-html: install-html-recursive
887
888install-html-am:
889
890install-info: install-info-recursive
891
892install-info-am:
893
894install-man:
895
896install-pdf: install-pdf-recursive
897
898install-pdf-am:
899
900install-ps: install-ps-recursive
901
902install-ps-am:
903
904installcheck-am:
905
906maintainer-clean: maintainer-clean-recursive
907 -rm -f Makefile
908maintainer-clean-am: distclean-am maintainer-clean-generic
909
910mostlyclean: mostlyclean-recursive
911
912mostlyclean-am: mostlyclean-compile mostlyclean-generic \
913 mostlyclean-libtool
914
915pdf: pdf-recursive
916
917pdf-am:
918
919ps: ps-recursive
920
921ps-am:
922
923uninstall-am: uninstall-includesHEADERS uninstall-libLTLIBRARIES
924
925.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
926 install-am install-strip tags-recursive
927
928.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
929 all all-am check check-am clean clean-generic \
930 clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \
931 distclean distclean-compile distclean-generic \
932 distclean-libtool distclean-tags distdir dvi dvi-am html \
933 html-am info info-am install install-am install-data \
934 install-data-am install-dvi install-dvi-am install-exec \
935 install-exec-am install-html install-html-am \
936 install-includesHEADERS install-info install-info-am \
937 install-libLTLIBRARIES install-man install-pdf install-pdf-am \
938 install-ps install-ps-am install-strip installcheck \
939 installcheck-am installdirs installdirs-am maintainer-clean \
940 maintainer-clean-generic mostlyclean mostlyclean-compile \
941 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
942 tags tags-recursive uninstall uninstall-am \
943 uninstall-includesHEADERS uninstall-libLTLIBRARIES
944
945
946# Tell versions [3.59,3.63) of GNU make to not export all variables.
947# Otherwise a system limit (for SysV at least) may be exceeded.
948.NOEXPORT:
diff --git a/libraries/ecore/src/lib/ecore_x/ecore_x_atoms_decl.h b/libraries/ecore/src/lib/ecore_x/ecore_x_atoms_decl.h
deleted file mode 100644
index 8952df3..0000000
--- a/libraries/ecore/src/lib/ecore_x/ecore_x_atoms_decl.h
+++ /dev/null
@@ -1,295 +0,0 @@
1/* generic atoms */
2EAPI Ecore_X_Atom ECORE_X_ATOM_ATOM = 0;
3EAPI Ecore_X_Atom ECORE_X_ATOM_CARDINAL = 0;
4EAPI Ecore_X_Atom ECORE_X_ATOM_COMPOUND_TEXT = 0;
5EAPI Ecore_X_Atom ECORE_X_ATOM_FILE_NAME = 0;
6EAPI Ecore_X_Atom ECORE_X_ATOM_STRING = 0;
7EAPI Ecore_X_Atom ECORE_X_ATOM_TEXT = 0;
8EAPI Ecore_X_Atom ECORE_X_ATOM_UTF8_STRING = 0;
9EAPI Ecore_X_Atom ECORE_X_ATOM_WINDOW = 0;
10EAPI Ecore_X_Atom ECORE_X_ATOM_PIXMAP = 0;
11EAPI Ecore_X_Atom ECORE_X_ATOM_VISUALID = 0;
12
13/* dnd atoms */
14EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_XDND = 0;
15EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_XDND = 0;
16EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_AWARE = 0;
17EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ENTER = 0;
18EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_TYPE_LIST = 0;
19EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_POSITION = 0;
20EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_COPY = 0;
21EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_MOVE = 0;
22EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_PRIVATE = 0;
23EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_ASK = 0;
24EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_LIST = 0;
25EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_LINK = 0;
26EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_ACTION_DESCRIPTION = 0;
27EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_PROXY = 0;
28EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_STATUS = 0;
29EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_LEAVE = 0;
30EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_DROP = 0;
31EAPI Ecore_X_Atom ECORE_X_ATOM_XDND_FINISHED = 0;
32
33/* dnd atoms that need to be exposed to the application interface */
34EAPI Ecore_X_Atom ECORE_X_DND_ACTION_COPY = 0;
35EAPI Ecore_X_Atom ECORE_X_DND_ACTION_MOVE = 0;
36EAPI Ecore_X_Atom ECORE_X_DND_ACTION_LINK = 0;
37EAPI Ecore_X_Atom ECORE_X_DND_ACTION_ASK = 0;
38EAPI Ecore_X_Atom ECORE_X_DND_ACTION_PRIVATE = 0;
39
40/* old E atom */
41EAPI Ecore_X_Atom ECORE_X_ATOM_E_FRAME_SIZE = 0;
42
43/* old Gnome atom */
44EAPI Ecore_X_Atom ECORE_X_ATOM_WIN_LAYER = 0;
45
46/* ICCCM atoms */
47
48/* ICCCM: client properties */
49EAPI Ecore_X_Atom ECORE_X_ATOM_WM_NAME = 0;
50EAPI Ecore_X_Atom ECORE_X_ATOM_WM_ICON_NAME = 0;
51EAPI Ecore_X_Atom ECORE_X_ATOM_WM_NORMAL_HINTS = 0;
52EAPI Ecore_X_Atom ECORE_X_ATOM_WM_SIZE_HINTS = 0;
53EAPI Ecore_X_Atom ECORE_X_ATOM_WM_HINTS = 0;
54EAPI Ecore_X_Atom ECORE_X_ATOM_WM_CLASS = 0;
55EAPI Ecore_X_Atom ECORE_X_ATOM_WM_TRANSIENT_FOR = 0;
56EAPI Ecore_X_Atom ECORE_X_ATOM_WM_PROTOCOLS = 0;
57EAPI Ecore_X_Atom ECORE_X_ATOM_WM_COLORMAP_WINDOWS = 0;
58EAPI Ecore_X_Atom ECORE_X_ATOM_WM_COMMAND = 0; /* obsolete */
59EAPI Ecore_X_Atom ECORE_X_ATOM_WM_CLIENT_MACHINE = 0; /* obsolete */
60
61/* ICCCM: window manager properties */
62EAPI Ecore_X_Atom ECORE_X_ATOM_WM_STATE = 0;
63EAPI Ecore_X_Atom ECORE_X_ATOM_WM_ICON_SIZE = 0;
64
65/* ICCCM: WM_STATE property */
66EAPI Ecore_X_Atom ECORE_X_ATOM_WM_CHANGE_STATE = 0;
67
68/* ICCCM: WM_PROTOCOLS properties */
69EAPI Ecore_X_Atom ECORE_X_ATOM_WM_TAKE_FOCUS = 0;
70EAPI Ecore_X_Atom ECORE_X_ATOM_WM_SAVE_YOURSELF = 0;
71EAPI Ecore_X_Atom ECORE_X_ATOM_WM_DELETE_WINDOW = 0;
72
73/* ICCCM: WM_COLORMAP properties */
74EAPI Ecore_X_Atom ECORE_X_ATOM_WM_COLORMAP_NOTIFY = 0;
75
76/* ICCCM: session management properties */
77EAPI Ecore_X_Atom ECORE_X_ATOM_SM_CLIENT_ID = 0;
78EAPI Ecore_X_Atom ECORE_X_ATOM_WM_CLIENT_LEADER = 0;
79EAPI Ecore_X_Atom ECORE_X_ATOM_WM_WINDOW_ROLE = 0;
80
81/* Motif WM atom */
82EAPI Ecore_X_Atom ECORE_X_ATOM_MOTIF_WM_HINTS = 0;
83
84/* NetWM 1.3 atoms (http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html) */
85
86/*
87 * NetWM: Root Window Properties and related messages (complete)
88 */
89
90EAPI Ecore_X_Atom ECORE_X_ATOM_NET_SUPPORTED = 0;
91EAPI Ecore_X_Atom ECORE_X_ATOM_NET_CLIENT_LIST = 0;
92EAPI Ecore_X_Atom ECORE_X_ATOM_NET_CLIENT_LIST_STACKING = 0;
93EAPI Ecore_X_Atom ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS = 0;
94EAPI Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_GEOMETRY = 0;
95EAPI Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_VIEWPORT = 0;
96EAPI Ecore_X_Atom ECORE_X_ATOM_NET_CURRENT_DESKTOP = 0;
97EAPI Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_NAMES = 0;
98EAPI Ecore_X_Atom ECORE_X_ATOM_NET_ACTIVE_WINDOW = 0;
99EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WORKAREA = 0;
100EAPI Ecore_X_Atom ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK = 0;
101EAPI Ecore_X_Atom ECORE_X_ATOM_NET_VIRTUAL_ROOTS = 0;
102EAPI Ecore_X_Atom ECORE_X_ATOM_NET_DESKTOP_LAYOUT = 0;
103EAPI Ecore_X_Atom ECORE_X_ATOM_NET_SHOWING_DESKTOP = 0;
104
105/*
106 * NetWM: Other Root Window Messages (complete)
107 */
108
109/* pager */
110EAPI Ecore_X_Atom ECORE_X_ATOM_NET_CLOSE_WINDOW = 0;
111EAPI Ecore_X_Atom ECORE_X_ATOM_NET_MOVERESIZE_WINDOW = 0;
112EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_MOVERESIZE = 0;
113EAPI Ecore_X_Atom ECORE_X_ATOM_NET_RESTACK_WINDOW = 0;
114
115EAPI Ecore_X_Atom ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS = 0;
116
117/*
118 * NetWM: Application Window Properties (complete)
119 */
120
121EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_NAME = 0;
122EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_VISIBLE_NAME = 0;
123EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON_NAME = 0;
124EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME = 0;
125EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_DESKTOP = 0;
126
127/* window type */
128EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE = 0;
129EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP = 0;
130EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK = 0;
131EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR = 0;
132EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU = 0;
133EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY = 0;
134EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH = 0;
135EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG = 0;
136EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL = 0;
137EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU = 0;
138EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU = 0;
139EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP = 0;
140EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION = 0;
141EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO = 0;
142EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND = 0;
143
144/* state */
145EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE = 0;
146EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MODAL = 0;
147EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_STICKY = 0;
148EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT = 0;
149EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ = 0;
150EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SHADED = 0;
151EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR = 0;
152EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER = 0;
153EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_HIDDEN = 0;
154EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN = 0;
155EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_ABOVE = 0;
156EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_BELOW = 0;
157EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION = 0;
158
159/* allowed actions */
160EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS = 0;
161EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MOVE = 0;
162EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_RESIZE = 0;
163EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE = 0;
164EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_SHADE = 0;
165EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_STICK = 0;
166EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ = 0;
167EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT = 0;
168EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN = 0;
169EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP = 0;
170EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_CLOSE = 0;
171EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_ABOVE = 0;
172EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ACTION_BELOW = 0;
173
174EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STRUT = 0;
175EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_STRUT_PARTIAL = 0;
176EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON_GEOMETRY = 0;
177EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_ICON = 0;
178EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_PID = 0;
179EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_HANDLED_ICONS = 0;
180EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_USER_TIME = 0;
181EAPI Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_ID = 0;
182EAPI Ecore_X_Atom ECORE_X_ATOM_NET_FRAME_EXTENTS = 0;
183
184/*
185 * NetWM: Window Manager Protocols (complete)
186 */
187
188EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_PING = 0;
189EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST = 0;
190EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER = 0;
191
192/*
193 * NetWM: Not in the spec
194 */
195
196EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_OPACITY = 0;
197EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_SHADOW = 0;
198EAPI Ecore_X_Atom ECORE_X_ATOM_NET_WM_WINDOW_SHADE = 0;
199
200/*
201 * Startup Notification (http://standards.freedesktop.org/startup-notification-spec/startup-notification-0.1.txt)
202 */
203
204EAPI Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN = 0;
205EAPI Ecore_X_Atom ECORE_X_ATOM_NET_STARTUP_INFO = 0;
206
207/* selection atoms */
208EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_TARGETS = 0;
209EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_PRIMARY = 0;
210EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_SECONDARY = 0;
211EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_CLIPBOARD = 0;
212EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_PRIMARY = 0;
213EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_SECONDARY = 0;
214EAPI Ecore_X_Atom ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD = 0;
215
216/* currently E specific virtual keyboard extension, aim to submit to netwm spec
217 * later */
218
219EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD = 0;
220EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE = 0;
221EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON = 0;
222EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF = 0;
223EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA = 0;
224EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC = 0;
225EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN = 0;
226EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER = 0;
227EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX = 0;
228EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL = 0;
229EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD = 0;
230EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP = 0;
231EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST = 0;
232EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE = 0;
233EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL = 0;
234EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD = 0;
235EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME = 0;
236
237/* currently E specific illume extension */
238EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ZONE = 0;
239EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ZONE_LIST = 0;
240EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CONFORMANT = 0;
241EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE = 0;
242EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_SINGLE = 0;
243EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP = 0;
244EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT = 0;
245EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_BACK = 0;
246EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD = 0;
247EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_FOCUS_HOME = 0;
248EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLOSE = 0;
249EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_HOME_NEW = 0;
250EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_HOME_DEL = 0;
251EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG = 0;
252EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED = 0;
253EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_START = 0;
254EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_DRAG_END = 0;
255EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY = 0;
256EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY = 0;
257EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY = 0;
258EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL = 0;
259EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE = 0;
260EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE = 0;
261EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON = 0;
262EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF = 0;
263EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR = 0;
264EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR = 0;
265EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE = 0;
266EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE = 0;
267EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE = 0;
268EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_ON = 0;
269EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF = 0;
270EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE = 0;
271EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE= 0;
272EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT = 0;
273EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT = 0;
274EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE = 0;
275EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE = 0;
276EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE = 0;
277EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE = 0;
278EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY = 0;
279EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON = 0;
280EAPI Ecore_X_Atom ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF = 0;
281
282EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_COUNTER = 0;
283EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE = 0;
284EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED = 0;
285EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_BEGIN = 0;
286EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_END = 0;
287EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_SYNC_CANCEL = 0;
288
289EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_FLUSH = 0;
290EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_DUMP = 0;
291EAPI Ecore_X_Atom ECORE_X_ATOM_E_COMP_PIXMAP = 0;
292
293/* currently Emotion and E17 specific extension */
294EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_PARENT = 0;
295EAPI Ecore_X_Atom ECORE_X_ATOM_E_VIDEO_POSITION = 0;
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/Makefile.am b/libraries/ecore/src/lib/ecore_x/xcb/Makefile.am
deleted file mode 100644
index 366ebfd..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/Makefile.am
+++ /dev/null
@@ -1,99 +0,0 @@
1
2MAINTAINERCLEANFILES = Makefile.in ecore_xcb_keysym_table.h
3
4if BUILD_ECORE_X_XCB
5
6AM_CPPFLAGS = \
7 @XCB_DAMAGE_CFLAGS@ \
8 @XCB_COMPOSITE_CFLAGS@ \
9 @XCB_DPMS_CFLAGS@ \
10 @XCB_RANDR_CFLAGS@ \
11 @XCB_RENDER_CFLAGS@ \
12 @XCB_SCREENSAVER_CFLAGS@ \
13 @XCB_SHAPE_CFLAGS@ \
14 @XCB_SYNC_CFLAGS@ \
15 @XCB_XFIXES_CFLAGS@ \
16 @XCB_XINERAMA_CFLAGS@ \
17 @XCB_XPRINT_CFLAGS@ \
18 @XCB_XTEST_CFLAGS@ \
19 @XCB_XINPUT_CFLAGS@ \
20 @XCB_XGESTURE_CFLAGS@ \
21 @XCB_CURSOR_CFLAGS@ \
22 @ECORE_XCB_CFLAGS@ \
23 @PIXMAN_CFLAGS@ \
24 -I$(top_srcdir)/src/lib/ecore \
25 -I$(top_srcdir)/src/lib/ecore_x \
26 -I$(top_srcdir)/src/lib/ecore_input \
27 -I$(top_builddir)/src/lib/ecore \
28 -I$(top_builddir)/src/lib/ecore_x \
29 -I$(top_builddir)/src/lib/ecore_input \
30 @EINA_CFLAGS@
31
32noinst_LTLIBRARIES = libecore_x_xcb.la
33
34libecore_x_xcb_la_SOURCES = \
35 ecore_xcb.c \
36 ecore_xcb_atoms.c \
37 ecore_xcb_extensions.c \
38 ecore_xcb_shape.c \
39 ecore_xcb_screensaver.c \
40 ecore_xcb_sync.c \
41 ecore_xcb_render.c \
42 ecore_xcb_randr.c \
43 ecore_xcb_xfixes.c \
44 ecore_xcb_composite.c \
45 ecore_xcb_cursor.c \
46 ecore_xcb_damage.c \
47 ecore_xcb_dnd.c \
48 ecore_xcb_dpms.c \
49 ecore_xcb_drawable.c \
50 ecore_xcb_e.c \
51 ecore_xcb_gc.c \
52 ecore_xcb_image.c \
53 ecore_xcb_input.c \
54 ecore_xcb_gesture.c \
55 ecore_xcb_mwm.c \
56 ecore_xcb_pixmap.c \
57 ecore_xcb_region.c \
58 ecore_xcb_selection.c \
59 ecore_xcb_textlist.c \
60 ecore_xcb_events.c \
61 ecore_xcb_keymap.c \
62 ecore_xcb_netwm.c \
63 ecore_xcb_icccm.c \
64 ecore_xcb_window.c \
65 ecore_xcb_window_prop.c \
66 ecore_xcb_window_shape.c \
67 ecore_xcb_window_shadow.c \
68 ecore_xcb_xinerama.c \
69 ecore_xcb_error.c \
70 ecore_xcb_xtest.c \
71 ecore_xcb_vsync.c \
72 ecore_xcb_xdefaults.c
73
74libecore_x_xcb_la_LIBADD = \
75 @XCB_DAMAGE_LIBS@ \
76 @XCB_COMPOSITE_LIBS@ \
77 @XCB_DPMS_LIBS@ \
78 @XCB_RANDR_LIBS@ \
79 @XCB_RENDER_LIBS@ \
80 @XCB_SCREENSAVER_LIBS@ \
81 @XCB_SHAPE_LIBS@ \
82 @XCB_SYNC_LIBS@ \
83 @XCB_XFIXES_LIBS@ \
84 @XCB_XINERAMA_LIBS@ \
85 @XCB_XPRINT_LIBS@ \
86 @XCB_XTEST_LIBS@ \
87 @XCB_XINPUT_LIBS@ \
88 @XCB_XGESTURE_LIBS@ \
89 @XCB_CURSOR_LIBS@ \
90 @ECORE_XCB_LIBS@ \
91 @PIXMAN_LIBS@ \
92 $(top_builddir)/src/lib/ecore/libecore.la \
93 $(top_builddir)/src/lib/ecore_input/libecore_input.la \
94 @EINA_LIBS@ \
95 @dlopen_libs@
96
97endif
98
99EXTRA_DIST = ecore_xcb_private.h
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/Makefile.in b/libraries/ecore/src/lib/ecore_x/xcb/Makefile.in
deleted file mode 100644
index ff2227c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/Makefile.in
+++ /dev/null
@@ -1,905 +0,0 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/lib/ecore_x/xcb
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/ac_attribute.m4 \
41 $(top_srcdir)/m4/ac_path_generic.m4 \
42 $(top_srcdir)/m4/check_x_extension.m4 \
43 $(top_srcdir)/m4/ecore_check_module.m4 \
44 $(top_srcdir)/m4/ecore_check_options.m4 \
45 $(top_srcdir)/m4/efl_compiler_flag.m4 \
46 $(top_srcdir)/m4/efl_doxygen.m4 \
47 $(top_srcdir)/m4/efl_examples.m4 \
48 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
49 $(top_srcdir)/m4/efl_threads.m4 $(top_srcdir)/m4/gettext.m4 \
50 $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
51 $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
52 $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
53 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
54 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
55 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
56 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
58 $(ACLOCAL_M4)
59mkinstalldirs = $(install_sh) -d
60CONFIG_HEADER = $(top_builddir)/config.h
61CONFIG_CLEAN_FILES =
62CONFIG_CLEAN_VPATH_FILES =
63LTLIBRARIES = $(noinst_LTLIBRARIES)
64@BUILD_ECORE_X_XCB_TRUE@libecore_x_xcb_la_DEPENDENCIES = $(top_builddir)/src/lib/ecore/libecore.la \
65@BUILD_ECORE_X_XCB_TRUE@ $(top_builddir)/src/lib/ecore_input/libecore_input.la
66am__libecore_x_xcb_la_SOURCES_DIST = ecore_xcb.c ecore_xcb_atoms.c \
67 ecore_xcb_extensions.c ecore_xcb_shape.c \
68 ecore_xcb_screensaver.c ecore_xcb_sync.c ecore_xcb_render.c \
69 ecore_xcb_randr.c ecore_xcb_xfixes.c ecore_xcb_composite.c \
70 ecore_xcb_cursor.c ecore_xcb_damage.c ecore_xcb_dnd.c \
71 ecore_xcb_dpms.c ecore_xcb_drawable.c ecore_xcb_e.c \
72 ecore_xcb_gc.c ecore_xcb_image.c ecore_xcb_input.c \
73 ecore_xcb_gesture.c ecore_xcb_mwm.c ecore_xcb_pixmap.c \
74 ecore_xcb_region.c ecore_xcb_selection.c ecore_xcb_textlist.c \
75 ecore_xcb_events.c ecore_xcb_keymap.c ecore_xcb_netwm.c \
76 ecore_xcb_icccm.c ecore_xcb_window.c ecore_xcb_window_prop.c \
77 ecore_xcb_window_shape.c ecore_xcb_window_shadow.c \
78 ecore_xcb_xinerama.c ecore_xcb_error.c ecore_xcb_xtest.c \
79 ecore_xcb_vsync.c ecore_xcb_xdefaults.c
80@BUILD_ECORE_X_XCB_TRUE@am_libecore_x_xcb_la_OBJECTS = ecore_xcb.lo \
81@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_atoms.lo \
82@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_extensions.lo \
83@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_shape.lo \
84@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_screensaver.lo \
85@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_sync.lo ecore_xcb_render.lo \
86@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_randr.lo ecore_xcb_xfixes.lo \
87@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_composite.lo \
88@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_cursor.lo \
89@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_damage.lo ecore_xcb_dnd.lo \
90@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_dpms.lo \
91@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_drawable.lo ecore_xcb_e.lo \
92@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_gc.lo ecore_xcb_image.lo \
93@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_input.lo \
94@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_gesture.lo ecore_xcb_mwm.lo \
95@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_pixmap.lo \
96@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_region.lo \
97@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_selection.lo \
98@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_textlist.lo \
99@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_events.lo \
100@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_keymap.lo ecore_xcb_netwm.lo \
101@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_icccm.lo ecore_xcb_window.lo \
102@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_prop.lo \
103@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_shape.lo \
104@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_shadow.lo \
105@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xinerama.lo \
106@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_error.lo ecore_xcb_xtest.lo \
107@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_vsync.lo \
108@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xdefaults.lo
109libecore_x_xcb_la_OBJECTS = $(am_libecore_x_xcb_la_OBJECTS)
110AM_V_lt = $(am__v_lt_$(V))
111am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
112am__v_lt_0 = --silent
113@BUILD_ECORE_X_XCB_TRUE@am_libecore_x_xcb_la_rpath =
114DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
115depcomp = $(SHELL) $(top_srcdir)/depcomp
116am__depfiles_maybe = depfiles
117am__mv = mv -f
118COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
119 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
120LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
121 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
122 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
123 $(AM_CFLAGS) $(CFLAGS)
124AM_V_CC = $(am__v_CC_$(V))
125am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
126am__v_CC_0 = @echo " CC " $@;
127AM_V_at = $(am__v_at_$(V))
128am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
129am__v_at_0 = @
130CCLD = $(CC)
131LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
132 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
133 $(AM_LDFLAGS) $(LDFLAGS) -o $@
134AM_V_CCLD = $(am__v_CCLD_$(V))
135am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
136am__v_CCLD_0 = @echo " CCLD " $@;
137AM_V_GEN = $(am__v_GEN_$(V))
138am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
139am__v_GEN_0 = @echo " GEN " $@;
140SOURCES = $(libecore_x_xcb_la_SOURCES)
141DIST_SOURCES = $(am__libecore_x_xcb_la_SOURCES_DIST)
142ETAGS = etags
143CTAGS = ctags
144DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
145ACLOCAL = @ACLOCAL@
146ALLOCA = @ALLOCA@
147AMTAR = @AMTAR@
148AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
149AR = @AR@
150AS = @AS@
151AUTOCONF = @AUTOCONF@
152AUTOHEADER = @AUTOHEADER@
153AUTOMAKE = @AUTOMAKE@
154AWK = @AWK@
155CARES_CFLAGS = @CARES_CFLAGS@
156CARES_LIBS = @CARES_LIBS@
157CC = @CC@
158CCDEPMODE = @CCDEPMODE@
159CFLAGS = @CFLAGS@
160CHECK_CFLAGS = @CHECK_CFLAGS@
161CHECK_LIBS = @CHECK_LIBS@
162CPP = @CPP@
163CPPFLAGS = @CPPFLAGS@
164CURL_CFLAGS = @CURL_CFLAGS@
165CURL_LIBS = @CURL_LIBS@
166CXX = @CXX@
167CXXCPP = @CXXCPP@
168CXXDEPMODE = @CXXDEPMODE@
169CXXFLAGS = @CXXFLAGS@
170CYGPATH_W = @CYGPATH_W@
171DEFS = @DEFS@
172DEPDIR = @DEPDIR@
173DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
174DIRECTFB_LIBS = @DIRECTFB_LIBS@
175DLLTOOL = @DLLTOOL@
176DSYMUTIL = @DSYMUTIL@
177DUMPBIN = @DUMPBIN@
178ECHO_C = @ECHO_C@
179ECHO_N = @ECHO_N@
180ECHO_T = @ECHO_T@
181ECORE_XCB_CFLAGS = @ECORE_XCB_CFLAGS@
182ECORE_XCB_LIBS = @ECORE_XCB_LIBS@
183EFL_ECORE_BUILD = @EFL_ECORE_BUILD@
184EFL_ECORE_CON_BUILD = @EFL_ECORE_CON_BUILD@
185EFL_ECORE_EVAS_BUILD = @EFL_ECORE_EVAS_BUILD@
186EFL_ECORE_FILE_BUILD = @EFL_ECORE_FILE_BUILD@
187EFL_ECORE_IMF_BUILD = @EFL_ECORE_IMF_BUILD@
188EFL_ECORE_IMF_EVAS_BUILD = @EFL_ECORE_IMF_EVAS_BUILD@
189EFL_ECORE_INPUT_BUILD = @EFL_ECORE_INPUT_BUILD@
190EFL_ECORE_INPUT_EVAS_BUILD = @EFL_ECORE_INPUT_EVAS_BUILD@
191EFL_ECORE_IPC_BUILD = @EFL_ECORE_IPC_BUILD@
192EFL_ECORE_PSL1GHT_BUILD = @EFL_ECORE_PSL1GHT_BUILD@
193EFL_ECORE_SDL_BUILD = @EFL_ECORE_SDL_BUILD@
194EFL_ECORE_WIN32_BUILD = @EFL_ECORE_WIN32_BUILD@
195EFL_ECORE_WINCE_BUILD = @EFL_ECORE_WINCE_BUILD@
196EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
197EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
198EGREP = @EGREP@
199EINA_CFLAGS = @EINA_CFLAGS@
200EINA_LIBS = @EINA_LIBS@
201ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
202ESCAPE_LIBS = @ESCAPE_LIBS@
203EVAS_CFLAGS = @EVAS_CFLAGS@
204EVAS_LIBS = @EVAS_LIBS@
205EVIL_CFLAGS = @EVIL_CFLAGS@
206EVIL_LIBS = @EVIL_LIBS@
207EXEEXT = @EXEEXT@
208EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
209EXOTIC_LIBS = @EXOTIC_LIBS@
210FGREP = @FGREP@
211GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
212GLIB_CFLAGS = @GLIB_CFLAGS@
213GLIB_LIBS = @GLIB_LIBS@
214GMSGFMT = @GMSGFMT@
215GMSGFMT_015 = @GMSGFMT_015@
216GREP = @GREP@
217INSTALL = @INSTALL@
218INSTALL_DATA = @INSTALL_DATA@
219INSTALL_PROGRAM = @INSTALL_PROGRAM@
220INSTALL_SCRIPT = @INSTALL_SCRIPT@
221INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
222INTLLIBS = @INTLLIBS@
223INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
224KEYSYMDEFS = @KEYSYMDEFS@
225LD = @LD@
226LDFLAGS = @LDFLAGS@
227LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
228LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
229LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
230LIBICONV = @LIBICONV@
231LIBINTL = @LIBINTL@
232LIBOBJS = @LIBOBJS@
233LIBS = @LIBS@
234LIBTOOL = @LIBTOOL@
235LIPO = @LIPO@
236LN_S = @LN_S@
237LTLIBICONV = @LTLIBICONV@
238LTLIBINTL = @LTLIBINTL@
239LTLIBOBJS = @LTLIBOBJS@
240MAKEINFO = @MAKEINFO@
241MKDIR_P = @MKDIR_P@
242MSGFMT = @MSGFMT@
243MSGFMT_015 = @MSGFMT_015@
244MSGMERGE = @MSGMERGE@
245NM = @NM@
246NMEDIT = @NMEDIT@
247OBJC = @OBJC@
248OBJCDEPMODE = @OBJCDEPMODE@
249OBJCFLAGS = @OBJCFLAGS@
250OBJDUMP = @OBJDUMP@
251OBJEXT = @OBJEXT@
252OTOOL = @OTOOL@
253OTOOL64 = @OTOOL64@
254PACKAGE = @PACKAGE@
255PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
256PACKAGE_NAME = @PACKAGE_NAME@
257PACKAGE_STRING = @PACKAGE_STRING@
258PACKAGE_TARNAME = @PACKAGE_TARNAME@
259PACKAGE_URL = @PACKAGE_URL@
260PACKAGE_VERSION = @PACKAGE_VERSION@
261PATH_SEPARATOR = @PATH_SEPARATOR@
262PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
263PIXMAN_LIBS = @PIXMAN_LIBS@
264PKG_CONFIG = @PKG_CONFIG@
265PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
266PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
267POSUB = @POSUB@
268RANLIB = @RANLIB@
269SCIM_CFLAGS = @SCIM_CFLAGS@
270SCIM_LIBS = @SCIM_LIBS@
271SDL_CFLAGS = @SDL_CFLAGS@
272SDL_CONFIG = @SDL_CONFIG@
273SDL_LIBS = @SDL_LIBS@
274SED = @SED@
275SET_MAKE = @SET_MAKE@
276SHELL = @SHELL@
277SHM_OPEN_LIBS = @SHM_OPEN_LIBS@
278SSL_CFLAGS = @SSL_CFLAGS@
279SSL_LIBS = @SSL_LIBS@
280STRIP = @STRIP@
281TLS2_CFLAGS = @TLS2_CFLAGS@
282TLS2_LIBS = @TLS2_LIBS@
283TLS_CFLAGS = @TLS_CFLAGS@
284TLS_LIBS = @TLS_LIBS@
285TSLIB_CFLAGS = @TSLIB_CFLAGS@
286TSLIB_LIBS = @TSLIB_LIBS@
287USE_NLS = @USE_NLS@
288VERSION = @VERSION@
289VMAJ = @VMAJ@
290WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
291WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
292WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
293WAYLAND_LIBS = @WAYLAND_LIBS@
294WIN32_CFLAGS = @WIN32_CFLAGS@
295WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
296WIN32_LIBS = @WIN32_LIBS@
297XCB_COMPOSITE_CFLAGS = @XCB_COMPOSITE_CFLAGS@
298XCB_COMPOSITE_LIBS = @XCB_COMPOSITE_LIBS@
299XCB_CURSOR_CFLAGS = @XCB_CURSOR_CFLAGS@
300XCB_CURSOR_LIBS = @XCB_CURSOR_LIBS@
301XCB_DAMAGE_CFLAGS = @XCB_DAMAGE_CFLAGS@
302XCB_DAMAGE_LIBS = @XCB_DAMAGE_LIBS@
303XCB_DPMS_CFLAGS = @XCB_DPMS_CFLAGS@
304XCB_DPMS_LIBS = @XCB_DPMS_LIBS@
305XCB_RANDR_CFLAGS = @XCB_RANDR_CFLAGS@
306XCB_RANDR_LIBS = @XCB_RANDR_LIBS@
307XCB_RENDER_CFLAGS = @XCB_RENDER_CFLAGS@
308XCB_RENDER_LIBS = @XCB_RENDER_LIBS@
309XCB_SCREENSAVER_CFLAGS = @XCB_SCREENSAVER_CFLAGS@
310XCB_SCREENSAVER_LIBS = @XCB_SCREENSAVER_LIBS@
311XCB_SHAPE_CFLAGS = @XCB_SHAPE_CFLAGS@
312XCB_SHAPE_LIBS = @XCB_SHAPE_LIBS@
313XCB_SYNC_CFLAGS = @XCB_SYNC_CFLAGS@
314XCB_SYNC_LIBS = @XCB_SYNC_LIBS@
315XCB_X11_CFLAGS = @XCB_X11_CFLAGS@
316XCB_X11_LIBS = @XCB_X11_LIBS@
317XCB_XFIXES_CFLAGS = @XCB_XFIXES_CFLAGS@
318XCB_XFIXES_LIBS = @XCB_XFIXES_LIBS@
319XCB_XGESTURE_CFLAGS = @XCB_XGESTURE_CFLAGS@
320XCB_XGESTURE_LIBS = @XCB_XGESTURE_LIBS@
321XCB_XINERAMA_CFLAGS = @XCB_XINERAMA_CFLAGS@
322XCB_XINERAMA_LIBS = @XCB_XINERAMA_LIBS@
323XCB_XINPUT_CFLAGS = @XCB_XINPUT_CFLAGS@
324XCB_XINPUT_LIBS = @XCB_XINPUT_LIBS@
325XCB_XPRINT_CFLAGS = @XCB_XPRINT_CFLAGS@
326XCB_XPRINT_LIBS = @XCB_XPRINT_LIBS@
327XCB_XTEST_CFLAGS = @XCB_XTEST_CFLAGS@
328XCB_XTEST_LIBS = @XCB_XTEST_LIBS@
329XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
330XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
331XDAMAGE_CFLAGS = @XDAMAGE_CFLAGS@
332XDAMAGE_LIBS = @XDAMAGE_LIBS@
333XDPMS_CFLAGS = @XDPMS_CFLAGS@
334XDPMS_LIBS = @XDPMS_LIBS@
335XFIXES_CFLAGS = @XFIXES_CFLAGS@
336XFIXES_LIBS = @XFIXES_LIBS@
337XGESTURE_CFLAGS = @XGESTURE_CFLAGS@
338XGESTURE_LIBS = @XGESTURE_LIBS@
339XGETTEXT = @XGETTEXT@
340XGETTEXT_015 = @XGETTEXT_015@
341XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
342XI2_CFLAGS = @XI2_CFLAGS@
343XI2_LIBS = @XI2_LIBS@
344XINERAMA_CFLAGS = @XINERAMA_CFLAGS@
345XINERAMA_LIBS = @XINERAMA_LIBS@
346XKB_CFLAGS = @XKB_CFLAGS@
347XKB_LIBS = @XKB_LIBS@
348XMKMF = @XMKMF@
349XPRINT_CFLAGS = @XPRINT_CFLAGS@
350XPRINT_LIBS = @XPRINT_LIBS@
351XRANDR_CFLAGS = @XRANDR_CFLAGS@
352XRANDR_LIBS = @XRANDR_LIBS@
353XRENDER_CFLAGS = @XRENDER_CFLAGS@
354XRENDER_LIBS = @XRENDER_LIBS@
355XSS_CFLAGS = @XSS_CFLAGS@
356XSS_LIBS = @XSS_LIBS@
357XTEST_CFLAGS = @XTEST_CFLAGS@
358XTEST_LIBS = @XTEST_LIBS@
359X_CFLAGS = @X_CFLAGS@
360X_EXTRA_LIBS = @X_EXTRA_LIBS@
361X_LIBS = @X_LIBS@
362X_PRE_LIBS = @X_PRE_LIBS@
363Xcursor_cflags = @Xcursor_cflags@
364Xcursor_libs = @Xcursor_libs@
365abs_builddir = @abs_builddir@
366abs_srcdir = @abs_srcdir@
367abs_top_builddir = @abs_top_builddir@
368abs_top_srcdir = @abs_top_srcdir@
369ac_ct_CC = @ac_ct_CC@
370ac_ct_CXX = @ac_ct_CXX@
371ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
372ac_ct_OBJC = @ac_ct_OBJC@
373am__include = @am__include@
374am__leading_dot = @am__leading_dot@
375am__quote = @am__quote@
376am__tar = @am__tar@
377am__untar = @am__untar@
378bindir = @bindir@
379build = @build@
380build_alias = @build_alias@
381build_cpu = @build_cpu@
382build_os = @build_os@
383build_vendor = @build_vendor@
384builddir = @builddir@
385cocoa_ldflags = @cocoa_ldflags@
386datadir = @datadir@
387datarootdir = @datarootdir@
388dlopen_libs = @dlopen_libs@
389docdir = @docdir@
390dvidir = @dvidir@
391ecore_cocoa_cflags = @ecore_cocoa_cflags@
392ecore_cocoa_libs = @ecore_cocoa_libs@
393ecore_con_cflags = @ecore_con_cflags@
394ecore_con_libs = @ecore_con_libs@
395ecore_directfb_cflags = @ecore_directfb_cflags@
396ecore_directfb_libs = @ecore_directfb_libs@
397ecore_evas_cflags = @ecore_evas_cflags@
398ecore_evas_libs = @ecore_evas_libs@
399ecore_fb_cflags = @ecore_fb_cflags@
400ecore_fb_libs = @ecore_fb_libs@
401ecore_file_cflags = @ecore_file_cflags@
402ecore_file_libs = @ecore_file_libs@
403ecore_imf_cflags = @ecore_imf_cflags@
404ecore_imf_evas_cflags = @ecore_imf_evas_cflags@
405ecore_imf_evas_libs = @ecore_imf_evas_libs@
406ecore_imf_libs = @ecore_imf_libs@
407ecore_imf_scim_cflags = @ecore_imf_scim_cflags@
408ecore_imf_scim_libs = @ecore_imf_scim_libs@
409ecore_imf_xim_cflags = @ecore_imf_xim_cflags@
410ecore_imf_xim_libs = @ecore_imf_xim_libs@
411ecore_input_cflags = @ecore_input_cflags@
412ecore_input_evas_cflags = @ecore_input_evas_cflags@
413ecore_input_evas_libs = @ecore_input_evas_libs@
414ecore_input_libs = @ecore_input_libs@
415ecore_ipc_cflags = @ecore_ipc_cflags@
416ecore_ipc_libs = @ecore_ipc_libs@
417ecore_psl1ght_cflags = @ecore_psl1ght_cflags@
418ecore_psl1ght_libs = @ecore_psl1ght_libs@
419ecore_sdl_cflags = @ecore_sdl_cflags@
420ecore_sdl_libs = @ecore_sdl_libs@
421ecore_wayland_cflags = @ecore_wayland_cflags@
422ecore_wayland_libs = @ecore_wayland_libs@
423ecore_win32_cflags = @ecore_win32_cflags@
424ecore_win32_libs = @ecore_win32_libs@
425ecore_wince_cflags = @ecore_wince_cflags@
426ecore_wince_libs = @ecore_wince_libs@
427ecore_x_cflags = @ecore_x_cflags@
428ecore_x_libs = @ecore_x_libs@
429ecore_x_libs_private = @ecore_x_libs_private@
430efl_doxygen = @efl_doxygen@
431efl_have_doxygen = @efl_have_doxygen@
432exec_prefix = @exec_prefix@
433have_ecore_x_xcb_define = @have_ecore_x_xcb_define@
434host = @host@
435host_alias = @host_alias@
436host_cpu = @host_cpu@
437host_os = @host_os@
438host_vendor = @host_vendor@
439htmldir = @htmldir@
440includedir = @includedir@
441infodir = @infodir@
442install_sh = @install_sh@
443libdir = @libdir@
444libexecdir = @libexecdir@
445localedir = @localedir@
446localstatedir = @localstatedir@
447lt_ECHO = @lt_ECHO@
448lt_enable_auto_import = @lt_enable_auto_import@
449mandir = @mandir@
450mkdir_p = @mkdir_p@
451oldincludedir = @oldincludedir@
452pdfdir = @pdfdir@
453pkgconfig_requires_private = @pkgconfig_requires_private@
454prefix = @prefix@
455program_transform_name = @program_transform_name@
456psdir = @psdir@
457release_info = @release_info@
458requirements_ecore = @requirements_ecore@
459requirements_ecore_cocoa = @requirements_ecore_cocoa@
460requirements_ecore_con = @requirements_ecore_con@
461requirements_ecore_directfb = @requirements_ecore_directfb@
462requirements_ecore_evas = @requirements_ecore_evas@
463requirements_ecore_fb = @requirements_ecore_fb@
464requirements_ecore_file = @requirements_ecore_file@
465requirements_ecore_imf = @requirements_ecore_imf@
466requirements_ecore_imf_evas = @requirements_ecore_imf_evas@
467requirements_ecore_imf_scim = @requirements_ecore_imf_scim@
468requirements_ecore_imf_xim = @requirements_ecore_imf_xim@
469requirements_ecore_input = @requirements_ecore_input@
470requirements_ecore_input_evas = @requirements_ecore_input_evas@
471requirements_ecore_ipc = @requirements_ecore_ipc@
472requirements_ecore_psl1ght = @requirements_ecore_psl1ght@
473requirements_ecore_sdl = @requirements_ecore_sdl@
474requirements_ecore_wayland = @requirements_ecore_wayland@
475requirements_ecore_win32 = @requirements_ecore_win32@
476requirements_ecore_wince = @requirements_ecore_wince@
477requirements_ecore_x = @requirements_ecore_x@
478rt_libs = @rt_libs@
479sbindir = @sbindir@
480sharedstatedir = @sharedstatedir@
481srcdir = @srcdir@
482sysconfdir = @sysconfdir@
483target_alias = @target_alias@
484top_build_prefix = @top_build_prefix@
485top_builddir = @top_builddir@
486top_srcdir = @top_srcdir@
487version_info = @version_info@
488x_cflags = @x_cflags@
489x_includes = @x_includes@
490x_libs = @x_libs@
491MAINTAINERCLEANFILES = Makefile.in ecore_xcb_keysym_table.h
492@BUILD_ECORE_X_XCB_TRUE@AM_CPPFLAGS = \
493@BUILD_ECORE_X_XCB_TRUE@ @XCB_DAMAGE_CFLAGS@ \
494@BUILD_ECORE_X_XCB_TRUE@ @XCB_COMPOSITE_CFLAGS@ \
495@BUILD_ECORE_X_XCB_TRUE@ @XCB_DPMS_CFLAGS@ \
496@BUILD_ECORE_X_XCB_TRUE@ @XCB_RANDR_CFLAGS@ \
497@BUILD_ECORE_X_XCB_TRUE@ @XCB_RENDER_CFLAGS@ \
498@BUILD_ECORE_X_XCB_TRUE@ @XCB_SCREENSAVER_CFLAGS@ \
499@BUILD_ECORE_X_XCB_TRUE@ @XCB_SHAPE_CFLAGS@ \
500@BUILD_ECORE_X_XCB_TRUE@ @XCB_SYNC_CFLAGS@ \
501@BUILD_ECORE_X_XCB_TRUE@ @XCB_XFIXES_CFLAGS@ \
502@BUILD_ECORE_X_XCB_TRUE@ @XCB_XINERAMA_CFLAGS@ \
503@BUILD_ECORE_X_XCB_TRUE@ @XCB_XPRINT_CFLAGS@ \
504@BUILD_ECORE_X_XCB_TRUE@ @XCB_XTEST_CFLAGS@ \
505@BUILD_ECORE_X_XCB_TRUE@ @XCB_XINPUT_CFLAGS@ \
506@BUILD_ECORE_X_XCB_TRUE@ @XCB_XGESTURE_CFLAGS@ \
507@BUILD_ECORE_X_XCB_TRUE@ @XCB_CURSOR_CFLAGS@ \
508@BUILD_ECORE_X_XCB_TRUE@ @ECORE_XCB_CFLAGS@ \
509@BUILD_ECORE_X_XCB_TRUE@ @PIXMAN_CFLAGS@ \
510@BUILD_ECORE_X_XCB_TRUE@ -I$(top_srcdir)/src/lib/ecore \
511@BUILD_ECORE_X_XCB_TRUE@ -I$(top_srcdir)/src/lib/ecore_x \
512@BUILD_ECORE_X_XCB_TRUE@ -I$(top_srcdir)/src/lib/ecore_input \
513@BUILD_ECORE_X_XCB_TRUE@ -I$(top_builddir)/src/lib/ecore \
514@BUILD_ECORE_X_XCB_TRUE@ -I$(top_builddir)/src/lib/ecore_x \
515@BUILD_ECORE_X_XCB_TRUE@ -I$(top_builddir)/src/lib/ecore_input \
516@BUILD_ECORE_X_XCB_TRUE@ @EINA_CFLAGS@
517
518@BUILD_ECORE_X_XCB_TRUE@noinst_LTLIBRARIES = libecore_x_xcb.la
519@BUILD_ECORE_X_XCB_TRUE@libecore_x_xcb_la_SOURCES = \
520@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb.c \
521@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_atoms.c \
522@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_extensions.c \
523@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_shape.c \
524@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_screensaver.c \
525@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_sync.c \
526@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_render.c \
527@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_randr.c \
528@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xfixes.c \
529@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_composite.c \
530@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_cursor.c \
531@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_damage.c \
532@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_dnd.c \
533@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_dpms.c \
534@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_drawable.c \
535@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_e.c \
536@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_gc.c \
537@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_image.c \
538@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_input.c \
539@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_gesture.c \
540@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_mwm.c \
541@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_pixmap.c \
542@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_region.c \
543@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_selection.c \
544@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_textlist.c \
545@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_events.c \
546@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_keymap.c \
547@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_netwm.c \
548@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_icccm.c \
549@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window.c \
550@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_prop.c \
551@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_shape.c \
552@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_window_shadow.c \
553@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xinerama.c \
554@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_error.c \
555@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xtest.c \
556@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_vsync.c \
557@BUILD_ECORE_X_XCB_TRUE@ ecore_xcb_xdefaults.c
558
559@BUILD_ECORE_X_XCB_TRUE@libecore_x_xcb_la_LIBADD = \
560@BUILD_ECORE_X_XCB_TRUE@ @XCB_DAMAGE_LIBS@ \
561@BUILD_ECORE_X_XCB_TRUE@ @XCB_COMPOSITE_LIBS@ \
562@BUILD_ECORE_X_XCB_TRUE@ @XCB_DPMS_LIBS@ \
563@BUILD_ECORE_X_XCB_TRUE@ @XCB_RANDR_LIBS@ \
564@BUILD_ECORE_X_XCB_TRUE@ @XCB_RENDER_LIBS@ \
565@BUILD_ECORE_X_XCB_TRUE@ @XCB_SCREENSAVER_LIBS@ \
566@BUILD_ECORE_X_XCB_TRUE@ @XCB_SHAPE_LIBS@ \
567@BUILD_ECORE_X_XCB_TRUE@ @XCB_SYNC_LIBS@ \
568@BUILD_ECORE_X_XCB_TRUE@ @XCB_XFIXES_LIBS@ \
569@BUILD_ECORE_X_XCB_TRUE@ @XCB_XINERAMA_LIBS@ \
570@BUILD_ECORE_X_XCB_TRUE@ @XCB_XPRINT_LIBS@ \
571@BUILD_ECORE_X_XCB_TRUE@ @XCB_XTEST_LIBS@ \
572@BUILD_ECORE_X_XCB_TRUE@ @XCB_XINPUT_LIBS@ \
573@BUILD_ECORE_X_XCB_TRUE@ @XCB_XGESTURE_LIBS@ \
574@BUILD_ECORE_X_XCB_TRUE@ @XCB_CURSOR_LIBS@ \
575@BUILD_ECORE_X_XCB_TRUE@ @ECORE_XCB_LIBS@ \
576@BUILD_ECORE_X_XCB_TRUE@ @PIXMAN_LIBS@ \
577@BUILD_ECORE_X_XCB_TRUE@ $(top_builddir)/src/lib/ecore/libecore.la \
578@BUILD_ECORE_X_XCB_TRUE@ $(top_builddir)/src/lib/ecore_input/libecore_input.la \
579@BUILD_ECORE_X_XCB_TRUE@ @EINA_LIBS@ \
580@BUILD_ECORE_X_XCB_TRUE@ @dlopen_libs@
581
582EXTRA_DIST = ecore_xcb_private.h
583all: all-am
584
585.SUFFIXES:
586.SUFFIXES: .c .lo .o .obj
587$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
588 @for dep in $?; do \
589 case '$(am__configure_deps)' in \
590 *$$dep*) \
591 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
592 && { if test -f $@; then exit 0; else break; fi; }; \
593 exit 1;; \
594 esac; \
595 done; \
596 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/ecore_x/xcb/Makefile'; \
597 $(am__cd) $(top_srcdir) && \
598 $(AUTOMAKE) --gnu src/lib/ecore_x/xcb/Makefile
599.PRECIOUS: Makefile
600Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
601 @case '$?' in \
602 *config.status*) \
603 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
604 *) \
605 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
606 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
607 esac;
608
609$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
610 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
611
612$(top_srcdir)/configure: $(am__configure_deps)
613 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
614$(ACLOCAL_M4): $(am__aclocal_m4_deps)
615 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
616$(am__aclocal_m4_deps):
617
618clean-noinstLTLIBRARIES:
619 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
620 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
621 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
622 test "$$dir" != "$$p" || dir=.; \
623 echo "rm -f \"$${dir}/so_locations\""; \
624 rm -f "$${dir}/so_locations"; \
625 done
626libecore_x_xcb.la: $(libecore_x_xcb_la_OBJECTS) $(libecore_x_xcb_la_DEPENDENCIES)
627 $(AM_V_CCLD)$(LINK) $(am_libecore_x_xcb_la_rpath) $(libecore_x_xcb_la_OBJECTS) $(libecore_x_xcb_la_LIBADD) $(LIBS)
628
629mostlyclean-compile:
630 -rm -f *.$(OBJEXT)
631
632distclean-compile:
633 -rm -f *.tab.c
634
635@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb.Plo@am__quote@
636@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_atoms.Plo@am__quote@
637@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_composite.Plo@am__quote@
638@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_cursor.Plo@am__quote@
639@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_damage.Plo@am__quote@
640@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_dnd.Plo@am__quote@
641@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_dpms.Plo@am__quote@
642@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_drawable.Plo@am__quote@
643@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_e.Plo@am__quote@
644@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_error.Plo@am__quote@
645@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_events.Plo@am__quote@
646@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_extensions.Plo@am__quote@
647@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_gc.Plo@am__quote@
648@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_gesture.Plo@am__quote@
649@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_icccm.Plo@am__quote@
650@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_image.Plo@am__quote@
651@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_input.Plo@am__quote@
652@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_keymap.Plo@am__quote@
653@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_mwm.Plo@am__quote@
654@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_netwm.Plo@am__quote@
655@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_pixmap.Plo@am__quote@
656@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_randr.Plo@am__quote@
657@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_region.Plo@am__quote@
658@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_render.Plo@am__quote@
659@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_screensaver.Plo@am__quote@
660@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_selection.Plo@am__quote@
661@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_shape.Plo@am__quote@
662@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_sync.Plo@am__quote@
663@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_textlist.Plo@am__quote@
664@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_vsync.Plo@am__quote@
665@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_window.Plo@am__quote@
666@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_window_prop.Plo@am__quote@
667@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_window_shadow.Plo@am__quote@
668@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_window_shape.Plo@am__quote@
669@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_xdefaults.Plo@am__quote@
670@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_xfixes.Plo@am__quote@
671@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_xinerama.Plo@am__quote@
672@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_xcb_xtest.Plo@am__quote@
673
674.c.o:
675@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
676@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
677@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
678@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
679@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
680@am__fastdepCC_FALSE@ $(COMPILE) -c $<
681
682.c.obj:
683@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
684@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
685@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
686@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
687@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
688@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
689
690.c.lo:
691@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
692@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
693@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
694@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
695@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
696@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
697
698mostlyclean-libtool:
699 -rm -f *.lo
700
701clean-libtool:
702 -rm -rf .libs _libs
703
704ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
705 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
706 unique=`for i in $$list; do \
707 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
708 done | \
709 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
710 END { if (nonempty) { for (i in files) print i; }; }'`; \
711 mkid -fID $$unique
712tags: TAGS
713
714TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
715 $(TAGS_FILES) $(LISP)
716 set x; \
717 here=`pwd`; \
718 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
719 unique=`for i in $$list; do \
720 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
721 done | \
722 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
723 END { if (nonempty) { for (i in files) print i; }; }'`; \
724 shift; \
725 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
726 test -n "$$unique" || unique=$$empty_fix; \
727 if test $$# -gt 0; then \
728 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
729 "$$@" $$unique; \
730 else \
731 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
732 $$unique; \
733 fi; \
734 fi
735ctags: CTAGS
736CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
737 $(TAGS_FILES) $(LISP)
738 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
739 unique=`for i in $$list; do \
740 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
741 done | \
742 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
743 END { if (nonempty) { for (i in files) print i; }; }'`; \
744 test -z "$(CTAGS_ARGS)$$unique" \
745 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
746 $$unique
747
748GTAGS:
749 here=`$(am__cd) $(top_builddir) && pwd` \
750 && $(am__cd) $(top_srcdir) \
751 && gtags -i $(GTAGS_ARGS) "$$here"
752
753distclean-tags:
754 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
755
756distdir: $(DISTFILES)
757 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
758 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
759 list='$(DISTFILES)'; \
760 dist_files=`for file in $$list; do echo $$file; done | \
761 sed -e "s|^$$srcdirstrip/||;t" \
762 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
763 case $$dist_files in \
764 */*) $(MKDIR_P) `echo "$$dist_files" | \
765 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
766 sort -u` ;; \
767 esac; \
768 for file in $$dist_files; do \
769 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
770 if test -d $$d/$$file; then \
771 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
772 if test -d "$(distdir)/$$file"; then \
773 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
774 fi; \
775 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
776 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
777 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
778 fi; \
779 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
780 else \
781 test -f "$(distdir)/$$file" \
782 || cp -p $$d/$$file "$(distdir)/$$file" \
783 || exit 1; \
784 fi; \
785 done
786check-am: all-am
787check: check-am
788all-am: Makefile $(LTLIBRARIES)
789installdirs:
790install: install-am
791install-exec: install-exec-am
792install-data: install-data-am
793uninstall: uninstall-am
794
795install-am: all-am
796 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
797
798installcheck: installcheck-am
799install-strip:
800 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
801 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
802 `test -z '$(STRIP)' || \
803 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
804mostlyclean-generic:
805
806clean-generic:
807
808distclean-generic:
809 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
810 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
811
812maintainer-clean-generic:
813 @echo "This command is intended for maintainers to use"
814 @echo "it deletes files that may require special tools to rebuild."
815 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
816clean: clean-am
817
818clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
819 mostlyclean-am
820
821distclean: distclean-am
822 -rm -rf ./$(DEPDIR)
823 -rm -f Makefile
824distclean-am: clean-am distclean-compile distclean-generic \
825 distclean-tags
826
827dvi: dvi-am
828
829dvi-am:
830
831html: html-am
832
833html-am:
834
835info: info-am
836
837info-am:
838
839install-data-am:
840
841install-dvi: install-dvi-am
842
843install-dvi-am:
844
845install-exec-am:
846
847install-html: install-html-am
848
849install-html-am:
850
851install-info: install-info-am
852
853install-info-am:
854
855install-man:
856
857install-pdf: install-pdf-am
858
859install-pdf-am:
860
861install-ps: install-ps-am
862
863install-ps-am:
864
865installcheck-am:
866
867maintainer-clean: maintainer-clean-am
868 -rm -rf ./$(DEPDIR)
869 -rm -f Makefile
870maintainer-clean-am: distclean-am maintainer-clean-generic
871
872mostlyclean: mostlyclean-am
873
874mostlyclean-am: mostlyclean-compile mostlyclean-generic \
875 mostlyclean-libtool
876
877pdf: pdf-am
878
879pdf-am:
880
881ps: ps-am
882
883ps-am:
884
885uninstall-am:
886
887.MAKE: install-am install-strip
888
889.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
890 clean-libtool clean-noinstLTLIBRARIES ctags distclean \
891 distclean-compile distclean-generic distclean-libtool \
892 distclean-tags distdir dvi dvi-am html html-am info info-am \
893 install install-am install-data install-data-am install-dvi \
894 install-dvi-am install-exec install-exec-am install-html \
895 install-html-am install-info install-info-am install-man \
896 install-pdf install-pdf-am install-ps install-ps-am \
897 install-strip installcheck installcheck-am installdirs \
898 maintainer-clean maintainer-clean-generic mostlyclean \
899 mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
900 pdf pdf-am ps ps-am tags uninstall uninstall-am
901
902
903# Tell versions [3.59,3.63) of GNU make to not export all variables.
904# Otherwise a system limit (for SysV at least) may be exceeded.
905.NOEXPORT:
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb.c
deleted file mode 100644
index ca7e798..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb.c
+++ /dev/null
@@ -1,1470 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <X11/Xlib-xcb.h>
3#include <dlfcn.h>
4
5/* local function prototypes */
6static int _ecore_xcb_shutdown(Eina_Bool close_display);
7static Eina_Bool _ecore_xcb_fd_handle(void *data, Ecore_Fd_Handler *hdlr __UNUSED__);
8static Eina_Bool _ecore_xcb_fd_handle_buff(void *data, Ecore_Fd_Handler *hdlr __UNUSED__);
9static Eina_Bool _ecore_xcb_idle_enter(void *data __UNUSED__);
10
11/* local variables */
12static int _ecore_xcb_init_count = 0;
13static int _ecore_xcb_grab_count = 0;
14static Ecore_Fd_Handler *_ecore_xcb_fd_handler = NULL;
15static xcb_generic_event_t *_ecore_xcb_event_buffered = NULL;
16static Ecore_Idle_Enterer *_ecore_xcb_idle_enterer = NULL;
17
18/* external variables */
19int _ecore_xcb_log_dom = -1;
20Ecore_X_Display *_ecore_xcb_display = NULL;
21Ecore_X_Connection *_ecore_xcb_conn = NULL;
22Ecore_X_Screen *_ecore_xcb_screen = NULL;
23Ecore_X_Atom _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_NUM];
24double _ecore_xcb_double_click_time = 0.25;
25
26/**
27 * @defgroup Ecore_X_Init_Group X Library Init and Shutdown Functions
28 *
29 * Functions that start and shut down the Ecore X Library.
30 */
31
32/**
33 * Initialize the X display connection to the given display.
34 *
35 * @param name Display target name. If @c NULL, the default display is
36 * assumed.
37 * @return The number of times the library has been initialized without
38 * being shut down. 0 is returned if an error occurs.
39 * @ingroup Ecore_X_Init_Group
40 */
41EAPI int
42ecore_x_init(const char *name)
43{
44 char *gl = NULL;
45 uint32_t mask, list[1];
46
47 /* check if we have initialized already */
48 if (++_ecore_xcb_init_count != 1)
49 return _ecore_xcb_init_count;
50
51 LOGFN(__FILE__, __LINE__, __FUNCTION__);
52
53 /* try to initialize eina */
54 if (!eina_init()) return --_ecore_xcb_init_count;
55
56 /* setup ecore_xcb log domain */
57 _ecore_xcb_log_dom =
58 eina_log_domain_register("ecore_x", ECORE_XCB_DEFAULT_LOG_COLOR);
59 if (_ecore_xcb_log_dom < 0)
60 {
61 EINA_LOG_ERR("Cannot create Ecore Xcb log domain");
62 eina_shutdown();
63 return --_ecore_xcb_init_count;
64 }
65
66 /* try to initialize ecore */
67 if (!ecore_init())
68 {
69 /* unregister log domain */
70 eina_log_domain_unregister(_ecore_xcb_log_dom);
71 _ecore_xcb_log_dom = -1;
72 eina_shutdown();
73 return --_ecore_xcb_init_count;
74 }
75
76 /* try to initialize ecore_event */
77 if (!ecore_event_init())
78 {
79 /* unregister log domain */
80 eina_log_domain_unregister(_ecore_xcb_log_dom);
81 _ecore_xcb_log_dom = -1;
82 ecore_shutdown();
83 eina_shutdown();
84 return --_ecore_xcb_init_count;
85 }
86
87 /* NB: XLib has XInitThreads */
88
89 /* check for env var which says we are not going to use GL @ all
90 *
91 * NB: This is done because if someone wants a 'pure' xcb implementation
92 * of ecore_x, all they need do is export this variable in the environment
93 * and ecore_x will not use xlib stuff at all.
94 *
95 * The upside is you can get pure xcb-based ecore_x (w/ all the speed), but
96 * there is a down-side here in that you cannot get OpenGL without XLib :(
97 */
98 if ((gl = getenv("ECORE_X_NO_XLIB")))
99 {
100 /* we found the env var that says 'Yes, we are not ever gonna try
101 * OpenGL so it is safe to not use XLib at all' */
102
103 /* try to connect to the display server */
104 _ecore_xcb_conn = xcb_connect(name, NULL);
105 }
106 else
107 {
108 /* env var was not specified, so we will assume that the user
109 * may want opengl @ some point. connect this way for opengl to work */
110 void *libxcb, *libxlib;
111 Display *(*_real_display)(const char *display);
112 xcb_connection_t *(*_real_connection)(Display * dpy);
113 void (*_real_queue)(Display *dpy, enum XEventQueueOwner owner);
114 int (*_real_close)(Display *dpy);
115#ifdef EVAS_FRAME_QUEUING
116 Status (*_real_threads)(void);
117#endif
118
119 /* want to dlopen here to avoid actual library linkage */
120 libxlib = dlopen("libX11.so", (RTLD_LAZY | RTLD_GLOBAL));
121 if (!libxlib)
122 libxlib = dlopen("libX11.so.6", (RTLD_LAZY | RTLD_GLOBAL));
123 if (!libxlib)
124 libxlib = dlopen("libX11.so.6.3.0", (RTLD_LAZY | RTLD_GLOBAL));
125 if (!libxlib)
126 {
127 ERR("Could not dlsym to libX11");
128 /* unregister log domain */
129 eina_log_domain_unregister(_ecore_xcb_log_dom);
130 _ecore_xcb_log_dom = -1;
131 ecore_event_shutdown();
132 ecore_shutdown();
133 eina_shutdown();
134 return --_ecore_xcb_init_count;
135 }
136
137 libxcb = dlopen("libX11-xcb.so", (RTLD_LAZY | RTLD_GLOBAL));
138 if (!libxcb)
139 libxcb = dlopen("libX11-xcb.so.1", (RTLD_LAZY | RTLD_GLOBAL));
140 if (!libxcb)
141 libxcb = dlopen("libX11-xcb.so.1.0.0", (RTLD_LAZY | RTLD_GLOBAL));
142 if (!libxcb)
143 {
144 ERR("Could not dlsym to libX11-xcb");
145 /* unregister log domain */
146 eina_log_domain_unregister(_ecore_xcb_log_dom);
147 _ecore_xcb_log_dom = -1;
148 ecore_event_shutdown();
149 ecore_shutdown();
150 eina_shutdown();
151 return --_ecore_xcb_init_count;
152 }
153
154 _real_display = dlsym(libxlib, "XOpenDisplay");
155 _real_close = dlsym(libxlib, "XCloseDisplay");
156 _real_connection = dlsym(libxcb, "XGetXCBConnection");
157 _real_queue = dlsym(libxcb, "XSetEventQueueOwner");
158#ifdef EVAS_FRAME_QUEUING
159 _real_threads = dlsym(libxlib, "XInitThreads");
160#endif
161
162 if (_real_display)
163 {
164#ifdef EVAS_FRAME_QUEUING
165 if (_real_threads) _real_threads();
166#endif
167 _ecore_xcb_display = _real_display(name);
168 if (!_ecore_xcb_display)
169 {
170 ERR("Could not open Display via XLib");
171 /* unregister log domain */
172 eina_log_domain_unregister(_ecore_xcb_log_dom);
173 _ecore_xcb_log_dom = -1;
174 ecore_event_shutdown();
175 ecore_shutdown();
176 eina_shutdown();
177 return --_ecore_xcb_init_count;
178 }
179 if (_real_connection)
180 _ecore_xcb_conn = _real_connection(_ecore_xcb_display);
181 if (!_ecore_xcb_conn)
182 {
183 ERR("Could not get XCB Connection from XLib");
184
185 if (_real_close) _real_close(_ecore_xcb_display);
186
187 /* unregister log domain */
188 eina_log_domain_unregister(_ecore_xcb_log_dom);
189 _ecore_xcb_log_dom = -1;
190 ecore_event_shutdown();
191 ecore_shutdown();
192 eina_shutdown();
193 return --_ecore_xcb_init_count;
194 }
195 if (_real_queue)
196 _real_queue(_ecore_xcb_display, XCBOwnsEventQueue);
197 }
198 }
199
200 if (xcb_connection_has_error(_ecore_xcb_conn))
201 {
202 CRIT("XCB Connection has error");
203 eina_log_domain_unregister(_ecore_xcb_log_dom);
204 _ecore_xcb_log_dom = -1;
205 ecore_event_shutdown();
206 ecore_shutdown();
207 eina_shutdown();
208 return --_ecore_xcb_init_count;
209 }
210
211 /* grab the default screen */
212 _ecore_xcb_screen =
213 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).data;
214
215 /* NB: This method of init/finalize extensions first, then atoms
216 * Does end up being 2 round trips to X, BUT if we do extensions init then
217 * atoms init first, and call the 'finalize' functions later, we end up
218 * being slower, so it's a trade-off. This current method clocks in
219 * around 0.003 for fetching atoms VS 0.010 for init both then finalize */
220
221 /* prefetch extension data */
222 _ecore_xcb_extensions_init();
223
224 /* finalize extensions */
225 _ecore_xcb_extensions_finalize();
226
227 /* set keyboard autorepeat */
228 mask = XCB_KB_AUTO_REPEAT_MODE;
229 list[0] = XCB_AUTO_REPEAT_MODE_ON;
230 xcb_change_keyboard_control(_ecore_xcb_conn, mask, list);
231
232 /* setup xcb events */
233 _ecore_xcb_events_init();
234
235 /* setup xcb keymasks */
236 _ecore_xcb_keymap_init();
237
238 /* finalize xcb keymasks */
239 _ecore_xcb_keymap_finalize();
240
241 /* setup ecore fd handler */
242 _ecore_xcb_fd_handler =
243 ecore_main_fd_handler_add(xcb_get_file_descriptor(_ecore_xcb_conn),
244 ECORE_FD_READ, _ecore_xcb_fd_handle,
245 _ecore_xcb_conn, _ecore_xcb_fd_handle_buff,
246 _ecore_xcb_conn);
247
248 if (!_ecore_xcb_fd_handler)
249 return _ecore_xcb_shutdown(EINA_TRUE);
250
251 /* prefetch atoms */
252 _ecore_xcb_atoms_init();
253
254 /* finalize atoms */
255 _ecore_xcb_atoms_finalize();
256
257 /* icccm_init: dummy function */
258 ecore_x_icccm_init();
259
260 /* setup netwm */
261 ecore_x_netwm_init();
262
263 /* old e hints init: dummy function */
264 ecore_x_e_init();
265
266 _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_DELETE_REQUEST] =
267 ECORE_X_ATOM_WM_DELETE_WINDOW;
268 _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_TAKE_FOCUS] =
269 ECORE_X_ATOM_WM_TAKE_FOCUS;
270 _ecore_xcb_atoms_wm_protocol[ECORE_X_NET_WM_PROTOCOL_PING] =
271 ECORE_X_ATOM_NET_WM_PING;
272 _ecore_xcb_atoms_wm_protocol[ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST] =
273 ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
274
275 /* setup selection */
276 _ecore_xcb_selection_init();
277
278 /* setup dnd */
279 _ecore_xcb_dnd_init();
280
281 _ecore_xcb_idle_enterer =
282 ecore_idle_enterer_add(_ecore_xcb_idle_enter, NULL);
283
284 return _ecore_xcb_init_count;
285}
286
287/**
288 * Shuts down the Ecore X library.
289 *
290 * In shutting down the library, the X display connection is terminated
291 * and any event handlers for it are removed.
292 *
293 * @return The number of times the library has been initialized without
294 * being shut down.
295 * @ingroup Ecore_X_Init_Group
296 */
297EAPI int
298ecore_x_shutdown(void)
299{
300 return _ecore_xcb_shutdown(EINA_TRUE);
301}
302
303/**
304 * Shuts down the Ecore X library.
305 *
306 * As ecore_x_shutdown, except do not close Display, only connection.
307 *
308 * @ingroup Ecore_X_Init_Group
309 */
310EAPI int
311ecore_x_disconnect(void)
312{
313 return _ecore_xcb_shutdown(EINA_FALSE);
314}
315
316/**
317 * @defgroup Ecore_X_Flush_Group X Synchronization Functions
318 *
319 * Functions that ensure that all commands that have been issued by the
320 * Ecore X library have been sent to the server.
321 */
322
323/**
324 * Sends all X commands in the X Display buffer.
325 * @ingroup Ecore_X_Flush_Group
326 */
327EAPI void
328ecore_x_flush(void)
329{
330// LOGFN(__FILE__, __LINE__, __FUNCTION__);
331
332 CHECK_XCB_CONN;
333 xcb_flush(_ecore_xcb_conn);
334}
335
336/**
337 * Retrieves the Ecore_X_Screen handle used for the current X connection.
338 * @return The current default screen.
339 * @ingroup Ecore_X_Display_Attr_Group
340 */
341EAPI Ecore_X_Screen *
342ecore_x_default_screen_get(void)
343{
344 LOGFN(__FILE__, __LINE__, __FUNCTION__);
345
346 return (Ecore_X_Screen *)_ecore_xcb_screen;
347}
348
349EAPI Ecore_X_Connection *
350ecore_x_connection_get(void)
351{
352 LOGFN(__FILE__, __LINE__, __FUNCTION__);
353
354 CHECK_XCB_CONN;
355 return (Ecore_X_Connection *)_ecore_xcb_conn;
356}
357
358/**
359 * Return the last event time
360 */
361EAPI Ecore_X_Time
362ecore_x_current_time_get(void)
363{
364 return _ecore_xcb_events_last_time_get();
365}
366
367/**
368 * Flushes the command buffer and waits until all requests have been
369 * processed by the server.
370 * @ingroup Ecore_X_Flush_Group
371 */
372EAPI void
373ecore_x_sync(void)
374{
375 LOGFN(__FILE__, __LINE__, __FUNCTION__);
376
377 CHECK_XCB_CONN;
378 free(xcb_get_input_focus_reply(_ecore_xcb_conn,
379 xcb_get_input_focus_unchecked(_ecore_xcb_conn),
380 NULL));
381}
382
383EAPI void
384ecore_x_grab(void)
385{
386 LOGFN(__FILE__, __LINE__, __FUNCTION__);
387
388 CHECK_XCB_CONN;
389 _ecore_xcb_grab_count++;
390 if (_ecore_xcb_grab_count == 1)
391 xcb_grab_server(_ecore_xcb_conn);
392}
393
394EAPI void
395ecore_x_ungrab(void)
396{
397 LOGFN(__FILE__, __LINE__, __FUNCTION__);
398
399 CHECK_XCB_CONN;
400 _ecore_xcb_grab_count--;
401 if (_ecore_xcb_grab_count < 0) _ecore_xcb_grab_count = 0;
402 if (_ecore_xcb_grab_count == 0)
403 xcb_ungrab_server(_ecore_xcb_conn);
404}
405
406/**
407 * Send client message with given type and format 32.
408 *
409 * @param win The window the message is sent to.
410 * @param type The client message type.
411 * @param d0 The client message data item 1
412 * @param d1 The client message data item 2
413 * @param d2 The client message data item 3
414 * @param d3 The client message data item 4
415 * @param d4 The client message data item 5
416 *
417 * @return EINA_TRUE on success EINA_FALSE otherwise.
418 */
419EAPI Eina_Bool
420ecore_x_client_message32_send(Ecore_X_Window win, Ecore_X_Atom type,
421 Ecore_X_Event_Mask mask,
422 long d0, long d1, long d2, long d3, long d4)
423{
424 xcb_client_message_event_t ev;
425 xcb_void_cookie_t cookie;
426 xcb_generic_error_t *err;
427
428 LOGFN(__FILE__, __LINE__, __FUNCTION__);
429 CHECK_XCB_CONN;
430
431 memset(&ev, 0, sizeof(xcb_client_message_event_t));
432
433 ev.response_type = XCB_CLIENT_MESSAGE;
434 ev.format = 32;
435 ev.window = win;
436 ev.type = type;
437 ev.data.data32[0] = (uint32_t)d0;
438 ev.data.data32[1] = (uint32_t)d1;
439 ev.data.data32[2] = (uint32_t)d2;
440 ev.data.data32[3] = (uint32_t)d3;
441 ev.data.data32[4] = (uint32_t)d4;
442
443 cookie = xcb_send_event(_ecore_xcb_conn, 0, win, mask, (const char *)&ev);
444
445 err = xcb_request_check(_ecore_xcb_conn, cookie);
446 if (err)
447 {
448 DBG("Problem Sending Event");
449 DBG("\tType: %d", type);
450 DBG("\tWin: %d", win);
451 _ecore_xcb_error_handle(err);
452 free(err);
453 return EINA_FALSE;
454 }
455
456 return EINA_TRUE;
457}
458
459/**
460 * Send client message with given type and format 8.
461 *
462 * @param win The window the message is sent to.
463 * @param type The client message type.
464 * @param data Data to be sent.
465 * @param len Number of data bytes, max 20.
466 *
467 * @return EINA_TRUE on success EINA_FALSE otherwise.
468 */
469EAPI Eina_Bool
470ecore_x_client_message8_send(Ecore_X_Window win, Ecore_X_Atom type,
471 const void *data, int len)
472{
473 xcb_client_message_event_t ev;
474 xcb_void_cookie_t cookie;
475 xcb_generic_error_t *err;
476
477 LOGFN(__FILE__, __LINE__, __FUNCTION__);
478 CHECK_XCB_CONN;
479
480 memset(&ev, 0, sizeof(xcb_client_message_event_t));
481
482 ev.response_type = XCB_CLIENT_MESSAGE;
483 ev.format = 8;
484 ev.window = win;
485 ev.type = type;
486 if (len > 20) len = 20;
487 memcpy(ev.data.data8, data, len);
488 memset(ev.data.data8 + len, 0, 20 - len);
489
490 cookie = xcb_send_event(_ecore_xcb_conn, 0, win,
491 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
492
493 err = xcb_request_check(_ecore_xcb_conn, cookie);
494 if (err)
495 {
496 DBG("Problem Sending Event");
497 DBG("\tType: %d", type);
498 DBG("\tWin: %d", win);
499 _ecore_xcb_error_handle(err);
500 free(err);
501 return EINA_FALSE;
502 }
503
504 return EINA_TRUE;
505}
506
507EAPI Eina_Bool
508ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b)
509{
510 xcb_translate_coordinates_cookie_t cookie;
511 xcb_translate_coordinates_reply_t *reply;
512 xcb_button_press_event_t ev;
513 xcb_void_cookie_t vcookie;
514 xcb_generic_error_t *err;
515 Ecore_X_Window root = 0;
516
517 LOGFN(__FILE__, __LINE__, __FUNCTION__);
518 CHECK_XCB_CONN;
519
520 root = ecore_x_window_root_get(win);
521 cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y);
522 reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL);
523 if (!reply) return EINA_FALSE;
524
525 memset(&ev, 0, sizeof(xcb_button_press_event_t));
526
527 ev.response_type = XCB_BUTTON_PRESS;
528 ev.event = win;
529 ev.child = win;
530 ev.root = root;
531 ev.event_x = x;
532 ev.event_y = y;
533 ev.same_screen = 1;
534 ev.state = 1 << b;
535 ev.detail = b; // xcb uses detail for button
536 ev.root_x = reply->dst_x;
537 ev.root_y = reply->dst_y;
538 ev.time = ecore_x_current_time_get();
539 free(reply);
540
541 vcookie = xcb_send_event(_ecore_xcb_conn, 1, win,
542 XCB_EVENT_MASK_BUTTON_PRESS, (const char *)&ev);
543
544 err = xcb_request_check(_ecore_xcb_conn, vcookie);
545 if (err)
546 {
547 _ecore_xcb_error_handle(err);
548 free(err);
549 return EINA_FALSE;
550 }
551
552 return EINA_TRUE;
553}
554
555EAPI Eina_Bool
556ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b)
557{
558 xcb_translate_coordinates_cookie_t cookie;
559 xcb_translate_coordinates_reply_t *reply;
560 xcb_button_release_event_t ev;
561 xcb_void_cookie_t vcookie;
562 xcb_generic_error_t *err;
563 Ecore_X_Window root = 0;
564
565 LOGFN(__FILE__, __LINE__, __FUNCTION__);
566 CHECK_XCB_CONN;
567
568 root = ecore_x_window_root_get(win);
569 cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y);
570 reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL);
571 if (!reply) return EINA_FALSE;
572
573 memset(&ev, 0, sizeof(xcb_button_release_event_t));
574
575 ev.response_type = XCB_BUTTON_RELEASE;
576 ev.event = win;
577 ev.child = win;
578 ev.root = root;
579 ev.event_x = x;
580 ev.event_y = y;
581 ev.same_screen = 1;
582 ev.state = 0;
583 ev.root_x = reply->dst_x;
584 ev.root_y = reply->dst_y;
585 ev.detail = b; // xcb uses detail for button
586 ev.time = ecore_x_current_time_get();
587 free(reply);
588
589 vcookie = xcb_send_event(_ecore_xcb_conn, 1, win,
590 XCB_EVENT_MASK_BUTTON_RELEASE, (const char *)&ev);
591
592 err = xcb_request_check(_ecore_xcb_conn, vcookie);
593 if (err)
594 {
595 _ecore_xcb_error_handle(err);
596 free(err);
597 return EINA_FALSE;
598 }
599
600 return EINA_TRUE;
601}
602
603EAPI Eina_Bool
604ecore_x_mouse_move_send(Ecore_X_Window win, int x, int y)
605{
606 xcb_translate_coordinates_cookie_t cookie;
607 xcb_translate_coordinates_reply_t *reply;
608 xcb_motion_notify_event_t ev;
609 xcb_void_cookie_t vcookie;
610 xcb_generic_error_t *err;
611 Ecore_X_Window root = 0;
612
613 LOGFN(__FILE__, __LINE__, __FUNCTION__);
614 CHECK_XCB_CONN;
615
616 root = ecore_x_window_root_get(win);
617 cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y);
618 reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL);
619 if (!reply) return EINA_FALSE;
620
621 memset(&ev, 0, sizeof(xcb_motion_notify_event_t));
622
623 ev.response_type = XCB_MOTION_NOTIFY;
624 ev.event = win;
625 ev.child = win;
626 ev.root = root;
627 ev.event_x = x;
628 ev.event_y = y;
629 ev.same_screen = 1;
630 ev.state = 0;
631 ev.detail = 0; // xcb uses 'detail' for is_hint
632 ev.root_x = reply->dst_x;
633 ev.root_y = reply->dst_y;
634 ev.time = ecore_x_current_time_get();
635 free(reply);
636
637 vcookie = xcb_send_event(_ecore_xcb_conn, 1, win,
638 XCB_EVENT_MASK_POINTER_MOTION, (const char *)&ev);
639
640 err = xcb_request_check(_ecore_xcb_conn, vcookie);
641 if (err)
642 {
643 _ecore_xcb_error_handle(err);
644 free(err);
645 return EINA_FALSE;
646 }
647
648 return EINA_TRUE;
649}
650
651EAPI Eina_Bool
652ecore_x_keyboard_grab(Ecore_X_Window win)
653{
654 xcb_grab_keyboard_cookie_t cookie;
655 xcb_grab_keyboard_reply_t *reply;
656
657 LOGFN(__FILE__, __LINE__, __FUNCTION__);
658 CHECK_XCB_CONN;
659
660 cookie =
661 xcb_grab_keyboard_unchecked(_ecore_xcb_conn, 0, win, XCB_CURRENT_TIME,
662 XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
663 reply = xcb_grab_keyboard_reply(_ecore_xcb_conn, cookie, NULL);
664 if (!reply) return EINA_FALSE;
665 free(reply);
666 return EINA_TRUE;
667}
668
669EAPI void
670ecore_x_keyboard_ungrab(void)
671{
672 LOGFN(__FILE__, __LINE__, __FUNCTION__);
673 CHECK_XCB_CONN;
674
675 xcb_ungrab_keyboard(_ecore_xcb_conn, XCB_CURRENT_TIME);
676}
677
678EAPI void
679ecore_x_pointer_xy_get(Ecore_X_Window win, int *x, int *y)
680{
681 xcb_query_pointer_cookie_t cookie;
682 xcb_query_pointer_reply_t *reply;
683
684// LOGFN(__FILE__, __LINE__, __FUNCTION__);
685 CHECK_XCB_CONN;
686
687// if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
688
689 if (x) *x = -1;
690 if (y) *y = -1;
691
692 cookie = xcb_query_pointer_unchecked(_ecore_xcb_conn, win);
693 reply = xcb_query_pointer_reply(_ecore_xcb_conn, cookie, NULL);
694 if (!reply) return;
695 if (x) *x = reply->win_x;
696 if (y) *y = reply->win_y;
697 free(reply);
698}
699
700EAPI Eina_Bool
701ecore_x_pointer_control_set(int accel_num, int accel_denom, int threshold)
702{
703 xcb_void_cookie_t vcookie;
704 xcb_generic_error_t *err;
705
706 LOGFN(__FILE__, __LINE__, __FUNCTION__);
707 CHECK_XCB_CONN;
708
709 vcookie =
710 xcb_change_pointer_control(_ecore_xcb_conn,
711 accel_num, accel_denom, threshold, 1, 1);
712 err = xcb_request_check(_ecore_xcb_conn, vcookie);
713 if (err)
714 {
715 _ecore_xcb_error_handle(err);
716 free(err);
717 return EINA_FALSE;
718 }
719
720 return EINA_TRUE;
721}
722
723EAPI Eina_Bool
724ecore_x_pointer_control_get(int *accel_num, int *accel_denom, int *threshold)
725{
726 xcb_get_pointer_control_cookie_t cookie;
727 xcb_get_pointer_control_reply_t *reply;
728
729 LOGFN(__FILE__, __LINE__, __FUNCTION__);
730 CHECK_XCB_CONN;
731
732 if (accel_num) *accel_num = 0;
733 if (accel_denom) *accel_denom = 0;
734 if (threshold) *threshold = 0;
735
736 cookie = xcb_get_pointer_control_unchecked(_ecore_xcb_conn);
737 reply = xcb_get_pointer_control_reply(_ecore_xcb_conn, cookie, NULL);
738 if (!reply) return EINA_FALSE;
739
740 if (accel_num) *accel_num = reply->acceleration_numerator;
741 if (accel_denom) *accel_denom = reply->acceleration_denominator;
742 if (threshold) *threshold = reply->threshold;
743 free(reply);
744
745 return EINA_TRUE;
746}
747
748EAPI Eina_Bool
749ecore_x_pointer_mapping_set(unsigned char *map, int nmap)
750{
751 xcb_set_pointer_mapping_cookie_t cookie;
752 xcb_set_pointer_mapping_reply_t *reply;
753 Eina_Bool ret = EINA_FALSE;
754
755 LOGFN(__FILE__, __LINE__, __FUNCTION__);
756 CHECK_XCB_CONN;
757
758 cookie = xcb_set_pointer_mapping_unchecked(_ecore_xcb_conn, nmap, map);
759 reply = xcb_set_pointer_mapping_reply(_ecore_xcb_conn, cookie, NULL);
760 if (!reply) return EINA_FALSE;
761 ret =
762 (reply->status == XCB_MAPPING_STATUS_SUCCESS) ? EINA_TRUE : EINA_FALSE;
763
764 free(reply);
765 return ret;
766}
767
768EAPI Eina_Bool
769ecore_x_pointer_mapping_get(unsigned char *map, int nmap)
770{
771 xcb_get_pointer_mapping_cookie_t cookie;
772 xcb_get_pointer_mapping_reply_t *reply;
773
774 LOGFN(__FILE__, __LINE__, __FUNCTION__);
775 CHECK_XCB_CONN;
776
777 if (map) *map = 0;
778 nmap = 0;
779
780 cookie = xcb_get_pointer_mapping_unchecked(_ecore_xcb_conn);
781 reply = xcb_get_pointer_mapping_reply(_ecore_xcb_conn, cookie, NULL);
782 if (!reply) return EINA_FALSE;
783
784 nmap = xcb_get_pointer_mapping_map_length(reply);
785 if (nmap <= 0)
786 {
787 free(reply);
788 return EINA_FALSE;
789 }
790
791 if (map)
792 {
793 uint8_t *tmp;
794 int i = 0;
795
796 tmp = xcb_get_pointer_mapping_map(reply);
797 for (i = 0; i < nmap; i++)
798 map[i] = tmp[i];
799 }
800
801 free(reply);
802 return EINA_TRUE;
803}
804
805EAPI Eina_Bool
806ecore_x_pointer_grab(Ecore_X_Window win)
807{
808 xcb_grab_pointer_cookie_t cookie;
809 xcb_grab_pointer_reply_t *reply;
810 uint16_t mask;
811 Eina_Bool ret = EINA_FALSE;
812
813 LOGFN(__FILE__, __LINE__, __FUNCTION__);
814 CHECK_XCB_CONN;
815
816 mask = (XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
817 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
818 XCB_EVENT_MASK_POINTER_MOTION);
819
820 cookie = xcb_grab_pointer_unchecked(_ecore_xcb_conn, 0, win, mask,
821 XCB_GRAB_MODE_ASYNC,
822 XCB_GRAB_MODE_ASYNC,
823 XCB_NONE, XCB_NONE, XCB_CURRENT_TIME);
824 reply = xcb_grab_pointer_reply(_ecore_xcb_conn, cookie, NULL);
825 if (!reply) return EINA_FALSE;
826
827 ret = (reply->status == XCB_GRAB_STATUS_SUCCESS) ? EINA_TRUE : EINA_FALSE;
828
829 free(reply);
830 return ret;
831}
832
833EAPI Eina_Bool
834ecore_x_pointer_confine_grab(Ecore_X_Window win)
835{
836 xcb_grab_pointer_cookie_t cookie;
837 xcb_grab_pointer_reply_t *reply;
838 uint16_t mask;
839 Eina_Bool ret = EINA_FALSE;
840
841 LOGFN(__FILE__, __LINE__, __FUNCTION__);
842 CHECK_XCB_CONN;
843
844 mask = (XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
845 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
846 XCB_EVENT_MASK_POINTER_MOTION);
847
848 cookie = xcb_grab_pointer_unchecked(_ecore_xcb_conn, 0, win, mask,
849 XCB_GRAB_MODE_ASYNC,
850 XCB_GRAB_MODE_ASYNC,
851 win, XCB_NONE, XCB_CURRENT_TIME);
852 reply = xcb_grab_pointer_reply(_ecore_xcb_conn, cookie, NULL);
853 if (!reply) return EINA_FALSE;
854
855 ret = (reply->status == XCB_GRAB_STATUS_SUCCESS) ? EINA_TRUE : EINA_FALSE;
856
857 free(reply);
858 return ret;
859}
860
861EAPI void
862ecore_x_pointer_ungrab(void)
863{
864 LOGFN(__FILE__, __LINE__, __FUNCTION__);
865 CHECK_XCB_CONN;
866
867 xcb_ungrab_pointer(_ecore_xcb_conn, XCB_CURRENT_TIME);
868}
869
870EAPI Eina_Bool
871ecore_x_pointer_warp(Ecore_X_Window win, int x, int y)
872{
873 xcb_void_cookie_t vcookie;
874 xcb_generic_error_t *err;
875
876 LOGFN(__FILE__, __LINE__, __FUNCTION__);
877 CHECK_XCB_CONN;
878
879 vcookie =
880 xcb_warp_pointer_checked(_ecore_xcb_conn, XCB_NONE, win, 0, 0, 0, 0, x, y);
881 err = xcb_request_check(_ecore_xcb_conn, vcookie);
882 if (err)
883 {
884 _ecore_xcb_error_handle(err);
885 free(err);
886 return EINA_FALSE;
887 }
888
889 return EINA_TRUE;
890}
891
892/**
893 * Invoke the standard system beep to alert users
894 *
895 * @param percent The volume at which the bell rings. Must be in the range
896 * [-100,+100]. If percent >= 0, the final volume will be:
897 * base - [(base * percent) / 100] + percent
898 * Otherwise, it's calculated as:
899 * base + [(base * percent) / 100]
900 * where @c base is the bell's base volume as set by XChangeKeyboardControl(3).
901 *
902 * @returns EINA_TRUE on success, EINA_FALSE otherwise.
903 */
904EAPI Eina_Bool
905ecore_x_bell(int percent)
906{
907 xcb_void_cookie_t cookie;
908 xcb_generic_error_t *err;
909
910 CHECK_XCB_CONN;
911
912 // FIXME: Use unchecked version after development is ironed out
913 cookie = xcb_bell_checked(_ecore_xcb_conn, percent);
914 err = xcb_request_check(_ecore_xcb_conn, cookie);
915 if (err)
916 {
917 _ecore_xcb_error_handle(err);
918 free(err);
919 return EINA_FALSE;
920 }
921
922 return EINA_TRUE;
923}
924
925EAPI void
926ecore_x_display_size_get(Ecore_X_Display *dsp __UNUSED__, int *w, int *h)
927{
928 xcb_screen_t *screen;
929
930 LOGFN(__FILE__, __LINE__, __FUNCTION__);
931 CHECK_XCB_CONN;
932
933 /* grab the default screen */
934 screen = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).data;
935 if (w) *w = screen->width_in_pixels;
936 if (h) *h = screen->height_in_pixels;
937}
938
939EAPI unsigned long
940ecore_x_display_black_pixel_get(Ecore_X_Display *dsp __UNUSED__)
941{
942 xcb_screen_t *screen;
943
944 LOGFN(__FILE__, __LINE__, __FUNCTION__);
945 CHECK_XCB_CONN;
946
947 /* grab the default screen */
948 screen = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).data;
949 return screen->black_pixel;
950}
951
952EAPI unsigned long
953ecore_x_display_white_pixel_get(Ecore_X_Display *dsp __UNUSED__)
954{
955 xcb_screen_t *screen;
956
957 LOGFN(__FILE__, __LINE__, __FUNCTION__);
958 CHECK_XCB_CONN;
959
960 /* grab the default screen */
961 screen = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).data;
962 return screen->white_pixel;
963}
964
965EAPI void
966ecore_x_pointer_last_xy_get(int *x, int *y)
967{
968 LOGFN(__FILE__, __LINE__, __FUNCTION__);
969
970 if (x) *x = _ecore_xcb_event_last_root_x;
971 if (y) *y = _ecore_xcb_event_last_root_y;
972}
973
974EAPI void
975ecore_x_focus_reset(void)
976{
977 LOGFN(__FILE__, __LINE__, __FUNCTION__);
978 CHECK_XCB_CONN;
979
980 xcb_set_input_focus(_ecore_xcb_conn, XCB_INPUT_FOCUS_POINTER_ROOT,
981 ((xcb_screen_t *)_ecore_xcb_screen)->root,
982 XCB_CURRENT_TIME);
983// ecore_x_flush();
984}
985
986EAPI void
987ecore_x_events_allow_all(void)
988{
989 LOGFN(__FILE__, __LINE__, __FUNCTION__);
990 CHECK_XCB_CONN;
991
992 xcb_allow_events(_ecore_xcb_conn, XCB_ALLOW_ASYNC_BOTH, XCB_CURRENT_TIME);
993// ecore_x_flush();
994}
995
996/**
997 * Kill a specific client
998 *
999 * You can kill a specific client owning window @p win
1000 *
1001 * @param win Window of the client to be killed
1002 */
1003EAPI void
1004ecore_x_kill(Ecore_X_Window win)
1005{
1006 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1007 CHECK_XCB_CONN;
1008
1009 xcb_kill_client(_ecore_xcb_conn, win);
1010// ecore_x_flush();
1011}
1012
1013/**
1014 * Kill all clients with subwindows under a given window.
1015 *
1016 * You can kill all clients connected to the X server by using
1017 * @ref ecore_x_window_root_list to get a list of root windows, and
1018 * then passing each root window to this function.
1019 *
1020 * @param root The window whose children will be killed.
1021 */
1022EAPI void
1023ecore_x_killall(Ecore_X_Window root)
1024{
1025 int screens = 0, i = 0;
1026
1027 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1028 CHECK_XCB_CONN;
1029
1030 ecore_x_grab();
1031
1032 screens = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).rem;
1033
1034 /* Traverse window tree starting from root, and drag each
1035 * before the firing squad */
1036 for (i = 0; i < screens; ++i)
1037 {
1038 xcb_query_tree_cookie_t cookie;
1039 xcb_query_tree_reply_t *reply;
1040
1041 cookie = xcb_query_tree_unchecked(_ecore_xcb_conn, root);
1042 reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL);
1043 if (reply)
1044 {
1045 xcb_window_t *wins = NULL;
1046 int tree_c_len, j = 0;
1047
1048 wins = xcb_query_tree_children(reply);
1049 tree_c_len = xcb_query_tree_children_length(reply);
1050 for (j = 0; j < tree_c_len; j++)
1051 xcb_kill_client(_ecore_xcb_conn, wins[j]);
1052 free(reply);
1053 }
1054 }
1055
1056 ecore_x_ungrab();
1057 ecore_x_sync(); // needed
1058}
1059
1060/**
1061 * Return the screen DPI
1062 *
1063 * This is a simplistic call to get DPI. It does not account for differing
1064 * DPI in the x amd y axes nor does it account for multihead or xinerama and
1065 * xrander where different parts of the screen may have differen DPI etc.
1066 *
1067 * @return the general screen DPI (dots/pixels per inch).
1068 */
1069EAPI int
1070ecore_x_dpi_get(void)
1071{
1072 uint16_t mw = 0, w = 0;
1073
1074 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1075
1076 mw = ((xcb_screen_t *)_ecore_xcb_screen)->width_in_millimeters;
1077 if (mw <= 0) return 75;
1078 w = ((xcb_screen_t *)_ecore_xcb_screen)->width_in_pixels;
1079 return (((w * 254) / mw) + 5) / 10;
1080}
1081
1082/**
1083 * @defgroup Ecore_X_Display_Attr_Group X Display Attributes
1084 *
1085 * Functions that set and retrieve X display attributes.
1086 */
1087
1088/**
1089 * Retrieves the Ecore_X_Display handle used for the current X connection.
1090 * @return The current X display.
1091 * @ingroup Ecore_X_Display_Attr_Group
1092 */
1093EAPI Ecore_X_Display *
1094ecore_x_display_get(void)
1095{
1096 char *gl = NULL;
1097
1098 CHECK_XCB_CONN;
1099
1100 /* if we have the 'dont use xlib' env var, then we are not using
1101 * XLib and thus cannot return a real XDisplay.
1102 *
1103 * NB: This may break EFL in some places and needs lots of testing !!! */
1104 if ((gl = getenv("ECORE_X_NO_XLIB")))
1105 return (Ecore_X_Display *)_ecore_xcb_conn;
1106 else /* we can safely return an XDisplay var */
1107 return (Ecore_X_Display *)_ecore_xcb_display;
1108}
1109
1110/**
1111 * Retrieves the X display file descriptor.
1112 * @return The current X display file descriptor.
1113 * @ingroup Ecore_X_Display_Attr_Group
1114 */
1115EAPI int
1116ecore_x_fd_get(void)
1117{
1118 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1119 CHECK_XCB_CONN;
1120 return xcb_get_file_descriptor(_ecore_xcb_conn);
1121}
1122
1123EAPI void
1124ecore_x_passive_grab_replay_func_set(Eina_Bool (*func)(void *data, int type, void *event),
1125 void *data)
1126{
1127 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1128
1129 _ecore_xcb_window_grab_replay_func = func;
1130 _ecore_xcb_window_grab_replay_data = data;
1131}
1132
1133/**
1134 * Retrieves the size of an Ecore_X_Screen.
1135 * @param screen the handle to the screen to query.
1136 * @param w where to return the width. May be NULL. Returns 0 on errors.
1137 * @param h where to return the height. May be NULL. Returns 0 on errors.
1138 * @ingroup Ecore_X_Display_Attr_Group
1139 * @see ecore_x_default_screen_get()
1140 *
1141 * @since 1.1
1142 */
1143EAPI void
1144ecore_x_screen_size_get(const Ecore_X_Screen *screen, int *w, int *h)
1145{
1146 xcb_screen_t *s;
1147
1148 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1149
1150 if (w) *w = 0;
1151 if (h) *h = 0;
1152 if (!(s = (xcb_screen_t *)screen)) return;
1153 if (w) *w = s->width_in_pixels;
1154 if (h) *h = s->height_in_pixels;
1155}
1156
1157/**
1158 * Retrieves the count of screens.
1159 *
1160 * @return The count of screens.
1161 * @ingroup Ecore_X_Display_Attr_Group
1162 *
1163 * @since 1.1
1164 */
1165EAPI int
1166ecore_x_screen_count_get(void)
1167{
1168 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1169 CHECK_XCB_CONN;
1170
1171 return xcb_setup_roots_length(xcb_get_setup(_ecore_xcb_conn));
1172}
1173
1174/**
1175 * Retrieves the index number of the given screen.
1176 *
1177 * @return The index number of the screen.
1178 * @ingroup Ecore_X_Display_Attr_Group
1179 *
1180 * @since 1.1
1181 */
1182EAPI int
1183ecore_x_screen_index_get(const Ecore_X_Screen *screen)
1184{
1185 xcb_screen_iterator_t iter;
1186 int i = 0;
1187
1188 CHECK_XCB_CONN;
1189
1190 iter =
1191 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1192 for (; iter.rem; xcb_screen_next(&iter))
1193 {
1194 if (iter.data == (xcb_screen_t *)screen)
1195 return i;
1196 i++;
1197 }
1198
1199 return 0;
1200}
1201
1202/**
1203 * Retrieves the screen based on index number.
1204 *
1205 * @return The Ecore_X_Screen at this index.
1206 * @ingroup Ecore_X_Display_Attr_Group
1207 *
1208 * @since 1.1
1209 */
1210EAPI Ecore_X_Screen *
1211ecore_x_screen_get(int index)
1212{
1213 xcb_screen_iterator_t iter;
1214 int i = 0;
1215
1216 CHECK_XCB_CONN;
1217
1218 iter =
1219 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1220 for (i = 0; iter.rem; xcb_screen_next(&iter), i++)
1221 if (i == index) return iter.data;
1222
1223 return NULL;
1224}
1225
1226EAPI unsigned int
1227ecore_x_visual_id_get(Ecore_X_Visual visual)
1228{
1229 return ((xcb_visualtype_t *)visual)->visual_id;
1230}
1231
1232/**
1233 * Retrieve the default Visual.
1234 *
1235 * @param disp The Display to get the Default Visual from
1236 * @param screen The Screen.
1237 *
1238 * @return The default visual.
1239 * @since 1.1.0
1240 */
1241EAPI Ecore_X_Visual
1242ecore_x_default_visual_get(Ecore_X_Display *disp __UNUSED__, Ecore_X_Screen *screen)
1243{
1244 xcb_screen_t *s;
1245 xcb_depth_iterator_t diter;
1246 xcb_visualtype_iterator_t viter;
1247
1248 CHECK_XCB_CONN;
1249
1250 s = (xcb_screen_t *)screen;
1251 diter = xcb_screen_allowed_depths_iterator(s);
1252 for (; diter.rem; xcb_depth_next(&diter))
1253 {
1254 viter = xcb_depth_visuals_iterator(diter.data);
1255 for (; viter.rem; xcb_visualtype_next(&viter))
1256 {
1257 if (viter.data->visual_id == s->root_visual)
1258 return viter.data;
1259 }
1260 }
1261 return 0;
1262}
1263
1264/**
1265 * Retrieve the default Colormap.
1266 *
1267 * @param disp The Display to get the Default Colormap from
1268 * @param screen The Screen.
1269 *
1270 * @return The default colormap.
1271 * @since 1.1.0
1272 */
1273EAPI Ecore_X_Colormap
1274ecore_x_default_colormap_get(Ecore_X_Display *disp __UNUSED__, Ecore_X_Screen *screen)
1275{
1276 xcb_screen_t *s;
1277
1278 s = (xcb_screen_t *)screen;
1279 return s->default_colormap;
1280}
1281
1282/**
1283 * Retrieve the default depth.
1284 *
1285 * @param disp The Display to get the Default Depth from
1286 * @param screen The Screen.
1287 *
1288 * @return The default depth.
1289 * @since 1.1.0
1290 */
1291EAPI int
1292ecore_x_default_depth_get(Ecore_X_Display *disp __UNUSED__, Ecore_X_Screen *screen)
1293{
1294 xcb_screen_t *s;
1295
1296 s = (xcb_screen_t *)screen;
1297 return s->root_depth;
1298}
1299
1300/**
1301 * Sets the timeout for a double and triple clicks to be flagged.
1302 *
1303 * This sets the time between clicks before the double_click flag is
1304 * set in a button down event. If 3 clicks occur within double this
1305 * time, the triple_click flag is also set.
1306 *
1307 * @param t The time in seconds
1308 * @ingroup Ecore_X_Display_Attr_Group
1309 */
1310EAPI void
1311ecore_x_double_click_time_set(double t)
1312{
1313 if (t < 0.0) t = 0.0;
1314 _ecore_xcb_double_click_time = t;
1315}
1316
1317/**
1318 * Retrieves the double and triple click flag timeout.
1319 *
1320 * See @ref ecore_x_double_click_time_set for more information.
1321 *
1322 * @return The timeout for double clicks in seconds.
1323 * @ingroup Ecore_X_Display_Attr_Group
1324 */
1325EAPI double
1326ecore_x_double_click_time_get(void)
1327{
1328 return _ecore_xcb_double_click_time;
1329}
1330
1331/* local function prototypes */
1332static int
1333_ecore_xcb_shutdown(Eina_Bool close_display)
1334{
1335 if (--_ecore_xcb_init_count != 0)
1336 return _ecore_xcb_init_count;
1337
1338 if (!_ecore_xcb_conn)
1339 return _ecore_xcb_init_count;
1340
1341 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1342 CHECK_XCB_CONN;
1343
1344 ecore_idle_enterer_del(_ecore_xcb_idle_enterer);
1345 _ecore_xcb_idle_enterer = NULL;
1346
1347 if (_ecore_xcb_fd_handler)
1348 ecore_main_fd_handler_del(_ecore_xcb_fd_handler);
1349
1350 /* disconnect from display server */
1351 if (close_display)
1352 xcb_disconnect(_ecore_xcb_conn);
1353 else
1354 {
1355 close(xcb_get_file_descriptor(_ecore_xcb_conn));
1356 _ecore_xcb_conn = NULL;
1357 }
1358
1359 /* shutdown events */
1360 _ecore_xcb_events_shutdown();
1361
1362 /* shutdown input extension */
1363 _ecore_xcb_input_shutdown();
1364
1365 /* shutdown gesture extension */
1366 _ecore_xcb_gesture_shutdown();
1367
1368 /* shutdown selection */
1369 _ecore_xcb_selection_shutdown();
1370
1371 /* shutdown dnd */
1372 _ecore_xcb_dnd_shutdown();
1373
1374 /* shutdown netwm */
1375 ecore_x_netwm_shutdown();
1376
1377 /* shutdown keymap */
1378 _ecore_xcb_keymap_shutdown();
1379
1380 /* shutdown ecore_event */
1381 ecore_event_shutdown();
1382
1383 /* shutdown ecore */
1384 ecore_shutdown();
1385
1386 /* unregister log domain */
1387 eina_log_domain_unregister(_ecore_xcb_log_dom);
1388 _ecore_xcb_log_dom = -1;
1389
1390 /* shutdown eina */
1391 eina_shutdown();
1392
1393 return _ecore_xcb_init_count;
1394}
1395
1396static Eina_Bool
1397_ecore_xcb_fd_handle(void *data, Ecore_Fd_Handler *hdlr __UNUSED__)
1398{
1399 xcb_connection_t *conn;
1400 xcb_generic_event_t *ev = NULL;
1401
1402 conn = (xcb_connection_t *)data;
1403
1404 if (_ecore_xcb_event_buffered)
1405 {
1406 _ecore_xcb_events_handle(_ecore_xcb_event_buffered);
1407 free(_ecore_xcb_event_buffered);
1408 _ecore_xcb_event_buffered = NULL;
1409 }
1410
1411// xcb_flush(conn);
1412
1413 while ((ev = xcb_poll_for_event(conn)))
1414 {
1415 /* NB: Ecore Xlib uses filterevent for xim, but xcb does not support
1416 * xim, so no need for it here */
1417
1418 /* check for errors first */
1419 if (xcb_connection_has_error(conn))
1420 {
1421 xcb_generic_error_t *err;
1422
1423 err = (xcb_generic_error_t *)ev;
1424 _ecore_xcb_io_error_handle(err);
1425 }
1426 else
1427 {
1428 /* FIXME: Filter event for XIM */
1429 _ecore_xcb_events_handle(ev);
1430 free(ev);
1431 }
1432 }
1433
1434 return ECORE_CALLBACK_RENEW;
1435}
1436
1437static Eina_Bool
1438_ecore_xcb_fd_handle_buff(void *data, Ecore_Fd_Handler *hdlr __UNUSED__)
1439{
1440 xcb_connection_t *conn;
1441 xcb_generic_event_t *ev = NULL;
1442
1443 conn = (xcb_connection_t *)data;
1444 ev = xcb_poll_for_event(conn);
1445 if (ev)
1446 {
1447 /* check for errors first */
1448 if (xcb_connection_has_error(conn))
1449 {
1450 xcb_generic_error_t *err;
1451
1452 err = (xcb_generic_error_t *)ev;
1453 _ecore_xcb_io_error_handle(err);
1454 return ECORE_CALLBACK_CANCEL;
1455 }
1456 _ecore_xcb_event_buffered = ev;
1457 return ECORE_CALLBACK_RENEW;
1458 }
1459 return ECORE_CALLBACK_CANCEL;
1460}
1461
1462static Eina_Bool
1463_ecore_xcb_idle_enter(void *data __UNUSED__)
1464{
1465 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1466 CHECK_XCB_CONN;
1467
1468 xcb_flush(_ecore_xcb_conn);
1469 return ECORE_CALLBACK_RENEW;
1470}
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_atoms.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_atoms.c
deleted file mode 100644
index ec2daaf..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_atoms.c
+++ /dev/null
@@ -1,421 +0,0 @@
1#include "ecore_xcb_private.h"
2#include "ecore_x_atoms_decl.h"
3
4/* NB: Increment if you add new atoms */
5#define ECORE_X_ATOMS_COUNT 199
6
7typedef struct _Xcb_Atom Xcb_Atom;
8struct _Xcb_Atom
9{
10 const char *name;
11 Ecore_X_Atom *atom;
12};
13
14/* local function prototypes */
15
16/* local variables */
17static xcb_intern_atom_cookie_t cookies[ECORE_X_ATOMS_COUNT];
18static Xcb_Atom atoms[] =
19{
20 { "ATOM", &ECORE_X_ATOM_ATOM },
21 { "CARDINAL", &ECORE_X_ATOM_CARDINAL },
22 { "COMPOUND_TEXT", &ECORE_X_ATOM_COMPOUND_TEXT },
23 { "FILE_NAME", &ECORE_X_ATOM_FILE_NAME },
24 { "STRING", &ECORE_X_ATOM_STRING },
25 { "TEXT", &ECORE_X_ATOM_TEXT },
26 { "UTF8_STRING", &ECORE_X_ATOM_UTF8_STRING },
27 { "WINDOW", &ECORE_X_ATOM_WINDOW },
28 { "PIXMAP", &ECORE_X_ATOM_PIXMAP },
29 { "VISUALID", &ECORE_X_ATOM_VISUALID },
30
31 { "JXSelectionWindowProperty", &ECORE_X_ATOM_SELECTION_PROP_XDND },
32 { "XdndSelection", &ECORE_X_ATOM_SELECTION_XDND },
33 { "XdndAware", &ECORE_X_ATOM_XDND_AWARE },
34 { "XdndEnter", &ECORE_X_ATOM_XDND_ENTER },
35 { "XdndTypeList", &ECORE_X_ATOM_XDND_TYPE_LIST },
36 { "XdndPosition", &ECORE_X_ATOM_XDND_POSITION },
37 { "XdndActionCopy", &ECORE_X_ATOM_XDND_ACTION_COPY },
38 { "XdndActionMove", &ECORE_X_ATOM_XDND_ACTION_MOVE },
39 { "XdndActionPrivate", &ECORE_X_ATOM_XDND_ACTION_PRIVATE },
40 { "XdndActionAsk", &ECORE_X_ATOM_XDND_ACTION_ASK },
41 { "XdndActionList", &ECORE_X_ATOM_XDND_ACTION_LIST },
42 { "XdndActionLink", &ECORE_X_ATOM_XDND_ACTION_LINK },
43 { "XdndActionDescription", &ECORE_X_ATOM_XDND_ACTION_DESCRIPTION },
44 { "XdndProxy", &ECORE_X_ATOM_XDND_PROXY },
45 { "XdndStatus", &ECORE_X_ATOM_XDND_STATUS },
46 { "XdndLeave", &ECORE_X_ATOM_XDND_LEAVE },
47 { "XdndDrop", &ECORE_X_ATOM_XDND_DROP },
48 { "XdndFinished", &ECORE_X_ATOM_XDND_FINISHED },
49
50 { "XdndActionCopy", &ECORE_X_DND_ACTION_COPY },
51 { "XdndActionMove", &ECORE_X_DND_ACTION_MOVE },
52 { "XdndActionLink", &ECORE_X_DND_ACTION_LINK },
53 { "XdndActionAsk", &ECORE_X_DND_ACTION_ASK },
54 { "XdndActionPrivate", &ECORE_X_DND_ACTION_PRIVATE },
55
56 { "_E_FRAME_SIZE", &ECORE_X_ATOM_E_FRAME_SIZE },
57
58 { "_WIN_LAYER", &ECORE_X_ATOM_WIN_LAYER },
59
60 { "WM_NAME", &ECORE_X_ATOM_WM_NAME },
61 { "WM_ICON_NAME", &ECORE_X_ATOM_WM_ICON_NAME },
62 { "WM_NORMAL_HINTS", &ECORE_X_ATOM_WM_NORMAL_HINTS },
63 { "WM_SIZE_HINTS", &ECORE_X_ATOM_WM_SIZE_HINTS },
64 { "WM_HINTS", &ECORE_X_ATOM_WM_HINTS },
65 { "WM_CLASS", &ECORE_X_ATOM_WM_CLASS },
66 { "WM_TRANSIENT_FOR", &ECORE_X_ATOM_WM_TRANSIENT_FOR },
67 { "WM_PROTOCOLS", &ECORE_X_ATOM_WM_PROTOCOLS },
68 { "WM_COLORMAP_WINDOWS", &ECORE_X_ATOM_WM_COLORMAP_WINDOWS },
69 { "WM_COMMAND", &ECORE_X_ATOM_WM_COMMAND },
70 { "WM_CLIENT_MACHINE", &ECORE_X_ATOM_WM_CLIENT_MACHINE },
71
72 { "WM_STATE", &ECORE_X_ATOM_WM_STATE },
73 { "WM_ICON_SIZE", &ECORE_X_ATOM_WM_ICON_SIZE },
74
75 { "WM_CHANGE_STATE", &ECORE_X_ATOM_WM_CHANGE_STATE },
76
77 { "WM_TAKE_FOCUS", &ECORE_X_ATOM_WM_TAKE_FOCUS },
78 { "WM_SAVE_YOURSELF", &ECORE_X_ATOM_WM_SAVE_YOURSELF },
79 { "WM_DELETE_WINDOW", &ECORE_X_ATOM_WM_DELETE_WINDOW },
80
81 { "WM_COLORMAP_NOTIFY", &ECORE_X_ATOM_WM_COLORMAP_NOTIFY },
82
83 { "SM_CLIENT_ID", &ECORE_X_ATOM_SM_CLIENT_ID },
84 { "WM_CLIENT_LEADER", &ECORE_X_ATOM_WM_CLIENT_LEADER },
85 { "WM_WINDOW_ROLE", &ECORE_X_ATOM_WM_WINDOW_ROLE },
86
87 { "_MOTIF_WM_HINTS", &ECORE_X_ATOM_MOTIF_WM_HINTS },
88
89 { "_NET_SUPPORTED", &ECORE_X_ATOM_NET_SUPPORTED },
90 { "_NET_CLIENT_LIST", &ECORE_X_ATOM_NET_CLIENT_LIST },
91 { "_NET_CLIENT_LIST_STACKING", &ECORE_X_ATOM_NET_CLIENT_LIST_STACKING },
92 { "_NET_NUMBER_OF_DESKTOPS", &ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS },
93 { "_NET_DESKTOP_GEOMETRY", &ECORE_X_ATOM_NET_DESKTOP_GEOMETRY },
94 { "_NET_DESKTOP_VIEWPORT", &ECORE_X_ATOM_NET_DESKTOP_VIEWPORT },
95 { "_NET_CURRENT_DESKTOP", &ECORE_X_ATOM_NET_CURRENT_DESKTOP },
96 { "_NET_DESKTOP_NAMES", &ECORE_X_ATOM_NET_DESKTOP_NAMES },
97 { "_NET_ACTIVE_WINDOW", &ECORE_X_ATOM_NET_ACTIVE_WINDOW },
98 { "_NET_WORKAREA", &ECORE_X_ATOM_NET_WORKAREA },
99 { "_NET_SUPPORTING_WM_CHECK", &ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK },
100 { "_NET_VIRTUAL_ROOTS", &ECORE_X_ATOM_NET_VIRTUAL_ROOTS },
101 { "_NET_DESKTOP_LAYOUT", &ECORE_X_ATOM_NET_DESKTOP_LAYOUT },
102 { "_NET_SHOWING_DESKTOP", &ECORE_X_ATOM_NET_SHOWING_DESKTOP },
103
104 { "_NET_CLOSE_WINDOW", &ECORE_X_ATOM_NET_CLOSE_WINDOW },
105 { "_NET_MOVERESIZE_WINDOW", &ECORE_X_ATOM_NET_MOVERESIZE_WINDOW },
106 { "_NET_WM_MOVERESIZE", &ECORE_X_ATOM_NET_WM_MOVERESIZE },
107 { "_NET_RESTACK_WINDOW", &ECORE_X_ATOM_NET_RESTACK_WINDOW },
108
109 { "_NET_REQUEST_FRAME_EXTENTS", &ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS },
110
111 { "_NET_WM_NAME", &ECORE_X_ATOM_NET_WM_NAME },
112 { "_NET_WM_VISIBLE_NAME", &ECORE_X_ATOM_NET_WM_VISIBLE_NAME },
113 { "_NET_WM_ICON_NAME", &ECORE_X_ATOM_NET_WM_ICON_NAME },
114 { "_NET_WM_VISIBLE_ICON_NAME", &ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME },
115 { "_NET_WM_DESKTOP", &ECORE_X_ATOM_NET_WM_DESKTOP },
116
117 { "_NET_WM_WINDOW_TYPE", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE },
118 { "_NET_WM_WINDOW_TYPE_DESKTOP", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP },
119 { "_NET_WM_WINDOW_TYPE_DOCK", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK },
120 { "_NET_WM_WINDOW_TYPE_TOOLBAR", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR },
121 { "_NET_WM_WINDOW_TYPE_MENU", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU },
122 { "_NET_WM_WINDOW_TYPE_UTILITY", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY },
123 { "_NET_WM_WINDOW_TYPE_SPLASH", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH },
124 { "_NET_WM_WINDOW_TYPE_DIALOG", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG },
125 { "_NET_WM_WINDOW_TYPE_NORMAL", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL },
126 { "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
127 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU },
128 { "_NET_WM_WINDOW_TYPE_POPUP_MENU",
129 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU },
130 { "_NET_WM_WINDOW_TYPE_TOOLTIP", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP },
131 { "_NET_WM_WINDOW_TYPE_NOTIFICATION",
132 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION },
133 { "_NET_WM_WINDOW_TYPE_COMBO", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO },
134 { "_NET_WM_WINDOW_TYPE_DND", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND },
135
136 { "_NET_WM_STATE", &ECORE_X_ATOM_NET_WM_STATE },
137 { "_NET_WM_STATE_MODAL", &ECORE_X_ATOM_NET_WM_STATE_MODAL },
138 { "_NET_WM_STATE_STICKY", &ECORE_X_ATOM_NET_WM_STATE_STICKY },
139 { "_NET_WM_STATE_MAXIMIZED_VERT",
140 &ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT },
141 { "_NET_WM_STATE_MAXIMIZED_HORZ",
142 &ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ },
143 { "_NET_WM_STATE_SHADED", &ECORE_X_ATOM_NET_WM_STATE_SHADED },
144 { "_NET_WM_STATE_SKIP_TASKBAR", &ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR },
145 { "_NET_WM_STATE_SKIP_PAGER", &ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER },
146 { "_NET_WM_STATE_HIDDEN", &ECORE_X_ATOM_NET_WM_STATE_HIDDEN },
147 { "_NET_WM_STATE_FULLSCREEN", &ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN },
148 { "_NET_WM_STATE_ABOVE", &ECORE_X_ATOM_NET_WM_STATE_ABOVE },
149 { "_NET_WM_STATE_BELOW", &ECORE_X_ATOM_NET_WM_STATE_BELOW },
150 { "_NET_WM_STATE_DEMANDS_ATTENTION",
151 &ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION },
152
153 { "_NET_WM_ALLOWED_ACTIONS", &ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS },
154 { "_NET_WM_ACTION_MOVE", &ECORE_X_ATOM_NET_WM_ACTION_MOVE },
155 { "_NET_WM_ACTION_RESIZE", &ECORE_X_ATOM_NET_WM_ACTION_RESIZE },
156 { "_NET_WM_ACTION_MINIMIZE", &ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE },
157 { "_NET_WM_ACTION_SHADE", &ECORE_X_ATOM_NET_WM_ACTION_SHADE },
158 { "_NET_WM_ACTION_STICK", &ECORE_X_ATOM_NET_WM_ACTION_STICK },
159 { "_NET_WM_ACTION_MAXIMIZE_HORZ",
160 &ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ },
161 { "_NET_WM_ACTION_MAXIMIZE_VERT",
162 &ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT },
163 { "_NET_WM_ACTION_FULLSCREEN", &ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN },
164 { "_NET_WM_ACTION_CHANGE_DESKTOP",
165 &ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP },
166 { "_NET_WM_ACTION_CLOSE", &ECORE_X_ATOM_NET_WM_ACTION_CLOSE },
167 { "_NET_WM_ACTION_ABOVE", &ECORE_X_ATOM_NET_WM_ACTION_ABOVE },
168 { "_NET_WM_ACTION_BELOW", &ECORE_X_ATOM_NET_WM_ACTION_BELOW },
169
170 { "_NET_WM_STRUT", &ECORE_X_ATOM_NET_WM_STRUT },
171 { "_NET_WM_STRUT_PARTIAL", &ECORE_X_ATOM_NET_WM_STRUT_PARTIAL },
172 { "_NET_WM_ICON_GEOMETRY", &ECORE_X_ATOM_NET_WM_ICON_GEOMETRY },
173 { "_NET_WM_ICON", &ECORE_X_ATOM_NET_WM_ICON },
174 { "_NET_WM_PID", &ECORE_X_ATOM_NET_WM_PID },
175 { "_NET_WM_HANDLED_ICONS", &ECORE_X_ATOM_NET_WM_HANDLED_ICONS },
176 { "_NET_WM_USER_TIME", &ECORE_X_ATOM_NET_WM_USER_TIME },
177 { "_NET_STARTUP_ID", &ECORE_X_ATOM_NET_STARTUP_ID },
178 { "_NET_FRAME_EXTENTS", &ECORE_X_ATOM_NET_FRAME_EXTENTS },
179
180 { "_NET_WM_PING", &ECORE_X_ATOM_NET_WM_PING },
181 { "_NET_WM_SYNC_REQUEST", &ECORE_X_ATOM_NET_WM_SYNC_REQUEST },
182 { "_NET_WM_SYNC_REQUEST_COUNTER",
183 &ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER },
184
185 { "_NET_WM_WINDOW_OPACITY", &ECORE_X_ATOM_NET_WM_WINDOW_OPACITY },
186 { "_NET_WM_WINDOW_SHADOW", &ECORE_X_ATOM_NET_WM_WINDOW_SHADOW },
187 { "_NET_WM_WINDOW_SHADE", &ECORE_X_ATOM_NET_WM_WINDOW_SHADE },
188
189 { "TARGETS", &ECORE_X_ATOM_SELECTION_TARGETS },
190 { "CLIPBOARD", &ECORE_X_ATOM_SELECTION_CLIPBOARD },
191 { "PRIMARY", &ECORE_X_ATOM_SELECTION_PRIMARY },
192 { "SECONDARY", &ECORE_X_ATOM_SELECTION_SECONDARY },
193 { "_ECORE_SELECTION_PRIMARY", &ECORE_X_ATOM_SELECTION_PROP_PRIMARY },
194 { "_ECORE_SELECTION_SECONDARY", &ECORE_X_ATOM_SELECTION_PROP_SECONDARY },
195 { "_ECORE_SELECTION_CLIPBOARD", &ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD },
196
197 { "_E_VIRTUAL_KEYBOARD", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD },
198 { "_E_VIRTUAL_KEYBOARD_STATE", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE },
199 { "_E_VIRTUAL_KEYBOARD_ON", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON },
200 { "_E_VIRTUAL_KEYBOARD_OFF", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF },
201 { "_E_VIRTUAL_KEYBOARD_ALPHA", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA },
202 { "_E_VIRTUAL_KEYBOARD_NUMERIC", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC },
203 { "_E_VIRTUAL_KEYBOARD_PIN", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN },
204 { "_E_VIRTUAL_KEYBOARD_PHONE_NUMBER",
205 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER },
206 { "_E_VIRTUAL_KEYBOARD_HEX", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX },
207 { "_E_VIRTUAL_KEYBOARD_TERMINAL",
208 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL },
209 { "_E_VIRTUAL_KEYBOARD_PASSWORD",
210 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD },
211 { "_E_VIRTUAL_KEYBOARD_IP", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP },
212 { "_E_VIRTUAL_KEYBOARD_HOST", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST },
213 { "_E_VIRTUAL_KEYBOARD_FILE", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE },
214 { "_E_VIRTUAL_KEYBOARD_URL", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL },
215 { "_E_VIRTUAL_KEYBOARD_KEYPAD", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD },
216 { "_E_VIRTUAL_KEYBOARD_J2ME", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME },
217
218 { "_E_ILLUME_ZONE", &ECORE_X_ATOM_E_ILLUME_ZONE },
219 { "_E_ILLUME_ZONE_LIST", &ECORE_X_ATOM_E_ILLUME_ZONE_LIST },
220 { "_E_ILLUME_CONFORMANT", &ECORE_X_ATOM_E_ILLUME_CONFORMANT },
221 { "_E_ILLUME_MODE", &ECORE_X_ATOM_E_ILLUME_MODE },
222 { "_E_ILLUME_MODE_SINGLE", &ECORE_X_ATOM_E_ILLUME_MODE_SINGLE },
223 { "_E_ILLUME_MODE_DUAL_TOP", &ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP },
224 { "_E_ILLUME_MODE_DUAL_LEFT", &ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT },
225 { "_E_ILLUME_FOCUS_BACK", &ECORE_X_ATOM_E_ILLUME_FOCUS_BACK },
226 { "_E_ILLUME_FOCUS_FORWARD", &ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD },
227 { "_E_ILLUME_FOCUS_HOME", &ECORE_X_ATOM_E_ILLUME_FOCUS_HOME },
228 { "_E_ILLUME_CLOSE", &ECORE_X_ATOM_E_ILLUME_CLOSE },
229 { "_E_ILLUME_HOME_NEW", &ECORE_X_ATOM_E_ILLUME_HOME_NEW },
230 { "_E_ILLUME_HOME_DEL", &ECORE_X_ATOM_E_ILLUME_HOME_DEL },
231 { "_E_ILLUME_DRAG", &ECORE_X_ATOM_E_ILLUME_DRAG },
232 { "_E_ILLUME_DRAG_LOCKED", &ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED },
233 { "_E_ILLUME_DRAG_START", &ECORE_X_ATOM_E_ILLUME_DRAG_START },
234 { "_E_ILLUME_DRAG_END", &ECORE_X_ATOM_E_ILLUME_DRAG_END },
235 { "_E_ILLUME_INDICATOR_GEOMETRY",
236 &ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY },
237 { "_E_ILLUME_SOFTKEY_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY },
238 { "_E_ILLUME_KEYBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY },
239 { "_E_ILLUME_QUICKPANEL", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL },
240 { "_E_ILLUME_QUICKPANEL_STATE", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE },
241 { "_E_ILLUME_QUICKPANEL_STATE_TOGGLE",
242 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE },
243 { "_E_ILLUME_QUICKPANEL_ON", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON },
244 { "_E_ILLUME_QUICKPANEL_OFF", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF },
245 { "_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR",
246 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR },
247 { "_E_ILLUME_QUICKPANEL_PRIORITY_MINOR",
248 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR },
249 { "_E_ILLUME_QUICKPANEL_ZONE", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE },
250 { "_E_ILLUME_QUICKPANEL_POSITION_UPDATE",
251 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE },
252 { "_E_ILLUME_INDICATOR_STATE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE },
253 { "_E_ILLUME_INDICATOR_ON", &ECORE_X_ATOM_E_ILLUME_INDICATOR_ON },
254 { "_E_ILLUME_INDICATOR_OFF", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF },
255 { "_E_ILLUME_INDICATOR_OPACITY_MODE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE },
256 { "_E_ILLUME_INDICATOR_OPAQUE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE },
257 { "_E_ILLUME_INDICATOR_TRANSLUCENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT },
258 { "_E_ILLUME_INDICATOR_TRANSPARENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT },
259 { "_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLES", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE },
260 { "_E_ILLUME_ROTATE_WINDOW_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE },
261 { "_E_ILLUME_ROTATE_ROOT_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE },
262 { "_E_ILLUME_CLIPBOARD_STATE", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE },
263 { "_E_ILLUME_CLIPBOARD_ON", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON },
264 { "_E_ILLUME_CLIPBOARD_OFF", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF },
265 { "_E_ILLUME_CLIPBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY },
266 { "_E_COMP_SYNC_COUNTER", &ECORE_X_ATOM_E_COMP_SYNC_COUNTER },
267 { "_E_COMP_SYNC_DRAW_DONE", &ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE },
268 { "_E_COMP_SYNC_SUPPORTED", &ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED },
269 { "_E_COMP_SYNC_BEGIN", &ECORE_X_ATOM_E_COMP_SYNC_BEGIN },
270 { "_E_COMP_SYNC_END", &ECORE_X_ATOM_E_COMP_SYNC_END },
271 { "_E_COMP_SYNC_CANCEL", &ECORE_X_ATOM_E_COMP_SYNC_CANCEL },
272
273 { "_E_COMP_FLUSH", &ECORE_X_ATOM_E_COMP_FLUSH },
274 { "_E_COMP_DUMP", &ECORE_X_ATOM_E_COMP_DUMP },
275 { "_E_COMP_PIXMAP", &ECORE_X_ATOM_E_COMP_PIXMAP },
276 { "_E_VIDEO_PARENT", &ECORE_X_ATOM_E_VIDEO_PARENT },
277 { "_E_VIDEO_POSITION", &ECORE_X_ATOM_E_VIDEO_POSITION }
278};
279
280void
281_ecore_xcb_atoms_init(void)
282{
283 int i = 0, num = 0;
284
285 LOGFN(__FILE__, __LINE__, __FUNCTION__);
286 CHECK_XCB_CONN;
287
288 num = (sizeof(atoms) / sizeof(Xcb_Atom));
289 for (i = 0; i < num; i++)
290 {
291 cookies[i] =
292 xcb_intern_atom_unchecked(_ecore_xcb_conn, 0,
293 strlen(atoms[i].name), atoms[i].name);
294 }
295}
296
297void
298_ecore_xcb_atoms_finalize(void)
299{
300 int i = 0, num = 0;
301
302 LOGFN(__FILE__, __LINE__, __FUNCTION__);
303 CHECK_XCB_CONN;
304
305 num = (sizeof(atoms) / sizeof(Xcb_Atom));
306 for (i = 0; i < num; i++)
307 {
308 xcb_intern_atom_reply_t *reply = NULL;
309
310 if (!(reply = xcb_intern_atom_reply(_ecore_xcb_conn, cookies[i], 0)))
311 continue;
312 *(atoms[i].atom) = reply->atom;
313 free(reply);
314 }
315}
316
317/**
318 * @defgroup Ecore_X_Atom_Group XCB Atom Functions
319 *
320 * Functions that operate on atoms
321 */
322
323/**
324 * Retrieves the atom value associated to a name.
325 *
326 * @param name Unused.
327 * @return Associated atom value.
328 *
329 * Retrieves the atom value associated to a name. The reply is the
330 * returned value of the function ecore_xcb_intern_atom_reply(). If
331 * @p reply is @c NULL, the NULL atom is returned. Otherwise, the atom
332 * associated to the name is returned.
333 *
334 * To use this function, you must call before, and in order,
335 * ecore_x_atom_get_prefetch(), which sends the InternAtom request,
336 * then ecore_x_atom_get_fetch(), which gets the reply.
337 *
338 * @ingroup Ecore_X_Atom_Group
339 */
340EAPI Ecore_X_Atom
341ecore_x_atom_get(const char *name)
342{
343 xcb_intern_atom_cookie_t cookie;
344 xcb_intern_atom_reply_t *reply;
345 Ecore_X_Atom a;
346
347 LOGFN(__FILE__, __LINE__, __FUNCTION__);
348 CHECK_XCB_CONN;
349
350 cookie = xcb_intern_atom_unchecked(_ecore_xcb_conn, 0, strlen(name), name);
351 reply = xcb_intern_atom_reply(_ecore_xcb_conn, cookie, NULL);
352 if (!reply) return XCB_ATOM_NONE;
353 a = reply->atom;
354 free(reply);
355 return a;
356}
357
358/**
359 * Retrieves the name of the given atom.
360 *
361 * @param atom
362 * @return The name of the atom.
363 *
364 * @ingroup Ecore_X_Atom_Group
365 */
366EAPI char *
367ecore_x_atom_name_get(Ecore_X_Atom atom)
368{
369 xcb_get_atom_name_cookie_t cookie;
370 xcb_get_atom_name_reply_t *reply;
371 char *name;
372 int len = 0;
373
374 LOGFN(__FILE__, __LINE__, __FUNCTION__);
375 CHECK_XCB_CONN;
376
377 cookie = xcb_get_atom_name_unchecked(_ecore_xcb_conn, atom);
378 reply = xcb_get_atom_name_reply(_ecore_xcb_conn, cookie, NULL);
379 if (!reply) return NULL;
380 len = xcb_get_atom_name_name_length(reply);
381 name = (char *)malloc(sizeof(char) * (len + 1));
382 if (!name)
383 {
384 free(reply);
385 return NULL;
386 }
387 memcpy(name, xcb_get_atom_name_name(reply), len);
388 name[len] = '\0';
389
390 free(reply);
391 return name;
392}
393
394EAPI void
395ecore_x_atoms_get(const char **names,
396 int num,
397 Ecore_X_Atom *atoms)
398{
399 xcb_intern_atom_cookie_t cookies[num];
400 int i = 0;
401
402 LOGFN(__FILE__, __LINE__, __FUNCTION__);
403 CHECK_XCB_CONN;
404
405 for (i = 0; i < num; i++)
406 {
407 cookies[i] =
408 xcb_intern_atom_unchecked(_ecore_xcb_conn, 0,
409 strlen(names[i]), names[i]);
410 }
411 for (i = 0; i < num; i++)
412 {
413 xcb_intern_atom_reply_t *reply = NULL;
414
415 if (!(reply = xcb_intern_atom_reply(_ecore_xcb_conn, cookies[i], 0)))
416 continue;
417 atoms[i] = reply->atom;
418 free(reply);
419 }
420}
421
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c
deleted file mode 100644
index f247b34..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c
+++ /dev/null
@@ -1,289 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_COMPOSITE
3# include <xcb/composite.h>
4#endif
5
6/* local variables */
7static Eina_Bool _composite_avail = EINA_FALSE;
8
9void
10_ecore_xcb_composite_init(void)
11{
12 LOGFN(__FILE__, __LINE__, __FUNCTION__);
13
14#ifdef ECORE_XCB_COMPOSITE
15 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_composite_id);
16#endif
17}
18
19void
20_ecore_xcb_composite_finalize(void)
21{
22#ifdef ECORE_XCB_COMPOSITE
23 const xcb_query_extension_reply_t *ext_reply;
24#endif
25
26 LOGFN(__FILE__, __LINE__, __FUNCTION__);
27
28#ifdef ECORE_XCB_COMPOSITE
29 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_composite_id);
30 if ((ext_reply) && (ext_reply->present))
31 {
32 xcb_composite_query_version_cookie_t cookie;
33 xcb_composite_query_version_reply_t *reply;
34
35 cookie =
36 xcb_composite_query_version_unchecked(_ecore_xcb_conn,
37 XCB_COMPOSITE_MAJOR_VERSION,
38 XCB_COMPOSITE_MINOR_VERSION);
39 reply =
40 xcb_composite_query_version_reply(_ecore_xcb_conn, cookie, NULL);
41 if (reply)
42 {
43// if ((reply->major_version >= XCB_COMPOSITE_MAJOR_VERSION) &&
44 if (reply->minor_version >= XCB_COMPOSITE_MINOR_VERSION)
45 {
46# ifdef ECORE_XCB_RENDER
47 if (_ecore_xcb_render_avail_get())
48 {
49# ifdef ECORE_XCB_XFIXES
50 if (_ecore_xcb_xfixes_avail_get())
51 _composite_avail = EINA_TRUE;
52# endif
53 }
54# endif
55 }
56
57 free(reply);
58 }
59 }
60#endif
61}
62
63/**
64 * @defgroup Ecore_X_Composite_Group X Composite Extension Functions
65 *
66 * Functions related to the X Composite Extension
67 */
68
69/**
70 * Return whether the Composite Extension is available
71 *
72 * @return EINA_TRUE is the Composite Extension is available, EINA_FALSE if not
73 *
74 * @ingroup Ecore_X_Composite_Group
75 */
76EAPI Eina_Bool
77ecore_x_composite_query(void)
78{
79 LOGFN(__FILE__, __LINE__, __FUNCTION__);
80 return _composite_avail;
81}
82
83EAPI void
84ecore_x_composite_redirect_window(Ecore_X_Window win,
85 Ecore_X_Composite_Update_Type type)
86{
87 LOGFN(__FILE__, __LINE__, __FUNCTION__);
88 CHECK_XCB_CONN;
89
90 if (!_composite_avail) return;
91
92#ifdef ECORE_XCB_COMPOSITE
93 uint8_t update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
94
95 switch (type)
96 {
97 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
98 update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
99 break;
100
101 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
102 update = XCB_COMPOSITE_REDIRECT_MANUAL;
103 break;
104 }
105 xcb_composite_redirect_window(_ecore_xcb_conn, win, update);
106// ecore_x_flush();
107#endif
108}
109
110EAPI void
111ecore_x_composite_redirect_subwindows(Ecore_X_Window win,
112 Ecore_X_Composite_Update_Type type)
113{
114 LOGFN(__FILE__, __LINE__, __FUNCTION__);
115 CHECK_XCB_CONN;
116
117 if (!_composite_avail) return;
118
119#ifdef ECORE_XCB_COMPOSITE
120 uint8_t update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
121
122 switch (type)
123 {
124 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
125 update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
126 break;
127
128 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
129 update = XCB_COMPOSITE_REDIRECT_MANUAL;
130 break;
131 }
132 xcb_composite_redirect_subwindows(_ecore_xcb_conn, win, update);
133// ecore_x_flush();
134#endif
135}
136
137EAPI void
138ecore_x_composite_unredirect_window(Ecore_X_Window win,
139 Ecore_X_Composite_Update_Type type)
140{
141 LOGFN(__FILE__, __LINE__, __FUNCTION__);
142 CHECK_XCB_CONN;
143
144 if (!_composite_avail) return;
145
146#ifdef ECORE_XCB_COMPOSITE
147 uint8_t update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
148
149 switch (type)
150 {
151 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
152 update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
153 break;
154
155 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
156 update = XCB_COMPOSITE_REDIRECT_MANUAL;
157 break;
158 }
159 xcb_composite_unredirect_window(_ecore_xcb_conn, win, update);
160// ecore_x_flush();
161#endif
162}
163
164EAPI void
165ecore_x_composite_unredirect_subwindows(Ecore_X_Window win,
166 Ecore_X_Composite_Update_Type type)
167{
168 LOGFN(__FILE__, __LINE__, __FUNCTION__);
169 CHECK_XCB_CONN;
170
171 if (!_composite_avail) return;
172
173#ifdef ECORE_XCB_COMPOSITE
174 uint8_t update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
175
176 switch (type)
177 {
178 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
179 update = XCB_COMPOSITE_REDIRECT_AUTOMATIC;
180 break;
181
182 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
183 update = XCB_COMPOSITE_REDIRECT_MANUAL;
184 break;
185 }
186 xcb_composite_unredirect_subwindows(_ecore_xcb_conn, win, update);
187// ecore_x_flush();
188#endif
189}
190
191EAPI Ecore_X_Pixmap
192ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
193{
194#ifdef ECORE_XCB_COMPOSITE
195 Ecore_X_Pixmap pmap = XCB_NONE;
196#endif
197
198 LOGFN(__FILE__, __LINE__, __FUNCTION__);
199 CHECK_XCB_CONN;
200
201 if (!_composite_avail) return XCB_NONE;
202
203#ifdef ECORE_XCB_COMPOSITE
204 pmap = xcb_generate_id(_ecore_xcb_conn);
205 xcb_composite_name_window_pixmap(_ecore_xcb_conn, win, pmap);
206// ecore_x_flush();
207#endif
208
209 return pmap;
210}
211
212EAPI void
213ecore_x_composite_window_events_disable(Ecore_X_Window win)
214{
215 LOGFN(__FILE__, __LINE__, __FUNCTION__);
216 CHECK_XCB_CONN;
217
218 if (!_composite_avail) return;
219
220#ifdef ECORE_XCB_SHAPE
221 ecore_x_window_shape_input_rectangle_set(win, -1, -1, 1, 1);
222// ecore_x_flush();
223#else
224 return;
225 win = 0;
226#endif
227}
228
229EAPI void
230ecore_x_composite_window_events_enable(Ecore_X_Window win)
231{
232 LOGFN(__FILE__, __LINE__, __FUNCTION__);
233 CHECK_XCB_CONN;
234
235 if (!_composite_avail) return;
236
237#ifdef ECORE_XCB_SHAPE
238 ecore_x_window_shape_input_rectangle_set(win, 0, 0, 65535, 65535);
239// ecore_x_flush();
240#else
241 return;
242 win = 0;
243#endif
244}
245
246EAPI Ecore_X_Window
247ecore_x_composite_render_window_enable(Ecore_X_Window root)
248{
249 Ecore_X_Window win = 0;
250#ifdef ECORE_XCB_COMPOSITE
251 xcb_composite_get_overlay_window_cookie_t cookie;
252 xcb_composite_get_overlay_window_reply_t *reply;
253#endif
254
255 LOGFN(__FILE__, __LINE__, __FUNCTION__);
256 CHECK_XCB_CONN;
257
258 if (!_composite_avail) return 0;
259
260#ifdef ECORE_XCB_COMPOSITE
261 cookie = xcb_composite_get_overlay_window_unchecked(_ecore_xcb_conn, root);
262 reply =
263 xcb_composite_get_overlay_window_reply(_ecore_xcb_conn, cookie, NULL);
264 if (!reply) return win;
265
266 win = reply->overlay_win;
267 free(reply);
268
269 ecore_x_composite_window_events_disable(win);
270// ecore_x_flush();
271#endif
272
273 return win;
274}
275
276EAPI void
277ecore_x_composite_render_window_disable(Ecore_X_Window win)
278{
279 LOGFN(__FILE__, __LINE__, __FUNCTION__);
280 CHECK_XCB_CONN;
281
282 if (!_composite_avail) return;
283
284#ifdef ECORE_XCB_COMPOSITE
285 xcb_composite_release_overlay_window(_ecore_xcb_conn, win);
286// ecore_x_flush();
287#endif
288}
289
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c
deleted file mode 100644
index 755df04..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c
+++ /dev/null
@@ -1,400 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_CURSOR
3# include <xcb/render.h>
4# include <xcb/xcb_renderutil.h>
5#endif
6
7/* local function prototypes */
8#ifdef ECORE_XCB_CURSOR
9static xcb_render_pictforminfo_t *_ecore_xcb_cursor_format_get(void);
10#endif
11static void _ecore_xcb_cursor_default_size_get(void);
12static void _ecore_xcb_cursor_dpi_size_get(void);
13static void _ecore_xcb_cursor_guess_size(void);
14#ifdef ECORE_XCB_CURSOR
15static Ecore_X_Cursor _ecore_xcb_cursor_image_load_cursor(xcb_image_t *img,
16 int hot_x,
17 int hot_y);
18#endif
19static void _ecore_xcb_cursor_image_destroy(xcb_image_t *img);
20
21/* local variables */
22static int _ecore_xcb_cursor_size = 0;
23static Eina_Bool _ecore_xcb_cursor = EINA_FALSE;
24#ifdef ECORE_XCB_CURSOR
25static uint32_t _ecore_xcb_cursor_format_id = 0;
26// static xcb_render_pictforminfo_t *_ecore_xcb_cursor_format = NULL;
27#endif
28
29void
30_ecore_xcb_cursor_init(void)
31{
32 LOGFN(__FILE__, __LINE__, __FUNCTION__);
33 /* NB: No-op */
34}
35
36void
37_ecore_xcb_cursor_finalize(void)
38{
39 LOGFN(__FILE__, __LINE__, __FUNCTION__);
40
41#ifdef ECORE_XCB_CURSOR
42 _ecore_xcb_cursor = _ecore_xcb_render_argb_get();
43
44 /* find render pict format */
45 if (_ecore_xcb_cursor_format_id <= 0)
46 _ecore_xcb_cursor_format_id = _ecore_xcb_cursor_format_get()->id;
47#endif
48
49 /* try to grab cursor size from XDefaults */
50 _ecore_xcb_cursor_default_size_get();
51
52 /* if that failed, try to get it from Xft Dpi setting */
53 if (_ecore_xcb_cursor_size == 0)
54 _ecore_xcb_cursor_dpi_size_get();
55
56 /* if that failed, try to guess from display size */
57 if (_ecore_xcb_cursor_size == 0)
58 _ecore_xcb_cursor_guess_size();
59
60 /* NB: Would normally add theme stuff here, but E cursor does not support
61 * xcursor themes. Delay parsing that stuff out until such time if/when the
62 * user selects to use X Cursor, rather than E cursor */
63}
64
65EAPI Eina_Bool
66ecore_x_cursor_color_supported_get(void)
67{
68 LOGFN(__FILE__, __LINE__, __FUNCTION__);
69
70 return _ecore_xcb_cursor;
71}
72
73EAPI Ecore_X_Cursor
74ecore_x_cursor_new(Ecore_X_Window win,
75 int *pixels,
76 int w,
77 int h,
78 int hot_x,
79 int hot_y)
80{
81 Ecore_X_Cursor cursor = 0;
82 xcb_image_t *img;
83
84// LOGFN(__FILE__, __LINE__, __FUNCTION__);
85 CHECK_XCB_CONN;
86
87#ifdef ECORE_XCB_CURSOR
88 if (_ecore_xcb_cursor)
89 {
90 img = _ecore_xcb_image_create_native(w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
91 32, NULL, (w * h * sizeof(int)),
92 (uint8_t *)pixels);
93 cursor = _ecore_xcb_cursor_image_load_cursor(img, hot_x, hot_y);
94 _ecore_xcb_cursor_image_destroy(img);
95 return cursor;
96 }
97 else
98#endif
99 {
100 Ecore_X_GC gc;
101 xcb_pixmap_t pmap, mask;
102 uint32_t *pix;
103 uint8_t fr = 0x00, fg = 0x00, fb = 0x00;
104 uint8_t br = 0xff, bg = 0xff, bb = 0xff;
105 uint32_t brightest = 0, darkest = 255 * 3;
106 uint16_t x, y;
107 const uint32_t dither[2][2] =
108 {
109 {0, 2},
110 {3, 1}
111 };
112
113 img = _ecore_xcb_image_create_native(w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
114 1, NULL, ~0, NULL);
115 if (img->data) free(img->data);
116 img->data = malloc(img->size);
117
118 pmap = xcb_generate_id(_ecore_xcb_conn);
119 xcb_create_pixmap(_ecore_xcb_conn, 1, pmap, win, w, h);
120 mask = xcb_generate_id(_ecore_xcb_conn);
121 xcb_create_pixmap(_ecore_xcb_conn, 1, mask, win, w, h);
122
123 pix = (uint32_t *)pixels;
124 for (y = 0; y < h; y++)
125 {
126 for (x = 0; x < w; x++)
127 {
128 uint8_t r, g, b, a;
129
130 a = (pix[0] >> 24) & 0xff;
131 r = (pix[0] >> 16) & 0xff;
132 g = (pix[0] >> 8) & 0xff;
133 b = (pix[0]) & 0xff;
134 if (a > 0)
135 {
136 if ((uint32_t)(r + g + b) > brightest)
137 {
138 brightest = r + g + b;
139 br = r;
140 bg = g;
141 bb = b;
142 }
143
144 if ((uint32_t)(r + g + b) < darkest)
145 {
146 darkest = r + g + b;
147 fr = r;
148 fg = g;
149 fb = b;
150 }
151 }
152 pix++;
153 }
154 }
155
156 pix = (uint32_t *)pixels;
157 for (y = 0; y < h; y++)
158 {
159 for (x = 0; x < w; x++)
160 {
161 uint32_t v;
162 uint8_t r, g, b;
163 int32_t d1, d2;
164
165 r = (pix[0] >> 16) & 0xff;
166 g = (pix[0] >> 8) & 0xff;
167 b = (pix[0]) & 0xff;
168 d1 =
169 ((r - fr) * (r - fr)) +
170 ((g - fg) * (g - fg)) +
171 ((b - fb) * (b - fb));
172 d2 =
173 ((r - br) * (r - br)) +
174 ((g - bg) * (g - bg)) +
175 ((b - bb) * (b - bb));
176 if (d1 + d2)
177 {
178 v = (((d2 * 255) / (d1 + d2)) * 5) / 256;
179 if (v > dither[x & 0x1][y & 0x1])
180 v = 1;
181 else
182 v = 0;
183 }
184 else
185 v = 0;
186
187 xcb_image_put_pixel(img, x, y, v);
188 pix++;
189 }
190 }
191
192 gc = ecore_x_gc_new(pmap, 0, NULL);
193 xcb_put_image(_ecore_xcb_conn, img->format, pmap, gc, w, h,
194 0, 0, 0, img->depth, img->size, img->data);
195 ecore_x_gc_free(gc);
196
197 pix = (uint32_t *)pixels;
198 for (y = 0; y < h; y++)
199 {
200 for (x = 0; x < w; x++)
201 {
202 uint32_t v;
203
204 v = (((pix[0] >> 24) & 0xff) * 5) / 256;
205 if (v > dither[x & 0x1][y & 0x1])
206 v = 1;
207 else
208 v = 0;
209
210 xcb_image_put_pixel(img, x, y, v);
211 pix++;
212 }
213 }
214
215 gc = ecore_x_gc_new(mask, 0, NULL);
216 xcb_put_image(_ecore_xcb_conn, img->format, mask, gc, w, h,
217 0, 0, 0, img->depth, img->size, img->data);
218 ecore_x_gc_free(gc);
219
220 if (img->data) free(img->data);
221 _ecore_xcb_cursor_image_destroy(img);
222
223 cursor = xcb_generate_id(_ecore_xcb_conn);
224 xcb_create_cursor(_ecore_xcb_conn, cursor, pmap, mask,
225 fr << 8 | fr, fg << 8 | fg, fb << 8 | fb,
226 br << 8 | br, bg << 8 | bg, bb << 8 | bb,
227 hot_x, hot_y);
228
229 xcb_free_pixmap(_ecore_xcb_conn, pmap);
230 xcb_free_pixmap(_ecore_xcb_conn, mask);
231
232 return cursor;
233 }
234
235 return 0;
236}
237
238EAPI void
239ecore_x_cursor_free(Ecore_X_Cursor c)
240{
241// LOGFN(__FILE__, __LINE__, __FUNCTION__);
242 CHECK_XCB_CONN;
243
244 xcb_free_cursor(_ecore_xcb_conn, c);
245}
246
247/*
248 * Returns the cursor for the given shape.
249 * Note that the return value must not be freed with
250 * ecore_x_cursor_free()!
251 */
252EAPI Ecore_X_Cursor
253ecore_x_cursor_shape_get(int shape)
254{
255 Ecore_X_Cursor cursor = 0;
256 xcb_font_t font;
257
258 LOGFN(__FILE__, __LINE__, __FUNCTION__);
259 CHECK_XCB_CONN;
260
261 font = xcb_generate_id(_ecore_xcb_conn);
262 xcb_open_font(_ecore_xcb_conn, font, strlen("cursor"), "cursor");
263
264 cursor = xcb_generate_id(_ecore_xcb_conn);
265 /* FIXME: Add request check ?? */
266 xcb_create_glyph_cursor(_ecore_xcb_conn, cursor, font, font,
267 shape, shape + 1, 0, 0, 0, 65535, 65535, 65535);
268
269 xcb_close_font(_ecore_xcb_conn, font);
270 return cursor;
271}
272
273EAPI void
274ecore_x_cursor_size_set(int size)
275{
276 LOGFN(__FILE__, __LINE__, __FUNCTION__);
277
278 _ecore_xcb_cursor_size = size;
279 /* NB: May need to adjust size of current cursors here */
280}
281
282EAPI int
283ecore_x_cursor_size_get(void)
284{
285 LOGFN(__FILE__, __LINE__, __FUNCTION__);
286
287 return _ecore_xcb_cursor_size;
288}
289
290/* local functions */
291#ifdef ECORE_XCB_CURSOR
292static xcb_render_pictforminfo_t *
293_ecore_xcb_cursor_format_get(void)
294{
295 const xcb_render_query_pict_formats_reply_t *reply;
296 xcb_render_pictforminfo_t *ret = NULL;
297
298 CHECK_XCB_CONN;
299
300 reply = xcb_render_util_query_formats(_ecore_xcb_conn);
301 if (reply)
302 ret = xcb_render_util_find_standard_format(reply,
303 XCB_PICT_STANDARD_ARGB_32);
304
305 return ret;
306}
307
308#endif
309
310static void
311_ecore_xcb_cursor_default_size_get(void)
312{
313 char *s = NULL;
314 int v = 0;
315
316 LOGFN(__FILE__, __LINE__, __FUNCTION__);
317
318 s = getenv("XCURSOR_SIZE");
319 if (!s)
320 {
321 _ecore_xcb_xdefaults_init();
322 v = _ecore_xcb_xdefaults_int_get("Xcursor", "size");
323 _ecore_xcb_xdefaults_shutdown();
324 }
325 else
326 v = atoi(s);
327 if (v) _ecore_xcb_cursor_size = ((v * 16) / 72);
328}
329
330static void
331_ecore_xcb_cursor_dpi_size_get(void)
332{
333 int v = 0;
334
335 LOGFN(__FILE__, __LINE__, __FUNCTION__);
336
337 _ecore_xcb_xdefaults_init();
338 v = _ecore_xcb_xdefaults_int_get("Xft", "dpi");
339 if (v) _ecore_xcb_cursor_size = ((v * 16) / 72);
340 _ecore_xcb_xdefaults_shutdown();
341}
342
343static void
344_ecore_xcb_cursor_guess_size(void)
345{
346 int w = 0, h = 0, s = 0;
347
348 LOGFN(__FILE__, __LINE__, __FUNCTION__);
349
350 ecore_x_screen_size_get(_ecore_xcb_screen, &w, &h);
351 if (h < w) s = h;
352 else s = w;
353 _ecore_xcb_cursor_size = (s / 48);
354}
355
356#ifdef ECORE_XCB_CURSOR
357static Ecore_X_Cursor
358_ecore_xcb_cursor_image_load_cursor(xcb_image_t *img,
359 int hot_x,
360 int hot_y)
361{
362 Ecore_X_Cursor cursor = 0;
363 Ecore_X_GC gc;
364 xcb_pixmap_t pmap;
365 xcb_render_picture_t pict;
366
367 CHECK_XCB_CONN;
368
369 pmap = xcb_generate_id(_ecore_xcb_conn);
370 xcb_create_pixmap(_ecore_xcb_conn, img->depth, pmap,
371 ((xcb_screen_t *)_ecore_xcb_screen)->root,
372 img->width, img->height);
373
374 gc = ecore_x_gc_new(pmap, 0, NULL);
375 xcb_put_image(_ecore_xcb_conn, img->format, pmap, gc,
376 img->width, img->height, 0, 0, 0, img->depth,
377 img->size, img->data);
378 ecore_x_gc_free(gc);
379
380 pict = xcb_generate_id(_ecore_xcb_conn);
381 xcb_render_create_picture(_ecore_xcb_conn, pict, pmap,
382 _ecore_xcb_cursor_format_id, 0, NULL);
383 xcb_free_pixmap(_ecore_xcb_conn, pmap);
384
385 cursor = xcb_generate_id(_ecore_xcb_conn);
386 xcb_render_create_cursor(_ecore_xcb_conn, cursor, pict, hot_x, hot_y);
387 xcb_render_free_picture(_ecore_xcb_conn, pict);
388
389 return cursor;
390}
391
392#endif
393
394static void
395_ecore_xcb_cursor_image_destroy(xcb_image_t *img)
396{
397 CHECK_XCB_CONN;
398 if (img) xcb_image_destroy(img);
399}
400
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c
deleted file mode 100644
index bbab308..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c
+++ /dev/null
@@ -1,155 +0,0 @@
1#include "ecore_xcb_private.h"
2# ifdef ECORE_XCB_DAMAGE
3# include <xcb/damage.h>
4# endif
5
6/* local variables */
7static Eina_Bool _damage_avail = EINA_FALSE;
8
9/* external variables */
10int _ecore_xcb_event_damage = -1;
11
12void
13_ecore_xcb_damage_init(void)
14{
15 LOGFN(__FILE__, __LINE__, __FUNCTION__);
16
17#ifdef ECORE_XCB_DAMAGE
18 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_damage_id);
19#endif
20}
21
22void
23_ecore_xcb_damage_finalize(void)
24{
25#ifdef ECORE_XCB_DAMAGE
26 const xcb_query_extension_reply_t *ext_reply;
27#endif
28
29 LOGFN(__FILE__, __LINE__, __FUNCTION__);
30
31#ifdef ECORE_XCB_DAMAGE
32 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_damage_id);
33 if ((ext_reply) && (ext_reply->present))
34 {
35 xcb_damage_query_version_cookie_t cookie;
36 xcb_damage_query_version_reply_t *reply;
37
38 cookie =
39 xcb_damage_query_version_unchecked(_ecore_xcb_conn,
40 XCB_DAMAGE_MAJOR_VERSION,
41 XCB_DAMAGE_MINOR_VERSION);
42 reply = xcb_damage_query_version_reply(_ecore_xcb_conn, cookie, NULL);
43 if (reply)
44 {
45 _damage_avail = EINA_TRUE;
46 free(reply);
47 }
48
49 if (_damage_avail)
50 _ecore_xcb_event_damage = ext_reply->first_event;
51 }
52#endif
53}
54
55/**
56 * @defgroup Ecore_X_Damage_Group X Damage Extension Functions
57 *
58 * Functions related to the X Damage Extension.
59 */
60
61EAPI Eina_Bool
62ecore_x_damage_query(void)
63{
64 return _damage_avail;
65}
66
67/**
68 * Create a damage object
69 *
70 * @param drawable The drawable to monitor
71 * @param level The level of the damage report
72 * @return The damage object
73 *
74 * Creates a damage object to monitor changes to @p drawable,
75 * with the level @p level.
76 *
77 * @ingroup Ecore_X_Damage_Group
78 */
79EAPI Ecore_X_Damage
80ecore_x_damage_new(Ecore_X_Drawable drawable,
81 Ecore_X_Damage_Report_Level level)
82{
83 Ecore_X_Damage damage = 0;
84
85 LOGFN(__FILE__, __LINE__, __FUNCTION__);
86 CHECK_XCB_CONN;
87
88 if (!_damage_avail) return 0;
89
90#ifdef ECORE_XCB_DAMAGE
91 damage = xcb_generate_id(_ecore_xcb_conn);
92 xcb_damage_create(_ecore_xcb_conn, damage, drawable, level);
93// ecore_x_flush();
94#endif
95
96 return damage;
97}
98
99/**
100 * Destroy a damage object
101 *
102 * @param damage The damage object to destroy
103 *
104 * Destroys the damage object @p damage
105 *
106 * @ingroup Ecore_X_Damage_Group
107 */
108EAPI void
109ecore_x_damage_free(Ecore_X_Damage damage)
110{
111 LOGFN(__FILE__, __LINE__, __FUNCTION__);
112 CHECK_XCB_CONN;
113
114 if (!_damage_avail) return;
115
116#ifdef ECORE_XCB_DAMAGE
117 xcb_damage_destroy(_ecore_xcb_conn, damage);
118// ecore_x_flush();
119#endif
120}
121
122/**
123 * Synchronously modifies the region
124 *
125 * @param damage The damage object to destroy
126 * @param repair The repair region
127 * @param parts The parts region
128 *
129 * Synchronously modifies the regions in the following manner:
130 * If @p repair is @c XCB_NONE:
131 * 1) parts = damage
132 * 2) damage = <empty>
133 * Otherwise:
134 * 1) parts = damage INTERSECT repair
135 * 2) damage = damage - parts
136 * 3) Generate DamageNotify for remaining damage areas
137 *
138 * @ingroup Ecore_X_Damage_Group
139 */
140EAPI void
141ecore_x_damage_subtract(Ecore_X_Damage damage,
142 Ecore_X_Region repair,
143 Ecore_X_Region parts)
144{
145 LOGFN(__FILE__, __LINE__, __FUNCTION__);
146 CHECK_XCB_CONN;
147
148 if (!_damage_avail) return;
149
150#ifdef ECORE_XCB_DAMAGE
151 xcb_damage_subtract(_ecore_xcb_conn, damage, repair, parts);
152// ecore_x_flush();
153#endif
154}
155
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c
deleted file mode 100644
index 177e61d..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c
+++ /dev/null
@@ -1,688 +0,0 @@
1#include "ecore_xcb_private.h"
2
3#ifndef MIN
4# define MIN(a, b) (((a) < (b)) ? (a) : (b))
5#endif
6
7/* local structures */
8typedef struct _Version_Cache_Item
9{
10 Ecore_X_Window win;
11 int ver;
12} Version_Cache_Item;
13
14/* local function prototypes */
15static Eina_Bool _ecore_xcb_dnd_converter_copy(char *target __UNUSED__,
16 void *data,
17 int size,
18 void **data_ret,
19 int *size_ret,
20 Ecore_X_Atom *tprop __UNUSED__,
21 int *count __UNUSED__);
22
23/* local variables */
24static int _ecore_xcb_dnd_init_count = 0;
25static Ecore_X_DND_Source *_source = NULL;
26static Ecore_X_DND_Target *_target = NULL;
27static Version_Cache_Item *_version_cache = NULL;
28static int _version_cache_num = 0, _version_cache_alloc = 0;
29static void (*_posupdatecb)(void *,
30 Ecore_X_Xdnd_Position *);
31static void *_posupdatedata;
32
33/* external variables */
34EAPI int ECORE_X_EVENT_XDND_ENTER = 0;
35EAPI int ECORE_X_EVENT_XDND_POSITION = 0;
36EAPI int ECORE_X_EVENT_XDND_STATUS = 0;
37EAPI int ECORE_X_EVENT_XDND_LEAVE = 0;
38EAPI int ECORE_X_EVENT_XDND_DROP = 0;
39EAPI int ECORE_X_EVENT_XDND_FINISHED = 0;
40
41void
42_ecore_xcb_dnd_init(void)
43{
44 LOGFN(__FILE__, __LINE__, __FUNCTION__);
45
46 if (!_ecore_xcb_dnd_init_count)
47 {
48 _source = calloc(1, sizeof(Ecore_X_DND_Source));
49 if (!_source) return;
50 _source->version = ECORE_X_DND_VERSION;
51 _source->win = XCB_NONE;
52 _source->dest = XCB_NONE;
53 _source->state = ECORE_X_DND_SOURCE_IDLE;
54 _source->prev.window = 0;
55
56 _target = calloc(1, sizeof(Ecore_X_DND_Target));
57 if (!_target)
58 {
59 free(_source);
60 _source = NULL;
61 return;
62 }
63 _target->win = XCB_NONE;
64 _target->source = XCB_NONE;
65 _target->state = ECORE_X_DND_TARGET_IDLE;
66
67 ECORE_X_EVENT_XDND_ENTER = ecore_event_type_new();
68 ECORE_X_EVENT_XDND_POSITION = ecore_event_type_new();
69 ECORE_X_EVENT_XDND_STATUS = ecore_event_type_new();
70 ECORE_X_EVENT_XDND_LEAVE = ecore_event_type_new();
71 ECORE_X_EVENT_XDND_DROP = ecore_event_type_new();
72 ECORE_X_EVENT_XDND_FINISHED = ecore_event_type_new();
73 }
74 _ecore_xcb_dnd_init_count++;
75}
76
77void
78_ecore_xcb_dnd_shutdown(void)
79{
80 LOGFN(__FILE__, __LINE__, __FUNCTION__);
81
82 _ecore_xcb_dnd_init_count--;
83 if (_ecore_xcb_dnd_init_count > 0) return;
84 if (_source) free(_source);
85 _source = NULL;
86 if (_target) free(_target);
87 _target = NULL;
88 _ecore_xcb_dnd_init_count = 0;
89}
90
91EAPI void
92ecore_x_dnd_send_status(Eina_Bool will_accept,
93 Eina_Bool suppress,
94 Ecore_X_Rectangle rect,
95 Ecore_X_Atom action)
96{
97 xcb_client_message_event_t ev;
98
99 LOGFN(__FILE__, __LINE__, __FUNCTION__);
100 CHECK_XCB_CONN;
101
102 if (_target->state == ECORE_X_DND_TARGET_IDLE) return;
103
104 memset(&ev, 0, sizeof(xcb_client_message_event_t));
105
106 _target->will_accept = will_accept;
107
108 ev.response_type = XCB_CLIENT_MESSAGE;
109 ev.type = ECORE_X_ATOM_XDND_STATUS;
110 ev.format = 32;
111 ev.window = _target->source;
112 ev.data.data32[0] = _target->win;
113 ev.data.data32[1] = 0;
114 if (will_accept) ev.data.data32[1] |= 0x1UL;
115 if (!suppress) ev.data.data32[1] |= 0x2UL;
116
117 ev.data.data32[2] = rect.x;
118 ev.data.data32[2] <<= 16;
119 ev.data.data32[2] |= rect.y;
120 ev.data.data32[3] = rect.width;
121 ev.data.data32[3] <<= 16;
122 ev.data.data32[3] |= rect.height;
123
124 if (will_accept)
125 ev.data.data32[4] = action;
126 else
127 ev.data.data32[4] = XCB_NONE;
128 _target->accepted_action = action;
129
130 xcb_send_event(_ecore_xcb_conn, 0, _target->source,
131 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
132// ecore_x_flush();
133}
134
135EAPI Eina_Bool
136ecore_x_dnd_drop(void)
137{
138 xcb_client_message_event_t ev;
139 Eina_Bool status = EINA_FALSE;
140
141 LOGFN(__FILE__, __LINE__, __FUNCTION__);
142 CHECK_XCB_CONN;
143
144 memset(&ev, 0, sizeof(xcb_client_message_event_t));
145
146 if (_source->dest)
147 {
148 ev.response_type = XCB_CLIENT_MESSAGE;
149 ev.format = 32;
150 ev.window = _source->dest;
151
152 if (_source->will_accept)
153 {
154 ev.type = ECORE_X_ATOM_XDND_DROP;
155 ev.data.data32[0] = _source->win;
156 ev.data.data32[1] = 0;
157 ev.data.data32[2] = _source->time;
158
159 xcb_send_event(_ecore_xcb_conn, 0, _source->dest,
160 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
161// ecore_x_flush();
162 _source->state = ECORE_X_DND_SOURCE_DROPPED;
163 status = EINA_TRUE;
164 }
165 else
166 {
167 ev.type = ECORE_X_ATOM_XDND_LEAVE;
168 ev.data.data32[0] = _source->win;
169 ev.data.data32[1] = 0;
170
171 xcb_send_event(_ecore_xcb_conn, 0, _source->dest,
172 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
173// ecore_x_flush();
174 _source->state = ECORE_X_DND_SOURCE_IDLE;
175 }
176 }
177 else
178 {
179 ecore_x_selection_xdnd_clear();
180 _source->state = ECORE_X_DND_SOURCE_IDLE;
181 }
182
183 ecore_x_window_ignore_set(_source->win, 0);
184 _source->prev.window = 0;
185
186 return status;
187}
188
189EAPI void
190ecore_x_dnd_aware_set(Ecore_X_Window win,
191 Eina_Bool on)
192{
193 Ecore_X_Atom prop_data = ECORE_X_DND_VERSION;
194
195 LOGFN(__FILE__, __LINE__, __FUNCTION__);
196
197 if (on)
198 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_AWARE,
199 ECORE_X_ATOM_ATOM, 32, &prop_data, 1);
200 else
201 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_AWARE);
202}
203
204EAPI int
205ecore_x_dnd_version_get(Ecore_X_Window win)
206{
207 unsigned char *data;
208 int num = 0;
209 Version_Cache_Item *t;
210
211 LOGFN(__FILE__, __LINE__, __FUNCTION__);
212
213 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
214 {
215 if (_version_cache)
216 {
217 int i = 0;
218
219 for (i = 0; i < _version_cache_num; i++)
220 {
221 if (_version_cache[i].win == win)
222 return _version_cache[i].ver;
223 }
224 }
225 }
226
227 if (ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_AWARE,
228 ECORE_X_ATOM_ATOM, 32, &data, &num))
229 {
230 int version = 0;
231
232 version = (int)*data;
233 free(data);
234 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
235 {
236 _version_cache_num++;
237 if (_version_cache_num > _version_cache_alloc)
238 _version_cache_alloc += 16;
239 t = realloc(_version_cache,
240 _version_cache_alloc * sizeof(Version_Cache_Item));
241 if (!t) return 0;
242 _version_cache = t;
243 _version_cache[_version_cache_num - 1].win = win;
244 _version_cache[_version_cache_num - 1].ver = version;
245 }
246 return version;
247 }
248
249 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
250 {
251 _version_cache_num++;
252 if (_version_cache_num > _version_cache_alloc)
253 _version_cache_alloc += 16;
254 t = realloc(_version_cache,
255 _version_cache_alloc * sizeof(Version_Cache_Item));
256 if (!t) return 0;
257 _version_cache = t;
258 _version_cache[_version_cache_num - 1].win = win;
259 _version_cache[_version_cache_num - 1].ver = 0;
260 }
261
262 return 0;
263}
264
265EAPI Eina_Bool
266ecore_x_dnd_type_isset(Ecore_X_Window win,
267 const char *type)
268{
269 int num = 0, i = 0;
270 Eina_Bool ret = EINA_FALSE;
271 unsigned char *data;
272 Ecore_X_Atom *atoms, atom;
273
274 LOGFN(__FILE__, __LINE__, __FUNCTION__);
275 CHECK_XCB_CONN;
276
277 if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
278 ECORE_X_ATOM_ATOM, 32, &data, &num))
279 return ret;
280
281 atom = ecore_x_atom_get(type);
282 atoms = (Ecore_X_Atom *)data;
283 for (i = 0; i < num; ++i)
284 {
285 if (atom == atoms[i])
286 {
287 ret = EINA_TRUE;
288 break;
289 }
290 }
291
292 free(data);
293 return ret;
294}
295
296EAPI void
297ecore_x_dnd_type_set(Ecore_X_Window win,
298 const char *type,
299 Eina_Bool on)
300{
301 Ecore_X_Atom atom, *oldset = NULL, *newset = NULL;
302 int i = 0, j = 0, num = 0;
303 unsigned char *data = NULL, *old_data = NULL;
304
305 LOGFN(__FILE__, __LINE__, __FUNCTION__);
306 CHECK_XCB_CONN;
307
308 atom = ecore_x_atom_get(type);
309 ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
310 ECORE_X_ATOM_ATOM, 32, &old_data, &num);
311 oldset = (Ecore_X_Atom *)old_data;
312 if (on)
313 {
314 if (ecore_x_dnd_type_isset(win, type))
315 {
316 free(old_data);
317 return;
318 }
319 newset = calloc(num + 1, sizeof(Ecore_X_Atom));
320 if (!newset) return;
321 data = (unsigned char *)newset;
322 for (i = 0; i < num; i++)
323 newset[i + 1] = oldset[i];
324 newset[0] = atom;
325 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
326 ECORE_X_ATOM_ATOM, 32, data, num + 1);
327 }
328 else
329 {
330 if (!ecore_x_dnd_type_isset(win, type))
331 {
332 free(old_data);
333 return;
334 }
335 newset = calloc(num - 1, sizeof(Ecore_X_Atom));
336 if (!newset)
337 {
338 free(old_data);
339 return;
340 }
341 data = (unsigned char *)newset;
342 for (i = 0; i < num; i++)
343 if (oldset[i] != atom)
344 newset[j++] = oldset[i];
345 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
346 ECORE_X_ATOM_ATOM, 32, data, num - 1);
347 }
348 free(oldset);
349 free(newset);
350}
351
352EAPI void
353ecore_x_dnd_types_set(Ecore_X_Window win,
354 const char **types,
355 unsigned int num_types)
356{
357 Ecore_X_Atom *newset = NULL;
358 unsigned int i;
359 unsigned char *data = NULL;
360
361 LOGFN(__FILE__, __LINE__, __FUNCTION__);
362 CHECK_XCB_CONN;
363
364 if (!num_types)
365 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_TYPE_LIST);
366 else
367 {
368 newset = calloc(num_types, sizeof(Ecore_X_Atom));
369 if (!newset) return;
370
371 data = (unsigned char *)newset;
372 for (i = 0; i < num_types; i++)
373 {
374 newset[i] = ecore_x_atom_get(types[i]);
375 ecore_x_selection_converter_atom_add(newset[i],
376 _ecore_xcb_dnd_converter_copy);
377 }
378 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
379 ECORE_X_ATOM_ATOM, 32, data,
380 num_types);
381 free(newset);
382 }
383}
384
385EAPI void
386ecore_x_dnd_actions_set(Ecore_X_Window win,
387 Ecore_X_Atom *actions,
388 unsigned int num_actions)
389{
390 unsigned int i;
391 unsigned char *data = NULL;
392
393 LOGFN(__FILE__, __LINE__, __FUNCTION__);
394 CHECK_XCB_CONN;
395
396 if (!num_actions)
397 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_ACTION_LIST);
398 else
399 {
400 data = (unsigned char *)actions;
401 for (i = 0; i < num_actions; i++)
402 ecore_x_selection_converter_atom_add(actions[i],
403 _ecore_xcb_dnd_converter_copy);
404 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_ACTION_LIST,
405 ECORE_X_ATOM_ATOM, 32, data,
406 num_actions);
407 }
408}
409
410/**
411 * The DND position update cb is called Ecore_X sends a DND position to a
412 * client.
413 *
414 * It essentially mirrors some of the data sent in the position message.
415 * Generally this cb should be set just before position update is called.
416 * Please note well you need to look after your own data pointer if someone
417 * trashes you position update cb set.
418 *
419 * It is considered good form to clear this when the dnd event finishes.
420 *
421 * @param cb Callback to updated each time ecore_x sends a position update.
422 * @param data User data.
423 */
424EAPI void
425ecore_x_dnd_callback_pos_update_set(void (*cb)(void *, Ecore_X_Xdnd_Position *data),
426 const void *data)
427{
428 _posupdatecb = cb;
429 _posupdatedata = (void *)data;
430}
431
432EAPI Eina_Bool
433ecore_x_dnd_begin(Ecore_X_Window source,
434 unsigned char *data,
435 int size)
436{
437 LOGFN(__FILE__, __LINE__, __FUNCTION__);
438
439 if (!ecore_x_dnd_version_get(source)) return EINA_FALSE;
440
441 /* Take ownership of XdndSelection */
442 if (!ecore_x_selection_xdnd_set(source, data, size)) return EINA_FALSE;
443
444 if (_version_cache)
445 {
446 free(_version_cache);
447 _version_cache = NULL;
448 _version_cache_num = 0;
449 _version_cache_alloc = 0;
450 }
451
452 ecore_x_window_shadow_tree_flush();
453
454 _source->win = source;
455 ecore_x_window_ignore_set(_source->win, 1);
456 _source->state = ECORE_X_DND_SOURCE_DRAGGING;
457 _source->time = _ecore_xcb_events_last_time_get();
458 _source->prev.window = 0;
459
460 /* Default Accepted Action: move */
461 _source->action = ECORE_X_ATOM_XDND_ACTION_MOVE;
462 _source->accepted_action = XCB_NONE;
463 _source->dest = XCB_NONE;
464
465 return EINA_TRUE;
466}
467
468EAPI void
469ecore_x_dnd_send_finished(void)
470{
471 xcb_client_message_event_t ev;
472
473 LOGFN(__FILE__, __LINE__, __FUNCTION__);
474 CHECK_XCB_CONN;
475
476 if (_target->state == ECORE_X_DND_TARGET_IDLE) return;
477
478 memset(&ev, 0, sizeof(xcb_client_message_event_t));
479
480 ev.response_type = XCB_CLIENT_MESSAGE;
481 ev.format = 32;
482 ev.type = ECORE_X_ATOM_XDND_FINISHED;
483 ev.window = _target->source;
484 ev.data.data32[0] = _target->win;
485 ev.data.data32[1] = 0;
486 ev.data.data32[2] = 0;
487 if (_target->will_accept)
488 {
489 ev.data.data32[1] |= 0x1UL;
490 ev.data.data32[2] = _target->accepted_action;
491 }
492
493 xcb_send_event(_ecore_xcb_conn, 0, _target->source,
494 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
495// ecore_x_flush();
496 _target->state = ECORE_X_DND_TARGET_IDLE;
497}
498
499EAPI void
500ecore_x_dnd_source_action_set(Ecore_X_Atom action)
501{
502 LOGFN(__FILE__, __LINE__, __FUNCTION__);
503
504 _source->action = action;
505 if (_source->prev.window)
506 _ecore_xcb_dnd_drag(_source->prev.window,
507 _source->prev.x, _source->prev.y);
508}
509
510Ecore_X_DND_Source *
511_ecore_xcb_dnd_source_get(void)
512{
513 return _source;
514}
515
516Ecore_X_DND_Target *
517_ecore_xcb_dnd_target_get(void)
518{
519 return _target;
520}
521
522void
523_ecore_xcb_dnd_drag(Ecore_X_Window root,
524 int x,
525 int y)
526{
527 xcb_client_message_event_t ev;
528 Ecore_X_Window win, *skip;
529 Ecore_X_Xdnd_Position pos;
530 int num = 0;
531
532 if (_source->state != ECORE_X_DND_SOURCE_DRAGGING) return;
533
534 LOGFN(__FILE__, __LINE__, __FUNCTION__);
535 CHECK_XCB_CONN;
536
537 memset(&ev, 0, sizeof(xcb_client_message_event_t));
538
539 ev.response_type = XCB_CLIENT_MESSAGE;
540 ev.format = 32;
541
542 skip = ecore_x_window_ignore_list(&num);
543 win = ecore_x_window_shadow_tree_at_xy_with_skip_get(root, x, y, skip, num);
544 while ((win) && !(ecore_x_dnd_version_get(win)))
545 win = ecore_x_window_shadow_parent_get(root, win);
546
547 if ((_source->dest) && (win != _source->dest))
548 {
549 ev.window = _source->dest;
550 ev.type = ECORE_X_ATOM_XDND_LEAVE;
551 ev.data.data32[0] = _source->win;
552 ev.data.data32[1] = 0;
553
554 xcb_send_event(_ecore_xcb_conn, 0, _source->dest,
555 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
556// ecore_x_flush();
557 _source->suppress = 0;
558 }
559
560 if (win)
561 {
562 int x1, x2, y1, y2;
563
564 _source->version = MIN(ECORE_X_DND_VERSION,
565 ecore_x_dnd_version_get(win));
566 if (win != _source->dest)
567 {
568 int i = 0;
569 unsigned char *data;
570 Ecore_X_Atom *types;
571
572 ecore_x_window_prop_property_get(_source->win,
573 ECORE_X_ATOM_XDND_TYPE_LIST,
574 ECORE_X_ATOM_ATOM, 32,
575 &data, &num);
576 types = (Ecore_X_Atom *)data;
577 ev.window = win;
578 ev.type = ECORE_X_ATOM_XDND_ENTER;
579 ev.data.data32[0] = _source->win;
580 ev.data.data32[1] = 0;
581 if (num > 3)
582 ev.data.data32[1] |= 0x1UL;
583 else
584 ev.data.data32[1] &= 0xfffffffeUL;
585 ev.data.data32[1] |= ((unsigned long)_source->version) << 24;
586
587 for (i = 2; i < 5; i++)
588 ev.data.data32[i] = 0;
589 for (i = 0; i < MIN(num, 3); ++i)
590 ev.data.data32[i + 2] = types[i];
591 free(data);
592
593 xcb_send_event(_ecore_xcb_conn, 0, win,
594 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
595// ecore_x_flush();
596 _source->await_status = 0;
597 _source->will_accept = 0;
598 }
599
600 x1 = _source->rectangle.x;
601 x2 = _source->rectangle.x + _source->rectangle.width;
602 y1 = _source->rectangle.y;
603 y2 = _source->rectangle.y + _source->rectangle.height;
604
605 if ((!_source->await_status) || (!_source->suppress) ||
606 ((x < x1) || (x > x2) || (y < y1) || (y > y2)))
607 {
608 ev.window = win;
609 ev.type = ECORE_X_ATOM_XDND_POSITION;
610 ev.data.data32[0] = _source->win;
611 ev.data.data32[1] = 0;
612 ev.data.data32[2] = ((x << 16) & 0xffff0000) | (y & 0xffff);
613 ev.data.data32[3] = _source->time;
614 ev.data.data32[4] = _source->action;
615
616 xcb_send_event(_ecore_xcb_conn, 0, win,
617 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
618// ecore_x_flush();
619 _source->await_status = 1;
620 }
621 }
622
623 if (_posupdatecb)
624 {
625 pos.position.x = x;
626 pos.position.y = y;
627 pos.win = win;
628 pos.prev = _source->dest;
629 _posupdatecb(_posupdatedata, &pos);
630 }
631
632 _source->prev.x = x;
633 _source->prev.y = y;
634 _source->prev.window = root;
635 _source->dest = win;
636}
637
638EAPI Ecore_X_Atom
639ecore_x_dnd_source_action_get(void)
640{
641 return _source->action;
642}
643
644/* local functions */
645static Eina_Bool
646_ecore_xcb_dnd_converter_copy(char *target __UNUSED__,
647 void *data,
648 int size,
649 void **data_ret,
650 int *size_ret,
651 Ecore_X_Atom *tprop __UNUSED__,
652 int *count __UNUSED__)
653{
654 Ecore_Xcb_Textproperty text_prop;
655 Ecore_Xcb_Encoding_Style style = XcbTextStyle;
656 char *mystr;
657
658 LOGFN(__FILE__, __LINE__, __FUNCTION__);
659
660 if ((!data) || (!size)) return EINA_FALSE;
661
662 mystr = calloc(1, size + 1);
663 if (!mystr) return EINA_FALSE;
664
665 memcpy(mystr, data, size);
666 if (_ecore_xcb_mb_textlist_to_textproperty(&mystr, 1, style, &text_prop))
667 {
668 int len;
669
670 len = strlen((char *)text_prop.value) + 1;
671 if (!(*data_ret = malloc(len)))
672 {
673 free(mystr);
674 return EINA_FALSE;
675 }
676 memcpy(*data_ret, text_prop.value, len);
677 *size_ret = len;
678 free(text_prop.value);
679 free(mystr);
680 return EINA_TRUE;
681 }
682 else
683 {
684 free(mystr);
685 return EINA_FALSE;
686 }
687}
688
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dpms.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dpms.c
deleted file mode 100644
index 324717c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_dpms.c
+++ /dev/null
@@ -1,318 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_DAMAGE
3# include <xcb/dpms.h>
4#endif
5
6/* local variables */
7static Eina_Bool _dpms_avail = EINA_FALSE;
8
9void
10_ecore_xcb_dpms_init(void)
11{
12 LOGFN(__FILE__, __LINE__, __FUNCTION__);
13
14#ifdef ECORE_XCB_DPMS
15 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_dpms_id);
16#endif
17}
18
19void
20_ecore_xcb_dpms_finalize(void)
21{
22#ifdef ECORE_XCB_DPMS
23 const xcb_query_extension_reply_t *ext_reply;
24#endif
25
26 LOGFN(__FILE__, __LINE__, __FUNCTION__);
27
28#ifdef ECORE_XCB_DPMS
29 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_dpms_id);
30 if ((ext_reply) && (ext_reply->present))
31 {
32 xcb_dpms_get_version_cookie_t cookie;
33 xcb_dpms_get_version_reply_t *reply;
34
35 cookie =
36 xcb_dpms_get_version_unchecked(_ecore_xcb_conn,
37 XCB_DPMS_MAJOR_VERSION,
38 XCB_DPMS_MINOR_VERSION);
39 reply = xcb_dpms_get_version_reply(_ecore_xcb_conn, cookie, NULL);
40 if (reply)
41 {
42 if (reply->server_major_version >= 1)
43 _dpms_avail = EINA_TRUE;
44 free(reply);
45 }
46 }
47#endif
48}
49
50/**
51 * @defgroup Ecore_X_DPMS_Group X DPMS Extension Functions
52 *
53 * Functions related to the X DPMS Extension
54 */
55
56/**
57 * Checks if the DPMS extension is available or not.
58 *
59 * @return @c EINA_TRUE if the DPMS extension is available,
60 * @c EINA_FALSE otherwise.
61 *
62 * Return EINA_TRUE if the X server supports the DPMS Extension version 1.0,
63 * EINA_FALSE otherwise.
64 *
65 * @ingroup Ecore_X_DPMS_Group
66 */
67EAPI Eina_Bool
68ecore_x_dpms_query(void)
69{
70// LOGFN(__FILE__, __LINE__, __FUNCTION__);
71
72 return _dpms_avail;
73}
74
75/**
76 * Checks if the X server is capable of DPMS.
77 * @return @c 1 if the X server is capable of DPMS, @c 0 otherwise.
78 * @ingroup Ecore_X_DPMS_Group
79 */
80EAPI Eina_Bool
81ecore_x_dpms_capable_get(void)
82{
83 Eina_Bool ret = EINA_FALSE;
84#ifdef ECORE_XCB_DPMS
85 xcb_dpms_capable_cookie_t cookie;
86 xcb_dpms_capable_reply_t *reply;
87#endif
88
89 LOGFN(__FILE__, __LINE__, __FUNCTION__);
90 CHECK_XCB_CONN;
91
92 if (!_dpms_avail) return EINA_FALSE;
93
94#ifdef ECORE_XCB_DPMS
95 cookie = xcb_dpms_capable_unchecked(_ecore_xcb_conn);
96 reply = xcb_dpms_capable_reply(_ecore_xcb_conn, cookie, NULL);
97 if (reply)
98 {
99 ret = reply->capable;
100 free(reply);
101 }
102#endif
103
104 return ret;
105}
106
107/**
108 * Checks the DPMS state of the display.
109 * @return @c EINA_TRUE if DPMS is enabled, @c EINA_FALSE otherwise.
110 * @ingroup Ecore_X_DPMS_Group
111 */
112EAPI Eina_Bool
113ecore_x_dpms_enabled_get(void)
114{
115 Eina_Bool ret = EINA_FALSE;
116#ifdef ECORE_XCB_DPMS
117 xcb_dpms_info_cookie_t cookie;
118 xcb_dpms_info_reply_t *reply;
119#endif
120
121 LOGFN(__FILE__, __LINE__, __FUNCTION__);
122 CHECK_XCB_CONN;
123
124 if (!_dpms_avail) return EINA_FALSE;
125
126#ifdef ECORE_XCB_DPMS
127 cookie = xcb_dpms_info_unchecked(_ecore_xcb_conn);
128 reply = xcb_dpms_info_reply(_ecore_xcb_conn, cookie, NULL);
129 if (!reply) return EINA_FALSE;
130 if (reply->state) ret = EINA_TRUE;
131 free(reply);
132#endif
133
134 return ret;
135}
136
137/**
138 * Sets the DPMS state of the display.
139 * @param enabled @c 0 to disable DPMS characteristics of the server, enable it otherwise.
140 * @ingroup Ecore_X_DPMS_Group
141 */
142EAPI void
143ecore_x_dpms_enabled_set(int enabled)
144{
145 LOGFN(__FILE__, __LINE__, __FUNCTION__);
146 CHECK_XCB_CONN;
147
148 if (!_dpms_avail) return;
149
150#ifdef ECORE_XCB_DPMS
151 if (enabled)
152 xcb_dpms_enable(_ecore_xcb_conn);
153 else
154 xcb_dpms_disable(_ecore_xcb_conn);
155#endif
156}
157
158/**
159 * Gets the timeouts. The values are in unit of seconds.
160 * @param standby Amount of time of inactivity before standby mode will be invoked.
161 * @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
162 * @param off Amount of time of inactivity before the monitor is shut off.
163 * @ingroup Ecore_X_DPMS_Group
164 */
165EAPI void
166ecore_x_dpms_timeouts_get(unsigned int *standby,
167 unsigned int *suspend,
168 unsigned int *off)
169{
170#ifdef ECORE_XCB_DPMS
171 xcb_dpms_get_timeouts_cookie_t cookie;
172 xcb_dpms_get_timeouts_reply_t *reply;
173#endif
174
175 LOGFN(__FILE__, __LINE__, __FUNCTION__);
176 CHECK_XCB_CONN;
177
178 if (standby) *standby = 0;
179 if (suspend) *suspend = 0;
180 if (off) *off = 0;
181
182 if (!_dpms_avail) return;
183
184#ifdef ECORE_XCB_DPMS
185 cookie = xcb_dpms_get_timeouts_unchecked(_ecore_xcb_conn);
186 reply = xcb_dpms_get_timeouts_reply(_ecore_xcb_conn, cookie, NULL);
187 if (!reply) return;
188 if (standby) *standby = reply->standby_timeout;
189 if (suspend) *suspend = reply->suspend_timeout;
190 if (off) *off = reply->off_timeout;
191 free(reply);
192#endif
193}
194
195/**
196 * Sets the timeouts. The values are in unit of seconds.
197 * @param standby Amount of time of inactivity before standby mode will be invoked.
198 * @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
199 * @param off Amount of time of inactivity before the monitor is shut off.
200 * @ingroup Ecore_X_DPMS_Group
201 */
202EAPI Eina_Bool
203ecore_x_dpms_timeouts_set(unsigned int standby,
204 unsigned int suspend,
205 unsigned int off)
206{
207 LOGFN(__FILE__, __LINE__, __FUNCTION__);
208 CHECK_XCB_CONN;
209
210 if (!_dpms_avail) return EINA_FALSE;
211
212#ifdef ECORE_XCB_DPMS
213 // FIXME: Add request check
214 xcb_dpms_set_timeouts(_ecore_xcb_conn, standby, suspend, off);
215 return EINA_TRUE;
216#endif
217
218 return EINA_FALSE;
219}
220
221/**
222 * Returns the amount of time of inactivity before standby mode is invoked.
223 * @return The standby timeout value.
224 * @ingroup Ecore_X_DPMS_Group
225 */
226EAPI unsigned int
227ecore_x_dpms_timeout_standby_get(void)
228{
229 unsigned int standby = 0;
230
231 LOGFN(__FILE__, __LINE__, __FUNCTION__);
232
233 ecore_x_dpms_timeouts_get(&standby, NULL, NULL);
234 return standby;
235}
236
237/**
238 * Returns the amount of time of inactivity before the second level of
239 * power saving is invoked.
240 * @return The suspend timeout value.
241 * @ingroup Ecore_X_DPMS_Group
242 */
243EAPI unsigned int
244ecore_x_dpms_timeout_suspend_get(void)
245{
246 unsigned int suspend = 0;
247
248 LOGFN(__FILE__, __LINE__, __FUNCTION__);
249
250 ecore_x_dpms_timeouts_get(NULL, &suspend, NULL);
251 return suspend;
252}
253
254/**
255 * Returns the amount of time of inactivity before the third and final
256 * level of power saving is invoked.
257 * @return The off timeout value.
258 * @ingroup Ecore_X_DPMS_Group
259 */
260EAPI unsigned int
261ecore_x_dpms_timeout_off_get(void)
262{
263 unsigned int off = 0;
264
265 LOGFN(__FILE__, __LINE__, __FUNCTION__);
266
267 ecore_x_dpms_timeouts_get(NULL, NULL, &off);
268 return off;
269}
270
271/**
272 * Sets the standby timeout (in unit of seconds).
273 * @param new_timeout Amount of time of inactivity before standby mode will be invoked.
274 * @ingroup Ecore_X_DPMS_Group
275 */
276EAPI void
277ecore_x_dpms_timeout_standby_set(unsigned int new_timeout)
278{
279 unsigned int standby = 0, suspend = 0, off = 0;
280
281 LOGFN(__FILE__, __LINE__, __FUNCTION__);
282
283 ecore_x_dpms_timeouts_get(&standby, &suspend, &off);
284 ecore_x_dpms_timeouts_set(new_timeout, suspend, off);
285}
286
287/**
288 * Sets the suspend timeout (in unit of seconds).
289 * @param new_timeout Amount of time of inactivity before the screen is placed into suspend mode.
290 * @ingroup Ecore_X_DPMS_Group
291 */
292EAPI void
293ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout)
294{
295 unsigned int standby = 0, suspend = 0, off = 0;
296
297 LOGFN(__FILE__, __LINE__, __FUNCTION__);
298
299 ecore_x_dpms_timeouts_get(&standby, &suspend, &off);
300 ecore_x_dpms_timeouts_set(standby, new_timeout, off);
301}
302
303/**
304 * Sets the off timeout (in unit of seconds).
305 * @param new_timeout Amount of time of inactivity before the monitor is shut off.
306 * @ingroup Ecore_X_DPMS_Group
307 */
308EAPI void
309ecore_x_dpms_timeout_off_set(unsigned int new_timeout)
310{
311 unsigned int standby = 0, suspend = 0, off = 0;
312
313 LOGFN(__FILE__, __LINE__, __FUNCTION__);
314
315 ecore_x_dpms_timeouts_get(&standby, &suspend, &off);
316 ecore_x_dpms_timeouts_set(standby, suspend, new_timeout);
317}
318
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_drawable.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_drawable.c
deleted file mode 100644
index 4e9a356..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_drawable.c
+++ /dev/null
@@ -1,123 +0,0 @@
1#include "ecore_xcb_private.h"
2
3/**
4 * @defgroup Ecore_X_Drawable_Group X Drawable Functions
5 *
6 * Functions that operate on drawables.
7 */
8
9/**
10 * Fill the specified rectangle on a drawable.
11 * @param d The given drawable.
12 * @param gc The graphic context that controls the fill rules.
13 * @param x The X coordinate of the top-left corner of the rectangle.
14 * @param y The Y coordinate of the top-left corner of the rectangle.
15 * @param width The width of the rectangle.
16 * @param height The height of the rectangle.
17 */
18EAPI void
19ecore_x_drawable_rectangle_fill(Ecore_X_Drawable draw,
20 Ecore_X_GC gc,
21 int x,
22 int y,
23 int w,
24 int h)
25{
26 xcb_rectangle_t rect;
27
28 LOGFN(__FILE__, __LINE__, __FUNCTION__);
29 CHECK_XCB_CONN;
30
31 rect.x = x;
32 rect.y = y;
33 rect.width = w;
34 rect.height = h;
35 xcb_poly_fill_rectangle(_ecore_xcb_conn, draw, gc, 1,
36 (const xcb_rectangle_t *)&rect);
37// ecore_x_flush();
38}
39
40/**
41 * Retrieves the geometry of the given drawable.
42 * @param d The given drawable.
43 * @param x Pointer to an integer into which the X position is to be stored.
44 * @param y Pointer to an integer into which the Y position is to be stored.
45 * @param w Pointer to an integer into which the width is to be stored.
46 * @param h Pointer to an integer into which the height is to be stored.
47 * @ingroup Ecore_X_Drawable_Group
48 */
49EAPI void
50ecore_x_drawable_geometry_get(Ecore_X_Drawable draw,
51 int *x,
52 int *y,
53 int *w,
54 int *h)
55{
56 xcb_get_geometry_cookie_t cookie;
57 xcb_get_geometry_reply_t *reply;
58
59 LOGFN(__FILE__, __LINE__, __FUNCTION__);
60 CHECK_XCB_CONN;
61
62 if (x) *x = 0;
63 if (y) *y = 0;
64 if (w) *w = 0;
65 if (h) *h = 0;
66 cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, draw);
67 reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL);
68 if (!reply) return;
69 if (x) *x = reply->x;
70 if (y) *y = reply->y;
71 if (w) *w = (int)reply->width;
72 if (h) *h = (int)reply->height;
73 free(reply);
74}
75
76/**
77 * Retrieves the width of the border of the given drawable.
78 * @param d The given drawable.
79 * @return The border width of the given drawable.
80 * @ingroup Ecore_X_Drawable_Group
81 */
82EAPI int
83ecore_x_drawable_border_width_get(Ecore_X_Drawable d)
84{
85 xcb_get_geometry_cookie_t cookie;
86 xcb_get_geometry_reply_t *reply;
87 int ret = 0;
88
89 LOGFN(__FILE__, __LINE__, __FUNCTION__);
90 CHECK_XCB_CONN;
91
92 cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, d);
93 reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL);
94 if (!reply) return 0;
95 ret = (int)reply->border_width;
96 free(reply);
97 return ret;
98}
99
100/**
101 * Retrieves the depth of the given drawable.
102 * @param d The given drawable.
103 * @return The depth of the given drawable.
104 * @ingroup Ecore_X_Drawable_Group
105 */
106EAPI int
107ecore_x_drawable_depth_get(Ecore_X_Drawable d)
108{
109 xcb_get_geometry_cookie_t cookie;
110 xcb_get_geometry_reply_t *reply;
111 int ret = 0;
112
113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
114 CHECK_XCB_CONN;
115
116 cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, d);
117 reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL);
118 if (!reply) return 0;
119 ret = (int)reply->depth;
120 free(reply);
121 return ret;
122}
123
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c
deleted file mode 100644
index 60bfc9c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c
+++ /dev/null
@@ -1,1307 +0,0 @@
1#include "ecore_xcb_private.h"
2
3/* local function prototypes */
4static Ecore_X_Atom _ecore_xcb_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state);
5static Ecore_X_Virtual_Keyboard_State _ecore_xcb_e_vkbd_state_get(Ecore_X_Atom atom);
6static Ecore_X_Atom _ecore_xcb_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state);
7static Ecore_X_Illume_Quickpanel_State _ecore_xcb_e_quickpanel_state_get(Ecore_X_Atom atom);
8static Ecore_X_Atom _ecore_xcb_e_illume_atom_get(Ecore_X_Illume_Mode mode);
9static Ecore_X_Illume_Mode _ecore_xcb_e_illume_mode_get(Ecore_X_Atom atom);
10static Ecore_X_Atom _ecore_xcb_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state);
11static Ecore_X_Illume_Indicator_State _ecore_xcb_e_indicator_state_get(Ecore_X_Atom atom);
12
13EAPI void
14ecore_x_e_init(void)
15{
16}
17
18EAPI void
19ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
20 Ecore_X_Window win)
21{
22 xcb_client_message_event_t ev;
23
24 LOGFN(__FILE__, __LINE__, __FUNCTION__);
25 CHECK_XCB_CONN;
26
27 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
28
29 memset(&ev, 0, sizeof(xcb_client_message_event_t));
30
31 ev.response_type = XCB_CLIENT_MESSAGE;
32 ev.format = 32;
33 ev.window = win;
34 ev.type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
35 ev.data.data32[0] = win;
36 ev.data.data32[1] = 0;
37 ev.data.data32[2] = 0;
38 ev.data.data32[3] = 0;
39 ev.data.data32[4] = 0;
40
41 xcb_send_event(_ecore_xcb_conn, 0, root,
42 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
43 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
44// ecore_x_flush();
45}
46
47EAPI void
48ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
49 Ecore_X_Window win,
50 int w,
51 int h)
52{
53 xcb_client_message_event_t ev;
54
55 LOGFN(__FILE__, __LINE__, __FUNCTION__);
56 CHECK_XCB_CONN;
57
58 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
59
60 memset(&ev, 0, sizeof(xcb_client_message_event_t));
61
62 ev.response_type = XCB_CLIENT_MESSAGE;
63 ev.format = 32;
64 ev.window = win;
65 ev.type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
66 ev.data.data32[0] = win;
67 ev.data.data32[1] = 1;
68 ev.data.data32[2] = w;
69 ev.data.data32[3] = h;
70 ev.data.data32[4] = 0;
71
72 xcb_send_event(_ecore_xcb_conn, 0, root,
73 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
74 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
75// ecore_x_flush();
76}
77
78EAPI void
79ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
80 Ecore_X_Sync_Counter counter)
81{
82 LOGFN(__FILE__, __LINE__, __FUNCTION__);
83
84 if (counter)
85 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
86 ECORE_X_ATOM_CARDINAL, &counter, 1);
87 else
88 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
89}
90
91EAPI Ecore_X_Sync_Counter
92ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
93{
94 Ecore_X_Sync_Counter counter = 0;
95 int ret = 0;
96
97 LOGFN(__FILE__, __LINE__, __FUNCTION__);
98
99 ret = ecore_x_window_prop_xid_get(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
100 ECORE_X_ATOM_CARDINAL, &counter, 1);
101 if (ret != 1) return 0;
102 return counter;
103}
104
105EAPI Eina_Bool
106ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
107{
108 Ecore_X_Window win, win2;
109 int ret = 0;
110
111 LOGFN(__FILE__, __LINE__, __FUNCTION__);
112
113 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
114 ret =
115 ecore_x_window_prop_xid_get(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
116 ECORE_X_ATOM_WINDOW, &win, 1);
117 if ((ret == 1) && (win))
118 {
119 ret =
120 ecore_x_window_prop_xid_get(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
121 ECORE_X_ATOM_WINDOW, &win2, 1);
122 if ((ret == 1) && (win2 == win))
123 return EINA_TRUE;
124 }
125 return EINA_FALSE;
126}
127
128EAPI void
129ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
130 Eina_Bool enabled)
131{
132 Ecore_X_Window win;
133
134 LOGFN(__FILE__, __LINE__, __FUNCTION__);
135
136 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
137 if (enabled)
138 {
139 win = ecore_x_window_new(root, 1, 2, 3, 4);
140 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
141 ECORE_X_ATOM_WINDOW, &win, 1);
142 ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
143 ECORE_X_ATOM_WINDOW, &win, 1);
144 }
145 else
146 {
147 int ret = 0;
148
149 ret = ecore_x_window_prop_xid_get(root,
150 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
151 ECORE_X_ATOM_WINDOW, &win, 1);
152 if ((ret == 1) && (win))
153 {
154 ecore_x_window_prop_property_del(root,
155 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
156 ecore_x_window_free(win);
157 }
158 }
159}
160
161EAPI void
162ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
163{
164 xcb_client_message_event_t ev;
165
166 LOGFN(__FILE__, __LINE__, __FUNCTION__);
167 CHECK_XCB_CONN;
168
169 memset(&ev, 0, sizeof(xcb_client_message_event_t));
170
171 ev.response_type = XCB_CLIENT_MESSAGE;
172 ev.format = 32;
173 ev.window = win;
174 ev.type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
175 ev.data.data32[0] = win;
176 ev.data.data32[1] = 0;
177 ev.data.data32[2] = 0;
178 ev.data.data32[3] = 0;
179 ev.data.data32[4] = 0;
180
181 xcb_send_event(_ecore_xcb_conn, 0, win,
182 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
183// ecore_x_flush();
184}
185
186EAPI void
187ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
188{
189 xcb_client_message_event_t ev;
190
191 LOGFN(__FILE__, __LINE__, __FUNCTION__);
192 CHECK_XCB_CONN;
193
194 memset(&ev, 0, sizeof(xcb_client_message_event_t));
195
196 ev.response_type = XCB_CLIENT_MESSAGE;
197 ev.format = 32;
198 ev.window = win;
199 ev.type = ECORE_X_ATOM_E_COMP_SYNC_END;
200 ev.data.data32[0] = win;
201 ev.data.data32[1] = 0;
202 ev.data.data32[2] = 0;
203 ev.data.data32[3] = 0;
204 ev.data.data32[4] = 0;
205
206 xcb_send_event(_ecore_xcb_conn, 0, win,
207 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
208// ecore_x_flush();
209}
210
211EAPI void
212ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
213{
214 xcb_client_message_event_t ev;
215
216 LOGFN(__FILE__, __LINE__, __FUNCTION__);
217 CHECK_XCB_CONN;
218
219 memset(&ev, 0, sizeof(xcb_client_message_event_t));
220
221 ev.response_type = XCB_CLIENT_MESSAGE;
222 ev.format = 32;
223 ev.window = win;
224 ev.type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
225 ev.data.data32[0] = win;
226 ev.data.data32[1] = 0;
227 ev.data.data32[2] = 0;
228 ev.data.data32[3] = 0;
229 ev.data.data32[4] = 0;
230
231 xcb_send_event(_ecore_xcb_conn, 0, win,
232 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
233// ecore_x_flush();
234}
235
236EAPI void
237ecore_x_e_comp_flush_send(Ecore_X_Window win)
238{
239 xcb_client_message_event_t ev;
240
241 LOGFN(__FILE__, __LINE__, __FUNCTION__);
242 CHECK_XCB_CONN;
243
244 memset(&ev, 0, sizeof(xcb_client_message_event_t));
245
246 ev.response_type = XCB_CLIENT_MESSAGE;
247 ev.format = 32;
248 ev.window = win;
249 ev.type = ECORE_X_ATOM_E_COMP_FLUSH;
250 ev.data.data32[0] = win;
251 ev.data.data32[1] = 0;
252 ev.data.data32[2] = 0;
253 ev.data.data32[3] = 0;
254 ev.data.data32[4] = 0;
255
256 xcb_send_event(_ecore_xcb_conn, 0, win,
257 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
258// ecore_x_flush();
259}
260
261EAPI void
262ecore_x_e_comp_dump_send(Ecore_X_Window win)
263{
264 xcb_client_message_event_t ev;
265
266 LOGFN(__FILE__, __LINE__, __FUNCTION__);
267 CHECK_XCB_CONN;
268
269 memset(&ev, 0, sizeof(xcb_client_message_event_t));
270
271 ev.response_type = XCB_CLIENT_MESSAGE;
272 ev.format = 32;
273 ev.window = win;
274 ev.type = ECORE_X_ATOM_E_COMP_DUMP;
275 ev.data.data32[0] = win;
276 ev.data.data32[1] = 0;
277 ev.data.data32[2] = 0;
278 ev.data.data32[3] = 0;
279 ev.data.data32[4] = 0;
280
281 xcb_send_event(_ecore_xcb_conn, 0, win,
282 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
283// ecore_x_flush();
284}
285
286EAPI void
287ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
288 Ecore_X_Pixmap pixmap)
289{
290 LOGFN(__FILE__, __LINE__, __FUNCTION__);
291
292 if (pixmap)
293 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
294 ECORE_X_ATOM_PIXMAP, &pixmap, 1);
295 else
296 ecore_x_window_prop_property_del(win, pixmap);
297}
298
299EAPI Ecore_X_Pixmap
300ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
301{
302 Ecore_X_Pixmap pixmap = 0;
303 int ret = 0;
304
305 LOGFN(__FILE__, __LINE__, __FUNCTION__);
306
307 ret = ecore_x_window_prop_xid_get(win, ECORE_X_ATOM_E_COMP_PIXMAP,
308 ECORE_X_ATOM_PIXMAP, &pixmap, 1);
309 if (ret != 1) return 0;
310 return pixmap;
311}
312
313EAPI void
314ecore_x_e_frame_size_set(Ecore_X_Window win,
315 int fl,
316 int fr,
317 int ft,
318 int fb)
319{
320 uint32_t frames[4];
321
322 LOGFN(__FILE__, __LINE__, __FUNCTION__);
323
324 frames[0] = fl;
325 frames[1] = fr;
326 frames[2] = ft;
327 frames[3] = fb;
328 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
329}
330
331EAPI Ecore_X_Virtual_Keyboard_State
332ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
333{
334 Ecore_X_Atom atom = 0;
335
336 LOGFN(__FILE__, __LINE__, __FUNCTION__);
337
338 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
339 &atom, 1))
340 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
341
342 return _ecore_xcb_e_vkbd_state_get(atom);
343}
344
345EAPI void
346ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
347 Ecore_X_Virtual_Keyboard_State state)
348{
349 Ecore_X_Atom atom = 0;
350
351 LOGFN(__FILE__, __LINE__, __FUNCTION__);
352
353 atom = _ecore_xcb_e_vkbd_atom_get(state);
354 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
355 &atom, 1);
356}
357
358EAPI void
359ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
360 Ecore_X_Virtual_Keyboard_State state)
361{
362 LOGFN(__FILE__, __LINE__, __FUNCTION__);
363
364 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
365 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
366 _ecore_xcb_e_vkbd_atom_get(state),
367 0, 0, 0, 0);
368}
369
370EAPI void
371ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
372 unsigned int is_keyboard)
373{
374 LOGFN(__FILE__, __LINE__, __FUNCTION__);
375
376 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
377 &is_keyboard, 1);
378}
379
380EAPI Eina_Bool
381ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
382{
383 unsigned int val = 0;
384
385 LOGFN(__FILE__, __LINE__, __FUNCTION__);
386
387 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
388 &val, 1))
389 return EINA_FALSE;
390
391 return val ? EINA_TRUE : EINA_FALSE;
392}
393
394EAPI int
395ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
396{
397 unsigned int val = 0;
398
399 LOGFN(__FILE__, __LINE__, __FUNCTION__);
400
401 if (!ecore_x_window_prop_card32_get(win,
402 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
403 &val, 1))
404 return 0;
405
406 return val;
407}
408
409EAPI void
410ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
411 unsigned int priority)
412{
413 LOGFN(__FILE__, __LINE__, __FUNCTION__);
414
415 ecore_x_window_prop_card32_set(win,
416 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
417 &priority, 1);
418}
419
420EAPI int
421ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
422{
423 unsigned int val = 0;
424
425 LOGFN(__FILE__, __LINE__, __FUNCTION__);
426
427 if (!ecore_x_window_prop_card32_get(win,
428 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
429 &val, 1))
430 return 0;
431
432 return val;
433}
434
435EAPI void
436ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
437 unsigned int priority)
438{
439 LOGFN(__FILE__, __LINE__, __FUNCTION__);
440
441 ecore_x_window_prop_card32_set(win,
442 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
443 &priority, 1);
444}
445
446EAPI void
447ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
448 unsigned int zone)
449{
450 LOGFN(__FILE__, __LINE__, __FUNCTION__);
451
452 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
453 &zone, 1);
454}
455
456EAPI int
457ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
458{
459 unsigned int val = 0;
460
461 LOGFN(__FILE__, __LINE__, __FUNCTION__);
462
463 if (!ecore_x_window_prop_card32_get(win,
464 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
465 &val, 1))
466 return 0;
467
468 return val;
469}
470
471EAPI void
472ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
473{
474 LOGFN(__FILE__, __LINE__, __FUNCTION__);
475
476 ecore_x_client_message32_send(win,
477 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
478 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
479 1, 0, 0, 0, 0);
480}
481
482EAPI Eina_Bool
483ecore_x_e_illume_conformant_get(Ecore_X_Window win)
484{
485 unsigned int val = 0;
486
487 LOGFN(__FILE__, __LINE__, __FUNCTION__);
488
489 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
490 &val, 1))
491 return EINA_FALSE;
492
493 return val ? EINA_TRUE : EINA_FALSE;
494}
495
496EAPI void
497ecore_x_e_illume_conformant_set(Ecore_X_Window win,
498 unsigned int is_conformant)
499{
500 LOGFN(__FILE__, __LINE__, __FUNCTION__);
501
502 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
503 &is_conformant, 1);
504}
505
506EAPI void
507ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
508 int x,
509 int y,
510 int w,
511 int h)
512{
513 unsigned int geom[4];
514
515 LOGFN(__FILE__, __LINE__, __FUNCTION__);
516
517 geom[0] = x;
518 geom[1] = y;
519 geom[2] = w;
520 geom[3] = h;
521 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
522 geom, 4);
523}
524
525EAPI Eina_Bool
526ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
527 int *x,
528 int *y,
529 int *w,
530 int *h)
531{
532 unsigned int geom[4];
533
534 LOGFN(__FILE__, __LINE__, __FUNCTION__);
535
536 if (x) *x = 0;
537 if (y) *y = 0;
538 if (w) *w = 0;
539 if (h) *h = 0;
540
541 if (ecore_x_window_prop_card32_get(win,
542 ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
543 geom, 4) != 4)
544 return EINA_FALSE;
545
546 if (x) *x = geom[0];
547 if (y) *y = geom[1];
548 if (w) *w = geom[2];
549 if (h) *h = geom[3];
550
551 return EINA_TRUE;
552}
553
554EAPI void
555ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
556 int x,
557 int y,
558 int w,
559 int h)
560{
561 unsigned int geom[4];
562
563 LOGFN(__FILE__, __LINE__, __FUNCTION__);
564
565 geom[0] = x;
566 geom[1] = y;
567 geom[2] = w;
568 geom[3] = h;
569 ecore_x_window_prop_card32_set(win,
570 ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
571 geom, 4);
572}
573
574EAPI Eina_Bool
575ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
576 int *x,
577 int *y,
578 int *w,
579 int *h)
580{
581 unsigned int geom[4];
582
583 LOGFN(__FILE__, __LINE__, __FUNCTION__);
584
585 if (x) *x = 0;
586 if (y) *y = 0;
587 if (w) *w = 0;
588 if (h) *h = 0;
589
590 if (ecore_x_window_prop_card32_get(win,
591 ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
592 geom, 4) != 4)
593 return EINA_FALSE;
594
595 if (x) *x = geom[0];
596 if (y) *y = geom[1];
597 if (w) *w = geom[2];
598 if (h) *h = geom[3];
599
600 return EINA_TRUE;
601}
602
603EAPI void
604ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
605 int x,
606 int y,
607 int w,
608 int h)
609{
610 unsigned int geom[4];
611
612 LOGFN(__FILE__, __LINE__, __FUNCTION__);
613
614 geom[0] = x;
615 geom[1] = y;
616 geom[2] = w;
617 geom[3] = h;
618 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
619 geom, 4);
620}
621
622EAPI Eina_Bool
623ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
624 int *x,
625 int *y,
626 int *w,
627 int *h)
628{
629 unsigned int geom[4];
630
631 LOGFN(__FILE__, __LINE__, __FUNCTION__);
632
633 if (x) *x = 0;
634 if (y) *y = 0;
635 if (w) *w = 0;
636 if (h) *h = 0;
637
638 if (ecore_x_window_prop_card32_get(win,
639 ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
640 geom, 4) != 4)
641 return EINA_FALSE;
642
643 if (x) *x = geom[0];
644 if (y) *y = geom[1];
645 if (w) *w = geom[2];
646 if (h) *h = geom[3];
647
648 return EINA_TRUE;
649}
650
651EAPI void
652ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
653 unsigned int is_quickpanel)
654{
655 LOGFN(__FILE__, __LINE__, __FUNCTION__);
656
657 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
658 &is_quickpanel, 1);
659}
660
661EAPI Eina_Bool
662ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
663{
664 unsigned int val = 0;
665
666 LOGFN(__FILE__, __LINE__, __FUNCTION__);
667
668 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
669 &val, 1))
670 return EINA_FALSE;
671
672 return val ? EINA_TRUE : EINA_FALSE;
673}
674
675EAPI void
676ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
677 Ecore_X_Illume_Quickpanel_State state)
678{
679 Ecore_X_Atom atom = 0;
680
681 LOGFN(__FILE__, __LINE__, __FUNCTION__);
682
683 atom = _ecore_xcb_e_quickpanel_atom_get(state);
684 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
685 &atom, 1);
686}
687
688EAPI Ecore_X_Illume_Quickpanel_State
689ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
690{
691 Ecore_X_Atom atom = 0;
692
693 LOGFN(__FILE__, __LINE__, __FUNCTION__);
694
695 if (!ecore_x_window_prop_atom_get(win,
696 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
697 &atom, 1))
698 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
699
700 return _ecore_xcb_e_quickpanel_state_get(atom);
701}
702
703EAPI void
704ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
705 Ecore_X_Illume_Quickpanel_State state)
706{
707 LOGFN(__FILE__, __LINE__, __FUNCTION__);
708 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
709 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
710 _ecore_xcb_e_quickpanel_atom_get(state),
711 0, 0, 0, 0);
712}
713
714EAPI void
715ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
716{
717 LOGFN(__FILE__, __LINE__, __FUNCTION__);
718 ecore_x_client_message32_send(win,
719 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
720 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
721 0, 0, 0, 0, 0);
722}
723
724static Ecore_X_Atom
725_ecore_xcb_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)
726{
727 switch (state)
728 {
729 case ECORE_X_ILLUME_CLIPBOARD_STATE_ON:
730 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
731 case ECORE_X_ILLUME_CLIPBOARD_STATE_OFF:
732 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
733 default:
734 break;
735 }
736 return 0;
737}
738
739static Ecore_X_Illume_Clipboard_State
740_ecore_xcb_e_clipboard_state_get(Ecore_X_Atom atom)
741{
742 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON)
743 return ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
744
745 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF)
746 return ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
747
748 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
749}
750
751EAPI void
752ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
753 Ecore_X_Illume_Clipboard_State state)
754{
755 Ecore_X_Atom atom = 0;
756
757 LOGFN(__FILE__, __LINE__, __FUNCTION__);
758 atom = _ecore_xcb_e_clipboard_atom_get(state);
759
760 ecore_x_window_prop_atom_set(win,
761 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
762 &atom, 1);
763}
764
765EAPI Ecore_X_Illume_Clipboard_State
766ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
767{
768 Ecore_X_Atom atom = 0;
769
770 LOGFN(__FILE__, __LINE__, __FUNCTION__);
771
772 if (!ecore_x_window_prop_atom_get(win,
773 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
774 &atom, 1))
775 return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
776 return _ecore_xcb_e_clipboard_state_get(atom);
777}
778
779EAPI void
780ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
781 int x, int y, int w, int h)
782{
783 unsigned int geom[4];
784
785 LOGFN(__FILE__, __LINE__, __FUNCTION__);
786 geom[0] = x;
787 geom[1] = y;
788 geom[2] = w;
789 geom[3] = h;
790 ecore_x_window_prop_card32_set(win,
791 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
792 geom, 4);
793}
794
795EAPI Eina_Bool
796ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
797 int *x, int *y, int *w, int *h)
798{
799 int ret = 0;
800 unsigned int geom[4];
801
802 LOGFN(__FILE__, __LINE__, __FUNCTION__);
803 ret =
804 ecore_x_window_prop_card32_get(win,
805 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
806 geom, 4);
807 if (ret != 4) return EINA_FALSE;
808
809 if (x) *x = geom[0];
810 if (y) *y = geom[1];
811 if (w) *w = geom[2];
812 if (h) *h = geom[3];
813
814 return EINA_TRUE;
815}
816
817EAPI void
818ecore_x_e_illume_mode_set(Ecore_X_Window win,
819 Ecore_X_Illume_Mode mode)
820{
821 Ecore_X_Atom atom = 0;
822
823 LOGFN(__FILE__, __LINE__, __FUNCTION__);
824
825 atom = _ecore_xcb_e_illume_atom_get(mode);
826 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1);
827}
828
829EAPI Ecore_X_Illume_Mode
830ecore_x_e_illume_mode_get(Ecore_X_Window win)
831{
832 Ecore_X_Atom atom = 0;
833
834 LOGFN(__FILE__, __LINE__, __FUNCTION__);
835
836 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
837 return ECORE_X_ILLUME_MODE_UNKNOWN;
838
839 return _ecore_xcb_e_illume_mode_get(atom);
840}
841
842EAPI void
843ecore_x_e_illume_mode_send(Ecore_X_Window win,
844 Ecore_X_Illume_Mode mode)
845{
846 LOGFN(__FILE__, __LINE__, __FUNCTION__);
847
848 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
849 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
850 _ecore_xcb_e_illume_atom_get(mode),
851 0, 0, 0, 0);
852}
853
854EAPI void
855ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
856{
857 LOGFN(__FILE__, __LINE__, __FUNCTION__);
858
859 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
860 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
861 1, 0, 0, 0, 0);
862}
863
864EAPI void
865ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
866{
867 LOGFN(__FILE__, __LINE__, __FUNCTION__);
868
869 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
870 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
871 1, 0, 0, 0, 0);
872}
873
874EAPI void
875ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
876{
877 LOGFN(__FILE__, __LINE__, __FUNCTION__);
878
879 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
880 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
881 1, 0, 0, 0, 0);
882}
883
884EAPI void
885ecore_x_e_illume_close_send(Ecore_X_Window win)
886{
887 LOGFN(__FILE__, __LINE__, __FUNCTION__);
888
889 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
890 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
891 1, 0, 0, 0, 0);
892}
893
894EAPI void
895ecore_x_e_illume_home_new_send(Ecore_X_Window win)
896{
897 LOGFN(__FILE__, __LINE__, __FUNCTION__);
898
899 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
900 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
901 1, 0, 0, 0, 0);
902}
903
904EAPI void
905ecore_x_e_illume_home_del_send(Ecore_X_Window win)
906{
907 LOGFN(__FILE__, __LINE__, __FUNCTION__);
908
909 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
910 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
911 1, 0, 0, 0, 0);
912}
913
914EAPI void
915ecore_x_e_illume_drag_set(Ecore_X_Window win,
916 unsigned int drag)
917{
918 LOGFN(__FILE__, __LINE__, __FUNCTION__);
919
920 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
921}
922
923EAPI void
924ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
925 unsigned int is_locked)
926{
927 LOGFN(__FILE__, __LINE__, __FUNCTION__);
928
929 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
930 &is_locked, 1);
931}
932
933EAPI Eina_Bool
934ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
935{
936 unsigned int val = 0;
937
938 LOGFN(__FILE__, __LINE__, __FUNCTION__);
939
940 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
941 &val, 1))
942 return EINA_FALSE;
943
944 return val ? EINA_TRUE : EINA_FALSE;
945}
946
947EAPI Eina_Bool
948ecore_x_e_illume_drag_get(Ecore_X_Window win)
949{
950 unsigned int val = 0;
951
952 LOGFN(__FILE__, __LINE__, __FUNCTION__);
953
954 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG, &val, 1))
955 return EINA_FALSE;
956
957 return val ? EINA_TRUE : EINA_FALSE;
958}
959
960EAPI void
961ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
962{
963 LOGFN(__FILE__, __LINE__, __FUNCTION__);
964 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
965 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
966 1, 0, 0, 0, 0);
967}
968
969EAPI void
970ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
971{
972 LOGFN(__FILE__, __LINE__, __FUNCTION__);
973 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
974 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
975 1, 0, 0, 0, 0);
976}
977
978EAPI void
979ecore_x_e_illume_zone_set(Ecore_X_Window win,
980 Ecore_X_Window zone)
981{
982 LOGFN(__FILE__, __LINE__, __FUNCTION__);
983
984 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE, &zone, 1);
985}
986
987EAPI Ecore_X_Window
988ecore_x_e_illume_zone_get(Ecore_X_Window win)
989{
990 Ecore_X_Window zone;
991
992 LOGFN(__FILE__, __LINE__, __FUNCTION__);
993
994 if (!ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
995 &zone, 1))
996 return 0;
997
998 return zone;
999}
1000
1001EAPI void
1002ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
1003 Ecore_X_Window *zones,
1004 unsigned int num)
1005{
1006 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1007
1008 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
1009 zones, num);
1010}
1011
1012/* local functions */
1013static Ecore_X_Atom
1014_ecore_xcb_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
1015{
1016 switch (state)
1017 {
1018 case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
1019 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
1020
1021 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
1022 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
1023
1024 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
1025 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
1026
1027 case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
1028 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
1029
1030 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
1031 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
1032
1033 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
1034 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
1035
1036 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
1037 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
1038
1039 case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
1040 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
1041
1042 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
1043 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
1044
1045 case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
1046 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
1047
1048 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
1049 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
1050
1051 case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
1052 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
1053
1054 case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
1055 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
1056
1057 case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
1058 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
1059
1060 case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
1061 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
1062
1063 default:
1064 break;
1065 }
1066 return 0;
1067}
1068
1069static Ecore_X_Virtual_Keyboard_State
1070_ecore_xcb_e_vkbd_state_get(Ecore_X_Atom atom)
1071{
1072 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
1073 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
1074 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
1075 return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
1076 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
1077 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
1078 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
1079 return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
1080 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
1081 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
1082 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
1083 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
1084 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
1085 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
1086 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
1087 return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
1088 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
1089 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
1090 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
1091 return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
1092 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
1093 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
1094 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
1095 return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
1096 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
1097 return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
1098 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
1099 return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
1100 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
1101 return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
1102
1103 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
1104}
1105
1106static Ecore_X_Atom
1107_ecore_xcb_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
1108{
1109 switch (state)
1110 {
1111 case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
1112 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
1113
1114 case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
1115 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
1116
1117 default:
1118 break;
1119 }
1120 return 0;
1121}
1122
1123static Ecore_X_Illume_Quickpanel_State
1124_ecore_xcb_e_quickpanel_state_get(Ecore_X_Atom atom)
1125{
1126 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
1127 return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
1128 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
1129 return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
1130
1131 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
1132}
1133
1134static Ecore_X_Atom
1135_ecore_xcb_e_illume_atom_get(Ecore_X_Illume_Mode mode)
1136{
1137 switch (mode)
1138 {
1139 case ECORE_X_ILLUME_MODE_SINGLE:
1140 return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
1141
1142 case ECORE_X_ILLUME_MODE_DUAL_TOP:
1143 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
1144
1145 case ECORE_X_ILLUME_MODE_DUAL_LEFT:
1146 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
1147
1148 default:
1149 break;
1150 }
1151 return ECORE_X_ILLUME_MODE_UNKNOWN;
1152}
1153
1154static Ecore_X_Illume_Mode
1155_ecore_xcb_e_illume_mode_get(Ecore_X_Atom atom)
1156{
1157 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
1158 return ECORE_X_ILLUME_MODE_SINGLE;
1159 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
1160 return ECORE_X_ILLUME_MODE_DUAL_TOP;
1161 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
1162 return ECORE_X_ILLUME_MODE_DUAL_LEFT;
1163
1164 return ECORE_X_ILLUME_MODE_UNKNOWN;
1165}
1166
1167static Ecore_X_Atom
1168_ecore_xcb_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1169{
1170 switch (state)
1171 {
1172 case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1173 return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1174
1175 case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1176 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1177
1178 default:
1179 break;
1180 }
1181 return 0;
1182}
1183
1184static Ecore_X_Illume_Indicator_State
1185_ecore_xcb_e_indicator_state_get(Ecore_X_Atom atom)
1186{
1187 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1188 return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1189 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1190 return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1191
1192 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1193}
1194
1195EAPI void
1196ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
1197 Ecore_X_Illume_Indicator_State state)
1198{
1199 Ecore_X_Atom atom = 0;
1200
1201 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1202
1203 atom = _ecore_xcb_e_indicator_atom_get(state);
1204 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1205 &atom, 1);
1206}
1207
1208EAPI Ecore_X_Illume_Indicator_State
1209ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1210{
1211 Ecore_X_Atom atom = 0;
1212
1213 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1214
1215 if (!ecore_x_window_prop_atom_get(win,
1216 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1217 &atom, 1))
1218 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1219
1220 return _ecore_xcb_e_indicator_state_get(atom);
1221}
1222
1223EAPI void
1224ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
1225 Ecore_X_Illume_Indicator_State state)
1226{
1227 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1228 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1229 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1230 _ecore_xcb_e_indicator_atom_get(state),
1231 0, 0, 0, 0);
1232}
1233
1234static Ecore_X_Atom
1235_ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1236{
1237 switch (mode)
1238 {
1239 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1240 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1241
1242 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1243 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1244
1245 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1246 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1247
1248 default:
1249 break;
1250 }
1251 return 0;
1252}
1253
1254static Ecore_X_Illume_Indicator_Opacity_Mode
1255_ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1256{
1257 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1258 return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1259
1260 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1261 return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1262
1263 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1264 return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1265
1266 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1267}
1268
1269EAPI void
1270ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1271 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1272{
1273 Ecore_X_Atom atom = 0;
1274
1275 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1276 atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1277 ecore_x_window_prop_atom_set(win,
1278 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1279 &atom, 1);
1280}
1281
1282EAPI Ecore_X_Illume_Indicator_Opacity_Mode
1283ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1284{
1285 Ecore_X_Atom atom;
1286
1287 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1288 if (!ecore_x_window_prop_atom_get(win,
1289 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1290 &atom, 1))
1291 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1292
1293 return _ecore_x_e_indicator_opacity_get(atom);
1294}
1295
1296EAPI void
1297ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1298 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1299{
1300 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1301 ecore_x_client_message32_send(win,
1302 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1303 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1304 _ecore_x_e_indicator_opacity_atom_get(mode),
1305 0, 0, 0, 0);
1306}
1307
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_error.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_error.c
deleted file mode 100644
index fc32926..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_error.c
+++ /dev/null
@@ -1,123 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <xcb/xcb_event.h>
3
4/* local variables */
5static void (*_error_func)(void *data) = NULL;
6static void *_error_data = NULL;
7static void (*_io_error_func)(void *data) = NULL;
8static void *_io_error_data = NULL;
9static int _error_request_code = 0;
10static int _error_code = 0;
11static Ecore_X_ID _error_resource_id = 0;
12
13/**
14 * Set the error handler.
15 * @param func The error handler function
16 * @param data The data to be passed to the handler function
17 *
18 * Set the X error handler function
19 */
20EAPI void
21ecore_x_error_handler_set(void (*func)(void *data),
22 const void *data)
23{
24 _error_func = func;
25 _error_data = (void *)data;
26}
27
28/**
29 * Set the I/O error handler.
30 * @param func The I/O error handler function
31 * @param data The data to be passed to the handler function
32 *
33 * Set the X I/O error handler function
34 */
35EAPI void
36ecore_x_io_error_handler_set(void (*func)(void *data),
37 const void *data)
38{
39 _io_error_func = func;
40 _io_error_data = (void *)data;
41}
42
43/**
44 * Get the request code that caused the error.
45 * @return The request code causing the X error
46 *
47 * Return the X request code that caused the last X error
48 */
49EAPI int
50ecore_x_error_request_get(void)
51{
52 return _error_request_code;
53}
54
55/**
56 * Get the error code from the error.
57 * @return The error code from the X error
58 *
59 * Return the error code from the last X error
60 */
61EAPI int
62ecore_x_error_code_get(void)
63{
64 return _error_code;
65}
66
67/**
68 * Get the resource id that caused the error.
69 * @return The resource id causing the X error
70 *
71 * Return the X resource id that caused the last X error
72 */
73EAPI Ecore_X_ID
74ecore_x_error_resource_id_get(void)
75{
76 return _error_resource_id;
77}
78
79int
80_ecore_xcb_error_handle(xcb_generic_error_t *err)
81{
82 WRN("Got Error:");
83 WRN("\tEvent: %s", xcb_event_get_request_label(err->major_code));
84 WRN("\tError: %s", xcb_event_get_error_label(err->error_code));
85
86#ifdef OLD_XCB_VERSION
87 if (err->error_code == XCB_EVENT_ERROR_BAD_VALUE)
88 WRN("\tBad Value: %d", ((xcb_value_error_t *)err)->bad_value);
89 else if (err->error_code == XCB_EVENT_ERROR_BAD_WINDOW)
90 WRN("\tBad Window: %d", ((xcb_window_error_t *)err)->bad_value);
91#else
92 if (err->error_code == XCB_VALUE)
93 WRN("\tBad Value: %d", ((xcb_value_error_t *)err)->bad_value);
94 else if (err->error_code == XCB_WINDOW)
95 WRN("\tBad Window: %d", ((xcb_window_error_t *)err)->bad_value);
96#endif
97
98 _error_request_code = err->sequence;
99 _error_code = err->error_code;
100 _error_resource_id = err->resource_id;
101 if (_error_func)
102 _error_func(_error_data);
103
104 return 0;
105}
106
107int
108_ecore_xcb_io_error_handle(xcb_generic_error_t *err)
109{
110 CRIT("IO Error:");
111 if (err)
112 {
113 CRIT("\tRequest: %d", err->sequence);
114 CRIT("\tCode: %d", err->error_code);
115 }
116 if (_io_error_func)
117 _io_error_func(_io_error_data);
118 else
119 exit(-1);
120
121 return 0;
122}
123
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c
deleted file mode 100644
index 8a18140..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c
+++ /dev/null
@@ -1,2805 +0,0 @@
1#include "ecore_xcb_private.h"
2//#include "Ecore_X_Atoms.h"
3#include <langinfo.h>
4#include <xcb/xcb_icccm.h>
5#include <xcb/xcb_event.h>
6# ifdef ECORE_XCB_DAMAGE
7# include <xcb/damage.h>
8# endif
9# ifdef ECORE_XCB_RANDR
10# include <xcb/randr.h>
11# endif
12# ifdef ECORE_XCB_SCREENSAVER
13# include <xcb/screensaver.h>
14# endif
15# ifdef ECORE_XCB_SYNC
16# include <xcb/sync.h>
17# endif
18# ifdef ECORE_XCB_XFIXES
19# include <xcb/xfixes.h>
20# endif
21# ifdef ECORE_XCB_XGESTURE
22# include <xcb/gesture.h>
23# endif
24
25#ifndef CODESET
26# define CODESET "INVALID"
27#endif
28
29typedef struct _Ecore_X_Mouse_Down_Info
30{
31 EINA_INLIST;
32 int dev;
33 Ecore_X_Time last_time;
34 Ecore_X_Time last_last_time;
35 Ecore_X_Window last_win;
36 Ecore_X_Window last_last_win;
37 Ecore_X_Window last_event_win;
38 Ecore_X_Window last_last_event_win;
39 Eina_Bool did_double : 1;
40 Eina_Bool did_triple : 1;
41} Ecore_X_Mouse_Down_Info;
42
43/* local function prototypes */
44static void _ecore_xcb_event_handle_any_event(xcb_generic_event_t *event);
45static void _ecore_xcb_event_handle_key_press(xcb_generic_event_t *event);
46static void _ecore_xcb_event_handle_key_release(xcb_generic_event_t *event);
47static void _ecore_xcb_event_handle_button_press(xcb_generic_event_t *event);
48static void _ecore_xcb_event_handle_button_release(xcb_generic_event_t *event);
49static void _ecore_xcb_event_handle_motion_notify(xcb_generic_event_t *event);
50static void _ecore_xcb_event_handle_enter_notify(xcb_generic_event_t *event);
51static void _ecore_xcb_event_handle_leave_notify(xcb_generic_event_t *event);
52static void _ecore_xcb_event_handle_keymap_notify(xcb_generic_event_t *event);
53static void _ecore_xcb_event_handle_focus_in(xcb_generic_event_t *event);
54static void _ecore_xcb_event_handle_focus_out(xcb_generic_event_t *event);
55static void _ecore_xcb_event_handle_expose(xcb_generic_event_t *event);
56static void _ecore_xcb_event_handle_graphics_exposure(xcb_generic_event_t *event);
57static void _ecore_xcb_event_handle_visibility_notify(xcb_generic_event_t *event);
58static void _ecore_xcb_event_handle_create_notify(xcb_generic_event_t *event);
59static void _ecore_xcb_event_handle_destroy_notify(xcb_generic_event_t *event);
60static void _ecore_xcb_event_handle_map_notify(xcb_generic_event_t *event);
61static void _ecore_xcb_event_handle_unmap_notify(xcb_generic_event_t *event);
62static void _ecore_xcb_event_handle_map_request(xcb_generic_event_t *event);
63static void _ecore_xcb_event_handle_reparent_notify(xcb_generic_event_t *event);
64static void _ecore_xcb_event_handle_configure_notify(xcb_generic_event_t *event);
65static void _ecore_xcb_event_handle_configure_request(xcb_generic_event_t *event);
66static void _ecore_xcb_event_handle_gravity_notify(xcb_generic_event_t *event);
67static void _ecore_xcb_event_handle_resize_request(xcb_generic_event_t *event);
68static void _ecore_xcb_event_handle_circulate_notify(xcb_generic_event_t *event);
69static void _ecore_xcb_event_handle_circulate_request(xcb_generic_event_t *event);
70static void _ecore_xcb_event_handle_property_notify(xcb_generic_event_t *event);
71static void _ecore_xcb_event_handle_selection_clear(xcb_generic_event_t *event);
72static void _ecore_xcb_event_handle_selection_request(xcb_generic_event_t *event);
73static void _ecore_xcb_event_handle_selection_notify(xcb_generic_event_t *event);
74static void _ecore_xcb_event_handle_colormap_notify(xcb_generic_event_t *event);
75static void _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event);
76static void _ecore_xcb_event_handle_mapping_notify(xcb_generic_event_t *event);
77static void _ecore_xcb_event_handle_damage_notify(xcb_generic_event_t *event);
78static void _ecore_xcb_event_handle_randr_change(xcb_generic_event_t *event);
79static void _ecore_xcb_event_handle_randr_notify(xcb_generic_event_t *event);
80static void _ecore_xcb_event_handle_randr_crtc_change(xcb_generic_event_t *event);
81static void _ecore_xcb_event_handle_randr_output_change(xcb_generic_event_t *event);
82static void _ecore_xcb_event_handle_randr_output_property_change(xcb_generic_event_t *event);
83static void _ecore_xcb_event_handle_screensaver_notify(xcb_generic_event_t *event);
84#ifdef ECORE_XCB_XGESTURE
85static void _ecore_xcb_event_handle_gesture_notify_flick(xcb_generic_event_t *event);
86static void _ecore_xcb_event_handle_gesture_notify_pan(xcb_generic_event_t *event);
87static void _ecore_xcb_event_handle_gesture_notify_pinchrotation(xcb_generic_event_t *event);
88static void _ecore_xcb_event_handle_gesture_notify_tap(xcb_generic_event_t *event);
89static void _ecore_xcb_event_handle_gesture_notify_tapnhold(xcb_generic_event_t *event);
90static void _ecore_xcb_event_handle_gesture_notify_hold(xcb_generic_event_t *event);
91static void _ecore_xcb_event_handle_gesture_notify_group(xcb_generic_event_t *event);
92#endif
93#ifdef ECORE_XCB_SHAPE
94static void _ecore_xcb_event_handle_shape_change(xcb_generic_event_t *event);
95#endif
96static void _ecore_xcb_event_handle_sync_counter(xcb_generic_event_t *event);
97static void _ecore_xcb_event_handle_sync_alarm(xcb_generic_event_t *event);
98static void _ecore_xcb_event_handle_xfixes_selection_notify(xcb_generic_event_t *event __UNUSED__);
99static void _ecore_xcb_event_handle_xfixes_cursor_notify(xcb_generic_event_t *event);
100static void _ecore_xcb_event_handle_generic_event(xcb_generic_event_t *event);
101static void _ecore_xcb_event_handle_input_event(xcb_generic_event_t *event);
102
103static void _ecore_xcb_event_key_press(xcb_generic_event_t *event);
104static void _ecore_xcb_event_key_release(xcb_generic_event_t *event);
105static void _ecore_xcb_event_mouse_move_free(void *data __UNUSED__,
106 void *event);
107static Ecore_X_Event_Mode _ecore_xcb_event_mode_get(uint8_t mode);
108static Ecore_X_Event_Detail _ecore_xcb_event_detail_get(uint8_t detail);
109static void _ecore_xcb_event_xdnd_enter_free(void *data __UNUSED__,
110 void *event);
111static void _ecore_xcb_event_selection_notify_free(void *data __UNUSED__,
112 void *event);
113static void _ecore_xcb_event_generic_event_free(void *data,
114 void *event);
115static void _ecore_xcb_event_mouse_down_info_clear(void);
116static Ecore_X_Mouse_Down_Info *_ecore_xcb_event_mouse_down_info_get(int dev);
117
118/* local variables */
119static Eina_Bool _ecore_xcb_event_last_mouse_move = EINA_FALSE;
120//static Ecore_Event *_ecore_xcb_event_last_mouse_move_event = NULL;
121static Eina_Inlist *_ecore_xcb_mouse_down_info_list = NULL;
122static Ecore_X_Time _ecore_xcb_event_last_time;
123static Ecore_X_Window _ecore_xcb_event_last_window = 0;
124
125/* public variables */
126int16_t _ecore_xcb_event_last_root_x = 0;
127int16_t _ecore_xcb_event_last_root_y = 0;
128
129EAPI int ECORE_X_EVENT_ANY = 0;
130EAPI int ECORE_X_EVENT_MOUSE_IN = 0;
131EAPI int ECORE_X_EVENT_MOUSE_OUT = 0;
132EAPI int ECORE_X_EVENT_WINDOW_FOCUS_IN = 0;
133EAPI int ECORE_X_EVENT_WINDOW_FOCUS_OUT = 0;
134EAPI int ECORE_X_EVENT_WINDOW_KEYMAP = 0;
135EAPI int ECORE_X_EVENT_WINDOW_DAMAGE = 0;
136EAPI int ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = 0;
137EAPI int ECORE_X_EVENT_WINDOW_CREATE = 0;
138EAPI int ECORE_X_EVENT_WINDOW_DESTROY = 0;
139EAPI int ECORE_X_EVENT_WINDOW_HIDE = 0;
140EAPI int ECORE_X_EVENT_WINDOW_SHOW = 0;
141EAPI int ECORE_X_EVENT_WINDOW_SHOW_REQUEST = 0;
142EAPI int ECORE_X_EVENT_WINDOW_REPARENT = 0;
143EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE = 0;
144EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = 0;
145EAPI int ECORE_X_EVENT_WINDOW_GRAVITY = 0;
146EAPI int ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = 0;
147EAPI int ECORE_X_EVENT_WINDOW_STACK = 0;
148EAPI int ECORE_X_EVENT_WINDOW_STACK_REQUEST = 0;
149EAPI int ECORE_X_EVENT_WINDOW_PROPERTY = 0;
150EAPI int ECORE_X_EVENT_WINDOW_COLORMAP = 0;
151EAPI int ECORE_X_EVENT_WINDOW_MAPPING = 0;
152EAPI int ECORE_X_EVENT_MAPPING_CHANGE = 0;
153EAPI int ECORE_X_EVENT_SELECTION_CLEAR = 0;
154EAPI int ECORE_X_EVENT_SELECTION_REQUEST = 0;
155EAPI int ECORE_X_EVENT_SELECTION_NOTIFY = 0;
156EAPI int ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = 0;
157EAPI int ECORE_X_EVENT_CLIENT_MESSAGE = 0;
158EAPI int ECORE_X_EVENT_WINDOW_SHAPE = 0;
159EAPI int ECORE_X_EVENT_SCREENSAVER_NOTIFY = 0;
160EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_FLICK = 0;
161EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_PAN = 0;
162EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION = 0;
163EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_TAP = 0;
164EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD = 0;
165EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_HOLD = 0;
166EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_GROUP = 0;
167EAPI int ECORE_X_EVENT_SYNC_COUNTER = 0;
168EAPI int ECORE_X_EVENT_SYNC_ALARM = 0;
169EAPI int ECORE_X_EVENT_SCREEN_CHANGE = 0;
170EAPI int ECORE_X_EVENT_DAMAGE_NOTIFY = 0;
171EAPI int ECORE_X_EVENT_RANDR_CRTC_CHANGE = 0;
172EAPI int ECORE_X_EVENT_RANDR_OUTPUT_CHANGE = 0;
173EAPI int ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY = 0;
174EAPI int ECORE_X_EVENT_WINDOW_DELETE_REQUEST = 0;
175EAPI int ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = 0;
176EAPI int ECORE_X_EVENT_WINDOW_STATE_REQUEST = 0;
177EAPI int ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = 0;
178EAPI int ECORE_X_EVENT_PING = 0;
179EAPI int ECORE_X_EVENT_DESKTOP_CHANGE = 0;
180EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = 0;
181EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = 0;
182EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = 0;
183EAPI int ECORE_X_EVENT_GENERIC = 0;
184
185void
186_ecore_xcb_events_init(void)
187{
188 LOGFN(__FILE__, __LINE__, __FUNCTION__);
189
190 if (!ECORE_X_EVENT_ANY)
191 {
192 ECORE_X_EVENT_ANY = ecore_event_type_new();
193 ECORE_X_EVENT_MOUSE_IN = ecore_event_type_new();
194 ECORE_X_EVENT_MOUSE_OUT = ecore_event_type_new();
195 ECORE_X_EVENT_WINDOW_FOCUS_IN = ecore_event_type_new();
196 ECORE_X_EVENT_WINDOW_FOCUS_OUT = ecore_event_type_new();
197 ECORE_X_EVENT_WINDOW_KEYMAP = ecore_event_type_new();
198 ECORE_X_EVENT_WINDOW_DAMAGE = ecore_event_type_new();
199 ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = ecore_event_type_new();
200 ECORE_X_EVENT_WINDOW_CREATE = ecore_event_type_new();
201 ECORE_X_EVENT_WINDOW_DESTROY = ecore_event_type_new();
202 ECORE_X_EVENT_WINDOW_HIDE = ecore_event_type_new();
203 ECORE_X_EVENT_WINDOW_SHOW = ecore_event_type_new();
204 ECORE_X_EVENT_WINDOW_SHOW_REQUEST = ecore_event_type_new();
205 ECORE_X_EVENT_WINDOW_REPARENT = ecore_event_type_new();
206 ECORE_X_EVENT_WINDOW_CONFIGURE = ecore_event_type_new();
207 ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = ecore_event_type_new();
208 ECORE_X_EVENT_WINDOW_GRAVITY = ecore_event_type_new();
209 ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = ecore_event_type_new();
210 ECORE_X_EVENT_WINDOW_STACK = ecore_event_type_new();
211 ECORE_X_EVENT_WINDOW_STACK_REQUEST = ecore_event_type_new();
212 ECORE_X_EVENT_WINDOW_PROPERTY = ecore_event_type_new();
213 ECORE_X_EVENT_WINDOW_COLORMAP = ecore_event_type_new();
214 ECORE_X_EVENT_WINDOW_MAPPING = ecore_event_type_new();
215 ECORE_X_EVENT_MAPPING_CHANGE = ecore_event_type_new();
216 ECORE_X_EVENT_SELECTION_CLEAR = ecore_event_type_new();
217 ECORE_X_EVENT_SELECTION_REQUEST = ecore_event_type_new();
218 ECORE_X_EVENT_SELECTION_NOTIFY = ecore_event_type_new();
219 ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = ecore_event_type_new();
220 ECORE_X_EVENT_CLIENT_MESSAGE = ecore_event_type_new();
221 ECORE_X_EVENT_WINDOW_SHAPE = ecore_event_type_new();
222 ECORE_X_EVENT_SCREENSAVER_NOTIFY = ecore_event_type_new();
223 ECORE_X_EVENT_GESTURE_NOTIFY_FLICK = ecore_event_type_new();
224 ECORE_X_EVENT_GESTURE_NOTIFY_PAN = ecore_event_type_new();
225 ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION = ecore_event_type_new();
226 ECORE_X_EVENT_GESTURE_NOTIFY_TAP = ecore_event_type_new();
227 ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD = ecore_event_type_new();
228 ECORE_X_EVENT_GESTURE_NOTIFY_HOLD = ecore_event_type_new();
229 ECORE_X_EVENT_GESTURE_NOTIFY_GROUP = ecore_event_type_new();
230 ECORE_X_EVENT_SYNC_COUNTER = ecore_event_type_new();
231 ECORE_X_EVENT_SYNC_ALARM = ecore_event_type_new();
232 ECORE_X_EVENT_SCREEN_CHANGE = ecore_event_type_new();
233 ECORE_X_EVENT_RANDR_CRTC_CHANGE = ecore_event_type_new();
234 ECORE_X_EVENT_RANDR_OUTPUT_CHANGE = ecore_event_type_new();
235 ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY = ecore_event_type_new();
236 ECORE_X_EVENT_DAMAGE_NOTIFY = ecore_event_type_new();
237 ECORE_X_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new();
238 ECORE_X_EVENT_DESKTOP_CHANGE = ecore_event_type_new();
239 ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = ecore_event_type_new();
240 ECORE_X_EVENT_WINDOW_STATE_REQUEST = ecore_event_type_new();
241 ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = ecore_event_type_new();
242 ECORE_X_EVENT_PING = ecore_event_type_new();
243 ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = ecore_event_type_new();
244 ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = ecore_event_type_new();
245 ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = ecore_event_type_new();
246 ECORE_X_EVENT_GENERIC = ecore_event_type_new();
247 }
248}
249
250void
251_ecore_xcb_events_shutdown(void)
252{
253 LOGFN(__FILE__, __LINE__, __FUNCTION__);
254
255 _ecore_xcb_event_mouse_down_info_clear();
256
257 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
258// if (_ecore_xcb_event_last_mouse_move_event)
259// {
260// ecore_event_del(_ecore_xcb_event_last_mouse_move_event);
261// _ecore_xcb_event_last_mouse_move_event = NULL;
262// }
263}
264
265void
266_ecore_xcb_events_handle(xcb_generic_event_t *ev)
267{
268 uint8_t response = 0;
269
270// LOGFN(__FILE__, __LINE__, __FUNCTION__);
271 CHECK_XCB_CONN;
272
273 /* strip highest bit (set if event is generated) */
274 response = (ev->response_type & ~0x80);
275 if (response == 0)
276 {
277 xcb_generic_error_t *err;
278
279 err = (xcb_generic_error_t *)ev;
280
281 /* NB: There is no way to check access of destroyed windows,
282 * so trap those cases and ignore. We also ignore BadValue from
283 * xcb_grab/ungrab_button (happens when we are using any_mod)
284 * and a few others */
285#ifdef OLD_XCB_VERSION
286 if (err->error_code == XCB_EVENT_ERROR_BAD_WINDOW) return;
287 else if (err->error_code == XCB_EVENT_ERROR_BAD_MATCH)
288 {
289 if ((err->major_code == XCB_SET_INPUT_FOCUS) ||
290 (err->major_code == XCB_CONFIGURE_WINDOW))
291 return;
292 }
293 else if (err->error_code == XCB_EVENT_ERROR_BAD_VALUE)
294 {
295 if ((err->major_code == XCB_KILL_CLIENT) ||
296 (err->major_code == XCB_GRAB_BUTTON) ||
297 (err->major_code == XCB_UNGRAB_BUTTON))
298 return;
299 }
300#else
301 if (err->error_code == XCB_WINDOW) return;
302 else if (err->error_code == XCB_MATCH)
303 {
304 if ((err->major_code == XCB_SET_INPUT_FOCUS) ||
305 (err->major_code == XCB_CONFIGURE_WINDOW))
306 return;
307 }
308 else if (err->error_code == XCB_VALUE)
309 {
310 if ((err->major_code == XCB_KILL_CLIENT) ||
311 (err->major_code == XCB_GRAB_BUTTON) ||
312 (err->major_code == XCB_UNGRAB_BUTTON))
313 return;
314 }
315#endif
316 WRN("Got Event Error:");
317 WRN("\tMajor Code: %d", err->major_code);
318 WRN("\tMinor Code: %d", err->minor_code);
319 WRN("\tRequest: %s", xcb_event_get_request_label(err->major_code));
320 WRN("\tError: %s", xcb_event_get_error_label(err->error_code));
321 if (err->error_code == 2) // bad value
322 WRN("\tValue: %d", ((xcb_value_error_t *)err)->bad_value);
323 else if (err->error_code == 8) // bad match
324 WRN("\tMatch: %d", ((xcb_match_error_t *)err)->bad_value);
325
326 if (err->major_code == XCB_SEND_EVENT)
327 {
328 WRN("\tSend Event Error");
329 WRN("\t\tSeq: %d", ev->sequence);
330 WRN("\t\tFull Seq: %d", ev->full_sequence);
331 WRN("\t\tType: %d", ev->response_type);
332 }
333 /* if (err->major_code == 148) */
334 /* { */
335 /* printf("GOT 148 Error\n"); */
336 /* } */
337 return;
338 }
339
340 /* FIXME: Filter event for xim when xcb supports xim */
341
342 _ecore_xcb_event_handle_any_event(ev);
343
344 if (response == XCB_KEY_PRESS)
345 _ecore_xcb_event_handle_key_press(ev);
346 else if (response == XCB_KEY_RELEASE)
347 _ecore_xcb_event_handle_key_release(ev);
348 else if (response == XCB_BUTTON_PRESS)
349 _ecore_xcb_event_handle_button_press(ev);
350 else if (response == XCB_BUTTON_RELEASE)
351 _ecore_xcb_event_handle_button_release(ev);
352 else if (response == XCB_MOTION_NOTIFY)
353 _ecore_xcb_event_handle_motion_notify(ev);
354 else if (response == XCB_ENTER_NOTIFY)
355 _ecore_xcb_event_handle_enter_notify(ev);
356 else if (response == XCB_LEAVE_NOTIFY)
357 _ecore_xcb_event_handle_leave_notify(ev);
358 else if (response == XCB_KEYMAP_NOTIFY)
359 _ecore_xcb_event_handle_keymap_notify(ev);
360 else if (response == XCB_FOCUS_IN)
361 _ecore_xcb_event_handle_focus_in(ev);
362 else if (response == XCB_FOCUS_OUT)
363 _ecore_xcb_event_handle_focus_out(ev);
364 else if (response == XCB_EXPOSE)
365 _ecore_xcb_event_handle_expose(ev);
366 else if (response == XCB_GRAPHICS_EXPOSURE)
367 _ecore_xcb_event_handle_graphics_exposure(ev);
368 else if (response == XCB_VISIBILITY_NOTIFY)
369 _ecore_xcb_event_handle_visibility_notify(ev);
370 else if (response == XCB_CREATE_NOTIFY)
371 _ecore_xcb_event_handle_create_notify(ev);
372 else if (response == XCB_DESTROY_NOTIFY)
373 _ecore_xcb_event_handle_destroy_notify(ev);
374 else if (response == XCB_MAP_NOTIFY)
375 _ecore_xcb_event_handle_map_notify(ev);
376 else if (response == XCB_UNMAP_NOTIFY)
377 _ecore_xcb_event_handle_unmap_notify(ev);
378 else if (response == XCB_MAP_REQUEST)
379 _ecore_xcb_event_handle_map_request(ev);
380 else if (response == XCB_REPARENT_NOTIFY)
381 _ecore_xcb_event_handle_reparent_notify(ev);
382 else if (response == XCB_CONFIGURE_NOTIFY)
383 _ecore_xcb_event_handle_configure_notify(ev);
384 else if (response == XCB_CONFIGURE_REQUEST)
385 _ecore_xcb_event_handle_configure_request(ev);
386 else if (response == XCB_GRAVITY_NOTIFY)
387 _ecore_xcb_event_handle_gravity_notify(ev);
388 else if (response == XCB_RESIZE_REQUEST)
389 _ecore_xcb_event_handle_resize_request(ev);
390 else if (response == XCB_CIRCULATE_NOTIFY)
391 _ecore_xcb_event_handle_circulate_notify(ev);
392 else if (response == XCB_CIRCULATE_REQUEST)
393 _ecore_xcb_event_handle_circulate_request(ev);
394 else if (response == XCB_PROPERTY_NOTIFY)
395 _ecore_xcb_event_handle_property_notify(ev);
396 else if (response == XCB_SELECTION_CLEAR)
397 _ecore_xcb_event_handle_selection_clear(ev);
398 else if (response == XCB_SELECTION_REQUEST)
399 _ecore_xcb_event_handle_selection_request(ev);
400 else if (response == XCB_SELECTION_NOTIFY)
401 _ecore_xcb_event_handle_selection_notify(ev);
402 else if (response == XCB_COLORMAP_NOTIFY)
403 _ecore_xcb_event_handle_colormap_notify(ev);
404 else if (response == XCB_CLIENT_MESSAGE)
405 _ecore_xcb_event_handle_client_message(ev);
406 else if (response == XCB_MAPPING_NOTIFY)
407 _ecore_xcb_event_handle_mapping_notify(ev);
408 else if (response == 35) /* GenericEvent == 35 */
409 _ecore_xcb_event_handle_generic_event(ev);
410#ifdef ECORE_XCB_DAMAGE
411 else if ((_ecore_xcb_event_damage >= 0) &&
412 (response == (_ecore_xcb_event_damage + XCB_DAMAGE_NOTIFY)))
413 _ecore_xcb_event_handle_damage_notify(ev);
414#endif
415#ifdef ECORE_XCB_RANDR
416 else if ((_ecore_xcb_event_randr >= 0) &&
417 (response ==
418 _ecore_xcb_event_randr + XCB_RANDR_SCREEN_CHANGE_NOTIFY))
419 _ecore_xcb_event_handle_randr_change(ev);
420 else if ((_ecore_xcb_event_randr >= 0) &&
421 (response == (_ecore_xcb_event_randr + XCB_RANDR_NOTIFY)))
422 _ecore_xcb_event_handle_randr_notify(ev);
423#endif
424#ifdef ECORE_XCB_SCREENSAVER
425 else if ((_ecore_xcb_event_screensaver >= 0) &&
426 (response ==
427 _ecore_xcb_event_screensaver + XCB_SCREENSAVER_NOTIFY))
428 _ecore_xcb_event_handle_screensaver_notify(ev);
429#endif
430#ifdef ECORE_XCB_XGESTURE
431 else if ((_ecore_xcb_event_gesture >= 0) &&
432 (response ==
433 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_FLICK))
434 _ecore_xcb_event_handle_gesture_notify_flick(ev);
435 else if ((_ecore_xcb_event_gesture >= 0) &&
436 (response ==
437 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_PAN))
438 _ecore_xcb_event_handle_gesture_notify_pan(ev);
439 else if ((_ecore_xcb_event_gesture >= 0) &&
440 (response ==
441 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_PINCH_ROTATION))
442 _ecore_xcb_event_handle_gesture_notify_pinchrotation(ev);
443 else if ((_ecore_xcb_event_gesture >= 0) &&
444 (response ==
445 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_TAP))
446 _ecore_xcb_event_handle_gesture_notify_tap(ev);
447 else if ((_ecore_xcb_event_gesture >= 0) &&
448 (response ==
449 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_TAP_N_HOLD))
450 _ecore_xcb_event_handle_gesture_notify_tapnhold(ev);
451 else if ((_ecore_xcb_event_gesture >= 0) &&
452 (response ==
453 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_HOLD))
454 _ecore_xcb_event_handle_gesture_notify_hold(ev);
455 else if ((_ecore_xcb_event_gesture >= 0) &&
456 (response ==
457 _ecore_xcb_event_gesture + XCB_GESTURE_NOTIFY_GROUP))
458 _ecore_xcb_event_handle_gesture_notify_group(ev);
459#endif
460#ifdef ECORE_XCB_SHAPE
461 else if ((_ecore_xcb_event_shape >= 0) &&
462 (response == (_ecore_xcb_event_shape + XCB_SHAPE_NOTIFY)))
463 _ecore_xcb_event_handle_shape_change(ev);
464#endif
465#ifdef ECORE_XCB_SYNC
466 else if ((_ecore_xcb_event_sync >= 0) &&
467 (response == (_ecore_xcb_event_sync + XCB_SYNC_COUNTER_NOTIFY)))
468 _ecore_xcb_event_handle_sync_counter(ev);
469 else if ((_ecore_xcb_event_sync >= 0) &&
470 (response == (_ecore_xcb_event_sync + XCB_SYNC_ALARM_NOTIFY)))
471 _ecore_xcb_event_handle_sync_alarm(ev);
472#endif
473#ifdef ECORE_XCB_XFIXES
474 else if ((_ecore_xcb_event_xfixes >= 0) &&
475 (response ==
476 _ecore_xcb_event_xfixes + XCB_XFIXES_SELECTION_NOTIFY))
477 _ecore_xcb_event_handle_xfixes_selection_notify(ev);
478 else if ((_ecore_xcb_event_xfixes >= 0) &&
479 (response == (_ecore_xcb_event_xfixes + XCB_XFIXES_CURSOR_NOTIFY)))
480 _ecore_xcb_event_handle_xfixes_cursor_notify(ev);
481#endif
482}
483
484Ecore_X_Time
485_ecore_xcb_events_last_time_get(void)
486{
487 LOGFN(__FILE__, __LINE__, __FUNCTION__);
488
489 return _ecore_xcb_event_last_time;
490}
491
492EAPI void
493ecore_x_event_mask_set(Ecore_X_Window win,
494 Ecore_X_Event_Mask mask)
495{
496 xcb_get_window_attributes_cookie_t cookie;
497 xcb_get_window_attributes_reply_t *reply;
498 uint32_t list;
499
500 LOGFN(__FILE__, __LINE__, __FUNCTION__);
501 CHECK_XCB_CONN;
502
503 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
504 cookie = xcb_get_window_attributes_unchecked(_ecore_xcb_conn, win);
505 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
506 if (!reply) return;
507
508 list = (mask | reply->your_event_mask);
509 free(reply);
510 xcb_change_window_attributes(_ecore_xcb_conn, win,
511 XCB_CW_EVENT_MASK, &list);
512// ecore_x_flush();
513}
514
515EAPI void
516ecore_x_event_mask_unset(Ecore_X_Window win,
517 Ecore_X_Event_Mask mask)
518{
519 xcb_get_window_attributes_cookie_t cookie;
520 xcb_get_window_attributes_reply_t *reply;
521 uint32_t list;
522
523 LOGFN(__FILE__, __LINE__, __FUNCTION__);
524 CHECK_XCB_CONN;
525
526 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
527 cookie = xcb_get_window_attributes_unchecked(_ecore_xcb_conn, win);
528 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
529 if (!reply) return;
530
531 list = (reply->your_event_mask & ~mask);
532 free(reply);
533 xcb_change_window_attributes(_ecore_xcb_conn, win,
534 XCB_CW_EVENT_MASK, &list);
535// ecore_x_flush();
536}
537
538unsigned int
539_ecore_xcb_events_modifiers_get(unsigned int state)
540{
541 unsigned int modifiers = 0;
542
543 LOGFN(__FILE__, __LINE__, __FUNCTION__);
544
545 if (state & ECORE_X_MODIFIER_SHIFT)
546 modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
547 if (state & ECORE_X_MODIFIER_CTRL)
548 modifiers |= ECORE_EVENT_MODIFIER_CTRL;
549 if (state & ECORE_X_MODIFIER_ALT)
550 modifiers |= ECORE_EVENT_MODIFIER_ALT;
551 if (state & ECORE_X_MODIFIER_WIN)
552 modifiers |= ECORE_EVENT_MODIFIER_WIN;
553 if (state & ECORE_X_LOCK_SCROLL)
554 modifiers |= ECORE_EVENT_LOCK_SCROLL;
555 if (state & ECORE_X_LOCK_CAPS)
556 modifiers |= ECORE_EVENT_LOCK_CAPS;
557 if (state & ECORE_X_LOCK_NUM)
558 modifiers |= ECORE_EVENT_LOCK_NUM;
559 if (state & ECORE_X_LOCK_SHIFT)
560 modifiers |= ECORE_EVENT_LOCK_SHIFT;
561
562 return modifiers;
563}
564
565/* local functions */
566static void
567_ecore_xcb_event_handle_any_event(xcb_generic_event_t *event)
568{
569 xcb_generic_event_t *ev;
570
571// LOGFN(__FILE__, __LINE__, __FUNCTION__);
572
573 ev = malloc(sizeof(xcb_generic_event_t));
574 if (!ev) return;
575
576 memcpy(ev, event, sizeof(xcb_generic_event_t));
577 ecore_event_add(ECORE_X_EVENT_ANY, ev, NULL, NULL);
578}
579
580static void
581_ecore_xcb_event_handle_key_press(xcb_generic_event_t *event)
582{
583 _ecore_xcb_event_key_press(event);
584}
585
586static void
587_ecore_xcb_event_handle_key_release(xcb_generic_event_t *event)
588{
589 _ecore_xcb_event_key_release(event);
590}
591
592static void
593_ecore_xcb_event_handle_button_press(xcb_generic_event_t *event)
594{
595 xcb_button_press_event_t *ev;
596
597 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
598
599 ev = (xcb_button_press_event_t *)event;
600 if ((ev->detail > 3) && (ev->detail < 8))
601 {
602 Ecore_Event_Mouse_Wheel *e;
603
604 if (!(e = malloc(sizeof(Ecore_Event_Mouse_Wheel)))) return;
605
606 e->timestamp = ev->time;
607 e->modifiers = _ecore_xcb_events_modifiers_get(ev->state);
608 switch (ev->detail)
609 {
610 case 4:
611 e->direction = 0;
612 e->z = -1;
613 break;
614
615 case 5:
616 e->direction = 0;
617 e->z = 1;
618 break;
619
620 case 6:
621 e->direction = 1;
622 e->z = -1;
623 break;
624
625 case 7:
626 e->direction = 1;
627 e->z = 1;
628 break;
629
630 default:
631 e->direction = 0;
632 e->z = 0;
633 break;
634 }
635 e->x = ev->event_x;
636 e->y = ev->event_y;
637 e->root.x = ev->root_x;
638 e->root.y = ev->root_y;
639 if (ev->child)
640 e->window = ev->child;
641 else
642 e->window = ev->event;
643
644 e->event_window = ev->event;
645 e->same_screen = ev->same_screen;
646 e->root_window = ev->root;
647
648 _ecore_xcb_event_last_time = e->timestamp;
649 _ecore_xcb_event_last_window = e->window;
650 _ecore_xcb_event_last_root_x = e->root.x;
651 _ecore_xcb_event_last_root_y = e->root.y;
652
653 ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, e, NULL, NULL);
654
655 _ecore_xcb_window_grab_allow_events(ev->event, ev->child,
656 ECORE_EVENT_MOUSE_WHEEL,
657 e, ev->time);
658 }
659 else
660 {
661 Ecore_Event_Mouse_Button *e;
662 unsigned int child_win = 0;
663
664 child_win = (ev->child ? ev->child : ev->event);
665
666 _ecore_xcb_event_mouse_move(ev->time, ev->state,
667 ev->event_x, ev->event_y,
668 ev->root_x, ev->root_y,
669 ev->event, child_win,
670 ev->root, ev->same_screen,
671 0, 1, 1, 1.0, 0.0,
672 ev->event_x, ev->event_y,
673 ev->root_x, ev->root_y);
674
675 e = _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN,
676 ev->time,
677 ev->state, ev->detail,
678 ev->event_x, ev->event_y,
679 ev->root_x, ev->root_y, ev->event,
680 child_win,
681 ev->root, ev->same_screen,
682 0, 1, 1, 1.0, 0.0,
683 ev->event_x, ev->event_y,
684 ev->root_x, ev->root_y);
685 if (e)
686 _ecore_xcb_window_grab_allow_events(ev->event, ev->child,
687 ECORE_EVENT_MOUSE_BUTTON_DOWN,
688 e, ev->time);
689 }
690}
691
692static void
693_ecore_xcb_event_handle_button_release(xcb_generic_event_t *event)
694{
695 xcb_button_release_event_t *ev;
696
697 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
698 ev = (xcb_button_release_event_t *)event;
699 if ((ev->detail <= 3) || (ev->detail > 7))
700 {
701 _ecore_xcb_event_mouse_move(ev->time, ev->state,
702 ev->event_x, ev->event_y,
703 ev->root_x, ev->root_y,
704 ev->event,
705 (ev->child ? ev->child : ev->event),
706 ev->root, ev->same_screen,
707 0, 1, 1, 1.0, 0.0,
708 ev->event_x, ev->event_y,
709 ev->root_x, ev->root_y);
710
711 _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_UP, ev->time,
712 ev->state, ev->detail,
713 ev->event_x, ev->event_y, ev->root_x,
714 ev->root_y, ev->event,
715 (ev->child ? ev->child : ev->event),
716 ev->root, ev->same_screen,
717 0, 1, 1, 1.0, 0.0,
718 ev->event_x, ev->event_y,
719 ev->root_x, ev->root_y);
720 }
721}
722
723static void
724_ecore_xcb_event_handle_motion_notify(xcb_generic_event_t *event)
725{
726 xcb_motion_notify_event_t *ev;
727
728 ev = (xcb_motion_notify_event_t *)event;
729
730 /* if (_ecore_xcb_event_last_mouse_move_event) */
731 /* { */
732 /* ecore_event_del(_ecore_xcb_event_last_mouse_move_event); */
733 /* _ecore_xcb_event_last_mouse_move = EINA_FALSE; */
734 /* _ecore_xcb_event_last_mouse_move_event = NULL; */
735 /* } */
736
737 _ecore_xcb_event_mouse_move(ev->time, ev->state,
738 ev->event_x, ev->event_y,
739 ev->root_x, ev->root_y,
740 ev->event,
741 (ev->child ? ev->child : ev->event),
742 ev->root, ev->same_screen,
743 0, 1, 1, 1.0, 0.0,
744 ev->event_x, ev->event_y,
745 ev->root_x, ev->root_y);
746 _ecore_xcb_event_last_mouse_move = EINA_TRUE;
747
748 _ecore_xcb_dnd_drag(ev->root, ev->root_x, ev->root_y);
749}
750
751static void
752_ecore_xcb_event_handle_enter_notify(xcb_generic_event_t *event)
753{
754 xcb_enter_notify_event_t *ev;
755 Ecore_X_Event_Mouse_In *e;
756
757 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
758 ev = (xcb_enter_notify_event_t *)event;
759
760 _ecore_xcb_event_mouse_move(ev->time, ev->state,
761 ev->event_x, ev->event_y,
762 ev->root_x, ev->root_y,
763 ev->event,
764 (ev->child ? ev->child : ev->event),
765 ev->root, ev->same_screen_focus,
766 0, 1, 1, 1.0, 0.0,
767 ev->event_x, ev->event_y,
768 ev->root_x, ev->root_y);
769
770 if (!(e = calloc(1, sizeof(Ecore_X_Event_Mouse_In)))) return;
771
772 e->modifiers = _ecore_xcb_events_modifiers_get(ev->state);
773 e->x = ev->event_x;
774 e->y = ev->event_y;
775 e->root.x = ev->root_x;
776 e->root.y = ev->root_y;
777 if (ev->child)
778 e->win = ev->child;
779 else
780 e->win = ev->event;
781 e->event_win = ev->event;
782 e->same_screen = ev->same_screen_focus;
783 e->root_win = ev->root;
784 e->mode = _ecore_xcb_event_mode_get(ev->mode);
785 e->detail = _ecore_xcb_event_detail_get(ev->detail);
786 e->time = ev->time;
787 _ecore_xcb_event_last_time = e->time;
788
789 ecore_event_add(ECORE_X_EVENT_MOUSE_IN, e, NULL, NULL);
790}
791
792static void
793_ecore_xcb_event_handle_leave_notify(xcb_generic_event_t *event)
794{
795 xcb_leave_notify_event_t *ev;
796 Ecore_X_Event_Mouse_Out *e;
797
798 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
799 ev = (xcb_enter_notify_event_t *)event;
800
801 _ecore_xcb_event_mouse_move(ev->time, ev->state,
802 ev->event_x, ev->event_y,
803 ev->root_x, ev->root_y,
804 ev->event,
805 (ev->child ? ev->child : ev->event),
806 ev->root, ev->same_screen_focus,
807 0, 1, 1, 1.0, 0.0,
808 ev->event_x, ev->event_y,
809 ev->root_x, ev->root_y);
810
811 if (!(e = calloc(1, sizeof(Ecore_X_Event_Mouse_Out)))) return;
812
813 e->modifiers = _ecore_xcb_events_modifiers_get(ev->state);
814 e->x = ev->event_x;
815 e->y = ev->event_y;
816 e->root.x = ev->root_x;
817 e->root.y = ev->root_y;
818 if (ev->child)
819 e->win = ev->child;
820 else
821 e->win = ev->event;
822 e->event_win = ev->event;
823 e->same_screen = ev->same_screen_focus;
824 e->root_win = ev->root;
825 e->mode = _ecore_xcb_event_mode_get(ev->mode);
826 e->detail = _ecore_xcb_event_detail_get(ev->detail);
827
828 e->time = ev->time;
829 _ecore_xcb_event_last_time = e->time;
830 _ecore_xcb_event_last_window = e->win;
831 _ecore_xcb_event_last_root_x = e->root.x;
832 _ecore_xcb_event_last_root_y = e->root.y;
833
834 ecore_event_add(ECORE_X_EVENT_MOUSE_OUT, e, NULL, NULL);
835}
836
837static void
838_ecore_xcb_event_handle_keymap_notify(xcb_generic_event_t *event __UNUSED__)
839{
840// LOGFN(__FILE__, __LINE__, __FUNCTION__);
841
842 // FIXME: handle this event type
843 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
844}
845
846static void
847_ecore_xcb_event_handle_focus_in(xcb_generic_event_t *event)
848{
849 xcb_focus_in_event_t *ev;
850 Ecore_X_Event_Window_Focus_In *e;
851
852 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
853 ev = (xcb_focus_in_event_t *)event;
854 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_In)))) return;
855
856 e->win = ev->event;
857 e->mode = _ecore_xcb_event_mode_get(ev->mode);
858 e->detail = _ecore_xcb_event_detail_get(ev->detail);
859
860 e->time = _ecore_xcb_event_last_time;
861 _ecore_xcb_event_last_time = e->time;
862
863 ecore_event_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL);
864}
865
866static void
867_ecore_xcb_event_handle_focus_out(xcb_generic_event_t *event)
868{
869 xcb_focus_out_event_t *ev;
870 Ecore_X_Event_Window_Focus_Out *e;
871
872 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
873 ev = (xcb_focus_out_event_t *)event;
874 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_Out)))) return;
875
876 e->win = ev->event;
877 e->mode = _ecore_xcb_event_mode_get(ev->mode);
878 e->detail = _ecore_xcb_event_detail_get(ev->detail);
879
880 e->time = _ecore_xcb_event_last_time;
881 _ecore_xcb_event_last_time = e->time;
882
883 ecore_event_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL);
884}
885
886static void
887_ecore_xcb_event_handle_expose(xcb_generic_event_t *event)
888{
889 xcb_expose_event_t *ev;
890 Ecore_X_Event_Window_Damage *e;
891
892 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
893 ev = (xcb_expose_event_t *)event;
894 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Damage)))) return;
895
896 e->win = ev->window;
897 e->time = _ecore_xcb_event_last_time;
898 e->x = ev->x;
899 e->y = ev->y;
900 e->w = ev->width;
901 e->h = ev->height;
902 e->count = ev->count;
903
904 ecore_event_add(ECORE_X_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
905}
906
907static void
908_ecore_xcb_event_handle_graphics_exposure(xcb_generic_event_t *event)
909{
910 xcb_graphics_exposure_event_t *ev;
911 Ecore_X_Event_Window_Damage *e;
912
913 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
914 ev = (xcb_graphics_exposure_event_t *)event;
915 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Damage)))) return;
916
917 e->win = ev->drawable;
918 e->x = ev->x;
919 e->y = ev->y;
920 e->w = ev->width;
921 e->h = ev->height;
922 e->count = ev->count;
923 e->time = _ecore_xcb_event_last_time;
924
925 ecore_event_add(ECORE_X_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
926}
927
928static void
929_ecore_xcb_event_handle_visibility_notify(xcb_generic_event_t *event)
930{
931 xcb_visibility_notify_event_t *ev;
932 Ecore_X_Event_Window_Visibility_Change *e;
933
934 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
935 ev = (xcb_visibility_notify_event_t *)event;
936 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Visibility_Change))))
937 return;
938
939 e->win = ev->window;
940 e->time = _ecore_xcb_event_last_time;
941 if (ev->state == XCB_VISIBILITY_FULLY_OBSCURED)
942 e->fully_obscured = 1;
943 else
944 e->fully_obscured = 0;
945
946 ecore_event_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, e, NULL, NULL);
947}
948
949static void
950_ecore_xcb_event_handle_create_notify(xcb_generic_event_t *event)
951{
952 xcb_create_notify_event_t *ev;
953 Ecore_X_Event_Window_Create *e;
954
955 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
956 ev = (xcb_create_notify_event_t *)event;
957 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Create)))) return;
958
959 e->win = ev->window;
960 e->parent = ev->parent;
961 if (ev->override_redirect)
962 e->override = 1;
963 else
964 e->override = 0;
965 e->x = ev->x;
966 e->y = ev->y;
967 e->w = ev->width;
968 e->h = ev->height;
969 e->border = ev->border_width;
970 e->time = _ecore_xcb_event_last_time;
971
972 ecore_event_add(ECORE_X_EVENT_WINDOW_CREATE, e, NULL, NULL);
973}
974
975static void
976_ecore_xcb_event_handle_destroy_notify(xcb_generic_event_t *event)
977{
978 xcb_destroy_notify_event_t *ev;
979 Ecore_X_Event_Window_Destroy *e;
980
981 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
982 ev = (xcb_destroy_notify_event_t *)event;
983 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Destroy)))) return;
984
985 e->win = ev->window;
986 e->event_win = ev->event;
987 if (e->win == _ecore_xcb_event_last_window)
988 _ecore_xcb_event_last_window = 0;
989 e->time = _ecore_xcb_event_last_time;
990
991 ecore_event_add(ECORE_X_EVENT_WINDOW_DESTROY, e, NULL, NULL);
992}
993
994static void
995_ecore_xcb_event_handle_map_notify(xcb_generic_event_t *event)
996{
997 xcb_map_notify_event_t *ev;
998 Ecore_X_Event_Window_Show *e;
999
1000 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1001 ev = (xcb_map_notify_event_t *)event;
1002 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Show)))) return;
1003
1004 e->win = ev->window;
1005 e->event_win = ev->event;
1006 e->time = _ecore_xcb_event_last_time;
1007
1008 ecore_event_add(ECORE_X_EVENT_WINDOW_SHOW, e, NULL, NULL);
1009}
1010
1011static void
1012_ecore_xcb_event_handle_unmap_notify(xcb_generic_event_t *event)
1013{
1014 xcb_unmap_notify_event_t *ev;
1015 Ecore_X_Event_Window_Hide *e;
1016
1017 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1018 ev = (xcb_unmap_notify_event_t *)event;
1019 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Hide)))) return;
1020
1021 e->win = ev->window;
1022 e->event_win = ev->event;
1023 e->time = _ecore_xcb_event_last_time;
1024
1025 ecore_event_add(ECORE_X_EVENT_WINDOW_HIDE, e, NULL, NULL);
1026}
1027
1028static void
1029_ecore_xcb_event_handle_map_request(xcb_generic_event_t *event)
1030{
1031 xcb_map_request_event_t *ev;
1032 Ecore_X_Event_Window_Show_Request *e;
1033
1034 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1035 ev = (xcb_map_request_event_t *)event;
1036 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Show_Request)))) return;
1037
1038 e->win = ev->window;
1039 e->parent = ev->parent;
1040 e->time = _ecore_xcb_event_last_time;
1041
1042 ecore_event_add(ECORE_X_EVENT_WINDOW_SHOW_REQUEST, e, NULL, NULL);
1043}
1044
1045static void
1046_ecore_xcb_event_handle_reparent_notify(xcb_generic_event_t *event)
1047{
1048 xcb_reparent_notify_event_t *ev;
1049 Ecore_X_Event_Window_Reparent *e;
1050
1051 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1052 ev = (xcb_reparent_notify_event_t *)event;
1053 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Reparent)))) return;
1054
1055 e->win = ev->window;
1056 e->event_win = ev->event;
1057 e->parent = ev->parent;
1058 e->time = _ecore_xcb_event_last_time;
1059
1060 ecore_event_add(ECORE_X_EVENT_WINDOW_REPARENT, e, NULL, NULL);
1061}
1062
1063static void
1064_ecore_xcb_event_handle_configure_notify(xcb_generic_event_t *event)
1065{
1066 xcb_configure_notify_event_t *ev;
1067 Ecore_X_Event_Window_Configure *e;
1068
1069 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1070 ev = (xcb_configure_notify_event_t *)event;
1071 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Configure)))) return;
1072
1073 e->win = ev->window;
1074 e->event_win = ev->event;
1075 e->abovewin = ev->above_sibling;
1076 e->x = ev->x;
1077 e->y = ev->y;
1078 e->w = ev->width;
1079 e->h = ev->height;
1080 e->border = ev->border_width;
1081 e->override = ev->override_redirect;
1082 /* send_event is bit 7 (0x80) of response_type */
1083 e->from_wm = ((ev->response_type & 0x80) ? 1 : 0);
1084 e->time = _ecore_xcb_event_last_time;
1085
1086 ecore_event_add(ECORE_X_EVENT_WINDOW_CONFIGURE, e, NULL, NULL);
1087}
1088
1089static void
1090_ecore_xcb_event_handle_configure_request(xcb_generic_event_t *event)
1091{
1092 xcb_configure_request_event_t *ev;
1093 Ecore_X_Event_Window_Configure_Request *e;
1094
1095 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1096 ev = (xcb_configure_request_event_t *)event;
1097 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Configure_Request))))
1098 return;
1099
1100 e->win = ev->window;
1101 e->parent_win = ev->parent;
1102 e->abovewin = ev->sibling;
1103 e->x = ev->x;
1104 e->y = ev->y;
1105 e->w = ev->width;
1106 e->h = ev->height;
1107 e->border = ev->border_width;
1108 e->value_mask = ev->value_mask;
1109 switch (ev->stack_mode)
1110 {
1111 case XCB_STACK_MODE_ABOVE:
1112 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1113 break;
1114
1115 case XCB_STACK_MODE_BELOW:
1116 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1117 break;
1118
1119 case XCB_STACK_MODE_TOP_IF:
1120 e->detail = ECORE_X_WINDOW_STACK_TOP_IF;
1121 break;
1122
1123 case XCB_STACK_MODE_BOTTOM_IF:
1124 e->detail = ECORE_X_WINDOW_STACK_BOTTOM_IF;
1125 break;
1126
1127 case XCB_STACK_MODE_OPPOSITE:
1128 e->detail = ECORE_X_WINDOW_STACK_OPPOSITE;
1129 break;
1130 }
1131 e->time = _ecore_xcb_event_last_time;
1132
1133 ecore_event_add(ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST, e, NULL, NULL);
1134}
1135
1136static void
1137_ecore_xcb_event_handle_gravity_notify(xcb_generic_event_t *event __UNUSED__)
1138{
1139/*
1140 xcb_gravity_notify_event_t *ev;
1141 Ecore_X_Event_Window_Gravity *e;
1142
1143 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1144 ev = (xcb_gravity_notify_event_t *)event;
1145 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Gravity)))) return;
1146
1147 e->win = ev->window;
1148 e->event_win = ev->event;
1149 e->time = _ecore_xcb_event_last_time;
1150
1151 ecore_event_add(ECORE_X_EVENT_WINDOW_GRAVITY, e, NULL, NULL);
1152 */
1153}
1154
1155static void
1156_ecore_xcb_event_handle_resize_request(xcb_generic_event_t *event)
1157{
1158 xcb_resize_request_event_t *ev;
1159 Ecore_X_Event_Window_Resize_Request *e;
1160
1161 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1162 ev = (xcb_resize_request_event_t *)event;
1163 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Resize_Request)))) return;
1164
1165 e->win = ev->window;
1166 e->w = ev->width;
1167 e->h = ev->height;
1168 e->time = _ecore_xcb_event_last_time;
1169
1170 ecore_event_add(ECORE_X_EVENT_WINDOW_RESIZE_REQUEST, e, NULL, NULL);
1171}
1172
1173static void
1174_ecore_xcb_event_handle_circulate_notify(xcb_generic_event_t *event)
1175{
1176 xcb_circulate_notify_event_t *ev;
1177 Ecore_X_Event_Window_Stack *e;
1178
1179 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1180 ev = (xcb_circulate_notify_event_t *)event;
1181 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Stack)))) return;
1182
1183 e->win = ev->window;
1184 e->event_win = ev->event;
1185 if (ev->place == XCB_PLACE_ON_TOP)
1186 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1187 else
1188 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1189 e->time = _ecore_xcb_event_last_time;
1190
1191 ecore_event_add(ECORE_X_EVENT_WINDOW_STACK, e, NULL, NULL);
1192}
1193
1194static void
1195_ecore_xcb_event_handle_circulate_request(xcb_generic_event_t *event)
1196{
1197 xcb_circulate_request_event_t *ev;
1198 Ecore_X_Event_Window_Stack_Request *e;
1199
1200 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1201 ev = (xcb_circulate_request_event_t *)event;
1202 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Stack_Request)))) return;
1203
1204 e->win = ev->window;
1205 e->parent = ev->event;
1206 if (ev->place == XCB_PLACE_ON_TOP)
1207 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1208 else
1209 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1210 e->time = _ecore_xcb_event_last_time;
1211
1212 ecore_event_add(ECORE_X_EVENT_WINDOW_STACK_REQUEST, e, NULL, NULL);
1213}
1214
1215static void
1216_ecore_xcb_event_handle_property_notify(xcb_generic_event_t *event)
1217{
1218 xcb_property_notify_event_t *ev;
1219 Ecore_X_Event_Window_Property *e;
1220
1221 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1222 ev = (xcb_property_notify_event_t *)event;
1223 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Property)))) return;
1224
1225 e->win = ev->window;
1226 e->atom = ev->atom;
1227 e->time = ev->time;
1228 _ecore_xcb_event_last_time = e->time;
1229
1230 ecore_event_add(ECORE_X_EVENT_WINDOW_PROPERTY, e, NULL, NULL);
1231}
1232
1233static void
1234_ecore_xcb_event_handle_selection_clear(xcb_generic_event_t *event)
1235{
1236 xcb_selection_clear_event_t *ev;
1237 Ecore_X_Event_Selection_Clear *e;
1238 Ecore_X_Atom sel;
1239
1240 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1241
1242 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1243 ev = (xcb_selection_clear_event_t *)event;
1244 if (!(e = malloc(sizeof(Ecore_X_Event_Selection_Clear)))) return;
1245
1246 e->win = ev->owner;
1247 e->atom = sel = ev->selection;
1248 if (sel == ECORE_X_ATOM_SELECTION_PRIMARY)
1249 e->selection = ECORE_X_SELECTION_PRIMARY;
1250 else if (sel == ECORE_X_ATOM_SELECTION_SECONDARY)
1251 e->selection = ECORE_X_SELECTION_SECONDARY;
1252 else if (sel == ECORE_X_ATOM_SELECTION_CLIPBOARD)
1253 e->selection = ECORE_X_SELECTION_CLIPBOARD;
1254 else
1255 e->selection = ECORE_X_SELECTION_OTHER;
1256 e->time = ev->time;
1257
1258 ecore_event_add(ECORE_X_EVENT_SELECTION_CLEAR, e, NULL, NULL);
1259}
1260
1261static void
1262_ecore_xcb_event_handle_selection_request(xcb_generic_event_t *event)
1263{
1264 xcb_selection_request_event_t *ev;
1265 Ecore_X_Event_Selection_Request *e;
1266 Ecore_X_Selection_Intern *sd;
1267
1268 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1269
1270 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1271 ev = (xcb_selection_request_event_t *)event;
1272 if (!(e = malloc(sizeof(Ecore_X_Event_Selection_Request)))) return;
1273
1274 e->owner = ev->owner;
1275 e->requestor = ev->requestor;
1276 e->selection = ev->selection;
1277 e->target = ev->target;
1278 e->property = ev->property;
1279 e->time = ev->time;
1280
1281 ecore_event_add(ECORE_X_EVENT_SELECTION_REQUEST, e, NULL, NULL);
1282
1283 if ((sd = _ecore_xcb_selection_get(ev->selection)) &&
1284 (sd->win == ev->owner))
1285 {
1286 Ecore_X_Selection_Intern *si;
1287
1288 si = _ecore_xcb_selection_get(ev->selection);
1289 if (si->data)
1290 {
1291 Ecore_X_Atom property = XCB_NONE, type;
1292 void *data = NULL;
1293 int len = 0, typesize = 0;
1294
1295 type = ev->target;
1296 typesize = 8;
1297 len = sd->length;
1298
1299 if (!ecore_x_selection_convert(ev->selection, ev->target,
1300 &data, &len, &type, &typesize))
1301 property = XCB_NONE;
1302 else if (data)
1303 {
1304 ecore_x_window_prop_property_set(ev->requestor, ev->property,
1305 type, typesize, data, len);
1306 property = ev->property;
1307 free(data);
1308 }
1309 ecore_x_selection_notify_send(ev->requestor, ev->selection,
1310 ev->target, property, ev->time);
1311 }
1312 }
1313}
1314
1315static void
1316_ecore_xcb_event_handle_selection_notify(xcb_generic_event_t *event)
1317{
1318 xcb_selection_notify_event_t *ev;
1319 Ecore_X_Event_Selection_Notify *e;
1320 unsigned char *data = NULL;
1321 Ecore_X_Atom selection;
1322 int num = 0, format = 0;
1323
1324 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1325
1326 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1327 ev = (xcb_selection_notify_event_t *)event;
1328 selection = ev->selection;
1329 if (ev->target == ECORE_X_ATOM_SELECTION_TARGETS)
1330 {
1331 format =
1332 ecore_x_window_prop_property_get(ev->requestor, ev->property,
1333 XCB_ATOM_ATOM, 32, &data, &num);
1334 if (!format) return;
1335 }
1336 else
1337 {
1338 format =
1339 ecore_x_window_prop_property_get(ev->requestor, ev->property,
1340 XCB_GET_PROPERTY_TYPE_ANY, 8,
1341 &data, &num);
1342 if (!format) return;
1343 }
1344
1345 e = calloc(1, sizeof(Ecore_X_Event_Selection_Notify));
1346 if (!e) return;
1347 e->win = ev->requestor;
1348 e->time = ev->time;
1349 e->atom = selection;
1350 e->target = _ecore_xcb_selection_target_get(ev->target);
1351
1352 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
1353 e->selection = ECORE_X_SELECTION_PRIMARY;
1354 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
1355 e->selection = ECORE_X_SELECTION_SECONDARY;
1356 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
1357 e->selection = ECORE_X_SELECTION_XDND;
1358 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
1359 e->selection = ECORE_X_SELECTION_CLIPBOARD;
1360 else
1361 e->selection = ECORE_X_SELECTION_OTHER;
1362
1363 e->data = _ecore_xcb_selection_parse(e->target, data, num, format);
1364
1365 ecore_event_add(ECORE_X_EVENT_SELECTION_NOTIFY, e,
1366 _ecore_xcb_event_selection_notify_free, NULL);
1367}
1368
1369static void
1370_ecore_xcb_event_handle_colormap_notify(xcb_generic_event_t *event)
1371{
1372 xcb_colormap_notify_event_t *ev;
1373 Ecore_X_Event_Window_Colormap *e;
1374
1375 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1376 ev = (xcb_colormap_notify_event_t *)event;
1377 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Colormap)))) return;
1378
1379 e->win = ev->window;
1380 e->cmap = ev->colormap;
1381 if (ev->state == XCB_COLORMAP_STATE_INSTALLED)
1382 e->installed = 1;
1383 else
1384 e->installed = 0;
1385 e->time = _ecore_xcb_event_last_time;
1386
1387 ecore_event_add(ECORE_X_EVENT_WINDOW_COLORMAP, e, NULL, NULL);
1388}
1389
1390static void
1391_ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
1392{
1393 xcb_client_message_event_t *ev;
1394
1395 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1396 ev = (xcb_client_message_event_t *)event;
1397
1398 /* Special client message event handling here. need to put LOTS of if */
1399 /* checks here and generate synthetic events per special message known */
1400 /* otherwise generate generic client message event. this would handle*/
1401 /* netwm, ICCCM, gnomewm, old kde and mwm hint client message protocols */
1402
1403 if ((ev->type == ECORE_X_ATOM_WM_PROTOCOLS) && (ev->format == 32) &&
1404 (ev->data.data32[0] == ECORE_X_ATOM_WM_DELETE_WINDOW))
1405 {
1406 Ecore_X_Event_Window_Delete_Request *e;
1407
1408 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Delete_Request))))
1409 return;
1410 e->win = ev->window;
1411 e->time = _ecore_xcb_event_last_time;
1412 ecore_event_add(ECORE_X_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
1413 }
1414 else if ((ev->type == ECORE_X_ATOM_NET_WM_MOVERESIZE) &&
1415 (ev->format == 32) && (ev->data.data32[2] < 9))
1416 {
1417 Ecore_X_Event_Window_Move_Resize_Request *e;
1418
1419 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Move_Resize_Request))))
1420 return;
1421 e->win = ev->window;
1422 e->x = ev->data.data32[0];
1423 e->y = ev->data.data32[1];
1424 e->direction = ev->data.data32[2];
1425 e->button = ev->data.data32[3];
1426 e->source = ev->data.data32[4];
1427 ecore_event_add(ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST, e, NULL, NULL);
1428 }
1429 else if (ev->type == ECORE_X_ATOM_XDND_ENTER)
1430 {
1431 Ecore_X_Event_Xdnd_Enter *e;
1432 Ecore_X_DND_Target *target;
1433
1434 DBG("Got Xdnd Enter Event");
1435 if (!(e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Enter)))) return;
1436 target = _ecore_xcb_dnd_target_get();
1437 target->state = ECORE_X_DND_TARGET_ENTERED;
1438 target->source = ev->data.data32[0];
1439 target->win = ev->window;
1440 target->version = (int)(ev->data.data32[1] >> 24);
1441 if (target->version > ECORE_X_DND_VERSION)
1442 {
1443 WRN("DND: Requested version %d but we only support up to %d",
1444 target->version, ECORE_X_DND_VERSION);
1445 free(e);
1446 return;
1447 }
1448 if (ev->data.data32[1] & 0x1UL)
1449 {
1450 unsigned char *data;
1451 Ecore_X_Atom *types;
1452 int num_ret = 0;
1453
1454 if (!ecore_x_window_prop_property_get(target->source,
1455 ECORE_X_ATOM_XDND_TYPE_LIST,
1456 ECORE_X_ATOM_ATOM, 32,
1457 &data, &num_ret))
1458 {
1459 WRN("DND: Could not fetch data type list from source window");
1460 free(e);
1461 return;
1462 }
1463 types = (Ecore_X_Atom *)data;
1464 e->types = calloc(num_ret, sizeof(char *));
1465 if (e->types)
1466 {
1467 int i = 0;
1468
1469 for (i = 0; i < num_ret; i++)
1470 e->types[i] = ecore_x_atom_name_get(types[i]);
1471 }
1472 e->num_types = num_ret;
1473 }
1474 else
1475 {
1476 int i = 0;
1477
1478 e->types = calloc(3, sizeof(char *));
1479 if (e->types)
1480 {
1481 while ((i < 3) && (ev->data.data32[i + 2]))
1482 {
1483 e->types[i] =
1484 ecore_x_atom_name_get(ev->data.data32[i + 2]);
1485 i++;
1486 }
1487 }
1488 e->num_types = i;
1489 }
1490
1491 e->win = target->win;
1492 e->source = target->source;
1493 ecore_event_add(ECORE_X_EVENT_XDND_ENTER, e,
1494 _ecore_xcb_event_xdnd_enter_free, NULL);
1495 }
1496 else if (ev->type == ECORE_X_ATOM_XDND_POSITION)
1497 {
1498 Ecore_X_Event_Xdnd_Position *e;
1499 Ecore_X_DND_Target *target;
1500
1501 DBG("Got Xdnd Position Event");
1502 target = _ecore_xcb_dnd_target_get();
1503 if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
1504 (target->win != ev->window)) return;
1505 target->pos.x = ev->data.data32[2] >> 16;
1506 target->pos.y = ev->data.data32[2] & 0xFFFFUL;
1507 target->action = ev->data.data32[4];
1508 target->time = (target->version >= 1) ?
1509 (Ecore_X_Time)ev->data.data32[3] : XCB_CURRENT_TIME;
1510
1511 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Position));
1512 if (!e) return;
1513 e->win = target->win;
1514 e->source = target->source;
1515 e->position.x = target->pos.x;
1516 e->position.y = target->pos.y;
1517 e->action = target->action;
1518 ecore_event_add(ECORE_X_EVENT_XDND_POSITION, e, NULL, NULL);
1519 }
1520 else if (ev->type == ECORE_X_ATOM_XDND_STATUS)
1521 {
1522 Ecore_X_Event_Xdnd_Status *e;
1523 Ecore_X_DND_Source *source;
1524
1525 DBG("Got Xdnd Status Event");
1526 source = _ecore_xcb_dnd_source_get();
1527 if ((source->win != ev->window) ||
1528 (source->dest != (Ecore_X_Window)ev->data.data32[0]))
1529 return;
1530
1531 source->await_status = 0;
1532 source->will_accept = ev->data.data32[1] & 0x1UL;
1533 source->suppress = (ev->data.data32[1] & 0x2UL) ? 0 : 1;
1534 source->rectangle.x = ev->data.data32[2] >> 16;
1535 source->rectangle.y = ev->data.data32[2] & 0xFFFFUL;
1536 source->rectangle.width = ev->data.data32[3] >> 16;
1537 source->rectangle.height = ev->data.data32[3] & 0xFFFFUL;
1538 source->accepted_action = ev->data.data32[4];
1539
1540 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Status));
1541 if (!e) return;
1542 e->win = source->win;
1543 e->target = source->dest;
1544 e->will_accept = source->will_accept;
1545 e->rectangle.x = source->rectangle.x;
1546 e->rectangle.y = source->rectangle.y;
1547 e->rectangle.width = source->rectangle.width;
1548 e->rectangle.height = source->rectangle.height;
1549 e->action = source->accepted_action;
1550
1551 ecore_event_add(ECORE_X_EVENT_XDND_STATUS, e, NULL, NULL);
1552 }
1553 else if (ev->type == ECORE_X_ATOM_XDND_LEAVE)
1554 {
1555 Ecore_X_Event_Xdnd_Leave *e;
1556 Ecore_X_DND_Target *target;
1557
1558 DBG("Got Xdnd Leave Event");
1559 target = _ecore_xcb_dnd_target_get();
1560 if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
1561 (target->win != ev->window))
1562 return;
1563 target->state = ECORE_X_DND_TARGET_IDLE;
1564 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Leave));
1565 if (!e) return;
1566 e->win = ev->window;
1567 e->source = (Ecore_X_Window)ev->data.data32[0];
1568 ecore_event_add(ECORE_X_EVENT_XDND_LEAVE, e, NULL, NULL);
1569 }
1570 else if (ev->type == ECORE_X_ATOM_XDND_DROP)
1571 {
1572 Ecore_X_Event_Xdnd_Drop *e;
1573 Ecore_X_DND_Target *target;
1574
1575 DBG("Got Xdnd Drop Event");
1576 target = _ecore_xcb_dnd_target_get();
1577 if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
1578 (target->win != ev->window))
1579 return;
1580 target->time = (target->version >= 1) ?
1581 (Ecore_X_Time)ev->data.data32[2] : _ecore_xcb_event_last_time;
1582
1583 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Drop));
1584 if (!e) return;
1585 e->win = target->win;
1586 e->source = target->source;
1587 e->action = target->action;
1588 e->position.x = target->pos.x;
1589 e->position.y = target->pos.y;
1590 ecore_event_add(ECORE_X_EVENT_XDND_DROP, e, NULL, NULL);
1591 }
1592 else if (ev->type == ECORE_X_ATOM_XDND_FINISHED)
1593 {
1594 Ecore_X_Event_Xdnd_Finished *e;
1595 Ecore_X_DND_Source *source;
1596 Eina_Bool completed = EINA_TRUE;
1597
1598 DBG("Got Xdnd Finished Event");
1599 source = _ecore_xcb_dnd_source_get();
1600 if ((source->win != ev->window) ||
1601 (source->dest != (Ecore_X_Window)ev->data.data32[0]))
1602 return;
1603 if ((source->version < 5) || (ev->data.data32[1] & 0x1UL))
1604 {
1605 ecore_x_selection_xdnd_clear();
1606 source->state = ECORE_X_DND_SOURCE_IDLE;
1607 }
1608 else if (source->version >= 5)
1609 {
1610 completed = EINA_FALSE;
1611 source->state = ECORE_X_DND_SOURCE_CONVERTING;
1612 /* FIXME: Probably need to add a timer to switch back to idle
1613 * and discard the selection data */
1614 }
1615
1616 if (!(e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Finished))))
1617 return;
1618 e->win = source->win;
1619 e->target = source->dest;
1620 e->completed = completed;
1621 if (source->version >= 5)
1622 {
1623 source->accepted_action = ev->data.data32[2];
1624 e->action = source->accepted_action;
1625 }
1626 else
1627 {
1628 source->accepted_action = 0;
1629 e->action = source->action;
1630 }
1631 ecore_event_add(ECORE_X_EVENT_XDND_FINISHED, e, NULL, NULL);
1632 }
1633 else if (ev->type == ECORE_X_ATOM_NET_WM_STATE)
1634 {
1635 Ecore_X_Event_Window_State_Request *e;
1636
1637 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_State_Request))))
1638 return;
1639 e->win = ev->window;
1640 if (ev->data.data32[0] == 0)
1641 e->action = ECORE_X_WINDOW_STATE_ACTION_REMOVE;
1642 else if (ev->data.data32[0] == 1)
1643 e->action = ECORE_X_WINDOW_STATE_ACTION_ADD;
1644 else if (ev->data.data32[0] == 2)
1645 e->action = ECORE_X_WINDOW_STATE_ACTION_TOGGLE;
1646 else
1647 {
1648 free(e);
1649 return;
1650 }
1651 e->state[0] = _ecore_xcb_netwm_window_state_get(ev->data.data32[1]);
1652 if (e->state[0] == ECORE_X_WINDOW_STATE_UNKNOWN)
1653 {
1654 /* FIXME */
1655 }
1656 e->state[1] = _ecore_xcb_netwm_window_state_get(ev->data.data32[2]);
1657 if (e->state[1] == ECORE_X_WINDOW_STATE_UNKNOWN)
1658 {
1659 /* FIXME */
1660 }
1661 e->source = ev->data.data32[3];
1662 ecore_event_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, e, NULL, NULL);
1663 }
1664#ifdef OLD_XCB_VERSION
1665 else if ((ev->type == ECORE_X_ATOM_WM_CHANGE_STATE) &&
1666 (ev->format == 32) && (ev->data.data32[0] == XCB_WM_STATE_ICONIC))
1667#else
1668 else if ((ev->type == ECORE_X_ATOM_WM_CHANGE_STATE) && (ev->format == 32) &&
1669 (ev->data.data32[0] == XCB_ICCCM_WM_STATE_ICONIC))
1670#endif
1671 {
1672 Ecore_X_Event_Window_State_Request *e;
1673
1674 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_State_Request))))
1675 return;
1676 e->win = ev->window;
1677 e->action = ECORE_X_WINDOW_STATE_ACTION_ADD;
1678 e->state[0] = ECORE_X_WINDOW_STATE_ICONIFIED;
1679 ecore_event_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, e, NULL, NULL);
1680 }
1681 else if ((ev->type == ECORE_X_ATOM_NET_WM_DESKTOP) && (ev->format == 32))
1682 {
1683 Ecore_X_Event_Desktop_Change *e;
1684
1685 if (!(e = calloc(1, sizeof(Ecore_X_Event_Desktop_Change))))
1686 return;
1687 e->win = ev->window;
1688 e->desk = ev->data.data32[0];
1689 e->source = ev->data.data32[1];
1690 ecore_event_add(ECORE_X_EVENT_DESKTOP_CHANGE, e, NULL, NULL);
1691 }
1692 else if (ev->type == ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS)
1693 {
1694 Ecore_X_Event_Frame_Extents_Request *e;
1695
1696 if (!(e = calloc(1, sizeof(Ecore_X_Event_Frame_Extents_Request))))
1697 return;
1698 e->win = ev->window;
1699 ecore_event_add(ECORE_X_EVENT_FRAME_EXTENTS_REQUEST, e, NULL, NULL);
1700 }
1701 else if ((ev->type == ECORE_X_ATOM_WM_PROTOCOLS) &&
1702 ((Ecore_X_Atom)ev->data.data32[0] == ECORE_X_ATOM_NET_WM_PING) &&
1703 (ev->format == 32))
1704 {
1705 Ecore_X_Event_Ping *e;
1706 Ecore_X_Window root = 0;
1707 int count = 0;
1708
1709 if (!(e = calloc(1, sizeof(Ecore_X_Event_Ping)))) return;
1710 e->win = ev->window;
1711 e->time = ev->data.data32[1];
1712 e->event_win = ev->data.data32[2];
1713 ecore_event_add(ECORE_X_EVENT_PING, e, NULL, NULL);
1714
1715 CHECK_XCB_CONN;
1716
1717 count = xcb_setup_roots_length(xcb_get_setup(_ecore_xcb_conn));
1718 if (count > 1)
1719 root = ecore_x_window_root_get(e->win);
1720 else
1721 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1722
1723 if (ev->window != root)
1724 {
1725 ev->window = root;
1726 xcb_send_event(_ecore_xcb_conn, 0, root,
1727 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
1728 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY),
1729 (const char *)&ev);
1730// ecore_x_flush();
1731 }
1732 }
1733 else if ((ev->type == ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN) &&
1734 (ev->format == 8))
1735 {
1736 _ecore_xcb_netwm_startup_info_begin(ev->window, ev->data.data8[0]);
1737 }
1738 else if ((ev->type == ECORE_X_ATOM_NET_STARTUP_INFO) && (ev->format == 8))
1739 {
1740 _ecore_xcb_netwm_startup_info(ev->window, ev->data.data8[0]);
1741 }
1742 else if ((ev->type == 27777) && (ev->data.data32[0] == 0x7162534) &&
1743 (ev->format == 32)) // && (ev->window = _private_window))
1744 {
1745 if (ev->data.data32[1] == 0x10000001)
1746 _ecore_xcb_window_button_grab_remove(ev->data.data32[2]);
1747 else if (ev->data.data32[1] == 0x10000002)
1748 _ecore_xcb_window_key_grab_remove(ev->data.data32[2]);
1749 }
1750 else
1751 {
1752 Ecore_X_Event_Client_Message *e;
1753 int i = 0;
1754
1755 if (!(e = calloc(1, sizeof(Ecore_X_Event_Client_Message))))
1756 return;
1757
1758 e->win = ev->window;
1759 e->message_type = ev->type;
1760 e->format = ev->format;
1761 for (i = 0; i < 5; i++)
1762 e->data.l[i] = ev->data.data32[i];
1763 ecore_event_add(ECORE_X_EVENT_CLIENT_MESSAGE, e, NULL, NULL);
1764 }
1765}
1766
1767static void
1768_ecore_xcb_event_handle_mapping_notify(xcb_generic_event_t *event)
1769{
1770 xcb_mapping_notify_event_t *ev;
1771 Ecore_X_Event_Mapping_Change *e;
1772
1773 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1774
1775 ev = (xcb_mapping_notify_event_t *)event;
1776 if (!(e = calloc(1, sizeof(Ecore_X_Event_Mapping_Change)))) return;
1777
1778 _ecore_xcb_keymap_refresh(ev);
1779 _ecore_xcb_modifiers_get();
1780
1781 switch (ev->request)
1782 {
1783 case XCB_MAPPING_MODIFIER:
1784 e->type = ECORE_X_MAPPING_MODIFIER;
1785 break;
1786
1787 case XCB_MAPPING_KEYBOARD:
1788 e->type = ECORE_X_MAPPING_KEYBOARD;
1789 break;
1790
1791 case XCB_MAPPING_POINTER:
1792 default:
1793 e->type = ECORE_X_MAPPING_MOUSE;
1794 break;
1795 }
1796 e->keycode = ev->first_keycode;
1797 e->num = ev->count;
1798
1799 ecore_event_add(ECORE_X_EVENT_MAPPING_CHANGE, e, NULL, NULL);
1800}
1801
1802static void
1803_ecore_xcb_event_handle_damage_notify(xcb_generic_event_t *event)
1804{
1805#ifdef ECORE_XCB_DAMAGE
1806 xcb_damage_notify_event_t *ev;
1807 Ecore_X_Event_Damage *e;
1808#endif
1809
1810 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1811
1812 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1813#ifdef ECORE_XCB_DAMAGE
1814 ev = (xcb_damage_notify_event_t *)event;
1815 if (!(e = calloc(1, sizeof(Ecore_X_Event_Damage)))) return;
1816
1817 e->level = ev->level;
1818 e->drawable = ev->drawable;
1819 e->damage = ev->damage;
1820 e->time = ev->timestamp;
1821 e->area.x = ev->area.x;
1822 e->area.y = ev->area.y;
1823 e->area.width = ev->area.width;
1824 e->area.height = ev->area.height;
1825 e->geometry.x = ev->geometry.x;
1826 e->geometry.y = ev->geometry.y;
1827 e->geometry.width = ev->geometry.width;
1828 e->geometry.height = ev->geometry.height;
1829
1830 ecore_event_add(ECORE_X_EVENT_DAMAGE_NOTIFY, e, NULL, NULL);
1831#endif
1832}
1833
1834static void
1835_ecore_xcb_event_handle_randr_change(xcb_generic_event_t *event)
1836{
1837#ifdef ECORE_XCB_RANDR
1838 xcb_randr_screen_change_notify_event_t *ev;
1839 Ecore_X_Event_Screen_Change *e;
1840#endif
1841
1842 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1843#ifdef ECORE_XCB_RANDR
1844 ev = (xcb_randr_screen_change_notify_event_t *)event;
1845 if (!(e = calloc(1, sizeof(Ecore_X_Event_Screen_Change)))) return;
1846
1847 e->win = ev->request_window;
1848 e->root = ev->root;
1849 e->size.width = ev->width;
1850 e->size.height = ev->height;
1851 e->time = ev->timestamp;
1852 e->config_time = ev->config_timestamp;
1853 e->size.width_mm = ev->mwidth;
1854 e->size.height_mm = ev->mheight;
1855 e->orientation = ev->rotation;
1856 e->subpixel_order = ev->subpixel_order;
1857
1858 ecore_event_add(ECORE_X_EVENT_SCREEN_CHANGE, e, NULL, NULL);
1859#endif
1860}
1861
1862static void
1863_ecore_xcb_event_handle_randr_notify(xcb_generic_event_t *event)
1864{
1865#ifdef ECORE_XCB_RANDR
1866 xcb_randr_notify_event_t *ev;
1867#endif
1868
1869 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1870#ifdef ECORE_XCB_RANDR
1871 ev = (xcb_randr_notify_event_t *)event;
1872 switch (ev->subCode)
1873 {
1874 case XCB_RANDR_NOTIFY_CRTC_CHANGE:
1875 _ecore_xcb_event_handle_randr_crtc_change(event);
1876 break;
1877
1878 case XCB_RANDR_NOTIFY_OUTPUT_CHANGE:
1879 _ecore_xcb_event_handle_randr_output_change(event);
1880 break;
1881
1882 case XCB_RANDR_NOTIFY_OUTPUT_PROPERTY:
1883 _ecore_xcb_event_handle_randr_output_property_change(event);
1884 break;
1885
1886 default:
1887 break;
1888 }
1889#endif
1890}
1891
1892static void
1893_ecore_xcb_event_handle_randr_crtc_change(xcb_generic_event_t *event)
1894{
1895#ifdef ECORE_XCB_RANDR
1896 xcb_randr_notify_event_t *ev;
1897 Ecore_X_Event_Randr_Crtc_Change *e;
1898#endif
1899
1900#ifdef ECORE_XCB_RANDR
1901 ev = (xcb_randr_notify_event_t *)event;
1902 if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change))))
1903 return;
1904
1905 e->win = ev->u.cc.window;
1906 e->crtc = ev->u.cc.crtc;
1907 e->mode = ev->u.cc.mode;
1908 e->orientation = ev->u.cc.rotation;
1909 e->geo.x = ev->u.cc.x;
1910 e->geo.y = ev->u.cc.y;
1911 e->geo.w = ev->u.cc.width;
1912 e->geo.h = ev->u.cc.height;
1913
1914 ecore_event_add(ECORE_X_EVENT_RANDR_CRTC_CHANGE, e, NULL, NULL);
1915#endif
1916}
1917
1918static void
1919_ecore_xcb_event_handle_randr_output_change(xcb_generic_event_t *event)
1920{
1921#ifdef ECORE_XCB_RANDR
1922 xcb_randr_notify_event_t *ev;
1923 Ecore_X_Event_Randr_Output_Change *e;
1924#endif
1925
1926#ifdef ECORE_XCB_RANDR
1927 ev = (xcb_randr_notify_event_t *)event;
1928 if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change))))
1929 return;
1930
1931 e->win = ev->u.oc.window;
1932 e->output = ev->u.oc.output;
1933 e->crtc = ev->u.oc.crtc;
1934 e->mode = ev->u.oc.mode;
1935 e->orientation = ev->u.oc.rotation;
1936 e->connection = ev->u.oc.connection;
1937 e->subpixel_order = ev->u.oc.subpixel_order;
1938
1939 ecore_event_add(ECORE_X_EVENT_RANDR_OUTPUT_CHANGE, e, NULL, NULL);
1940#endif
1941}
1942
1943static void
1944_ecore_xcb_event_handle_randr_output_property_change(xcb_generic_event_t *event)
1945{
1946#ifdef ECORE_XCB_RANDR
1947 xcb_randr_notify_event_t *ev;
1948 Ecore_X_Event_Randr_Output_Property_Notify *e;
1949#endif
1950
1951#ifdef ECORE_XCB_RANDR
1952 ev = (xcb_randr_notify_event_t *)event;
1953 if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Output_Property_Notify))))
1954 return;
1955
1956 e->win = ev->u.op.window;
1957 e->output = ev->u.op.output;
1958 e->property = ev->u.op.atom;
1959 e->time = ev->u.op.timestamp;
1960 if (ev->u.op.status == XCB_PROPERTY_NEW_VALUE)
1961 e->state = ECORE_X_RANDR_PROPERTY_CHANGE_ADD;
1962 else
1963 e->state = ECORE_X_RANDR_PROPERTY_CHANGE_DEL;
1964
1965 ecore_event_add(ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, e, NULL, NULL);
1966#endif
1967}
1968
1969static void
1970_ecore_xcb_event_handle_screensaver_notify(xcb_generic_event_t *event)
1971{
1972#ifdef ECORE_XCB_SCREENSAVER
1973 xcb_screensaver_notify_event_t *ev;
1974 Ecore_X_Event_Screensaver_Notify *e;
1975#endif
1976
1977 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
1978#ifdef ECORE_XCB_SCREENSAVER
1979 ev = (xcb_screensaver_notify_event_t *)event;
1980 if (!(e = calloc(1, sizeof(Ecore_X_Event_Screensaver_Notify)))) return;
1981
1982 e->win = ev->window;
1983 e->on = EINA_FALSE;
1984 if (ev->state == XCB_SCREENSAVER_STATE_ON) e->on = EINA_TRUE;
1985 e->time = ev->time;
1986
1987 ecore_event_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, e, NULL, NULL);
1988#endif
1989}
1990
1991#ifdef ECORE_XCB_XGESTURE
1992static void
1993_ecore_xcb_event_handle_gesture_notify_flick(xcb_generic_event_t *event)
1994{
1995 xcb_gesture_notify_flick_event_t *ev;
1996 Ecore_X_Event_Gesture_Notify_Flick *e;
1997
1998 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1999 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2000 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2001
2002 ev = (xcb_gesture_notify_flick_event_t *)event;
2003 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Flick)))) return;
2004
2005 e->win = ev->window;
2006 e->time = ev->time;
2007 e->subtype = ev->kind;
2008 e->num_fingers = ev->num_finger;
2009 e->distance = ev->distance;
2010 e->duration = ev->duration;
2011 e->direction = ev->direction;
2012 e->angle = XFixedToDouble(ev->angle);
2013
2014 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_FLICK, e, NULL, NULL);
2015}
2016
2017static void
2018_ecore_xcb_event_handle_gesture_notify_pan(xcb_generic_event_t *event)
2019{
2020 xcb_gesture_notify_pan_event_t *ev;
2021 Ecore_X_Event_Gesture_Notify_Pan *e;
2022
2023 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2024 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2025 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2026
2027 ev = (xcb_gesture_notify_pan_event_t *)event;
2028 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Pan)))) return;
2029
2030 e->win = ev->window;
2031 e->time = ev->time;
2032 e->subtype = ev->kind;
2033 e->num_fingers = ev->num_finger;
2034 e->dx = ev->dx;
2035 e->dy = ev->dy;
2036 e->distance = ev->distance;
2037 e->duration = ev->duration;
2038 e->direction = ev->direction;
2039
2040 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PAN, e, NULL, NULL);
2041}
2042
2043static void
2044_ecore_xcb_event_handle_gesture_notify_pinchrotation(xcb_generic_event_t *event)
2045{
2046 xcb_gesture_notify_pinch_rotation_event_t *ev;
2047 Ecore_X_Event_Gesture_Notify_PinchRotation *e;
2048
2049 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2050 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2051 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2052
2053 ev = (xcb_gesture_notify_pinch_rotation_event_t *)event;
2054 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_PinchRotation)))) return;
2055
2056 e->win = ev->window;
2057 e->time = ev->time;
2058 e->subtype = ev->kind;
2059 e->num_fingers = ev->num_finger;
2060 e->distance = ev->distance;
2061 e->cx = ev->cx;
2062 e->cy = ev->cy;
2063 e->zoom = XFixedToDouble(ev->zoom);
2064 e->angle = XFixedToDouble(ev->angle);
2065
2066 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION, e, NULL, NULL);
2067}
2068
2069static void
2070_ecore_xcb_event_handle_gesture_notify_tap(xcb_generic_event_t *event)
2071{
2072 xcb_gesture_notify_tap_event_t *ev;
2073 Ecore_X_Event_Gesture_Notify_Tap *e;
2074
2075 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2076 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2077 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2078
2079 ev = (xcb_gesture_notify_tap_event_t *)event;
2080 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Tap)))) return;
2081
2082 e->win = ev->window;
2083 e->time = ev->time;
2084 e->subtype = ev->kind;
2085 e->num_fingers = ev->num_finger;
2086 e->cx = ev->cx;
2087 e->cy = ev->cy;
2088 e->tap_repeat = ev->tap_repeat;
2089 e->interval = ev->interval;
2090
2091 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAP, e, NULL, NULL);
2092}
2093
2094static void
2095_ecore_xcb_event_handle_gesture_notify_tapnhold(xcb_generic_event_t *event)
2096{
2097 xcb_gesture_notify_tap_n_hold_event_t *ev;
2098 Ecore_X_Event_Gesture_Notify_TapNHold *e;
2099
2100 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2101 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2102 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2103
2104 ev = (xcb_gesture_notify_tap_n_hold_event_t *)event;
2105 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_TapNHold)))) return;
2106
2107 e->win = ev->window;
2108 e->time = ev->time;
2109 e->subtype = ev->kind;
2110 e->num_fingers = ev->num_finger;
2111 e->cx = ev->cx;
2112 e->cy = ev->cy;
2113 e->interval = ev->interval;
2114 e->hold_time = ev->holdtime;
2115
2116 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD, e, NULL, NULL);
2117}
2118
2119static void
2120 _ecore_xcb_event_handle_gesture_notify_hold(xcb_generic_event_t *event)
2121{
2122 xcb_gesture_notify_hold_event_t *ev;
2123 Ecore_X_Event_Gesture_Notify_Hold *e;
2124
2125 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2126 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2127 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2128
2129 ev = (xcb_gesture_notify_hold_event_t *)event;
2130 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Hold)))) return;
2131
2132 e->win = ev->window;
2133 e->time = ev->time;
2134 e->subtype = ev->kind;
2135 e->num_fingers = ev->num_finger;
2136 e->cx = ev->cx;
2137 e->cy = ev->cy;
2138 e->hold_time = ev->holdtime;
2139
2140 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_HOLD, e, NULL, NULL);
2141}
2142
2143static void
2144 _ecore_xcb_event_handle_gesture_notify_group(xcb_generic_event_t *event)
2145{
2146 xcb_gesture_notify_group_event_t *ev;
2147 Ecore_X_Event_Gesture_Notify_Group *e;
2148
2149 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2150 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2151 fprintf(stderr, "[ECORE_XCB][%s]...\n", __FUNCTION__);
2152
2153 ev = (xcb_gesture_notify_group_event_t *)event;
2154 if (!(e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Group)))) return;
2155
2156 e->win = ev->window;
2157 e->time = ev->time;
2158 e->subtype = ev->kind;
2159 e->num_groups = ev->num_group;
2160 e->group_id = ev->groupid;
2161
2162 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_GROUP, e, NULL, NULL);
2163}
2164#endif
2165
2166#ifdef ECORE_XCB_SHAPE
2167static void
2168_ecore_xcb_event_handle_shape_change(xcb_generic_event_t *event)
2169{
2170 xcb_shape_notify_event_t *ev;
2171 Ecore_X_Event_Window_Shape *e;
2172
2173 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2174 ev = (xcb_shape_notify_event_t *)event;
2175 if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Shape)))) return;
2176
2177 e->win = ev->affected_window;
2178 e->time = ev->server_time;
2179 switch (ev->shape_kind)
2180 {
2181 case XCB_SHAPE_SK_BOUNDING:
2182 e->type = ECORE_X_SHAPE_BOUNDING;
2183 break;
2184
2185 case XCB_SHAPE_SK_CLIP:
2186 e->type = ECORE_X_SHAPE_CLIP;
2187 break;
2188
2189 case XCB_SHAPE_SK_INPUT:
2190 e->type = ECORE_X_SHAPE_INPUT;
2191 break;
2192
2193 default:
2194 break;
2195 }
2196 e->x = ev->extents_x;
2197 e->y = ev->extents_y;
2198 e->w = ev->extents_width;
2199 e->h = ev->extents_height;
2200 e->shaped = ev->shaped;
2201
2202 ecore_event_add(ECORE_X_EVENT_WINDOW_SHAPE, e, NULL, NULL);
2203}
2204
2205#endif
2206
2207static void
2208_ecore_xcb_event_handle_sync_counter(xcb_generic_event_t *event)
2209{
2210#ifdef ECORE_XCB_SYNC
2211 xcb_sync_counter_notify_event_t *ev;
2212 Ecore_X_Event_Sync_Counter *e;
2213#endif
2214
2215 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2216
2217#ifdef ECORE_XCB_SYNC
2218 ev = (xcb_sync_counter_notify_event_t *)event;
2219 if (!(e = calloc(1, sizeof(Ecore_X_Event_Sync_Counter)))) return;
2220
2221 e->time = ev->timestamp;
2222
2223 ecore_event_add(ECORE_X_EVENT_SYNC_COUNTER, e, NULL, NULL);
2224#endif
2225}
2226
2227static void
2228_ecore_xcb_event_handle_sync_alarm(xcb_generic_event_t *event)
2229{
2230#ifdef ECORE_XCB_SYNC
2231 xcb_sync_alarm_notify_event_t *ev;
2232 Ecore_X_Event_Sync_Alarm *e;
2233#endif
2234
2235 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2236#ifdef ECORE_XCB_SYNC
2237 ev = (xcb_sync_alarm_notify_event_t *)event;
2238 if (!(e = calloc(1, sizeof(Ecore_X_Event_Sync_Alarm)))) return;
2239
2240 e->time = ev->timestamp;
2241 e->alarm = ev->alarm;
2242
2243 ecore_event_add(ECORE_X_EVENT_SYNC_ALARM, e, NULL, NULL);
2244#endif
2245}
2246
2247static void
2248_ecore_xcb_event_handle_xfixes_selection_notify(xcb_generic_event_t *event)
2249{
2250#ifdef ECORE_XCB_XFIXES
2251 Ecore_X_Event_Fixes_Selection_Notify *e;
2252 Ecore_X_Atom sel;
2253 xcb_xfixes_selection_notify_event_t *ev;
2254#endif
2255
2256 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2257#ifdef ECORE_XCB_XFIXES
2258 ev = (xcb_xfixes_selection_notify_event_t *)event;
2259
2260 if (!(e = calloc(1, sizeof(*e)))) return;
2261
2262 e->win = ev->window;
2263 e->owner = ev->owner;
2264 e->time = ev->timestamp;
2265 e->selection_time = ev->selection_timestamp;
2266 e->atom = sel = ev->selection;
2267 if (sel == ECORE_X_ATOM_SELECTION_PRIMARY)
2268 e->selection = ECORE_X_SELECTION_PRIMARY;
2269 else if (sel == ECORE_X_ATOM_SELECTION_SECONDARY)
2270 e->selection = ECORE_X_SELECTION_SECONDARY;
2271 else if (sel == ECORE_X_ATOM_SELECTION_CLIPBOARD)
2272 e->selection = ECORE_X_SELECTION_CLIPBOARD;
2273 else
2274 e->selection = ECORE_X_SELECTION_OTHER;
2275 e->reason = ev->subtype;
2276
2277 ecore_event_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY, e, NULL, NULL);
2278#endif
2279}
2280
2281static void
2282_ecore_xcb_event_handle_xfixes_cursor_notify(xcb_generic_event_t *event __UNUSED__)
2283{
2284 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2285// FIXME: TBD
2286}
2287
2288static void
2289_ecore_xcb_event_handle_generic_event(xcb_generic_event_t *event)
2290{
2291 xcb_ge_event_t *ev;
2292 Ecore_X_Event_Generic *e;
2293
2294 ev = (xcb_ge_event_t *)event;
2295
2296 /* pad0 *IS* extension - bug in xcb */
2297 if (ev->pad0 == _ecore_xcb_event_input)
2298 {
2299 _ecore_xcb_event_handle_input_event(event);
2300// FIXME: should we generate generic events as WELL as input events?
2301// return;
2302 }
2303
2304 if (!(e = calloc(1, sizeof(Ecore_X_Event_Generic))))
2305 return;
2306
2307 DBG("Handle Generic Event: %d", ev->event_type);
2308
2309 e->cookie = ev->sequence;
2310 /* NB: These are bugs in xcb ge_event structure. The struct should have a
2311 * field for extension & data, but does not.
2312 *
2313 * XCB people have been notified of this issue */
2314 e->extension = ev->pad0;
2315 /* e->data = ev->pad1; */
2316 if (ev->length > 0)
2317 {
2318 int len = ev->length * sizeof(int);
2319 e->data = malloc(len);
2320 if (e->data) memcpy(e->data, &(event[1]), len);
2321 }
2322
2323 e->evtype = ev->event_type;
2324
2325 ecore_event_add(ECORE_X_EVENT_GENERIC, e,
2326 _ecore_xcb_event_generic_event_free, e->data);
2327}
2328
2329static void
2330_ecore_xcb_event_handle_input_event(xcb_generic_event_t *event)
2331{
2332 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2333
2334 _ecore_xcb_input_handle_event(event);
2335}
2336
2337static void
2338_ecore_xcb_event_key_press(xcb_generic_event_t *event)
2339{
2340 Ecore_Event_Key *e;
2341 xcb_keysym_t sym = XCB_NO_SYMBOL;
2342 xcb_keycode_t keycode = 0;
2343 xcb_key_press_event_t *xevent;
2344 char *keyname = NULL, *key = NULL;
2345 char *compose = NULL;
2346 char compose_buffer[256];
2347 int val = 0;
2348
2349 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2350
2351 xevent = (xcb_key_press_event_t *)event;
2352 keycode = xevent->detail;
2353
2354 sym = _ecore_xcb_keymap_keycode_to_keysym(keycode, xevent->state);
2355 keyname = _ecore_xcb_keymap_keysym_to_string(sym);
2356 if (!keyname)
2357 {
2358 char buff[256];
2359
2360 snprintf(buff, sizeof(buff), "Keycode-%i", keycode);
2361 keyname = buff;
2362 }
2363
2364 val =
2365 _ecore_xcb_keymap_lookup_string(keycode, xevent->state, compose_buffer,
2366 sizeof(compose_buffer), &sym);
2367 if (val > 0)
2368 {
2369 compose_buffer[val] = 0;
2370 compose =
2371 eina_str_convert(nl_langinfo(CODESET), "UTF-8", compose_buffer);
2372 if (!compose)
2373 ERR("Ecore_X cannot convert input key string '%s' to UTF-8. "
2374 "Is Eina built with iconv support?", compose_buffer);
2375 }
2376
2377 key = _ecore_xcb_keymap_keysym_to_string(sym);
2378 if (!key) key = keyname;
2379
2380 e = malloc(sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
2381 (compose ? strlen(compose) : 0) + 3);
2382 if (e)
2383 {
2384 e->keyname = (char *)(e + 1);
2385 e->key = e->keyname + strlen(keyname) + 1;
2386
2387 e->compose = NULL;
2388 if (compose) e->compose = (e->key + strlen(key) + 1);
2389 e->string = e->compose;
2390
2391 strcpy((char *)e->keyname, keyname);
2392 strcpy((char *)e->key, key);
2393 if (compose) strcpy((char *)e->compose, compose);
2394
2395 e->modifiers = _ecore_xcb_events_modifiers_get(xevent->state);
2396 e->timestamp = xevent->time;
2397 e->window = xevent->child ? xevent->child : xevent->event;
2398 e->event_window = xevent->event;
2399 e->same_screen = xevent->same_screen;
2400 e->root_window = xevent->root;
2401
2402 DBG("Sending Key Down Event: %s", e->keyname);
2403 ecore_event_add(ECORE_EVENT_KEY_DOWN, e, NULL, NULL);
2404 }
2405 _ecore_xcb_event_last_time = xevent->time;
2406}
2407
2408static void
2409_ecore_xcb_event_key_release(xcb_generic_event_t *event)
2410{
2411 Ecore_Event_Key *e;
2412 xcb_keysym_t sym = XCB_NO_SYMBOL;
2413 xcb_keycode_t keycode = 0;
2414 xcb_key_release_event_t *xevent;
2415 char *keyname = NULL, *key = NULL;
2416 char *compose = NULL;
2417 char compose_buffer[256];
2418 int val = 0;
2419
2420 _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2421
2422 xevent = (xcb_key_release_event_t *)event;
2423 keycode = xevent->detail;
2424
2425 sym = _ecore_xcb_keymap_keycode_to_keysym(keycode, xevent->state);
2426 keyname = _ecore_xcb_keymap_keysym_to_string(sym);
2427 if (!keyname)
2428 {
2429 char buff[256];
2430
2431 snprintf(buff, sizeof(buff), "Keycode-%i", keycode);
2432 keyname = buff;
2433 }
2434
2435 val =
2436 _ecore_xcb_keymap_lookup_string(keycode, xevent->state, compose_buffer,
2437 sizeof(compose_buffer), &sym);
2438 if (val > 0)
2439 {
2440 compose_buffer[val] = 0;
2441 compose =
2442 eina_str_convert(nl_langinfo(CODESET), "UTF-8", compose_buffer);
2443// tmp = compose;
2444 }
2445
2446 key = _ecore_xcb_keymap_keysym_to_string(sym);
2447 if (!key) key = keyname;
2448
2449 e = malloc(sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
2450 (compose ? strlen(compose) : 0) + 3);
2451 if (e)
2452 {
2453 e->keyname = (char *)(e + 1);
2454 e->key = e->keyname + strlen(keyname) + 1;
2455
2456 e->compose = NULL;
2457 if (compose) e->compose = (e->key + strlen(key) + 1);
2458 e->string = e->compose;
2459
2460 strcpy((char *)e->keyname, keyname);
2461 strcpy((char *)e->key, key);
2462 if (compose) strcpy((char *)e->compose, compose);
2463
2464 e->modifiers = _ecore_xcb_events_modifiers_get(xevent->state);
2465 e->timestamp = xevent->time;
2466 e->window = xevent->child ? xevent->child : xevent->event;
2467 e->event_window = xevent->event;
2468 e->same_screen = xevent->same_screen;
2469 e->root_window = xevent->root;
2470
2471 ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL);
2472 }
2473 _ecore_xcb_event_last_time = xevent->time;
2474}
2475
2476void
2477_ecore_xcb_event_mouse_move(uint16_t timestamp,
2478 uint16_t modifiers,
2479 int16_t x,
2480 int16_t y,
2481 int16_t root_x,
2482 int16_t root_y,
2483 xcb_window_t event_win,
2484 xcb_window_t win,
2485 xcb_window_t root_win,
2486 uint8_t same_screen,
2487 int dev,
2488 double radx,
2489 double rady,
2490 double pressure,
2491 double angle,
2492 int16_t mx,
2493 int16_t my,
2494 int16_t mrx,
2495 int16_t mry)
2496{
2497 Ecore_Event_Mouse_Move *e;
2498 Ecore_Event *event;
2499
2500 if (!(e = malloc(sizeof(Ecore_Event_Mouse_Move)))) return;
2501
2502 e->window = win;
2503 e->root_window = root_win;
2504 e->timestamp = timestamp;
2505 e->same_screen = same_screen;
2506 e->event_window = event_win;
2507 e->modifiers = _ecore_xcb_events_modifiers_get(modifiers);
2508 e->x = x;
2509 e->y = y;
2510 e->root.x = root_x;
2511 e->root.y = root_y;
2512 e->multi.device = dev;
2513 e->multi.radius = ((radx + rady) / 2);
2514 e->multi.radius_x = radx;
2515 e->multi.radius_y = rady;
2516 e->multi.pressure = pressure;
2517 e->multi.angle = angle;
2518 e->multi.x = mx;
2519 e->multi.y = my;
2520 e->multi.root.x = mrx;
2521 e->multi.root.y = mry;
2522
2523 event = ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e,
2524 _ecore_xcb_event_mouse_move_free, NULL);
2525
2526 _ecore_xcb_event_last_time = e->timestamp;
2527 _ecore_xcb_event_last_window = e->window;
2528 _ecore_xcb_event_last_root_x = root_x;
2529 _ecore_xcb_event_last_root_y = root_y;
2530// _ecore_xcb_event_last_mouse_move_event = event;
2531}
2532
2533static void
2534_ecore_xcb_event_mouse_move_free(void *data __UNUSED__,
2535 void *event)
2536{
2537 Ecore_Event_Mouse_Move *ev;
2538
2539 ev = event;
2540// if (_ecore_xcb_event_last_mouse_move_event)
2541// {
2542// _ecore_xcb_event_last_mouse_move = EINA_FALSE;
2543// _ecore_xcb_event_last_mouse_move_event = NULL;
2544// }
2545 if (ev) free(ev);
2546}
2547
2548Ecore_Event_Mouse_Button *
2549_ecore_xcb_event_mouse_button(int event,
2550 uint16_t timestamp,
2551 uint16_t modifiers,
2552 xcb_button_t buttons,
2553 int16_t x,
2554 int16_t y,
2555 int16_t root_x,
2556 int16_t root_y,
2557 xcb_window_t event_win,
2558 xcb_window_t win,
2559 xcb_window_t root_win,
2560 uint8_t same_screen,
2561 int dev,
2562 double radx,
2563 double rady,
2564 double pressure,
2565 double angle,
2566 int16_t mx,
2567 int16_t my,
2568 int16_t mrx,
2569 int16_t mry)
2570{
2571 Ecore_Event_Mouse_Button *e;
2572 Ecore_X_Mouse_Down_Info *info = NULL;
2573
2574 if (!(e = malloc(sizeof(Ecore_Event_Mouse_Button)))) return NULL;
2575
2576 e->window = win;
2577 e->root_window = root_win;
2578 e->timestamp = timestamp;
2579 e->same_screen = same_screen;
2580 e->event_window = event_win;
2581 e->buttons = buttons;
2582 e->modifiers = _ecore_xcb_events_modifiers_get(modifiers);
2583 e->double_click = 0;
2584 e->triple_click = 0;
2585 e->x = x;
2586 e->y = y;
2587 e->root.x = root_x;
2588 e->root.y = root_y;
2589
2590 if ((info = _ecore_xcb_event_mouse_down_info_get(dev)))
2591 {
2592 if ((event == ECORE_EVENT_MOUSE_BUTTON_DOWN) &&
2593 (info->did_triple))
2594 {
2595 info->last_win = 0;
2596 info->last_last_win = 0;
2597 info->last_event_win = 0;
2598 info->last_time = 0;
2599 info->last_last_time = 0;
2600 }
2601 if (event_win == win)
2602 {
2603 if (event == ECORE_EVENT_MOUSE_BUTTON_DOWN)
2604 {
2605 if (((int)(timestamp - info->last_time) <=
2606 (int)(1000 * _ecore_xcb_double_click_time)) &&
2607 (win == info->last_win) &&
2608 (event_win == info->last_event_win))
2609 {
2610 e->double_click = 1;
2611 info->did_double = EINA_TRUE;
2612 }
2613 else
2614 {
2615 info->did_double = EINA_FALSE;
2616 info->did_triple = EINA_FALSE;
2617 }
2618 if (((int)(timestamp - info->last_last_time) <=
2619 (int)(2 * 1000 * _ecore_xcb_double_click_time)) &&
2620 (win == info->last_win) &&
2621 (win == info->last_last_win) &&
2622 (event_win == info->last_event_win) &&
2623 (event_win == info->last_last_event_win))
2624 {
2625 e->triple_click = 1;
2626 info->did_triple = EINA_TRUE;
2627 }
2628 else
2629 info->did_triple = EINA_FALSE;
2630 }
2631 else
2632 {
2633 if (info->did_double) e->double_click = 1;
2634 if (info->did_triple) e->triple_click = 1;
2635 }
2636 }
2637 }
2638
2639 /* NB: Comment out right now because _ecore_xcb_mouse_up_count is
2640 * only used here...nowhere else in the code */
2641
2642 /* if ((event == ECORE_EVENT_MOUSE_BUTTON_DOWN) && */
2643 /* (!e->double_click) && (!e->triple_click)) */
2644 /* _ecore_xcb_mouse_up_count = 0; */
2645
2646 e->multi.device = dev;
2647 e->multi.radius = ((radx + rady) / 2);
2648 e->multi.radius_x = radx;
2649 e->multi.radius_y = rady;
2650 e->multi.pressure = pressure;
2651 e->multi.angle = angle;
2652 e->multi.x = mx;
2653 e->multi.y = my;
2654 e->multi.root.x = mrx;
2655 e->multi.root.y = mry;
2656
2657 _ecore_xcb_event_last_time = e->timestamp;
2658 _ecore_xcb_event_last_window = e->window;
2659 _ecore_xcb_event_last_root_x = root_x;
2660 _ecore_xcb_event_last_root_y = root_y;
2661
2662 ecore_event_add(event, e, NULL, NULL);
2663
2664 if ((info) && (event == ECORE_EVENT_MOUSE_BUTTON_DOWN) &&
2665 (win == event_win) && (!info->did_triple))
2666 {
2667 info->last_last_win = info->last_win;
2668 info->last_win = win;
2669 info->last_last_event_win = info->last_event_win;
2670 info->last_event_win = event_win;
2671 info->last_last_time = info->last_time;
2672 info->last_time = timestamp;
2673 }
2674
2675 return e;
2676}
2677
2678static Ecore_X_Event_Mode
2679_ecore_xcb_event_mode_get(uint8_t mode)
2680{
2681 switch (mode)
2682 {
2683 case XCB_NOTIFY_MODE_NORMAL:
2684 return ECORE_X_EVENT_MODE_NORMAL;
2685
2686 case XCB_NOTIFY_MODE_WHILE_GRABBED:
2687 return ECORE_X_EVENT_MODE_WHILE_GRABBED;
2688
2689 case XCB_NOTIFY_MODE_GRAB:
2690 return ECORE_X_EVENT_MODE_GRAB;
2691
2692 case XCB_NOTIFY_MODE_UNGRAB:
2693 return ECORE_X_EVENT_MODE_UNGRAB;
2694
2695 default:
2696 return ECORE_X_EVENT_MODE_NORMAL;
2697 }
2698}
2699
2700static Ecore_X_Event_Detail
2701_ecore_xcb_event_detail_get(uint8_t detail)
2702{
2703 switch (detail)
2704 {
2705 case XCB_NOTIFY_DETAIL_ANCESTOR:
2706 return ECORE_X_EVENT_DETAIL_ANCESTOR;
2707
2708 case XCB_NOTIFY_DETAIL_VIRTUAL:
2709 return ECORE_X_EVENT_DETAIL_VIRTUAL;
2710
2711 case XCB_NOTIFY_DETAIL_INFERIOR:
2712 return ECORE_X_EVENT_DETAIL_INFERIOR;
2713
2714 case XCB_NOTIFY_DETAIL_NONLINEAR:
2715 return ECORE_X_EVENT_DETAIL_NON_LINEAR;
2716
2717 case XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL:
2718 return ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL;
2719
2720 case XCB_NOTIFY_DETAIL_POINTER:
2721 return ECORE_X_EVENT_DETAIL_POINTER;
2722
2723 case XCB_NOTIFY_DETAIL_POINTER_ROOT:
2724 return ECORE_X_EVENT_DETAIL_POINTER_ROOT;
2725
2726 case XCB_NOTIFY_DETAIL_NONE:
2727 default:
2728 return ECORE_X_EVENT_DETAIL_ANCESTOR;
2729 }
2730}
2731
2732static void
2733_ecore_xcb_event_xdnd_enter_free(void *data __UNUSED__,
2734 void *event)
2735{
2736 Ecore_X_Event_Xdnd_Enter *e;
2737 int i = 0;
2738
2739 e = event;
2740 for (i = 0; i < e->num_types; i++)
2741 free(e->types[i]);
2742 free(e->types);
2743 free(e);
2744}
2745
2746static void
2747_ecore_xcb_event_selection_notify_free(void *data __UNUSED__,
2748 void *event)
2749{
2750 Ecore_X_Event_Selection_Notify *e;
2751 Ecore_X_Selection_Data *sel;
2752
2753 e = event;
2754 if (!(sel = e->data)) return;
2755 if (sel->free) sel->free(sel);
2756 free(e->target);
2757 free(e);
2758}
2759
2760static void
2761_ecore_xcb_event_generic_event_free(void *data,
2762 void *event)
2763{
2764 Ecore_X_Event_Generic *e;
2765
2766 e = (Ecore_X_Event_Generic *)event;
2767 if (e->data) free(data);
2768 free(e);
2769}
2770
2771static void
2772_ecore_xcb_event_mouse_down_info_clear(void)
2773{
2774 Eina_Inlist *l;
2775 Ecore_X_Mouse_Down_Info *info = NULL;
2776
2777 l = _ecore_xcb_mouse_down_info_list;
2778 while (l)
2779 {
2780 info = EINA_INLIST_CONTAINER_GET(l, Ecore_X_Mouse_Down_Info);
2781 l = eina_inlist_remove(l, l);
2782 free(info);
2783 }
2784 _ecore_xcb_mouse_down_info_list = NULL;
2785}
2786
2787static Ecore_X_Mouse_Down_Info *
2788_ecore_xcb_event_mouse_down_info_get(int dev)
2789{
2790 Eina_Inlist *l;
2791 Ecore_X_Mouse_Down_Info *info = NULL;
2792
2793 l = _ecore_xcb_mouse_down_info_list;
2794 EINA_INLIST_FOREACH(l, info)
2795 if (info->dev == dev) return info;
2796
2797 if (!(info = calloc(1, sizeof(Ecore_X_Mouse_Down_Info)))) return NULL;
2798
2799 info->dev = dev;
2800 l = eina_inlist_append(l, (Eina_Inlist *)info);
2801 _ecore_xcb_mouse_down_info_list = l;
2802
2803 return info;
2804}
2805
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_extensions.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_extensions.c
deleted file mode 100644
index 40c10ac..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_extensions.c
+++ /dev/null
@@ -1,148 +0,0 @@
1#include "ecore_xcb_private.h"
2
3void
4_ecore_xcb_extensions_init(void)
5{
6 LOGFN(__FILE__, __LINE__, __FUNCTION__);
7
8 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_big_requests_id);
9 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_shm_id);
10
11#ifdef ECORE_XCB_SHAPE
12 _ecore_xcb_shape_init();
13#endif
14
15#ifdef ECORE_XCB_SCREENSAVER
16 _ecore_xcb_screensaver_init();
17#endif
18
19#ifdef ECORE_XCB_SYNC
20 _ecore_xcb_sync_init();
21#endif
22
23#ifdef ECORE_XCB_RANDR
24 _ecore_xcb_randr_init();
25#endif
26
27#ifdef ECORE_XCB_XFIXES
28 _ecore_xcb_xfixes_init();
29#endif
30
31#ifdef ECORE_XCB_DAMAGE
32 _ecore_xcb_damage_init();
33#endif
34
35#ifdef ECORE_XCB_RENDER
36 _ecore_xcb_render_init();
37#endif
38
39#ifdef ECORE_XCB_COMPOSITE
40 _ecore_xcb_composite_init();
41#endif
42
43#ifdef ECORE_XCB_DPMS
44 _ecore_xcb_dpms_init();
45#endif
46
47#ifdef ECORE_XCB_DPMS
48 _ecore_xcb_dpms_init();
49#endif
50
51#ifdef ECORE_XCB_CURSOR
52 _ecore_xcb_cursor_init();
53#endif
54
55#ifdef ECORE_XCB_XINERAMA
56 _ecore_xcb_xinerama_init();
57#endif
58
59#ifdef ECORE_XCB_XINPUT
60 _ecore_xcb_input_init();
61#endif
62
63#ifdef ECORE_XCB_GESTURE
64 _ecore_xcb_gesture_init();
65#endif
66
67/* #ifdef ECORE_XCB_DRI */
68/* _ecore_xcb_dri_init(); */
69/* #endif */
70
71#ifdef ECORE_XCB_XTEST
72 _ecore_xcb_xtest_init();
73#endif
74
75 xcb_prefetch_maximum_request_length(_ecore_xcb_conn);
76}
77
78void
79_ecore_xcb_extensions_finalize(void)
80{
81 LOGFN(__FILE__, __LINE__, __FUNCTION__);
82
83 xcb_get_extension_data(_ecore_xcb_conn, &xcb_big_requests_id);
84 xcb_get_extension_data(_ecore_xcb_conn, &xcb_shm_id);
85
86#ifdef ECORE_XCB_SHAPE
87 _ecore_xcb_shape_finalize();
88#endif
89
90#ifdef ECORE_XCB_SCREENSAVER
91 _ecore_xcb_screensaver_finalize();
92#endif
93
94#ifdef ECORE_XCB_SYNC
95 _ecore_xcb_sync_finalize();
96#endif
97
98#ifdef ECORE_XCB_RANDR
99 _ecore_xcb_randr_finalize();
100#endif
101
102#ifdef ECORE_XCB_XFIXES
103 _ecore_xcb_xfixes_finalize();
104#endif
105
106#ifdef ECORE_XCB_DAMAGE
107 _ecore_xcb_damage_finalize();
108#endif
109
110#ifdef ECORE_XCB_RENDER
111 _ecore_xcb_render_finalize();
112#endif
113
114#ifdef ECORE_XCB_COMPOSITE
115 _ecore_xcb_composite_finalize();
116#endif
117
118#ifdef ECORE_XCB_DPMS
119 _ecore_xcb_dpms_finalize();
120#endif
121
122#ifdef ECORE_XCB_CURSOR
123 _ecore_xcb_cursor_finalize();
124#endif
125
126#ifdef ECORE_XCB_XINERAMA
127 _ecore_xcb_xinerama_finalize();
128#endif
129
130#ifdef ECORE_XCB_XINPUT
131 _ecore_xcb_input_finalize();
132#endif
133
134#ifdef ECORE_XCB_GESTURE
135 _ecore_xcb_gesture_finalize();
136#endif
137
138/* #ifdef ECORE_XCB_DRI */
139/* _ecore_xcb_dri_finalize(); */
140/* #endif */
141
142#ifdef ECORE_XCB_XTEST
143 _ecore_xcb_xtest_finalize();
144#endif
145
146 xcb_get_maximum_request_length(_ecore_xcb_conn);
147}
148
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gc.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gc.c
deleted file mode 100644
index d811b54..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gc.c
+++ /dev/null
@@ -1,173 +0,0 @@
1#include "ecore_xcb_private.h"
2
3/**
4 * Creates a new default graphics context associated with the given
5 * drawable.
6 * @param draw Drawable to create graphics context with. If @c 0 is
7 * given instead, the default root window is used.
8 * @param value_mask Bitmask values.
9 * @param value_list List of values. The order of values must be the
10 * same than the corresponding bitmaks.
11 * @return The new default graphics context.
12 */
13EAPI Ecore_X_GC
14ecore_x_gc_new(Ecore_X_Drawable drawable,
15 Ecore_X_GC_Value_Mask value_mask,
16 const unsigned int *value_list)
17{
18 xcb_gcontext_t gc;
19 uint32_t vmask = 0;
20 int i = 0, mask = 0;
21
22 LOGFN(__FILE__, __LINE__, __FUNCTION__);
23 CHECK_XCB_CONN;
24
25 if (!drawable) drawable = ((xcb_screen_t *)_ecore_xcb_screen)->root;
26
27 for (i = 0, mask = 1; i <= 22; i++, mask <<= 1)
28 {
29 switch (mask & value_mask)
30 {
31 case ECORE_X_GC_VALUE_MASK_FUNCTION:
32 vmask |= XCB_GC_FUNCTION;
33 break;
34
35 case ECORE_X_GC_VALUE_MASK_PLANE_MASK:
36 vmask |= XCB_GC_PLANE_MASK;
37 break;
38
39 case ECORE_X_GC_VALUE_MASK_FOREGROUND:
40 vmask |= XCB_GC_FOREGROUND;
41 break;
42
43 case ECORE_X_GC_VALUE_MASK_BACKGROUND:
44 vmask |= XCB_GC_BACKGROUND;
45 break;
46
47 case ECORE_X_GC_VALUE_MASK_LINE_WIDTH:
48 vmask |= XCB_GC_LINE_WIDTH;
49 break;
50
51 case ECORE_X_GC_VALUE_MASK_LINE_STYLE:
52 vmask |= XCB_GC_LINE_STYLE;
53 break;
54
55 case ECORE_X_GC_VALUE_MASK_CAP_STYLE:
56 vmask |= XCB_GC_CAP_STYLE;
57 break;
58
59 case ECORE_X_GC_VALUE_MASK_JOIN_STYLE:
60 vmask |= XCB_GC_JOIN_STYLE;
61 break;
62
63 case ECORE_X_GC_VALUE_MASK_FILL_STYLE:
64 vmask |= XCB_GC_FILL_STYLE;
65 break;
66
67 case ECORE_X_GC_VALUE_MASK_FILL_RULE:
68 vmask |= XCB_GC_FILL_RULE;
69 break;
70
71 case ECORE_X_GC_VALUE_MASK_TILE:
72 vmask |= XCB_GC_TILE;
73 break;
74
75 case ECORE_X_GC_VALUE_MASK_STIPPLE:
76 vmask |= XCB_GC_STIPPLE;
77 break;
78
79 case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X:
80 vmask |= XCB_GC_TILE_STIPPLE_ORIGIN_X;
81 break;
82
83 case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y:
84 vmask |= XCB_GC_TILE_STIPPLE_ORIGIN_Y;
85 break;
86
87 case ECORE_X_GC_VALUE_MASK_FONT:
88 vmask |= XCB_GC_FONT;
89 break;
90
91 case ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE:
92 vmask |= XCB_GC_SUBWINDOW_MODE;
93 break;
94
95 case ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES:
96 vmask |= XCB_GC_GRAPHICS_EXPOSURES;
97 break;
98
99 case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X:
100 vmask |= XCB_GC_CLIP_ORIGIN_X;
101 break;
102
103 case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y:
104 vmask |= XCB_GC_CLIP_ORIGIN_Y;
105 break;
106
107 case ECORE_X_GC_VALUE_MASK_CLIP_MASK:
108 vmask |= XCB_GC_CLIP_MASK;
109 break;
110
111 case ECORE_X_GC_VALUE_MASK_DASH_OFFSET:
112 vmask |= XCB_GC_DASH_OFFSET;
113 break;
114
115 case ECORE_X_GC_VALUE_MASK_DASH_LIST:
116 vmask |= XCB_GC_DASH_LIST;
117 break;
118
119 case ECORE_X_GC_VALUE_MASK_ARC_MODE:
120 vmask |= XCB_GC_ARC_MODE;
121 break;
122 }
123 }
124
125 gc = xcb_generate_id(_ecore_xcb_conn);
126 xcb_create_gc(_ecore_xcb_conn, gc, drawable, vmask, value_list);
127
128// ecore_x_flush();
129 return gc;
130}
131
132/**
133 * Deletes and frees the given graphics context.
134 * @param gc The given graphics context.
135 */
136EAPI void
137ecore_x_gc_free(Ecore_X_GC gc)
138{
139 LOGFN(__FILE__, __LINE__, __FUNCTION__);
140 CHECK_XCB_CONN;
141
142 xcb_free_gc(_ecore_xcb_conn, gc);
143// ecore_x_flush();
144}
145
146EAPI void
147ecore_x_gc_foreground_set(Ecore_X_GC gc,
148 unsigned long foreground)
149{
150 uint32_t list;
151
152 LOGFN(__FILE__, __LINE__, __FUNCTION__);
153 CHECK_XCB_CONN;
154
155 list = foreground;
156 xcb_change_gc(_ecore_xcb_conn, gc, XCB_GC_FOREGROUND, &list);
157// ecore_x_flush();
158}
159
160EAPI void
161ecore_x_gc_background_set(Ecore_X_GC gc,
162 unsigned long background)
163{
164 uint32_t list;
165
166 LOGFN(__FILE__, __LINE__, __FUNCTION__);
167 CHECK_XCB_CONN;
168
169 list = background;
170 xcb_change_gc(_ecore_xcb_conn, gc, XCB_GC_BACKGROUND, &list);
171// ecore_x_flush();
172}
173
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gesture.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gesture.c
deleted file mode 100644
index 263dade..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_gesture.c
+++ /dev/null
@@ -1,203 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_XGESTURE
3# include <xcb/gesture.h>
4# include <xcb/xcb_event.h>
5#endif
6
7/* local variables */
8static Eina_Bool _gesture_available = EINA_FALSE;
9
10/* external variables */
11int _ecore_xcb_event_gesture = -1;
12
13void
14_ecore_xcb_gesture_init(void)
15{
16 LOGFN(__FILE__, __LINE__, __FUNCTION__);
17
18#ifdef ECORE_XCB_XGESTURE
19 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_gesture_id);
20#endif
21}
22
23void
24_ecore_xcb_gesture_finalize(void)
25{
26#ifdef ECORE_XCB_XGESTURE
27 xcb_gesture_query_version_cookie_t cookie;
28 xcb_gesture_query_version_reply_t *reply;
29#endif
30
31 LOGFN(__FILE__, __LINE__, __FUNCTION__);
32
33#ifdef ECORE_XCB_XGESTURE
34 cookie =
35 xcb_gesture_query_version_unchecked(_ecore_xcb_conn);
36 reply =
37 xcb_gesture_query_version_reply(_ecore_xcb_conn, cookie, NULL);
38 if (reply)
39 {
40 _gesture_available = EINA_TRUE;
41 free(reply);
42 }
43
44 if (_gesture_available)
45 {
46 const xcb_query_extension_reply_t *ext_reply;
47
48 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_gesture_id);
49 if (ext_reply)
50 _ecore_xcb_event_gesture = ext_reply->first_event;
51 }
52#endif
53}
54
55void
56_ecore_xcb_gesture_shutdown(void)
57{
58 LOGFN(__FILE__, __LINE__, __FUNCTION__);
59}
60
61EAPI Eina_Bool
62ecore_x_gesture_supported(void)
63{
64 return _gesture_available;
65}
66
67#ifdef ECORE_XCB_XGESTURE
68EAPI Eina_Bool
69ecore_x_gesture_events_select(Ecore_X_Window win,
70 Ecore_X_Gesture_Event_Mask mask)
71#else
72EAPI Eina_Bool
73ecore_x_gesture_events_select(Ecore_X_Window win __UNUSED__,
74 Ecore_X_Gesture_Event_Mask mask __UNUSED__)
75#endif
76
77{
78#ifdef ECORE_XCB_XGESTURE
79 if (!_gesture_available) return EINA_FALSE;
80
81 LOGFN(__FILE__, __LINE__, __FUNCTION__);
82 CHECK_XCB_CONN
83
84 xcb_gesture_select_events(_ecore_xcb_conn, win, mask);
85
86 return EINA_TRUE;
87#else
88 return EINA_FALSE;
89#endif
90}
91
92#ifdef ECORE_XCB_XGESTURE
93EAPI Ecore_X_Gesture_Event_Mask
94ecore_x_gesture_events_selected_get(Ecore_X_Window win)
95#else
96EAPI Ecore_X_Gesture_Event_Mask
97ecore_x_gesture_events_selected_get(Ecore_X_Window win __UNUSED__)
98#endif
99{
100#ifdef ECORE_XCB_XGESTURE
101 xcb_gesture_get_selected_events_cookie_t ecookie;
102 xcb_gesture_get_selected_events_reply_t *ereply;
103 Ecore_X_Gesture_Event_Mask mask = ECORE_X_GESTURE_EVENT_MASK_NONE;
104
105 if (!_gesture_available) return mask;
106
107 LOGFN(__FILE__, __LINE__, __FUNCTION__);
108 CHECK_XCB_CONN
109
110 ecookie = xcb_gesture_get_selected_events(_ecore_xcb_conn, win);
111 ereply =
112 xcb_gesture_get_selected_events_reply(_ecore_xcb_conn, ecookie, NULL);
113 if (ereply)
114 {
115 mask = ereply->mask;
116 free(ereply);
117 }
118
119 return mask;
120#else
121 return ECORE_X_GESTURE_EVENT_MASK_NONE;
122#endif
123}
124
125#ifdef ECORE_XCB_XGESTURE
126EAPI Eina_Bool
127ecore_x_gesture_event_grab(Ecore_X_Window win,
128 Ecore_X_Gesture_Event_Type type,
129 int num_fingers)
130#else
131EAPI Eina_Bool
132ecore_x_gesture_event_grab(Ecore_X_Window win __UNUSED__,
133 Ecore_X_Gesture_Event_Type type __UNUSED__,
134 int num_fingers __UNUSED__)
135#endif
136{
137#ifdef ECORE_XCB_XGESTURE
138 Eina_Bool status = EINA_TRUE;
139 xcb_gesture_grab_event_cookie_t ecookie;
140 xcb_gesture_grab_event_reply_t *ereply;
141
142 if (!_gesture_available) return EINA_FALSE;
143
144 LOGFN(__FILE__, __LINE__, __FUNCTION__);
145 CHECK_XCB_CONN
146
147 ecookie =
148 xcb_gesture_grab_event(_ecore_xcb_conn, win, type, num_fingers, 0L);
149 ereply = xcb_gesture_grab_event_reply(_ecore_xcb_conn, ecookie, NULL);
150
151 if (ereply)
152 {
153 if (ereply->status) status = EINA_FALSE;
154 free(ereply);
155 }
156 else
157 status = EINA_FALSE;
158
159 return status;
160#else
161 return EINA_FALSE;
162#endif
163}
164
165#ifdef ECORE_XCB_XGESTURE
166EAPI Eina_Bool
167ecore_x_gesture_event_ungrab(Ecore_X_Window win,
168 Ecore_X_Gesture_Event_Type type,
169 int num_fingers)
170#else
171EAPI Eina_Bool
172ecore_x_gesture_event_ungrab(Ecore_X_Window win __UNUSED__,
173 Ecore_X_Gesture_Event_Type type __UNUSED__,
174 int num_fingers __UNUSED__)
175#endif
176{
177#ifdef ECORE_XCB_XGESTURE
178 Eina_Bool status = EINA_TRUE;
179 xcb_gesture_ungrab_event_cookie_t ecookie;
180 xcb_gesture_ungrab_event_reply_t *ereply;
181
182 if (!_gesture_available) return EINA_FALSE;
183
184 LOGFN(__FILE__, __LINE__, __FUNCTION__);
185 CHECK_XCB_CONN
186
187 ecookie =
188 xcb_gesture_ungrab_event(_ecore_xcb_conn, win, type, num_fingers, 0L);
189 ereply = xcb_gesture_ungrab_event_reply(_ecore_xcb_conn, ecookie, NULL);
190
191 if (ereply)
192 {
193 if (ereply->status) status = EINA_FALSE;
194 free(ereply);
195 }
196 else
197 status = EINA_FALSE;
198
199 return status;
200#else
201 return EINA_FALSE;
202#endif
203}
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_icccm.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_icccm.c
deleted file mode 100644
index 8dea861..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_icccm.c
+++ /dev/null
@@ -1,1569 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <xcb/xcb_icccm.h>
3
4EAPI void
5ecore_x_icccm_init(void)
6{
7}
8
9/**
10 * Sets the WM_COMMAND property for @a win.
11 *
12 * @param win The window.
13 * @param argc Number of arguments.
14 * @param argv Arguments.
15 */
16EAPI void
17ecore_x_icccm_command_set(Ecore_X_Window win,
18 int argc,
19 char **argv)
20{
21 void *buf;
22 char *b;
23 int nbytes, i;
24
25 LOGFN(__FILE__, __LINE__, __FUNCTION__);
26 CHECK_XCB_CONN;
27
28 for (i = 0, nbytes = 0; i < argc; i++)
29 if (argv[i]) nbytes += strlen(argv[i]) + 1;
30
31 buf = malloc(sizeof(char) * nbytes);
32 if (!buf) return;
33
34 b = (char *)buf;
35 for (i = 0; i < argc; i++)
36 {
37 if (argv[i])
38 {
39 strcpy(b, argv[i]);
40 b += strlen(argv[i]) + 1;
41 }
42 else
43 *b++ = '\0';
44 }
45 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
46 ECORE_X_ATOM_WM_COMMAND, ECORE_X_ATOM_STRING, 8,
47 nbytes, buf);
48 free(buf);
49}
50
51/**
52 * Get the WM_COMMAND property for @a win.
53 *
54 * Return the command of a window. String must be free'd when done with.
55 *
56 * @param win The window.
57 * @param argc Number of arguments.
58 * @param argv Arguments.
59 */
60EAPI void
61ecore_x_icccm_command_get(Ecore_X_Window win,
62 int *argc,
63 char ***argv)
64{
65 xcb_get_property_cookie_t cookie;
66 xcb_get_property_reply_t *reply;
67 int len = 0;
68 char **v, *data, *cp, *start;
69 int c = 0, i = 0, j = 0;
70
71 LOGFN(__FILE__, __LINE__, __FUNCTION__);
72 CHECK_XCB_CONN;
73
74 if (argc) *argc = 0;
75 if (argv) *argv = NULL;
76
77 cookie = xcb_get_property_unchecked(_ecore_xcb_conn, 0, win,
78 ECORE_X_ATOM_WM_COMMAND,
79 XCB_GET_PROPERTY_TYPE_ANY,
80 0, 1000000L);
81 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
82 if (!reply) return;
83
84 if ((reply->type != ECORE_X_ATOM_STRING) || (reply->format != 8))
85 {
86 free(reply);
87 return;
88 }
89
90 len = reply->value_len;
91 if (len < 1)
92 {
93 free(reply);
94 return;
95 }
96
97 data = (char *)xcb_get_property_value(reply);
98 if (len && (data[len - 1] == '\0'))
99 len--;
100
101 c = 1;
102 for (cp = (char *)data, i = len; i > 0; cp++, i--)
103 if (*cp == '\0') c++;
104
105 v = (char **)malloc((c + 1) * sizeof(char *));
106 if (!v)
107 {
108 free(reply);
109 return;
110 }
111
112 start = (char *)malloc((len + 1) * sizeof(char));
113 if (!start)
114 {
115 free(reply);
116 free(v);
117 return;
118 }
119
120 memcpy(start, (char *)data, len);
121 start[len] = '\0';
122 for (cp = start, i = len + 1, j = 0; i > 0; cp++, i--)
123 {
124 if (*cp == '\0')
125 {
126 v[j] = start;
127 start = (cp + 1);
128 j++;
129 }
130 }
131
132 if (c < 1)
133 {
134 free(reply);
135 free(v);
136 return;
137 }
138
139 if (argc) *argc = c;
140
141 if (argv)
142 {
143 (*argv) = malloc(c * sizeof(char *));
144 if (!*argv)
145 {
146 free(reply);
147 free(v);
148 if (argc) *argc = 0;
149 return;
150 }
151
152 for (i = 0; i < c; i++)
153 {
154 if (v[i])
155 (*argv)[i] = strdup(v[i]);
156 else
157 (*argv)[i] = strdup("");
158 }
159 }
160
161 free(reply);
162 free(v);
163}
164
165EAPI char *
166ecore_x_icccm_title_get(Ecore_X_Window win)
167{
168 xcb_get_property_cookie_t cookie;
169#ifdef OLD_XCB_VERSION
170 xcb_get_text_property_reply_t prop;
171#else
172 xcb_icccm_get_text_property_reply_t prop;
173#endif
174 uint8_t ret = 0;
175 char *title = NULL;
176
177 LOGFN(__FILE__, __LINE__, __FUNCTION__);
178 CHECK_XCB_CONN;
179
180 if (!win) return NULL;
181#ifdef OLD_XCB_VERSION
182 cookie = xcb_get_wm_name_unchecked(_ecore_xcb_conn, win);
183 ret = xcb_get_wm_name_reply(_ecore_xcb_conn, cookie, &prop, NULL);
184#else
185 cookie = xcb_icccm_get_wm_name_unchecked(_ecore_xcb_conn, win);
186 ret = xcb_icccm_get_wm_name_reply(_ecore_xcb_conn, cookie, &prop, NULL);
187#endif
188 if (ret == 0) return NULL;
189 if (prop.name_len < 1)
190 {
191#ifdef OLD_XCB_VERSION
192 xcb_get_text_property_reply_wipe(&prop);
193#else
194 xcb_icccm_get_text_property_reply_wipe(&prop);
195#endif
196 return NULL;
197 }
198
199 if (!(title = malloc((prop.name_len + 1) * sizeof(char *))))
200 {
201#ifdef OLD_XCB_VERSION
202 xcb_get_text_property_reply_wipe(&prop);
203#else
204 xcb_icccm_get_text_property_reply_wipe(&prop);
205#endif
206 return NULL;
207 }
208 memcpy(title, prop.name, sizeof(char *) * prop.name_len);
209 title[prop.name_len] = '\0';
210
211 if (prop.encoding != ECORE_X_ATOM_UTF8_STRING)
212 {
213 Ecore_Xcb_Textproperty tp;
214 int count = 0;
215 char **list = NULL;
216 Eina_Bool ret = EINA_FALSE;
217
218 tp.value = strdup(title);
219 tp.nitems = prop.name_len;
220 tp.encoding = prop.encoding;
221#ifdef HAVE_ICONV
222 ret = _ecore_xcb_utf8_textproperty_to_textlist(&tp, &list, &count);
223#else
224 ret = _ecore_xcb_mb_textproperty_to_textlist(&tp, &list, &count);
225#endif
226 if (ret)
227 {
228 if (count > 0)
229 title = strdup(list[0]);
230
231 if (list) free(list);
232 }
233 }
234
235#ifdef OLD_XCB_VERSION
236 xcb_get_text_property_reply_wipe(&prop);
237#else
238 xcb_icccm_get_text_property_reply_wipe(&prop);
239#endif
240 return title;
241}
242
243EAPI void
244ecore_x_icccm_title_set(Ecore_X_Window win,
245 const char *title)
246{
247 Ecore_Xcb_Textproperty prop;
248 char *list[1];
249 Eina_Bool ret = EINA_FALSE;
250
251 LOGFN(__FILE__, __LINE__, __FUNCTION__);
252 CHECK_XCB_CONN;
253
254 if (!title) return;
255
256 prop.value = NULL;
257 list[0] = strdup(title);
258
259#ifdef HAVE_ICONV
260 ret = _ecore_xcb_utf8_textlist_to_textproperty(list, 1, XcbUTF8StringStyle,
261 &prop);
262#else
263 ret = _ecore_xcb_mb_textlist_to_textproperty(list, 1, XcbStdICCTextStyle,
264 &prop);
265#endif
266
267 if (ret)
268 {
269#ifdef OLD_XCB_VERSION
270 xcb_set_wm_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
271 strlen(prop.value), prop.value);
272#else
273 xcb_icccm_set_wm_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING, 8,
274 strlen(prop.value), prop.value);
275#endif
276 if (prop.value) free(prop.value);
277 }
278 else
279#ifdef OLD_XCB_VERSION
280 xcb_set_wm_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
281 strlen(title), title);
282#else
283 xcb_icccm_set_wm_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING, 8,
284 strlen(title), title);
285#endif
286 free(list[0]);
287}
288
289/**
290 * Get a window name & class.
291 * @param win The window
292 * @param n The name string
293 * @param c The class string
294 *
295 * Get a window name * class
296 */
297EAPI void
298ecore_x_icccm_name_class_get(Ecore_X_Window win,
299 char **name,
300 char **class)
301{
302 xcb_get_property_cookie_t cookie;
303#ifdef OLD_XCB_VERSION
304 xcb_get_wm_class_reply_t prop;
305#else
306 xcb_icccm_get_wm_class_reply_t prop;
307#endif
308 uint8_t ret = 0;
309
310 LOGFN(__FILE__, __LINE__, __FUNCTION__);
311 CHECK_XCB_CONN;
312
313 if (name) *name = NULL;
314 if (class) *class = NULL;
315
316#ifdef OLD_XCB_VERSION
317 cookie = xcb_get_wm_class_unchecked(_ecore_xcb_conn, win);
318 ret = xcb_get_wm_class_reply(_ecore_xcb_conn, cookie, &prop, NULL);
319#else
320 cookie = xcb_icccm_get_wm_class_unchecked(_ecore_xcb_conn, win);
321 ret = xcb_icccm_get_wm_class_reply(_ecore_xcb_conn, cookie, &prop, NULL);
322#endif
323 if (ret == 0) return;
324
325 if (name) *name = strdup(prop.instance_name);
326 if (class) *class = strdup(prop.class_name);
327
328#ifdef OLD_XCB_VERSION
329 xcb_get_wm_class_reply_wipe(&prop);
330#else
331 xcb_icccm_get_wm_class_reply_wipe(&prop);
332#endif
333}
334
335/**
336 * Set a window name & class.
337 * @param win The window
338 * @param n The name string
339 * @param c The class string
340 *
341 * Set a window name * class
342 */
343EAPI void
344ecore_x_icccm_name_class_set(Ecore_X_Window win,
345 const char *name,
346 const char *class)
347{
348 char *class_string, *s;
349 int length_name, length_class;
350
351 LOGFN(__FILE__, __LINE__, __FUNCTION__);
352 CHECK_XCB_CONN;
353
354 length_name = strlen(name);
355 length_class = strlen(class);
356 class_string =
357 (char *)malloc(sizeof(char) * (length_name + length_class + 2));
358 if (!class_string) return;
359
360 s = class_string;
361 if (length_name)
362 {
363 strcpy(s, name);
364 s += length_name + 1;
365 }
366 else
367 *s++ = '\0';
368
369 if (length_class)
370 strcpy(s, class);
371 else
372 *s = '\0';
373
374 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
375 ECORE_X_ATOM_WM_CLASS, ECORE_X_ATOM_STRING, 8,
376 length_name + length_class + 2, (void *)class_string);
377 free(class_string);
378}
379
380/**
381 * Specify that a window is transient for another top-level window and should be handled accordingly.
382 * @param win the transient window
383 * @param forwin the toplevel window
384 */
385EAPI void
386ecore_x_icccm_transient_for_set(Ecore_X_Window win,
387 Ecore_X_Window forwindow)
388{
389 LOGFN(__FILE__, __LINE__, __FUNCTION__);
390 CHECK_XCB_CONN;
391
392 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
393 ECORE_X_ATOM_WM_TRANSIENT_FOR, ECORE_X_ATOM_WINDOW, 32,
394 1, (void *)&forwindow);
395}
396
397/**
398 * Remove the transient_for setting from a window.
399 * @param win The window
400 */
401EAPI void
402ecore_x_icccm_transient_for_unset(Ecore_X_Window win)
403{
404 LOGFN(__FILE__, __LINE__, __FUNCTION__);
405
406 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_WM_TRANSIENT_FOR);
407}
408
409/**
410 * Get the window this window is transient for, if any.
411 * @param win The window to check
412 * @return The window ID of the top-level window, or 0 if the property does not exist.
413 */
414EAPI Ecore_X_Window
415ecore_x_icccm_transient_for_get(Ecore_X_Window win)
416{
417 Ecore_X_Window forwin = 0;
418 xcb_get_property_cookie_t cookie;
419
420 LOGFN(__FILE__, __LINE__, __FUNCTION__);
421 CHECK_XCB_CONN;
422
423#ifdef OLD_XCB_VERSION
424 cookie = xcb_get_wm_transient_for_unchecked(_ecore_xcb_conn, win);
425 xcb_get_wm_transient_for_reply(_ecore_xcb_conn, cookie, &forwin, NULL);
426#else
427 cookie = xcb_icccm_get_wm_transient_for_unchecked(_ecore_xcb_conn, win);
428 xcb_icccm_get_wm_transient_for_reply(_ecore_xcb_conn, cookie, &forwin, NULL);
429#endif
430
431 return forwin;
432}
433
434/**
435 * Get the window role.
436 * @param win The window
437 * @return The window's role string.
438 */
439EAPI char *
440ecore_x_icccm_window_role_get(Ecore_X_Window win)
441{
442 LOGFN(__FILE__, __LINE__, __FUNCTION__);
443
444 return ecore_x_window_prop_string_get(win, ECORE_X_ATOM_WM_WINDOW_ROLE);
445}
446
447/**
448 * Set the window role hint.
449 * @param win The window
450 * @param role The role string
451 */
452EAPI void
453ecore_x_icccm_window_role_set(Ecore_X_Window win,
454 const char *role)
455{
456 LOGFN(__FILE__, __LINE__, __FUNCTION__);
457
458 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_WINDOW_ROLE, role);
459}
460
461/**
462 * Get the window's client leader.
463 * @param win The window
464 * @return The window's client leader window, or 0 if unset
465 */
466EAPI Ecore_X_Window
467ecore_x_icccm_client_leader_get(Ecore_X_Window win)
468{
469 Ecore_X_Window leader;
470
471 LOGFN(__FILE__, __LINE__, __FUNCTION__);
472
473 if (ecore_x_window_prop_window_get(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
474 &leader, 1) > 0)
475 return leader;
476
477 return 0;
478}
479
480/**
481 * Set the window's client leader.
482 * @param win The window
483 * @param l The client leader window
484 *
485 * All non-transient top-level windows created by an app other than
486 * the main window must have this property set to the app's main window.
487 */
488EAPI void
489ecore_x_icccm_client_leader_set(Ecore_X_Window win,
490 Ecore_X_Window leader)
491{
492 LOGFN(__FILE__, __LINE__, __FUNCTION__);
493
494 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
495 &leader, 1);
496}
497
498EAPI Ecore_X_Window_State_Hint
499ecore_x_icccm_state_get(Ecore_X_Window win)
500{
501 xcb_get_property_cookie_t cookie;
502 xcb_get_property_reply_t *reply;
503 Ecore_X_Window_State_Hint hint = ECORE_X_WINDOW_STATE_HINT_NONE;
504 uint8_t *prop;
505
506 LOGFN(__FILE__, __LINE__, __FUNCTION__);
507 CHECK_XCB_CONN;
508
509 cookie =
510 xcb_get_property_unchecked(_ecore_xcb_conn, 0, win,
511 ECORE_X_ATOM_WM_STATE, ECORE_X_ATOM_WM_STATE,
512 0L, 0x7fffffff);
513 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
514 if (!reply) return hint;
515 if ((reply->type == 0) || (reply->format != 8) || (reply->value_len != 2))
516 {
517 free(reply);
518 return hint;
519 }
520
521 prop = (uint8_t *)xcb_get_property_value(reply);
522#ifdef OLD_XCB_VERSION
523 switch (prop[0])
524 {
525 case XCB_WM_STATE_WITHDRAWN:
526 hint = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
527 break;
528
529 case XCB_WM_STATE_NORMAL:
530 hint = ECORE_X_WINDOW_STATE_HINT_NORMAL;
531 break;
532
533 case XCB_WM_STATE_ICONIC:
534 hint = ECORE_X_WINDOW_STATE_HINT_ICONIC;
535 break;
536
537 default:
538 break;
539 }
540#else
541 switch (prop[0])
542 {
543 case XCB_ICCCM_WM_STATE_WITHDRAWN:
544 hint = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
545 break;
546
547 case XCB_ICCCM_WM_STATE_NORMAL:
548 hint = ECORE_X_WINDOW_STATE_HINT_NORMAL;
549 break;
550
551 case XCB_ICCCM_WM_STATE_ICONIC:
552 hint = ECORE_X_WINDOW_STATE_HINT_ICONIC;
553 break;
554
555 default:
556 break;
557 }
558#endif
559
560 free(reply);
561 return hint;
562}
563
564EAPI void
565ecore_x_icccm_state_set(Ecore_X_Window win,
566 Ecore_X_Window_State_Hint state)
567{
568#ifdef OLD_XCB_VERSION
569 xcb_wm_hints_t hints;
570#else
571 xcb_icccm_wm_hints_t hints;
572#endif
573
574 LOGFN(__FILE__, __LINE__, __FUNCTION__);
575 CHECK_XCB_CONN;
576
577#ifdef OLD_XCB_VERSION
578 xcb_wm_hints_set_none(&hints);
579
580 hints.flags = XCB_WM_HINT_STATE;
581
582 if (state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
583 xcb_wm_hints_set_withdrawn(&hints);
584 else if (state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
585 xcb_wm_hints_set_normal(&hints);
586 else if (state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
587 xcb_wm_hints_set_iconic(&hints);
588
589 xcb_set_wm_hints(_ecore_xcb_conn, win, &hints);
590#else
591 xcb_icccm_wm_hints_set_none(&hints);
592
593 hints.flags = XCB_ICCCM_WM_HINT_STATE;
594
595 if (state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
596 xcb_icccm_wm_hints_set_withdrawn(&hints);
597 else if (state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
598 xcb_icccm_wm_hints_set_normal(&hints);
599 else if (state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
600 xcb_icccm_wm_hints_set_iconic(&hints);
601
602 xcb_icccm_set_wm_hints(_ecore_xcb_conn, win, &hints);
603#endif
604}
605
606EAPI void
607ecore_x_icccm_delete_window_send(Ecore_X_Window win,
608 Ecore_X_Time t)
609{
610 LOGFN(__FILE__, __LINE__, __FUNCTION__);
611 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
612 ECORE_X_EVENT_MASK_NONE,
613 ECORE_X_ATOM_WM_DELETE_WINDOW, t, 0, 0, 0);
614}
615
616EAPI void
617ecore_x_icccm_hints_set(Ecore_X_Window win,
618 Eina_Bool accepts_focus,
619 Ecore_X_Window_State_Hint initial_state,
620 Ecore_X_Pixmap icon_pixmap,
621 Ecore_X_Pixmap icon_mask,
622 Ecore_X_Window icon_window,
623 Ecore_X_Window window_group,
624 Eina_Bool is_urgent)
625{
626#ifdef OLD_XCB_VERSION
627 xcb_wm_hints_t hints;
628#else
629 xcb_icccm_wm_hints_t hints;
630#endif
631
632 LOGFN(__FILE__, __LINE__, __FUNCTION__);
633 CHECK_XCB_CONN;
634
635#ifdef OLD_XCB_VERSION
636 xcb_wm_hints_set_none(&hints);
637 xcb_wm_hints_set_input(&hints, accepts_focus);
638
639 if (initial_state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
640 xcb_wm_hints_set_withdrawn(&hints);
641 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
642 xcb_wm_hints_set_normal(&hints);
643 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
644 xcb_wm_hints_set_iconic(&hints);
645
646 if (icon_pixmap != 0) xcb_wm_hints_set_icon_pixmap(&hints, icon_pixmap);
647 if (icon_mask != 0) xcb_wm_hints_set_icon_mask(&hints, icon_mask);
648 if (icon_window != 0) xcb_wm_hints_set_icon_window(&hints, icon_window);
649 if (window_group != 0) xcb_wm_hints_set_window_group(&hints, window_group);
650 if (is_urgent) xcb_wm_hints_set_urgency(&hints);
651
652 xcb_set_wm_hints(_ecore_xcb_conn, win, &hints);
653#else
654 xcb_icccm_wm_hints_set_none(&hints);
655 xcb_icccm_wm_hints_set_input(&hints, accepts_focus);
656
657 if (initial_state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
658 xcb_icccm_wm_hints_set_withdrawn(&hints);
659 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
660 xcb_icccm_wm_hints_set_normal(&hints);
661 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
662 xcb_icccm_wm_hints_set_iconic(&hints);
663
664 if (icon_pixmap != 0)
665 xcb_icccm_wm_hints_set_icon_pixmap(&hints, icon_pixmap);
666 if (icon_mask != 0)
667 xcb_icccm_wm_hints_set_icon_mask(&hints, icon_mask);
668 if (icon_window != 0)
669 xcb_icccm_wm_hints_set_icon_window(&hints, icon_window);
670 if (window_group != 0)
671 xcb_icccm_wm_hints_set_window_group(&hints, window_group);
672 if (is_urgent)
673 xcb_icccm_wm_hints_set_urgency(&hints);
674
675 xcb_icccm_set_wm_hints(_ecore_xcb_conn, win, &hints);
676#endif
677}
678
679EAPI Eina_Bool
680ecore_x_icccm_hints_get(Ecore_X_Window win,
681 Eina_Bool *accepts_focus,
682 Ecore_X_Window_State_Hint *initial_state,
683 Ecore_X_Pixmap *icon_pixmap,
684 Ecore_X_Pixmap *icon_mask,
685 Ecore_X_Window *icon_window,
686 Ecore_X_Window *window_group,
687 Eina_Bool *is_urgent)
688{
689 xcb_get_property_cookie_t cookie;
690#ifdef OLD_XCB_VERSION
691 xcb_wm_hints_t hints;
692#else
693 xcb_icccm_wm_hints_t hints;
694#endif
695 uint8_t ret = 0;
696
697 LOGFN(__FILE__, __LINE__, __FUNCTION__);
698 CHECK_XCB_CONN;
699
700 if (accepts_focus) *accepts_focus = EINA_TRUE;
701 if (initial_state) *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
702 if (icon_pixmap) *icon_pixmap = 0;
703 if (icon_mask) *icon_mask = 0;
704 if (icon_window) *icon_window = 0;
705 if (window_group) *window_group = 0;
706 if (is_urgent) *is_urgent = EINA_FALSE;
707
708#ifdef OLD_XCB_VERSION
709 xcb_wm_hints_set_none(&hints);
710 cookie = xcb_get_wm_hints_unchecked(_ecore_xcb_conn, win);
711 ret = xcb_get_wm_hints_reply(_ecore_xcb_conn, cookie, &hints, NULL);
712#else
713 xcb_icccm_wm_hints_set_none(&hints);
714 cookie = xcb_icccm_get_wm_hints_unchecked(_ecore_xcb_conn, win);
715 ret = xcb_icccm_get_wm_hints_reply(_ecore_xcb_conn, cookie, &hints, NULL);
716#endif
717 if (!ret) return EINA_FALSE;
718
719#ifdef OLD_XCB_VERSION
720 if ((hints.flags & XCB_WM_HINT_INPUT) && (accepts_focus))
721#else
722 if ((hints.flags & XCB_ICCCM_WM_HINT_INPUT) && (accepts_focus))
723#endif
724 {
725 if (hints.input)
726 *accepts_focus = EINA_TRUE;
727 else
728 *accepts_focus = EINA_FALSE;
729 }
730
731#ifdef OLD_XCB_VERSION
732 if ((hints.flags & XCB_WM_HINT_STATE) && (initial_state))
733 {
734 if (hints.initial_state == XCB_WM_STATE_WITHDRAWN)
735 *initial_state = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
736 else if (hints.initial_state == XCB_WM_STATE_NORMAL)
737 *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
738 else if (hints.initial_state == XCB_WM_STATE_ICONIC)
739 *initial_state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
740 }
741
742 if ((hints.flags & XCB_WM_HINT_ICON_PIXMAP) && (icon_pixmap))
743 *icon_pixmap = hints.icon_pixmap;
744
745 if ((hints.flags & XCB_WM_HINT_ICON_MASK) && (icon_mask))
746 *icon_mask = hints.icon_mask;
747
748 if ((hints.flags & XCB_WM_HINT_ICON_WINDOW) && (icon_window))
749 *icon_window = hints.icon_window;
750
751 if ((hints.flags & XCB_WM_HINT_WINDOW_GROUP) && (window_group))
752 *window_group = hints.window_group;
753
754 if ((hints.flags & XCB_WM_HINT_X_URGENCY) && (is_urgent))
755 *is_urgent = EINA_TRUE;
756#else
757 if ((hints.flags & XCB_ICCCM_WM_HINT_STATE) && (initial_state))
758 {
759 if (hints.initial_state == XCB_ICCCM_WM_STATE_WITHDRAWN)
760 *initial_state = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
761 else if (hints.initial_state == XCB_ICCCM_WM_STATE_NORMAL)
762 *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
763 else if (hints.initial_state == XCB_ICCCM_WM_STATE_ICONIC)
764 *initial_state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
765 }
766
767 if ((hints.flags & XCB_ICCCM_WM_HINT_ICON_PIXMAP) && (icon_pixmap))
768 *icon_pixmap = hints.icon_pixmap;
769
770 if ((hints.flags & XCB_ICCCM_WM_HINT_ICON_MASK) && (icon_mask))
771 *icon_mask = hints.icon_mask;
772
773 if ((hints.flags & XCB_ICCCM_WM_HINT_ICON_WINDOW) && (icon_window))
774 *icon_window = hints.icon_window;
775
776 if ((hints.flags & XCB_ICCCM_WM_HINT_WINDOW_GROUP) && (window_group))
777 *window_group = hints.window_group;
778
779 if ((hints.flags & XCB_ICCCM_WM_HINT_X_URGENCY) && (is_urgent))
780 *is_urgent = EINA_TRUE;
781#endif
782
783 return EINA_TRUE;
784}
785
786/**
787 * Get a window icon name.
788 * @param win The window
789 * @return The windows icon name string
790 *
791 * Return the icon name of a window. String must be free'd when done with.
792 */
793EAPI char *
794ecore_x_icccm_icon_name_get(Ecore_X_Window win)
795{
796 xcb_get_property_cookie_t cookie;
797#ifdef OLD_XCB_VERSION
798 xcb_get_text_property_reply_t prop;
799#else
800 xcb_icccm_get_text_property_reply_t prop;
801#endif
802 uint8_t ret = 0;
803 char *tmp = NULL;
804
805 LOGFN(__FILE__, __LINE__, __FUNCTION__);
806 CHECK_XCB_CONN;
807
808 if (!win) return NULL;
809
810#ifdef OLD_XCB_VERSION
811 cookie = xcb_get_wm_icon_name_unchecked(_ecore_xcb_conn, win);
812 ret = xcb_get_wm_icon_name_reply(_ecore_xcb_conn, cookie, &prop, NULL);
813#else
814 cookie = xcb_icccm_get_wm_icon_name_unchecked(_ecore_xcb_conn, win);
815 ret = xcb_icccm_get_wm_icon_name_reply(_ecore_xcb_conn, cookie, &prop, NULL);
816#endif
817 if (ret == 0) return NULL;
818
819 if (prop.name_len < 1)
820 {
821#ifdef OLD_XCB_VERSION
822 xcb_get_text_property_reply_wipe(&prop);
823#else
824 xcb_icccm_get_text_property_reply_wipe(&prop);
825#endif
826 return NULL;
827 }
828
829 if (!(tmp = malloc((prop.name_len + 1) * sizeof(char *))))
830 {
831#ifdef OLD_XCB_VERSION
832 xcb_get_text_property_reply_wipe(&prop);
833#else
834 xcb_icccm_get_text_property_reply_wipe(&prop);
835#endif
836 return NULL;
837 }
838 memcpy(tmp, prop.name, sizeof(char *) * prop.name_len);
839 tmp[prop.name_len] = '\0';
840
841 if (prop.encoding != ECORE_X_ATOM_UTF8_STRING)
842 {
843 Ecore_Xcb_Textproperty tp;
844 int count = 0;
845 char **list = NULL;
846 Eina_Bool ret = EINA_FALSE;
847
848 tp.value = strdup(tmp);
849 tp.nitems = prop.name_len;
850 tp.encoding = prop.encoding;
851#ifdef HAVE_ICONV
852 ret = _ecore_xcb_utf8_textproperty_to_textlist(&tp, &list, &count);
853#else
854 ret = _ecore_xcb_mb_textproperty_to_textlist(&tp, &list, &count);
855#endif
856 if (ret)
857 {
858 if (count > 0)
859 tmp = strdup(list[0]);
860
861 if (list) free(list);
862 }
863 }
864
865#ifdef OLD_XCB_VERSION
866 xcb_get_text_property_reply_wipe(&prop);
867#else
868 xcb_icccm_get_text_property_reply_wipe(&prop);
869#endif
870 return tmp;
871}
872
873/**
874 * Set a window icon name.
875 * @param win The window
876 * @param t The icon name string
877 *
878 * Set a window icon name
879 */
880EAPI void
881ecore_x_icccm_icon_name_set(Ecore_X_Window win,
882 const char *name)
883{
884 Ecore_Xcb_Textproperty prop;
885 char *list[1];
886 Eina_Bool ret = EINA_FALSE;
887
888 LOGFN(__FILE__, __LINE__, __FUNCTION__);
889 CHECK_XCB_CONN;
890
891 if ((!win) || (!name)) return;
892
893 prop.value = NULL;
894 list[0] = strdup(name);
895
896#ifdef HAVE_ICONV
897 ret = _ecore_xcb_utf8_textlist_to_textproperty(list, 1, XcbUTF8StringStyle,
898 &prop);
899#else
900 ret = _ecore_xcb_mb_textlist_to_textproperty(list, 1, XcbStdICCTextStyle,
901 &prop);
902#endif
903
904 if (ret)
905 {
906#ifdef OLD_XCB_VERSION
907 xcb_set_wm_icon_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
908 strlen(prop.value), prop.value);
909#else
910 xcb_icccm_set_wm_icon_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
911 8, strlen(prop.value), prop.value);
912#endif
913 if (prop.value) free(prop.value);
914 }
915 else
916#ifdef OLD_XCB_VERSION
917 xcb_set_wm_icon_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
918 strlen(name), name);
919#else
920 xcb_icccm_set_wm_icon_name(_ecore_xcb_conn, win, ECORE_X_ATOM_STRING,
921 8, strlen(name), name);
922#endif
923
924 free(list[0]);
925}
926
927EAPI void
928ecore_x_icccm_iconic_request_send(Ecore_X_Window win,
929 Ecore_X_Window root)
930{
931 xcb_client_message_event_t ev;
932
933 LOGFN(__FILE__, __LINE__, __FUNCTION__);
934 CHECK_XCB_CONN;
935
936 if (!win) return;
937 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
938
939 memset(&ev, 0, sizeof(xcb_client_message_event_t));
940
941 ev.response_type = XCB_CLIENT_MESSAGE;
942 ev.format = 32;
943 ev.window = win;
944 ev.type = ECORE_X_ATOM_WM_CHANGE_STATE;
945#ifdef OLD_XCB_VERSION
946 ev.data.data32[0] = XCB_WM_STATE_ICONIC;
947#else
948 ev.data.data32[0] = XCB_ICCCM_WM_STATE_ICONIC;
949#endif
950
951 xcb_send_event(_ecore_xcb_conn, 0, root,
952 (XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
953 XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT),
954 (const char *)&ev);
955// ecore_x_flush();
956}
957
958/**
959 * Set or unset a wm protocol property.
960 * @param win The Window
961 * @param protocol The protocol to enable/disable
962 * @param on On/Off
963 */
964EAPI void
965ecore_x_icccm_protocol_set(Ecore_X_Window win,
966 Ecore_X_WM_Protocol protocol,
967 Eina_Bool on)
968{
969 Ecore_X_Atom proto;
970 xcb_get_property_cookie_t cookie;
971#ifdef OLD_XCB_VERSION
972 xcb_get_wm_protocols_reply_t protos;
973#else
974 xcb_icccm_get_wm_protocols_reply_t protos;
975#endif
976 int i = 0, count = 0, set = 0;
977
978 LOGFN(__FILE__, __LINE__, __FUNCTION__);
979 CHECK_XCB_CONN;
980
981 if (protocol >= ECORE_X_WM_PROTOCOL_NUM) return;
982 proto = _ecore_xcb_atoms_wm_protocol[protocol];
983#ifdef OLD_XCB_VERSION
984 cookie = xcb_get_wm_protocols_unchecked(_ecore_xcb_conn, win, proto);
985 if (!xcb_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &protos, NULL))
986#else
987 cookie = xcb_icccm_get_wm_protocols_unchecked(_ecore_xcb_conn, win, proto);
988 if (!xcb_icccm_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &protos, NULL))
989#endif
990 count = 0;
991 else
992 count = protos.atoms_len;
993
994 for (i = 0; i < count; i++)
995 {
996 if (protos.atoms[i] == proto)
997 {
998 set = 1;
999 break;
1000 }
1001 }
1002
1003 if (on)
1004 {
1005 if (!set)
1006 {
1007 Ecore_X_Atom *atoms = NULL;
1008
1009 atoms = malloc((count + 1) * sizeof(Ecore_X_Atom));
1010 if (atoms)
1011 {
1012 for (i = 0; i < count; i++)
1013 atoms[i] = protos.atoms[i];
1014 atoms[count] = proto;
1015#ifdef OLD_XCB_VERSION
1016 xcb_set_wm_protocols(_ecore_xcb_conn,
1017 ECORE_X_ATOM_WM_PROTOCOLS,
1018 win, count, atoms);
1019#else
1020 xcb_icccm_set_wm_protocols(_ecore_xcb_conn, win,
1021 ECORE_X_ATOM_WM_PROTOCOLS,
1022 count, atoms);
1023#endif
1024 free(atoms);
1025 }
1026 }
1027 }
1028 else
1029 {
1030 if (set)
1031 {
1032 for (i = 0; i < count; i++)
1033 {
1034 if (protos.atoms[i] == proto)
1035 {
1036 int j = 0;
1037
1038 for (j = (i + 1); j < count; j++)
1039 protos.atoms[j - 1] = protos.atoms[j];
1040 if (count > 1)
1041#ifdef OLD_XCB_VERSION
1042 xcb_set_wm_protocols(_ecore_xcb_conn,
1043 ECORE_X_ATOM_WM_PROTOCOLS,
1044 win, count - 1, protos.atoms);
1045#else
1046 xcb_icccm_set_wm_protocols(_ecore_xcb_conn, win,
1047 ECORE_X_ATOM_WM_PROTOCOLS,
1048 count - 1, protos.atoms);
1049#endif
1050 else
1051 ecore_x_window_prop_property_del(win,
1052 ECORE_X_ATOM_WM_PROTOCOLS);
1053 break;
1054 }
1055 }
1056 }
1057 }
1058
1059#ifdef OLD_XCB_VERSION
1060 xcb_get_wm_protocols_reply_wipe(&protos);
1061#else
1062 xcb_icccm_get_wm_protocols_reply_wipe(&protos);
1063#endif
1064}
1065
1066/**
1067 * Determines whether a protocol is set for a window.
1068 * @param win The Window
1069 * @param protocol The protocol to query
1070 * @return 1 if the protocol is set, else 0.
1071 */
1072EAPI Eina_Bool
1073ecore_x_icccm_protocol_isset(Ecore_X_Window win,
1074 Ecore_X_WM_Protocol protocol)
1075{
1076 Ecore_X_Atom proto;
1077 Eina_Bool ret = EINA_FALSE;
1078 xcb_get_property_cookie_t cookie;
1079#ifdef OLD_XCB_VERSION
1080 xcb_get_wm_protocols_reply_t reply;
1081#else
1082 xcb_icccm_get_wm_protocols_reply_t reply;
1083#endif
1084 uint8_t val = 0;
1085 unsigned int i = 0;
1086
1087 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1088 CHECK_XCB_CONN;
1089
1090 if (protocol >= ECORE_X_WM_PROTOCOL_NUM) return EINA_FALSE;
1091
1092 proto = _ecore_xcb_atoms_wm_protocol[protocol];
1093#ifdef OLD_XCB_VERSION
1094 cookie = xcb_get_wm_protocols_unchecked(_ecore_xcb_conn, win, proto);
1095 val = xcb_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &reply, NULL);
1096#else
1097 cookie = xcb_icccm_get_wm_protocols_unchecked(_ecore_xcb_conn, win, proto);
1098 val = xcb_icccm_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &reply, NULL);
1099#endif
1100 if (!val) return EINA_FALSE;
1101
1102 for (i = 0; i < reply.atoms_len; i++)
1103 if (reply.atoms[i] == proto)
1104 {
1105 ret = EINA_TRUE;
1106 break;
1107 }
1108
1109#ifdef OLD_XCB_VERSION
1110 xcb_get_wm_protocols_reply_wipe(&reply);
1111#else
1112 xcb_icccm_get_wm_protocols_reply_wipe(&reply);
1113#endif
1114
1115 return ret;
1116}
1117
1118/**
1119 * Set protocol atoms explicitly
1120 * @param win The Window
1121 * @param protos An array of protocol atoms
1122 * @param num the number of members of the array
1123 */
1124EAPI void
1125ecore_x_icccm_protocol_atoms_set(Ecore_X_Window win,
1126 Ecore_X_Atom *protos,
1127 int num)
1128{
1129 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1130 CHECK_XCB_CONN;
1131
1132 if (num > 0)
1133#ifdef OLD_XCB_VERSION
1134 xcb_set_wm_protocols(_ecore_xcb_conn, ECORE_X_ATOM_WM_PROTOCOLS,
1135 win, num, protos);
1136#else
1137 xcb_icccm_set_wm_protocols(_ecore_xcb_conn, win,
1138 ECORE_X_ATOM_WM_PROTOCOLS, num, protos);
1139#endif
1140 else
1141 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_WM_PROTOCOLS);
1142}
1143
1144EAPI Eina_Bool
1145ecore_x_icccm_size_pos_hints_get(Ecore_X_Window win,
1146 Eina_Bool *request_pos,
1147 Ecore_X_Gravity *gravity,
1148 int *min_w,
1149 int *min_h,
1150 int *max_w,
1151 int *max_h,
1152 int *base_w,
1153 int *base_h,
1154 int *step_x,
1155 int *step_y,
1156 double *min_aspect,
1157 double *max_aspect)
1158{
1159 xcb_size_hints_t hints;
1160 xcb_get_property_cookie_t cookie;
1161 uint8_t ret = 0;
1162 int32_t minw = 0, minh = 0;
1163 int32_t maxw = 32767, maxh = 32767;
1164 int32_t basew = -1, baseh = -1;
1165 int32_t stepx = -1, stepy = -1;
1166 double mina = 0.0, maxa = 0.0;
1167
1168 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1169 CHECK_XCB_CONN;
1170
1171 if (request_pos) *request_pos = EINA_FALSE;
1172 if (gravity) *gravity = ECORE_X_GRAVITY_NW;
1173 if (min_w) *min_w = minw;
1174 if (min_h) *min_h = minh;
1175 if (max_w) *max_w = maxw;
1176 if (max_h) *max_h = maxh;
1177 if (base_w) *base_w = basew;
1178 if (base_h) *base_h = baseh;
1179 if (step_x) *step_x = stepx;
1180 if (step_y) *step_y = stepy;
1181 if (min_aspect) *min_aspect = mina;
1182 if (max_aspect) *max_aspect = maxa;
1183
1184#ifdef OLD_XCB_VERSION
1185 cookie = xcb_get_wm_normal_hints_unchecked(_ecore_xcb_conn, win);
1186 ret = xcb_get_wm_normal_hints_reply(_ecore_xcb_conn, cookie, &hints, NULL);
1187#else
1188 cookie = xcb_icccm_get_wm_normal_hints_unchecked(_ecore_xcb_conn, win);
1189 ret = xcb_icccm_get_wm_normal_hints_reply(_ecore_xcb_conn, cookie,
1190 &hints, NULL);
1191#endif
1192 if (!ret) return EINA_FALSE;
1193
1194#ifdef OLD_XCB_VERSION
1195 if ((hints.flags & XCB_SIZE_HINT_US_POSITION) ||
1196 (hints.flags & XCB_SIZE_HINT_P_POSITION))
1197#else
1198 if ((hints.flags & XCB_ICCCM_SIZE_HINT_US_POSITION) ||
1199 (hints.flags & XCB_ICCCM_SIZE_HINT_P_POSITION))
1200#endif
1201 {
1202 if (request_pos) *request_pos = EINA_TRUE;
1203 }
1204
1205#ifdef OLD_XCB_VERSION
1206 if (hints.flags & XCB_SIZE_HINT_P_WIN_GRAVITY)
1207#else
1208 if (hints.flags & XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY)
1209#endif
1210 {
1211 if (gravity) *gravity = hints.win_gravity;
1212 }
1213
1214#ifdef OLD_XCB_VERSION
1215 if (hints.flags & XCB_SIZE_HINT_P_MIN_SIZE)
1216#else
1217 if (hints.flags & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE)
1218#endif
1219 {
1220 minw = hints.min_width;
1221 minh = hints.min_height;
1222 }
1223
1224#ifdef OLD_XCB_VERSION
1225 if (hints.flags & XCB_SIZE_HINT_P_MAX_SIZE)
1226#else
1227 if (hints.flags & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE)
1228#endif
1229 {
1230 maxw = hints.max_width;
1231 maxh = hints.max_height;
1232 if (maxw < minw) maxw = minw;
1233 if (maxh < minh) maxh = minh;
1234 }
1235
1236#ifdef OLD_XCB_VERSION
1237 if (hints.flags & XCB_SIZE_HINT_BASE_SIZE)
1238#else
1239 if (hints.flags & XCB_ICCCM_SIZE_HINT_BASE_SIZE)
1240#endif
1241 {
1242 basew = hints.base_width;
1243 baseh = hints.base_height;
1244 if (basew > minw) minw = basew;
1245 if (baseh > minh) minh = baseh;
1246 }
1247
1248#ifdef OLD_XCB_VERSION
1249 if (hints.flags & XCB_SIZE_HINT_P_RESIZE_INC)
1250#else
1251 if (hints.flags & XCB_ICCCM_SIZE_HINT_P_RESIZE_INC)
1252#endif
1253 {
1254 stepx = hints.width_inc;
1255 stepy = hints.height_inc;
1256 if (stepx < 1) stepx = 1;
1257 if (stepy < 1) stepy = 1;
1258 }
1259
1260#ifdef OLD_XCB_VERSION
1261 if (hints.flags & XCB_SIZE_HINT_P_ASPECT)
1262#else
1263 if (hints.flags & XCB_ICCCM_SIZE_HINT_P_ASPECT)
1264#endif
1265 {
1266 if (hints.min_aspect_den > 0)
1267 mina = ((double)hints.min_aspect_num) / ((double)hints.min_aspect_den);
1268
1269 if (hints.max_aspect_den > 0)
1270 maxa = ((double)hints.max_aspect_num) / ((double)hints.max_aspect_den);
1271 }
1272
1273 if (min_w) *min_w = minw;
1274 if (min_h) *min_h = minh;
1275 if (max_w) *max_w = maxw;
1276 if (max_h) *max_h = maxh;
1277 if (base_w) *base_w = basew;
1278 if (base_h) *base_h = baseh;
1279 if (step_x) *step_x = stepx;
1280 if (step_y) *step_y = stepy;
1281 if (min_aspect) *min_aspect = mina;
1282 if (max_aspect) *max_aspect = maxa;
1283
1284 return EINA_TRUE;
1285}
1286
1287EAPI void
1288ecore_x_icccm_size_pos_hints_set(Ecore_X_Window win,
1289 Eina_Bool request_pos,
1290 Ecore_X_Gravity gravity,
1291 int min_w,
1292 int min_h,
1293 int max_w,
1294 int max_h,
1295 int base_w,
1296 int base_h,
1297 int step_x,
1298 int step_y,
1299 double min_aspect,
1300 double max_aspect)
1301{
1302 xcb_get_property_cookie_t cookie;
1303 xcb_size_hints_t hints;
1304 uint8_t ret = 0;
1305
1306 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1307 CHECK_XCB_CONN;
1308
1309#ifdef OLD_XCB_VERSION
1310 cookie = xcb_get_wm_normal_hints_unchecked(_ecore_xcb_conn, win);
1311 ret = xcb_get_wm_normal_hints_reply(_ecore_xcb_conn, cookie, &hints, NULL);
1312#else
1313 cookie = xcb_icccm_get_wm_normal_hints_unchecked(_ecore_xcb_conn, win);
1314 ret = xcb_icccm_get_wm_normal_hints_reply(_ecore_xcb_conn, cookie,
1315 &hints, NULL);
1316#endif
1317 if (!ret) memset(&hints, 0, sizeof(xcb_size_hints_t));
1318
1319 hints.flags = 0;
1320
1321#ifdef OLD_XCB_VERSION
1322 if (request_pos)
1323 hints.flags |= XCB_SIZE_HINT_US_POSITION;
1324
1325 if (gravity != ECORE_X_GRAVITY_NW)
1326 xcb_size_hints_set_win_gravity(&hints, gravity);
1327 if ((min_w > 0) || (min_h > 0))
1328 xcb_size_hints_set_min_size(&hints, min_w, min_h);
1329 if ((max_w > 0) || (max_h > 0))
1330 xcb_size_hints_set_max_size(&hints, max_w, max_h);
1331 if ((base_w > 0) || (base_h > 0))
1332 xcb_size_hints_set_base_size(&hints, base_w, base_h);
1333 if ((step_x > 1) || (step_y > 1))
1334 xcb_size_hints_set_resize_inc(&hints, step_x, step_y);
1335 if ((min_aspect > 0.0) || (max_aspect > 0.0))
1336 xcb_size_hints_set_aspect(&hints,
1337 (int32_t)(min_aspect * 10000), 10000,
1338 (int32_t)(max_aspect * 10000), 10000);
1339
1340 xcb_set_wm_normal_hints(_ecore_xcb_conn, win, &hints);
1341#else
1342 if (request_pos)
1343 hints.flags |= XCB_ICCCM_SIZE_HINT_US_POSITION;
1344
1345 if (gravity != ECORE_X_GRAVITY_NW)
1346 xcb_icccm_size_hints_set_win_gravity(&hints, gravity);
1347 if ((min_w > 0) || (min_h > 0))
1348 xcb_icccm_size_hints_set_min_size(&hints, min_w, min_h);
1349 if ((max_w > 0) || (max_h > 0))
1350 xcb_icccm_size_hints_set_max_size(&hints, max_w, max_h);
1351 if ((base_w > 0) || (base_h > 0))
1352 xcb_icccm_size_hints_set_base_size(&hints, base_w, base_h);
1353 if ((step_x > 1) || (step_y > 1))
1354 xcb_icccm_size_hints_set_resize_inc(&hints, step_x, step_y);
1355 if ((min_aspect > 0.0) || (max_aspect > 0.0))
1356 xcb_icccm_size_hints_set_aspect(&hints,
1357 (int32_t)(min_aspect * 10000), 10000,
1358 (int32_t)(max_aspect * 10000), 10000);
1359
1360 xcb_icccm_set_wm_normal_hints(_ecore_xcb_conn, win, &hints);
1361#endif
1362}
1363
1364EAPI void
1365ecore_x_icccm_move_resize_send(Ecore_X_Window win,
1366 int x,
1367 int y,
1368 int w,
1369 int h)
1370{
1371 xcb_configure_notify_event_t ev;
1372
1373 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1374 CHECK_XCB_CONN;
1375
1376 if (!win) return;
1377
1378 memset(&ev, 0, sizeof(xcb_configure_notify_event_t));
1379
1380 ev.response_type = XCB_CONFIGURE_NOTIFY;
1381 ev.event = win;
1382 ev.window = win;
1383 ev.above_sibling = XCB_NONE;
1384 ev.x = x;
1385 ev.y = y;
1386 ev.width = w;
1387 ev.height = h;
1388 ev.border_width = 0;
1389 ev.override_redirect = 0;
1390
1391 xcb_send_event(_ecore_xcb_conn, 0, win,
1392 XCB_EVENT_MASK_STRUCTURE_NOTIFY, (const char *)&ev);
1393// ecore_x_flush();
1394}
1395
1396/**
1397 * Get a window client machine string.
1398 * @param win The window
1399 * @return The windows client machine string
1400 *
1401 * Return the client machine of a window. String must be free'd when done with.
1402 */
1403EAPI char *
1404ecore_x_icccm_client_machine_get(Ecore_X_Window win)
1405{
1406 xcb_get_property_cookie_t cookie;
1407#ifdef OLD_XCB_VERSION
1408 xcb_get_text_property_reply_t prop;
1409#else
1410 xcb_icccm_get_text_property_reply_t prop;
1411#endif
1412 uint8_t ret = 0;
1413 char *tmp = NULL;
1414
1415 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1416 CHECK_XCB_CONN;
1417
1418#ifdef OLD_XCB_VERSION
1419 cookie = xcb_get_wm_client_machine_unchecked(_ecore_xcb_conn, win);
1420 ret = xcb_get_wm_client_machine_reply(_ecore_xcb_conn, cookie, &prop, NULL);
1421#else
1422 cookie = xcb_icccm_get_wm_client_machine_unchecked(_ecore_xcb_conn, win);
1423 ret = xcb_icccm_get_wm_client_machine_reply(_ecore_xcb_conn, cookie,
1424 &prop, NULL);
1425#endif
1426 if (ret == 0) return NULL;
1427
1428 tmp = malloc((prop.name_len + 1) * sizeof(char *));
1429 if (!tmp)
1430 {
1431#ifdef OLD_XCB_VERSION
1432 xcb_get_text_property_reply_wipe(&prop);
1433#else
1434 xcb_icccm_get_text_property_reply_wipe(&prop);
1435#endif
1436 return NULL;
1437 }
1438 memcpy(tmp, prop.name, sizeof(char *) * prop.name_len);
1439 tmp[prop.name_len] = '\0';
1440
1441#ifdef OLD_XCB_VERSION
1442 xcb_get_text_property_reply_wipe(&prop);
1443#else
1444 xcb_icccm_get_text_property_reply_wipe(&prop);
1445#endif
1446
1447 return tmp;
1448}
1449
1450EAPI void
1451ecore_x_icccm_take_focus_send(Ecore_X_Window win,
1452 Ecore_X_Time t)
1453{
1454 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1455 CHECK_XCB_CONN;
1456
1457 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
1458 XCB_EVENT_MASK_NO_EVENT,
1459 ECORE_X_ATOM_WM_TAKE_FOCUS, t, 0, 0, 0);
1460}
1461
1462EAPI void
1463ecore_x_icccm_save_yourself_send(Ecore_X_Window win,
1464 Ecore_X_Time t)
1465{
1466 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1467 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
1468 XCB_EVENT_MASK_NO_EVENT,
1469 ECORE_X_ATOM_WM_SAVE_YOURSELF, t, 0, 0, 0);
1470}
1471
1472/**
1473 * Add a subwindow to the list of windows that need a different colormap installed.
1474 * @param win The toplevel window
1475 * @param subwin The subwindow to be added to the colormap windows list
1476 */
1477EAPI void
1478ecore_x_icccm_colormap_window_set(Ecore_X_Window win,
1479 Ecore_X_Window subwin)
1480{
1481 int num = 0, i = 0;
1482 unsigned char *odata = NULL, *data = NULL;
1483 Ecore_X_Window *newset = NULL, *oldset = NULL;
1484
1485 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1486
1487 if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1488 ECORE_X_ATOM_WINDOW, 32, &odata, &num))
1489 {
1490 if (!(newset = calloc(1, sizeof(Ecore_X_Window)))) return;
1491 newset[0] = subwin;
1492 num = 1;
1493 data = (unsigned char *)newset;
1494 }
1495 else
1496 {
1497 if (!(newset = calloc(num + 1, sizeof(Ecore_X_Window)))) return;
1498 oldset = (Ecore_X_Window *)odata;
1499 for (i = 0; i < num; i++)
1500 {
1501 if (oldset[i] == subwin)
1502 {
1503 if (odata) free(odata);
1504 odata = NULL;
1505 free(newset);
1506 return;
1507 }
1508 newset[i] = oldset[i];
1509 }
1510 newset[num++] = subwin;
1511 if (odata) free(odata);
1512 data = (unsigned char *)newset;
1513 }
1514 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1515 ECORE_X_ATOM_WINDOW, 32, data, num);
1516 free(newset);
1517}
1518
1519/**
1520 * Remove a window from the list of colormap windows.
1521 * @param win The toplevel window
1522 * @param subwin The window to be removed from the colormap window list.
1523 */
1524EAPI void
1525ecore_x_icccm_colormap_window_unset(Ecore_X_Window win,
1526 Ecore_X_Window subwin)
1527{
1528 int num = 0, i = 0, j = 0, k = 0;
1529 unsigned char *odata = NULL, *data = NULL;
1530 Ecore_X_Window *newset = NULL, *oldset = NULL;
1531
1532 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1533
1534 if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1535 ECORE_X_ATOM_WINDOW, 32, &odata, &num))
1536 return;
1537
1538 oldset = (Ecore_X_Window *)odata;
1539 for (i = 0; i < num; i++)
1540 {
1541 if (oldset[i] == subwin)
1542 {
1543 if (num == 1)
1544 {
1545 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS);
1546 if (odata) free(odata);
1547 odata = NULL;
1548 return;
1549 }
1550 else
1551 {
1552 newset = calloc(num - 1, sizeof(Ecore_X_Window));
1553 data = (unsigned char *)newset;
1554 for (j = 0; j < num; ++j)
1555 if (oldset[j] != subwin)
1556 newset[k++] = oldset[j];
1557
1558 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1559 ECORE_X_ATOM_WINDOW, 32, data, k);
1560 if (odata) free(odata);
1561 odata = NULL;
1562 free(newset);
1563 return;
1564 }
1565 }
1566 }
1567 if (odata) free(odata);
1568}
1569
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_image.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_image.c
deleted file mode 100644
index 6789b94..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_image.c
+++ /dev/null
@@ -1,740 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <sys/ipc.h>
3#include <sys/shm.h>
4#include <xcb/xcb_event.h>
5#include <xcb/shm.h>
6
7struct _Ecore_X_Image
8{
9 xcb_shm_segment_info_t shminfo;
10 xcb_image_t *xim;
11 Ecore_X_Visual vis;
12 int depth, w, h;
13 int bpl, bpp, rows;
14 unsigned char *data;
15 Eina_Bool shm : 1;
16};
17
18/* local function prototypes */
19static void _ecore_xcb_image_shm_check(void);
20static void _ecore_xcb_image_shm_create(Ecore_X_Image *im);
21static xcb_format_t *_ecore_xcb_image_find_format(const xcb_setup_t *setup,
22 uint8_t depth);
23
24/* local variables */
25static int _ecore_xcb_image_shm_can = -1;
26
27EAPI Ecore_X_Image *
28ecore_x_image_new(int w,
29 int h,
30 Ecore_X_Visual vis,
31 int depth)
32{
33 Ecore_X_Image *im;
34
35 LOGFN(__FILE__, __LINE__, __FUNCTION__);
36
37 if (!(im = calloc(1, sizeof(Ecore_X_Image)))) return NULL;
38 im->w = w;
39 im->h = h;
40 im->vis = vis;
41 im->depth = depth;
42 _ecore_xcb_image_shm_check();
43 im->shm = _ecore_xcb_image_shm_can;
44 return im;
45}
46
47EAPI void
48ecore_x_image_free(Ecore_X_Image *im)
49{
50 LOGFN(__FILE__, __LINE__, __FUNCTION__);
51 CHECK_XCB_CONN;
52
53 if (!im) return;
54 if (im->shm)
55 {
56 if (im->xim)
57 {
58 xcb_shm_detach(_ecore_xcb_conn, im->shminfo.shmseg);
59 xcb_image_destroy(im->xim);
60 shmdt(im->shminfo.shmaddr);
61 shmctl(im->shminfo.shmid, IPC_RMID, 0);
62 }
63 }
64 else if (im->xim)
65 {
66 if (im->xim->data) free(im->xim->data);
67 im->xim->data = NULL;
68 xcb_image_destroy(im->xim);
69 }
70
71 free(im);
72// ecore_x_flush();
73}
74
75EAPI Eina_Bool
76ecore_x_image_get(Ecore_X_Image *im,
77 Ecore_X_Drawable draw,
78 int x,
79 int y,
80 int sx,
81 int sy,
82 int w,
83 int h)
84{
85 Eina_Bool ret = EINA_TRUE;
86
87 LOGFN(__FILE__, __LINE__, __FUNCTION__);
88 CHECK_XCB_CONN;
89
90 if (im->shm)
91 {
92 if (!im->xim) _ecore_xcb_image_shm_create(im);
93 if (!im->xim) return EINA_FALSE;
94
95 if ((sx == 0) && (w == im->w))
96 {
97 im->xim->data = (uint8_t *)im->data + (im->xim->stride * sy) +
98 (sx * im->bpp);
99 im->xim->width = w;
100 im->xim->height = h;
101
102 ecore_x_grab();
103 if (!xcb_image_shm_get(_ecore_xcb_conn, draw, im->xim,
104 im->shminfo, x, y, 0xffffffff))
105 {
106 DBG("\tImage Shm Get Failed");
107 ret = EINA_FALSE;
108 }
109 ecore_x_ungrab();
110 ecore_x_sync(); // needed
111 }
112 else
113 {
114 Ecore_X_Image *tim;
115
116 tim = ecore_x_image_new(w, h, im->vis, im->depth);
117 if (tim)
118 {
119 ret = ecore_x_image_get(tim, draw, x, y, 0, 0, w, h);
120 if (ret)
121 {
122 unsigned char *spixels, *pixels;
123 int sbpp = 0, sbpl = 0, srows = 0;
124 int bpp = 0, bpl = 0, rows = 0;
125
126 spixels =
127 ecore_x_image_data_get(tim, &sbpl, &srows, &sbpp);
128 pixels = ecore_x_image_data_get(im, &bpl, &rows, &bpp);
129 if ((spixels) && (pixels))
130 {
131 unsigned char *p, *sp;
132 int r = 0;
133
134 p = (pixels + (sy * bpl) + (sx * bpp));
135 sp = spixels;
136 for (r = srows; r > 0; r--)
137 {
138 memcpy(p, sp, sbpl);
139 p += bpl;
140 sp += sbpl;
141 }
142 }
143 }
144 ecore_x_image_free(tim);
145 }
146 }
147 }
148 else
149 {
150 ret = EINA_FALSE;
151 ecore_x_grab();
152 im->xim =
153 xcb_image_get(_ecore_xcb_conn, draw, x, y, w, h,
154 0xffffffff, XCB_IMAGE_FORMAT_Z_PIXMAP);
155 if (!im->xim) ret = EINA_FALSE;
156 ecore_x_ungrab();
157 ecore_x_sync(); // needed
158
159 if (im->xim)
160 {
161 im->data = (unsigned char *)im->xim->data;
162 im->bpl = im->xim->stride;
163 im->rows = im->xim->height;
164 if (im->xim->bpp <= 8)
165 im->bpp = 1;
166 else if (im->xim->bpp <= 16)
167 im->bpp = 2;
168 else
169 im->bpp = 4;
170 }
171 }
172
173 return ret;
174}
175
176EAPI void *
177ecore_x_image_data_get(Ecore_X_Image *im,
178 int *bpl,
179 int *rows,
180 int *bpp)
181{
182 LOGFN(__FILE__, __LINE__, __FUNCTION__);
183
184 if (!im) return NULL;
185 if (!im->xim) _ecore_xcb_image_shm_create(im);
186 if (!im->xim) return NULL;
187
188 if (bpl) *bpl = im->bpl;
189 if (rows) *rows = im->rows;
190 if (bpp) *bpp = im->bpp;
191
192 return im->data;
193}
194
195EAPI void
196ecore_x_image_put(Ecore_X_Image *im,
197 Ecore_X_Drawable draw,
198 Ecore_X_GC gc,
199 int x,
200 int y,
201 int sx,
202 int sy,
203 int w,
204 int h)
205{
206 Ecore_X_GC tgc = 0;
207
208 LOGFN(__FILE__, __LINE__, __FUNCTION__);
209 CHECK_XCB_CONN;
210
211 if (!gc)
212 {
213 uint32_t mask, values[1];
214
215 tgc = xcb_generate_id(_ecore_xcb_conn);
216 mask = XCB_GC_SUBWINDOW_MODE;
217 values[0] = XCB_SUBWINDOW_MODE_INCLUDE_INFERIORS;
218 xcb_create_gc(_ecore_xcb_conn, tgc, draw, mask, values);
219 gc = tgc;
220 }
221 if (!im->xim) _ecore_xcb_image_shm_create(im);
222 if (im->xim)
223 {
224 if (im->shm)
225 xcb_shm_put_image(_ecore_xcb_conn, draw, gc, im->xim->width,
226 im->xim->height, sx, sy, w, h, x, y,
227 im->xim->depth, im->xim->format, 0,
228 im->shminfo.shmseg,
229 im->xim->data - im->shminfo.shmaddr);
230// xcb_image_shm_put(_ecore_xcb_conn, draw, gc, im->xim,
231// im->shminfo, sx, sy, x, y, w, h, 0);
232 else
233 xcb_image_put(_ecore_xcb_conn, draw, gc, im->xim, sx, sy, 0);
234 }
235 if (tgc) ecore_x_gc_free(tgc);
236 ecore_x_sync();
237}
238
239EAPI Eina_Bool
240ecore_x_image_is_argb32_get(Ecore_X_Image *im)
241{
242 xcb_visualtype_t *vis;
243
244 LOGFN(__FILE__, __LINE__, __FUNCTION__);
245 CHECK_XCB_CONN;
246
247 vis = (xcb_visualtype_t *)im->vis;
248 if (!im->xim) _ecore_xcb_image_shm_create(im);
249
250 if (((vis->_class == XCB_VISUAL_CLASS_TRUE_COLOR) ||
251 (vis->_class == XCB_VISUAL_CLASS_DIRECT_COLOR)) &&
252 (im->depth >= 24) && (vis->red_mask == 0xff0000) &&
253 (vis->green_mask == 0x00ff00) && (vis->blue_mask == 0x0000ff))
254 {
255#ifdef WORDS_BIGENDIAN
256 if (im->xim->byte_order == XCB_IMAGE_ORDER_LSB_FIRST)
257 return EINA_TRUE;
258#else
259 if (im->xim->byte_order == XCB_IMAGE_ORDER_MSB_FIRST)
260 return EINA_TRUE;
261#endif
262 }
263
264 return EINA_FALSE;
265}
266
267EAPI Eina_Bool
268ecore_x_image_to_argb_convert(void *src,
269 int sbpp,
270 int sbpl,
271 Ecore_X_Colormap c,
272 Ecore_X_Visual v,
273 int x,
274 int y,
275 int w,
276 int h,
277 unsigned int *dst,
278 int dbpl,
279 int dx,
280 int dy)
281{
282 xcb_visualtype_t *vis;
283 uint32_t *cols;
284 int n = 0, nret = 0, i, row, mode = 0;
285 unsigned int pal[256], r, g, b;
286 enum
287 {
288 rgbnone = 0,
289 rgb565,
290 bgr565,
291 rgbx555,
292 argbx888,
293 abgrx888,
294 rgba888x,
295 bgra888x,
296 argbx666
297 };
298
299 LOGFN(__FILE__, __LINE__, __FUNCTION__);
300 CHECK_XCB_CONN;
301
302 sbpp *= 8;
303
304 vis = (xcb_visualtype_t *)v;
305 n = vis->colormap_entries;
306 if ((n <= 256) &&
307 ((vis->_class == XCB_VISUAL_CLASS_PSEUDO_COLOR) ||
308 (vis->_class == XCB_VISUAL_CLASS_STATIC_COLOR) ||
309 (vis->_class == XCB_VISUAL_CLASS_GRAY_SCALE) ||
310 (vis->_class == XCB_VISUAL_CLASS_STATIC_GRAY)))
311 {
312 xcb_query_colors_cookie_t cookie;
313 xcb_query_colors_reply_t *reply;
314
315 if (!c)
316 {
317 c = (xcb_colormap_t)((xcb_screen_t *)
318 _ecore_xcb_screen)->default_colormap;
319 }
320
321 cols = alloca(n * sizeof(uint32_t));
322 for (i = 0; i < n; i++)
323 cols[i] = i;
324
325 cookie = xcb_query_colors_unchecked(_ecore_xcb_conn, c, n, cols);
326 reply = xcb_query_colors_reply(_ecore_xcb_conn, cookie, NULL);
327 if (reply)
328 {
329 xcb_rgb_iterator_t iter;
330 xcb_rgb_t *ret;
331
332 iter = xcb_query_colors_colors_iterator(reply);
333 ret = xcb_query_colors_colors(reply);
334 if (ret)
335 {
336 for (i = 0; iter.rem; xcb_rgb_next(&iter), i++)
337 {
338 pal[i] = 0xff000000 |
339 ((iter.data->red >> 8) << 16) |
340 ((iter.data->green >> 8) << 8) |
341 ((iter.data->blue >> 8));
342 }
343 nret = n;
344 }
345 free(reply);
346 }
347 }
348 else if ((vis->_class == XCB_VISUAL_CLASS_TRUE_COLOR) ||
349 (vis->_class == XCB_VISUAL_CLASS_DIRECT_COLOR))
350 {
351 if ((vis->red_mask == 0x00ff0000) &&
352 (vis->green_mask == 0x0000ff00) &&
353 (vis->blue_mask == 0x000000ff))
354 mode = argbx888;
355 else if ((vis->red_mask == 0x000000ff) &&
356 (vis->green_mask == 0x0000ff00) &&
357 (vis->blue_mask == 0x00ff0000))
358 mode = abgrx888;
359 else if ((vis->red_mask == 0xff000000) &&
360 (vis->green_mask == 0x00ff0000) &&
361 (vis->blue_mask == 0x0000ff00))
362 mode = rgba888x;
363 else if ((vis->red_mask == 0x0000ff00) &&
364 (vis->green_mask == 0x00ff0000) &&
365 (vis->blue_mask == 0xff000000))
366 mode = bgra888x;
367 else if ((vis->red_mask == 0x0003f000) &&
368 (vis->green_mask == 0x00000fc0) &&
369 (vis->blue_mask == 0x0000003f))
370 mode = argbx666;
371 else if ((vis->red_mask == 0x0000f800) &&
372 (vis->green_mask == 0x000007e0) &&
373 (vis->blue_mask == 0x0000001f))
374 mode = rgb565;
375 else if ((vis->red_mask == 0x0000001f) &&
376 (vis->green_mask == 0x000007e0) &&
377 (vis->blue_mask == 0x0000f800))
378 mode = bgr565;
379 else if ((vis->red_mask == 0x00007c00) &&
380 (vis->green_mask == 0x000003e0) &&
381 (vis->blue_mask == 0x0000001f))
382 mode = rgbx555;
383 else
384 return EINA_FALSE;
385 }
386 for (row = 0; row < h; row++)
387 {
388 unsigned char *s8;
389 unsigned short *s16;
390 unsigned int *s32, *dp, *de;
391
392 dp = ((unsigned int *)(((unsigned char *)dst) +
393 ((dy + row) * dbpl))) + dx;
394 de = dp + w;
395 switch (sbpp)
396 {
397 case 8:
398 s8 = ((unsigned char *)(((unsigned char *)src) +
399 ((y + row) * sbpl))) + x;
400 if (nret > 0)
401 {
402 while (dp < de)
403 {
404 *dp = pal[*s8];
405 s8++; dp++;
406 }
407 }
408 else
409 return EINA_FALSE;
410 break;
411
412 case 16:
413 s16 = ((unsigned short *)(((unsigned char *)src) +
414 ((y + row) * sbpl))) + x;
415 switch (mode)
416 {
417 case rgb565:
418 while (dp < de)
419 {
420 r = (*s16 & 0xf800) << 8;
421 g = (*s16 & 0x07e0) << 5;
422 b = (*s16 & 0x001f) << 3;
423 r |= (r >> 5) & 0xff0000;
424 g |= (g >> 6) & 0x00ff00;
425 b |= (b >> 5);
426 *dp = 0xff000000 | r | g | b;
427 s16++; dp++;
428 }
429 break;
430
431 case bgr565:
432 while (dp < de)
433 {
434 r = (*s16 & 0x001f) << 19;
435 g = (*s16 & 0x07e0) << 5;
436 b = (*s16 & 0xf800) >> 8;
437 r |= (r >> 5) & 0xff0000;
438 g |= (g >> 6) & 0x00ff00;
439 b |= (b >> 5);
440 *dp = 0xff000000 | r | g | b;
441 s16++; dp++;
442 }
443 break;
444
445 case rgbx555:
446 while (dp < de)
447 {
448 r = (*s16 & 0x7c00) << 9;
449 g = (*s16 & 0x03e0) << 6;
450 b = (*s16 & 0x001f) << 3;
451 r |= (r >> 5) & 0xff0000;
452 g |= (g >> 5) & 0x00ff00;
453 b |= (b >> 5);
454 *dp = 0xff000000 | r | g | b;
455 s16++; dp++;
456 }
457 break;
458
459 default:
460 return EINA_FALSE;
461 break;
462 }
463 break;
464
465 case 24:
466 case 32:
467 s32 = ((unsigned int *)(((unsigned char *)src) +
468 ((y + row) * sbpl))) + x;
469 switch (mode)
470 {
471 case argbx888:
472 while (dp < de)
473 {
474 *dp = 0xff000000 | *s32;
475 s32++; dp++;
476 }
477 break;
478
479 case abgrx888:
480 while (dp < de)
481 {
482 r = *s32 & 0x000000ff;
483 g = *s32 & 0x0000ff00;
484 b = *s32 & 0x00ff0000;
485 *dp = 0xff000000 | (r << 16) | (g) | (b >> 16);
486 s32++; dp++;
487 }
488 break;
489
490 case rgba888x:
491 while (dp < de)
492 {
493 *dp = 0xff000000 | (*s32 >> 8);
494 s32++; dp++;
495 }
496 break;
497
498 case bgra888x:
499 while (dp < de)
500 {
501 r = *s32 & 0x0000ff00;
502 g = *s32 & 0x00ff0000;
503 b = *s32 & 0xff000000;
504 *dp = 0xff000000 | (r << 8) | (g >> 8) | (b >> 24);
505 s32++; dp++;
506 }
507 break;
508
509 case argbx666:
510 while (dp < de)
511 {
512 r = (*s32 & 0x3f000) << 6;
513 g = (*s32 & 0x00fc0) << 4;
514 b = (*s32 & 0x0003f) << 2;
515 r |= (r >> 6) & 0xff0000;
516 g |= (g >> 6) & 0x00ff00;
517 b |= (b >> 6);
518 *dp = 0xff000000 | r | g | b;
519 s32++; dp++;
520 }
521 break;
522
523 default:
524 return EINA_FALSE;
525 break;
526 }
527 break;
528 break;
529
530 default:
531 return EINA_FALSE;
532 break;
533 }
534 }
535 return EINA_TRUE;
536}
537
538/* local functions */
539static void
540_ecore_xcb_image_shm_check(void)
541{
542// xcb_shm_query_version_reply_t *reply;
543 xcb_shm_segment_info_t shminfo;
544 xcb_shm_get_image_cookie_t cookie;
545 xcb_shm_get_image_reply_t *ireply;
546 xcb_image_t *img = 0;
547 uint8_t depth = 0;
548
549 if (_ecore_xcb_image_shm_can != -1) return;
550 CHECK_XCB_CONN;
551
552 /* reply = */
553 /* xcb_shm_query_version_reply(_ecore_xcb_conn, */
554 /* xcb_shm_query_version(_ecore_xcb_conn), NULL); */
555 /* if (!reply) */
556 /* { */
557 /* _ecore_xcb_image_shm_can = 0; */
558 /* return; */
559 /* } */
560
561 /* if ((reply->major_version < 1) || */
562 /* ((reply->major_version == 1) && (reply->minor_version == 0))) */
563 /* { */
564 /* _ecore_xcb_image_shm_can = 0; */
565 /* free(reply); */
566 /* return; */
567 /* } */
568
569 /* free(reply); */
570
571 depth = ((xcb_screen_t *)_ecore_xcb_screen)->root_depth;
572
573 ecore_x_sync(); // needed
574
575 img = _ecore_xcb_image_create_native(1, 1, XCB_IMAGE_FORMAT_Z_PIXMAP,
576 depth, NULL, ~0, NULL);
577 if (!img)
578 {
579 _ecore_xcb_image_shm_can = 0;
580 return;
581 }
582
583 shminfo.shmid =
584 shmget(IPC_PRIVATE, img->stride * img->height, (IPC_CREAT | 0666));
585 if (shminfo.shmid == (uint32_t)-1)
586 {
587 xcb_image_destroy(img);
588 _ecore_xcb_image_shm_can = 0;
589 return;
590 }
591
592 shminfo.shmaddr = shmat(shminfo.shmid, 0, 0);
593 img->data = shminfo.shmaddr;
594 if (img->data == (uint8_t *)-1)
595 {
596 xcb_image_destroy(img);
597 _ecore_xcb_image_shm_can = 0;
598 return;
599 }
600
601 shminfo.shmseg = xcb_generate_id(_ecore_xcb_conn);
602 xcb_shm_attach(_ecore_xcb_conn, shminfo.shmseg, shminfo.shmid, 0);
603
604 cookie =
605 xcb_shm_get_image(_ecore_xcb_conn,
606 ((xcb_screen_t *)_ecore_xcb_screen)->root,
607 0, 0, img->width, img->height,
608 0xffffffff, img->format,
609 shminfo.shmseg, img->data - shminfo.shmaddr);
610
611 ecore_x_sync(); // needed
612
613 ireply = xcb_shm_get_image_reply(_ecore_xcb_conn, cookie, NULL);
614 if (ireply)
615 {
616 _ecore_xcb_image_shm_can = 1;
617 free(ireply);
618 }
619 else
620 _ecore_xcb_image_shm_can = 0;
621
622 xcb_shm_detach(_ecore_xcb_conn, shminfo.shmseg);
623 xcb_image_destroy(img);
624 shmdt(shminfo.shmaddr);
625 shmctl(shminfo.shmid, IPC_RMID, 0);
626}
627
628static void
629_ecore_xcb_image_shm_create(Ecore_X_Image *im)
630{
631 CHECK_XCB_CONN;
632
633 im->xim =
634 _ecore_xcb_image_create_native(im->w, im->h, XCB_IMAGE_FORMAT_Z_PIXMAP,
635 im->depth, NULL, ~0, NULL);
636 if (!im->xim) return;
637
638 im->shminfo.shmid = shmget(IPC_PRIVATE, im->xim->size, (IPC_CREAT | 0666));
639 if (im->shminfo.shmid == (uint32_t)-1)
640 {
641 xcb_image_destroy(im->xim);
642 return;
643 }
644
645 im->shminfo.shmaddr = shmat(im->shminfo.shmid, 0, 0);
646 im->xim->data = im->shminfo.shmaddr;
647 if ((!im->xim->data) || (im->xim->data == (uint8_t *)-1))
648 {
649 DBG("Shm Create No Image Data");
650 xcb_image_destroy(im->xim);
651 shmdt(im->shminfo.shmaddr);
652 shmctl(im->shminfo.shmid, IPC_RMID, 0);
653 return;
654 }
655
656 im->shminfo.shmseg = xcb_generate_id(_ecore_xcb_conn);
657 xcb_shm_attach(_ecore_xcb_conn, im->shminfo.shmseg, im->shminfo.shmid, 0);
658
659 im->data = (unsigned char *)im->xim->data;
660 im->bpl = im->xim->stride;
661 im->rows = im->xim->height;
662 if (im->xim->bpp <= 8)
663 im->bpp = 1;
664 else if (im->xim->bpp <= 16)
665 im->bpp = 2;
666 else
667 im->bpp = 4;
668}
669
670xcb_image_t *
671_ecore_xcb_image_create_native(int w,
672 int h,
673 xcb_image_format_t format,
674 uint8_t depth,
675 void *base,
676 uint32_t bytes,
677 uint8_t *data)
678{
679 static uint8_t dpth = 0;
680 static xcb_format_t *fmt = NULL;
681 const xcb_setup_t *setup;
682 xcb_image_format_t xif;
683
684 CHECK_XCB_CONN;
685
686 /* NB: We cannot use xcb_image_create_native as it only creates images
687 * using MSB_FIRST, so this routine recreates that function and uses
688 * the endian-ness of the server setup */
689 setup = xcb_get_setup(_ecore_xcb_conn);
690 xif = format;
691
692 if ((xif == XCB_IMAGE_FORMAT_Z_PIXMAP) && (depth == 1))
693 xif = XCB_IMAGE_FORMAT_XY_PIXMAP;
694
695 if (dpth != depth)
696 {
697 dpth = depth;
698 fmt = _ecore_xcb_image_find_format(setup, depth);
699 if (!fmt) return 0;
700 }
701
702 switch (xif)
703 {
704 case XCB_IMAGE_FORMAT_XY_BITMAP:
705 if (depth != 1) return 0;
706
707 case XCB_IMAGE_FORMAT_XY_PIXMAP:
708 case XCB_IMAGE_FORMAT_Z_PIXMAP:
709 return xcb_image_create(w, h, xif,
710 fmt->scanline_pad,
711 fmt->depth, fmt->bits_per_pixel,
712 setup->bitmap_format_scanline_unit,
713 setup->image_byte_order,
714 setup->bitmap_format_bit_order,
715 base, bytes, data);
716
717 default:
718 break;
719 }
720
721 return 0;
722}
723
724static xcb_format_t *
725_ecore_xcb_image_find_format(const xcb_setup_t *setup,
726 uint8_t depth)
727{
728 xcb_format_t *fmt, *fmtend;
729
730 CHECK_XCB_CONN;
731
732 fmt = xcb_setup_pixmap_formats(setup);
733 fmtend = fmt + xcb_setup_pixmap_formats_length(setup);
734 for (; fmt != fmtend; ++fmt)
735 if (fmt->depth == depth)
736 return fmt;
737
738 return 0;
739}
740
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_input.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_input.c
deleted file mode 100644
index c0338c2..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_input.c
+++ /dev/null
@@ -1,274 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_XINPUT
3# include <xcb/xinput.h>
4# include <xcb/xcb_event.h>
5#endif
6
7/* FIXME: this is a guess. can't find defines for touch events in xcb libs
8 * online */
9/* these are not yet defined in xcb support for xi2 - so manually create */
10#ifndef XCB_INPUT_DEVICE_TOUCH_BEGIN
11#define XCB_INPUT_DEVICE_TOUCH_BEGIN 18
12#endif
13#ifndef XCB_INPUT_DEVICE_TOUCH_END
14#define XCB_INPUT_DEVICE_TOUCH_END 19
15#endif
16#ifndef XCB_INPUT_DEVICE_TOUCH_UPDATE
17#define XCB_INPUT_DEVICE_TOUCH_UPDATE 21
18#endif
19
20#ifndef XCB_INPUT_POINTER_EMULATED_MASK
21#define XCB_INPUT_POINTER_EMULATED_MASK (1 << 16)
22#endif
23
24/* local variables */
25static Eina_Bool _input_avail = EINA_FALSE;
26
27/* external variables */
28int _ecore_xcb_event_input = 0;
29
30void
31_ecore_xcb_input_init(void)
32{
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34
35#ifdef ECORE_XCB_XINPUT
36 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_input_id);
37#endif
38}
39
40void
41_ecore_xcb_input_finalize(void)
42{
43#ifdef ECORE_XCB_XINPUT
44 xcb_input_get_extension_version_cookie_t cookie;
45 xcb_input_get_extension_version_reply_t *reply;
46 char buff[128];
47#endif
48
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
50
51#ifdef ECORE_XCB_XINPUT
52 cookie =
53 xcb_input_get_extension_version_unchecked(_ecore_xcb_conn, 127, buff);
54 reply =
55 xcb_input_get_extension_version_reply(_ecore_xcb_conn, cookie, NULL);
56 if (reply)
57 {
58 _input_avail = EINA_TRUE;
59 free(reply);
60 }
61
62 if (_input_avail)
63 {
64 const xcb_query_extension_reply_t *ext_reply;
65
66 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_input_id);
67 if (ext_reply)
68 _ecore_xcb_event_input = ext_reply->first_event;
69 }
70#endif
71}
72
73void
74_ecore_xcb_input_shutdown(void)
75{
76 LOGFN(__FILE__, __LINE__, __FUNCTION__);
77}
78
79void
80#ifdef ECORE_XCB_XINPUT
81_ecore_xcb_input_handle_event(xcb_generic_event_t *event)
82#else
83_ecore_xcb_input_handle_event(xcb_generic_event_t * event __UNUSED__)
84#endif
85{
86#ifdef ECORE_XCB_XINPUT
87 xcb_ge_event_t *ev;
88#endif
89
90 LOGFN(__FILE__, __LINE__, __FUNCTION__);
91 CHECK_XCB_CONN;
92
93 /* FIXME: look at xlib ecore_x_xi2.c to copy logic in when i can find an
94 * xcb-input lib to test with */
95#ifdef ECORE_XCB_XINPUT
96 ev = (xcb_ge_event_t *)event;
97 switch (ev->event_type)
98 {
99 case XCB_INPUT_DEVICE_MOTION_NOTIFY:
100 {
101 xcb_input_device_motion_notify_event_t *de;
102 unsigned int child_win = 0;
103
104 de = (xcb_input_device_motion_notify_event_t *)ev->pad1;
105 child_win = (de->child ? de->child : de->event);
106 _ecore_xcb_event_mouse_move(de->time, de->state, de->event_x,
107 de->event_y, de->root_x, de->root_y,
108 de->event, child_win, de->root,
109 de->same_screen, de->device_id,
110 1, 1, 1.0, 0.0,
111 de->event_x, de->event_y,
112 de->root_x, de->root_y);
113 }
114 break;
115
116 case XCB_INPUT_DEVICE_BUTTON_PRESS:
117 {
118 xcb_input_device_button_press_event_t *de;
119 unsigned int child_win = 0;
120
121 de = (xcb_input_device_button_press_event_t *)ev->pad1;
122 child_win = (de->child ? de->child : de->event);
123 _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN,
124 de->time, de->state, de->detail,
125 de->event_x, de->event_y,
126 de->root_x, de->root_y, de->event,
127 child_win, de->root,
128 de->same_screen, de->device_id,
129 1, 1, 1.0, 0.0,
130 de->event_x, de->event_y,
131 de->root_x, de->root_y);
132 }
133 break;
134
135 case XCB_INPUT_DEVICE_BUTTON_RELEASE:
136 {
137 xcb_input_device_button_release_event_t *de;
138 unsigned int child_win = 0;
139
140 de = (xcb_input_device_button_release_event_t *)ev->pad1;
141 child_win = (de->child ? de->child : de->event);
142 _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_UP,
143 de->time, de->state, de->detail,
144 de->event_x, de->event_y,
145 de->root_x, de->root_y, de->event,
146 child_win, de->root,
147 de->same_screen, de->device_id,
148 1, 1, 1.0, 0.0,
149 de->event_x, de->event_y,
150 de->root_x, de->root_y);
151 }
152 break;
153
154 case XCB_INPUT_DEVICE_TOUCH_UPDATE:
155 {
156 xcb_input_device_motion_notify_event_t *de;
157 unsigned int child_win = 0;
158
159 de = (xcb_input_device_motion_notify_event_t *)ev->pad1;
160 child_win = (de->child ? de->child : de->event);
161 _ecore_xcb_event_mouse_move(de->time, de->state, de->event_x,
162 de->event_y, de->root_x, de->root_y,
163 de->event, child_win, de->root,
164 de->same_screen, de->device_id,
165 1, 1, 1.0, 0.0,
166 de->event_x, de->event_y,
167 de->root_x, de->root_y);
168 }
169 break;
170
171 case XCB_INPUT_DEVICE_TOUCH_BEGIN:
172 {
173 xcb_input_device_button_press_event_t *de;
174 unsigned int child_win = 0;
175
176 de = (xcb_input_device_button_press_event_t *)ev->pad1;
177 child_win = (de->child ? de->child : de->event);
178 _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN,
179 de->time, de->state, de->detail,
180 de->event_x, de->event_y,
181 de->root_x, de->root_y, de->event,
182 child_win, de->root,
183 de->same_screen, de->device_id,
184 1, 1, 1.0, 0.0,
185 de->event_x, de->event_y,
186 de->root_x, de->root_y);
187 }
188 break;
189
190 case XCB_INPUT_DEVICE_TOUCH_END:
191 {
192 xcb_input_device_button_release_event_t *de;
193 unsigned int child_win = 0;
194
195 de = (xcb_input_device_button_release_event_t *)ev->pad1;
196 child_win = (de->child ? de->child : de->event);
197 _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_UP,
198 de->time, de->state, de->detail,
199 de->event_x, de->event_y,
200 de->root_x, de->root_y, de->event,
201 child_win, de->root,
202 de->same_screen, de->device_id,
203 1, 1, 1.0, 0.0,
204 de->event_x, de->event_y,
205 de->root_x, de->root_y);
206 }
207 break;
208
209 default:
210 break;
211 }
212#endif
213}
214
215EAPI Eina_Bool
216ecore_x_input_multi_select(Ecore_X_Window win)
217{
218 Eina_Bool find = EINA_FALSE;
219#ifdef ECORE_XCB_XINPUT
220 xcb_input_list_input_devices_cookie_t dcookie;
221 xcb_input_list_input_devices_reply_t *dreply;
222 xcb_input_device_info_iterator_t diter;
223#endif
224
225 LOGFN(__FILE__, __LINE__, __FUNCTION__);
226 CHECK_XCB_CONN;
227
228 if (!_input_avail) return EINA_FALSE;
229
230 /* FIXME: i can't seemingly test this! no xcb input lib so can't look and
231 * test and look at types etc. - look at xlib code and copy logic over
232 * when we can */
233#ifdef ECORE_XCB_XINPUT
234 dcookie = xcb_input_list_input_devices_unchecked(_ecore_xcb_conn);
235 dreply =
236 xcb_input_list_input_devices_reply(_ecore_xcb_conn, dcookie, NULL);
237 if (!dreply) return EINA_FALSE;
238
239 diter = xcb_input_list_input_devices_devices_iterator(dreply);
240 while (diter.rem)
241 {
242 xcb_input_device_info_t *dev;
243 const xcb_input_event_class_t iclass[] =
244 {
245 XCB_INPUT_DEVICE_BUTTON_PRESS,
246 XCB_INPUT_DEVICE_BUTTON_RELEASE,
247 XCB_INPUT_DEVICE_MOTION_NOTIFY,
248 XCB_INPUT_DEVICE_TOUCH_BEGIN,
249 XCB_INPUT_DEVICE_TOUCH_END,
250 XCB_INPUT_DEVICE_TOUCH_UPDATE
251 };
252
253 dev = diter.data;
254 if (dev->device_use == XCB_INPUT_DEVICE_USE_IS_X_EXTENSION_DEVICE)
255 {
256 DBG("Device %d", dev->device_id);
257 DBG("\tType: %d", dev->device_type);
258 DBG("\tNum Classes: %d", dev->num_class_info);
259 DBG("\tUse: %d", dev->device_use);
260
261 xcb_input_select_extension_event(_ecore_xcb_conn, win,
262 sizeof(iclass) / sizeof(xcb_input_event_class_t),
263 iclass);
264 find = EINA_TRUE;
265 }
266 xcb_input_device_info_next(&diter);
267 }
268 free(dreply);
269#endif
270
271 return find;
272 win = 0;
273}
274
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c
deleted file mode 100644
index b1c7528..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c
+++ /dev/null
@@ -1,490 +0,0 @@
1#include "ecore_xcb_private.h"
2#define NEED_KEYSYM_TABLE
3#define NEED_VTABLE
4#include "ecore_xcb_keysym_table.h"
5#include <xcb/xcb_keysyms.h>
6#include <X11/keysym.h>
7
8/* local function prototypes */
9static int _ecore_xcb_keymap_mask_get(void *reply,
10 xcb_keysym_t sym);
11static xcb_keysym_t _ecore_xcb_keymap_string_to_keysym(const char *str);
12static int _ecore_xcb_keymap_translate_key(xcb_keycode_t keycode,
13 unsigned int modifiers,
14 unsigned int *modifiers_return,
15 xcb_keysym_t *keysym_return);
16static int _ecore_xcb_keymap_translate_keysym(xcb_keysym_t keysym,
17 unsigned int modifiers,
18 char *buffer,
19 int bytes);
20
21/* local variables */
22static xcb_key_symbols_t *_ecore_xcb_keysyms;
23static int _ecore_xcb_mode_switch = 0;
24
25/* public variables */
26EAPI int ECORE_X_MODIFIER_SHIFT = 0;
27EAPI int ECORE_X_MODIFIER_CTRL = 0;
28EAPI int ECORE_X_MODIFIER_ALT = 0;
29EAPI int ECORE_X_MODIFIER_WIN = 0;
30EAPI int ECORE_X_LOCK_SCROLL = 0;
31EAPI int ECORE_X_LOCK_NUM = 0;
32EAPI int ECORE_X_LOCK_CAPS = 0;
33EAPI int ECORE_X_LOCK_SHIFT = 0;
34
35void
36_ecore_xcb_keymap_init(void)
37{
38 LOGFN(__FILE__, __LINE__, __FUNCTION__);
39
40 _ecore_xcb_keysyms = xcb_key_symbols_alloc(_ecore_xcb_conn);
41}
42
43void
44_ecore_xcb_keymap_finalize(void)
45{
46 xcb_get_modifier_mapping_cookie_t cookie;
47 xcb_get_modifier_mapping_reply_t *reply;
48
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
50 CHECK_XCB_CONN;
51
52 cookie = xcb_get_modifier_mapping_unchecked(_ecore_xcb_conn);
53 reply = xcb_get_modifier_mapping_reply(_ecore_xcb_conn, cookie, NULL);
54 if (!reply)
55 {
56 xcb_key_symbols_free(_ecore_xcb_keysyms);
57 return;
58 }
59
60 _ecore_xcb_mode_switch = _ecore_xcb_keymap_mask_get(reply, XK_Mode_switch);
61
62 ECORE_X_MODIFIER_SHIFT = _ecore_xcb_keymap_mask_get(reply, XK_Shift_L);
63 ECORE_X_MODIFIER_CTRL = _ecore_xcb_keymap_mask_get(reply, XK_Control_L);
64
65 ECORE_X_MODIFIER_ALT = _ecore_xcb_keymap_mask_get(reply, XK_Alt_L);
66 if (!ECORE_X_MODIFIER_ALT)
67 ECORE_X_MODIFIER_ALT = _ecore_xcb_keymap_mask_get(reply, XK_Meta_L);
68 if (!ECORE_X_MODIFIER_ALT)
69 ECORE_X_MODIFIER_ALT = _ecore_xcb_keymap_mask_get(reply, XK_Super_L);
70
71 ECORE_X_MODIFIER_WIN = _ecore_xcb_keymap_mask_get(reply, XK_Super_L);
72 if (!ECORE_X_MODIFIER_WIN)
73 ECORE_X_MODIFIER_WIN = _ecore_xcb_keymap_mask_get(reply, XK_Mode_switch);
74 if (!ECORE_X_MODIFIER_WIN)
75 ECORE_X_MODIFIER_WIN = _ecore_xcb_keymap_mask_get(reply, XK_Meta_L);
76
77 if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT)
78 ECORE_X_MODIFIER_WIN = 0;
79 if (ECORE_X_MODIFIER_ALT == ECORE_X_MODIFIER_CTRL)
80 ECORE_X_MODIFIER_ALT = 0;
81
82 ECORE_X_LOCK_SCROLL = _ecore_xcb_keymap_mask_get(reply, XK_Scroll_Lock);
83 ECORE_X_LOCK_NUM = _ecore_xcb_keymap_mask_get(reply, XK_Num_Lock);
84 ECORE_X_LOCK_CAPS = _ecore_xcb_keymap_mask_get(reply, XK_Caps_Lock);
85 ECORE_X_LOCK_SHIFT = _ecore_xcb_keymap_mask_get(reply, XK_Shift_Lock);
86}
87
88void
89_ecore_xcb_modifiers_get(void)
90{
91 _ecore_xcb_keymap_finalize();
92}
93
94void
95_ecore_xcb_keymap_shutdown(void)
96{
97 LOGFN(__FILE__, __LINE__, __FUNCTION__);
98
99 if (_ecore_xcb_keysyms) xcb_key_symbols_free(_ecore_xcb_keysyms);
100}
101
102void
103_ecore_xcb_keymap_refresh(xcb_mapping_notify_event_t *event)
104{
105 CHECK_XCB_CONN;
106 xcb_refresh_keyboard_mapping(_ecore_xcb_keysyms, event);
107}
108
109xcb_keysym_t
110_ecore_xcb_keymap_keycode_to_keysym(xcb_keycode_t keycode,
111 int col)
112{
113 xcb_keysym_t key0, key1;
114
115 CHECK_XCB_CONN;
116 if (col & _ecore_xcb_mode_switch)
117 {
118 key0 = xcb_key_symbols_get_keysym(_ecore_xcb_keysyms, keycode, 4);
119 key1 = xcb_key_symbols_get_keysym(_ecore_xcb_keysyms, keycode, 5);
120 }
121 else
122 {
123 key0 = xcb_key_symbols_get_keysym(_ecore_xcb_keysyms, keycode, 0);
124 key1 = xcb_key_symbols_get_keysym(_ecore_xcb_keysyms, keycode, 1);
125 }
126
127 if (key1 == XCB_NO_SYMBOL)
128 key1 = key0;
129
130 if ((col & ECORE_X_LOCK_NUM) &&
131 ((xcb_is_keypad_key(key1)) || (xcb_is_private_keypad_key(key1))))
132 {
133 if ((col & XCB_MOD_MASK_SHIFT) ||
134 ((col & XCB_MOD_MASK_LOCK) && (col & ECORE_X_LOCK_SHIFT)))
135 return key0;
136 else
137 return key1;
138 }
139 else if (!(col & XCB_MOD_MASK_SHIFT) && !(col & XCB_MOD_MASK_LOCK))
140 return key0;
141 else if (!(col & XCB_MOD_MASK_SHIFT) &&
142 (col & XCB_MOD_MASK_LOCK && (col & ECORE_X_LOCK_CAPS)))
143 return key1;
144 else if ((col & XCB_MOD_MASK_SHIFT) &&
145 (col & XCB_MOD_MASK_LOCK) && (col & ECORE_X_LOCK_CAPS))
146 return key0;
147 else if ((col & XCB_MOD_MASK_SHIFT) ||
148 (col & XCB_MOD_MASK_LOCK && (col & ECORE_X_LOCK_SHIFT)))
149 return key1;
150
151 return XCB_NO_SYMBOL;
152}
153
154xcb_keycode_t *
155_ecore_xcb_keymap_keysym_to_keycode(xcb_keysym_t keysym)
156{
157 CHECK_XCB_CONN;
158 return xcb_key_symbols_get_keycode(_ecore_xcb_keysyms, keysym);
159}
160
161char *
162_ecore_xcb_keymap_keysym_to_string(xcb_keysym_t keysym)
163{
164 int i = 0, n = 0, h = 0, idx = 0;
165 const unsigned char *entry;
166 unsigned char val1, val2, val3, val4;
167
168 CHECK_XCB_CONN;
169 if (!keysym) return NULL;
170 if (keysym == XK_VoidSymbol) keysym = 0;
171 if (keysym <= 0x1fffffff)
172 {
173 val1 = (keysym >> 24);
174 val2 = ((keysym >> 16) & 0xff);
175 val3 = ((keysym >> 8) & 0xff);
176 val4 = (keysym & 0xff);
177 i = keysym % VTABLESIZE;
178 h = i + 1;
179 n = VMAXHASH;
180 while ((idx = hashKeysym[i]))
181 {
182 entry = &_ecore_xcb_keytable[idx];
183 if ((entry[0] == val1) && (entry[1] == val2) &&
184 (entry[2] == val3) && (entry[3] == val4))
185 return (char *)entry + 4;
186 if (!--n) break;
187 i += h;
188 if (i >= VTABLESIZE) i -= VTABLESIZE;
189 }
190 }
191
192 if ((keysym >= 0x01000100) && (keysym <= 0x0110ffff))
193 {
194 xcb_keysym_t val;
195 char *s = NULL;
196 int i = 0;
197
198 val = (keysym & 0xffffff);
199 if (val & 0xff0000)
200 i = 10;
201 else
202 i = 6;
203
204 if (!(s = malloc(i))) return NULL;
205 i--;
206 s[i--] = '\0';
207 for (; i; i--)
208 {
209 val1 = (val & 0xf);
210 val >>= 4;
211 if (val1 < 10)
212 s[i] = '0' + val1;
213 else
214 s[i] = 'A' + val1 - 10;
215 }
216 s[i] = 'U';
217 return s;
218 }
219
220 return NULL;
221}
222
223xcb_keycode_t
224_ecore_xcb_keymap_string_to_keycode(const char *key)
225{
226 if (!strncmp(key, "Keycode-", 8))
227 return atoi(key + 8);
228 else
229 {
230 xcb_keysym_t keysym = XCB_NO_SYMBOL;
231 xcb_keycode_t *keycodes, keycode = 0;
232 int i = 0;
233
234 CHECK_XCB_CONN;
235
236 keysym = _ecore_xcb_keymap_string_to_keysym(key);
237 if (keysym == XCB_NO_SYMBOL) return XCB_NO_SYMBOL;
238
239 keycodes = _ecore_xcb_keymap_keysym_to_keycode(keysym);
240 if (!keycodes) return XCB_NO_SYMBOL;
241
242 while (keycodes[i] != XCB_NO_SYMBOL)
243 {
244 if (keycodes[i] != 0)
245 {
246 keycode = keycodes[i];
247 break;
248 }
249 i++;
250 }
251 return keycode;
252 }
253}
254
255int
256_ecore_xcb_keymap_lookup_string(xcb_keycode_t keycode,
257 int state,
258 char *buffer,
259 int bytes,
260 xcb_keysym_t *sym)
261{
262 unsigned int modifiers = 0;
263 xcb_keysym_t keysym;
264
265 CHECK_XCB_CONN;
266 if (!_ecore_xcb_keymap_translate_key(keycode, state, &modifiers, &keysym))
267 return 0;
268
269 if (sym) *sym = keysym;
270
271 return _ecore_xcb_keymap_translate_keysym(keysym, state, buffer, bytes);
272}
273
274EAPI const char *
275ecore_x_keysym_string_get(int keysym)
276{
277 LOGFN(__FILE__, __LINE__, __FUNCTION__);
278
279 return _ecore_xcb_keymap_keysym_to_string(keysym);
280}
281
282EAPI int
283ecore_x_keysym_keycode_get(const char *keyname)
284{
285 LOGFN(__FILE__, __LINE__, __FUNCTION__);
286
287 return _ecore_xcb_keymap_string_to_keycode(keyname);
288}
289
290/* local functions */
291static int
292_ecore_xcb_keymap_mask_get(void *reply,
293 xcb_keysym_t sym)
294{
295 xcb_get_modifier_mapping_reply_t *rep;
296 xcb_keysym_t sym2;
297 int mask = 0;
298 const int masks[8] =
299 {
300 XCB_MOD_MASK_SHIFT, XCB_MOD_MASK_LOCK, XCB_MOD_MASK_CONTROL,
301 XCB_MOD_MASK_1, XCB_MOD_MASK_2, XCB_MOD_MASK_3, XCB_MOD_MASK_4,
302 XCB_MOD_MASK_5
303 };
304
305 LOGFN(__FILE__, __LINE__, __FUNCTION__);
306 CHECK_XCB_CONN;
307
308 rep = (xcb_get_modifier_mapping_reply_t *)reply;
309 if ((rep) && (rep->keycodes_per_modifier > 0))
310 {
311 int i = 0;
312 xcb_keycode_t *modmap;
313
314 modmap = xcb_get_modifier_mapping_keycodes(rep);
315 for (i = 0; i < (8 * rep->keycodes_per_modifier); i++)
316 {
317 int j = 0;
318
319 for (j = 0; j < 8; j++)
320 {
321 sym2 =
322 xcb_key_symbols_get_keysym(_ecore_xcb_keysyms,
323 modmap[i], j);
324 if (sym2 != 0) break;
325 }
326 if (sym2 == sym)
327 {
328 mask = masks[i / rep->keycodes_per_modifier];
329 break;
330 }
331 }
332 }
333
334 return mask;
335}
336
337static xcb_keysym_t
338_ecore_xcb_keymap_string_to_keysym(const char *str)
339{
340 int i = 0, n = 0, h = 0;
341 unsigned long sig = 0;
342 const char *p = NULL;
343 int c = 0, idx = 0;
344 const unsigned char *entry;
345 unsigned char sig1, sig2;
346 long unsigned int val;
347
348 p = str;
349 while ((c = *p++))
350 sig = (sig << 1) + c;
351
352 i = (sig % KTABLESIZE);
353 h = i + 1;
354 sig1 = (sig >> 8) & 0xff;
355 sig2 = sig & 0xff;
356 n = KMAXHASH;
357
358 while ((idx = hashString[i]))
359 {
360 entry = &_ecore_xcb_keytable[idx];
361 if ((entry[0] == sig1) && (entry[1] == sig2) &&
362 !strcmp(str, (char *)entry + 6))
363 {
364 val = ((entry[2] << 24) | (entry[3] << 16) |
365 (entry[4] << 8) | (entry[5]));
366 if (!val) val = 0xffffff;
367 return val;
368 }
369 if (!--n) break;
370 i += h;
371 if (i >= KTABLESIZE) i -= KTABLESIZE;
372 }
373
374 if (*str == 'U')
375 {
376 val = 0;
377 for (p = &str[1]; *p; p++)
378 {
379 c = *p;
380 if (('0' <= c) && (c <= '9'))
381 val = (val << 4) + c - '0';
382 else if (('a' <= c) && (c <= 'f'))
383 val = (val << 4) + c - 'a' + 10;
384 else if (('A' <= c) && (c <= 'F'))
385 val = (val << 4) + c - 'A' + 10;
386 else
387 return XCB_NO_SYMBOL;
388 if (val > 0x10ffff) return XCB_NO_SYMBOL;
389 }
390 if ((val < 0x20) || ((val > 0x7e) && (val < 0xa0)))
391 return XCB_NO_SYMBOL;
392 if (val < 0x100) return val;
393 return val | 0x01000000;
394 }
395
396 if ((strlen(str) > 2) && (str[0] == '0') && (str[1] == 'x'))
397 {
398 char *tmp = NULL;
399
400 val = strtoul(str, &tmp, 16);
401 if ((val == ULONG_MAX) || ((tmp) && (*tmp != '\0')))
402 return XCB_NO_SYMBOL;
403 else
404 return val;
405 }
406
407 if (!strncmp(str, "XF86_", 5))
408 {
409 long unsigned int ret;
410 char *tmp;
411
412 tmp = strdup(str);
413 if (!tmp) return XCB_NO_SYMBOL;
414 memmove(&tmp[4], &tmp[5], strlen(str) - 5 + 1);
415 ret = _ecore_xcb_keymap_string_to_keysym(tmp);
416 free(tmp);
417 return ret;
418 }
419
420 return XCB_NO_SYMBOL;
421}
422
423static int
424_ecore_xcb_keymap_translate_key(xcb_keycode_t keycode,
425 unsigned int modifiers,
426 unsigned int *modifiers_return,
427 xcb_keysym_t *keysym_return)
428{
429 xcb_keysym_t sym;
430
431 if (!_ecore_xcb_keysyms) return 0;
432
433 sym = _ecore_xcb_keymap_keycode_to_keysym(keycode, modifiers);
434
435 if (modifiers_return)
436 *modifiers_return = ((XCB_MOD_MASK_SHIFT | XCB_MOD_MASK_LOCK) |
437 _ecore_xcb_mode_switch | ECORE_X_LOCK_NUM);
438 if (keysym_return)
439 *keysym_return = sym;
440
441 return 1;
442}
443
444static int
445_ecore_xcb_keymap_translate_keysym(xcb_keysym_t keysym,
446 unsigned int modifiers,
447 char *buffer,
448 int bytes)
449{
450 unsigned long hbytes = 0;
451 unsigned char c;
452
453 if (!keysym) return 0;
454 hbytes = (keysym >> 8);
455
456 if (!(bytes &&
457 ((hbytes == 0) ||
458 ((hbytes == 0xFF) &&
459 (((keysym >= XK_BackSpace) && (keysym <= XK_Clear)) ||
460 (keysym == XK_Return) || (keysym == XK_Escape) ||
461 (keysym == XK_KP_Space) || (keysym == XK_KP_Tab) ||
462 (keysym == XK_KP_Enter) ||
463 ((keysym >= XK_KP_Multiply) && (keysym <= XK_KP_9)) ||
464 (keysym == XK_KP_Equal) || (keysym == XK_Delete))))))
465 return 0;
466
467 if (keysym == XK_KP_Space)
468 c = (XK_space & 0x7F);
469 else if (hbytes == 0xFF)
470 c = (keysym & 0x7F);
471 else
472 c = (keysym & 0xFF);
473
474 if (modifiers & ECORE_X_MODIFIER_CTRL)
475 {
476 if (((c >= '@') && (c < '\177')) || c == ' ')
477 c &= 0x1F;
478 else if (c == '2')
479 c = '\000';
480 else if ((c >= '3') && (c <= '7'))
481 c -= ('3' - '\033');
482 else if (c == '8')
483 c = '\177';
484 else if (c == '/')
485 c = '_' & 0x1F;
486 }
487 buffer[0] = c;
488 return 1;
489}
490
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_mwm.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_mwm.c
deleted file mode 100644
index 6c95331..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_mwm.c
+++ /dev/null
@@ -1,104 +0,0 @@
1#include "ecore_xcb_private.h"
2//#include "Ecore_X_Atoms.h"
3
4#define ECORE_X_MWM_HINTS_FUNCTIONS (1 << 0)
5#define ECORE_X_MWM_HINTS_DECORATIONS (1 << 1)
6#define ECORE_X_MWM_HINTS_INPUT_MODE (1 << 2)
7#define ECORE_X_MWM_HINTS_STATUS (1 << 3)
8
9typedef struct _mwmhints
10{
11 uint32_t flags;
12 uint32_t functions;
13 uint32_t decorations;
14 int32_t inputmode;
15 uint32_t status;
16} MWMHints;
17
18/**
19 * @defgroup Ecore_X_MWM_Group MWM related functions.
20 *
21 * Functions related to MWM.
22 */
23
24/**
25 * Sets the borderless flag of a window using MWM.
26 *
27 * @param win The window.
28 * @param borderless The borderless flag.
29 *
30 * @ingroup Ecore_X_MWM_Group
31 */
32EAPI void
33ecore_x_mwm_borderless_set(Ecore_X_Window win,
34 Eina_Bool borderless)
35{
36 uint32_t data[5] = { 0, 0, 0, 0, 0 };
37
38 LOGFN(__FILE__, __LINE__, __FUNCTION__);
39
40 data[0] = 2;
41 data[2] = !borderless;
42
43 ecore_x_window_prop_property_set(win,
44 ECORE_X_ATOM_MOTIF_WM_HINTS,
45 ECORE_X_ATOM_MOTIF_WM_HINTS, 32,
46 (void *)data, 5);
47}
48
49EAPI Eina_Bool
50ecore_x_mwm_hints_get(Ecore_X_Window win,
51 Ecore_X_MWM_Hint_Func *fhint,
52 Ecore_X_MWM_Hint_Decor *dhint,
53 Ecore_X_MWM_Hint_Input *ihint)
54{
55 xcb_get_property_cookie_t cookie;
56 xcb_get_property_reply_t *reply;
57 MWMHints *mwmhints = NULL;
58 int ret = EINA_FALSE;
59
60 LOGFN(__FILE__, __LINE__, __FUNCTION__);
61 CHECK_XCB_CONN;
62
63 cookie =
64 xcb_get_property_unchecked(_ecore_xcb_conn, 0, win,
65 ECORE_X_ATOM_MOTIF_WM_HINTS,
66 ECORE_X_ATOM_MOTIF_WM_HINTS, 0, UINT_MAX);
67 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
68 if (!reply) return EINA_FALSE;
69 if ((reply->format != 32) || (reply->value_len == 0))
70 {
71 free(reply);
72 return EINA_FALSE;
73 }
74
75 mwmhints = xcb_get_property_value(reply);
76 if (reply->value_len >= 4)
77 {
78 if (dhint)
79 {
80 if (mwmhints->flags & ECORE_X_MWM_HINTS_DECORATIONS)
81 *dhint = mwmhints->decorations;
82 else
83 *dhint = ECORE_X_MWM_HINT_DECOR_ALL;
84 }
85 if (fhint)
86 {
87 if (mwmhints->flags & ECORE_X_MWM_HINTS_FUNCTIONS)
88 *fhint = mwmhints->functions;
89 else
90 *fhint = ECORE_X_MWM_HINT_FUNC_ALL;
91 }
92 if (ihint)
93 {
94 if (mwmhints->flags & ECORE_X_MWM_HINTS_INPUT_MODE)
95 *ihint = mwmhints->inputmode;
96 else
97 *ihint = ECORE_X_MWM_HINT_INPUT_MODELESS;
98 }
99 ret = EINA_TRUE;
100 }
101 free(reply);
102 return ret;
103}
104
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c
deleted file mode 100644
index b1e0622..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c
+++ /dev/null
@@ -1,1575 +0,0 @@
1#include "ecore_xcb_private.h"
2
3/* local function prototypes */
4/* static void _ecore_xcb_netwm_startup_info_free(void *data); */
5static Ecore_X_Atom _ecore_xcb_netwm_window_type_atom_get(Ecore_X_Window_Type type);
6static Ecore_X_Window_Type _ecore_xcb_netwm_window_type_type_get(Ecore_X_Atom atom);
7static Ecore_X_Atom _ecore_xcb_netwm_window_state_atom_get(Ecore_X_Window_State state);
8static Ecore_X_Atom _ecore_xcb_netwm_action_atom_get(Ecore_X_Action action);
9
10/* local variables */
11//static Eina_Hash *_startup_info = NULL;
12
13/* local structures */
14typedef struct _Ecore_Xcb_Startup_Info Ecore_Xcb_Startup_Info;
15struct _Ecore_Xcb_Startup_Info
16{
17 Ecore_X_Window win;
18 int init, size;
19 char *buffer;
20 int length;
21
22 /* sequence info fields */
23 char *id, *name;
24 int screen;
25 char *bin, *icon;
26 int desktop, timestamp;
27 char *description, *wmclass;
28 int silent;
29};
30
31EAPI void
32ecore_x_netwm_init(void)
33{
34 LOGFN(__FILE__, __LINE__, __FUNCTION__);
35
36// _startup_info =
37// eina_hash_string_superfast_new(_ecore_xcb_netwm_startup_info_free);
38}
39
40EAPI void
41ecore_x_netwm_shutdown(void)
42{
43 LOGFN(__FILE__, __LINE__, __FUNCTION__);
44
45// if (_startup_info) eina_hash_free(_startup_info);
46// _startup_info = NULL;
47}
48
49EAPI Eina_Bool
50ecore_x_netwm_pid_get(Ecore_X_Window win,
51 int *pid)
52{
53 uint32_t tmp;
54
55 LOGFN(__FILE__, __LINE__, __FUNCTION__);
56
57 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_PID, &tmp, 1))
58 return EINA_FALSE;
59
60 if (pid) *pid = tmp;
61
62 return EINA_TRUE;
63}
64
65EAPI void
66ecore_x_netwm_pid_set(Ecore_X_Window win,
67 int pid)
68{
69 unsigned int tmp;
70
71 LOGFN(__FILE__, __LINE__, __FUNCTION__);
72
73 tmp = pid;
74 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_PID, &tmp, 1);
75}
76
77EAPI Eina_Bool
78ecore_x_netwm_window_type_get(Ecore_X_Window win,
79 Ecore_X_Window_Type *type)
80{
81 Ecore_X_Atom *atoms;
82 int num = 0;
83
84 LOGFN(__FILE__, __LINE__, __FUNCTION__);
85
86 if (type) *type = ECORE_X_WINDOW_TYPE_NORMAL;
87
88 num =
89 ecore_x_window_prop_atom_list_get(win,
90 ECORE_X_ATOM_NET_WM_WINDOW_TYPE, &atoms);
91 if ((type) && (num >= 1) && (atoms))
92 *type = _ecore_xcb_netwm_window_type_type_get(atoms[0]);
93
94 if (atoms) free(atoms);
95
96 if (num >= 1) return EINA_TRUE;
97 return EINA_FALSE;
98}
99
100EAPI void
101ecore_x_netwm_window_type_set(Ecore_X_Window win,
102 Ecore_X_Window_Type type)
103{
104 Ecore_X_Atom atom;
105
106 LOGFN(__FILE__, __LINE__, __FUNCTION__);
107
108 atom = _ecore_xcb_netwm_window_type_atom_get(type);
109 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE, &atom, 1);
110}
111
112EAPI int
113ecore_x_netwm_window_types_get(Ecore_X_Window win,
114 Ecore_X_Window_Type **types)
115{
116 int num = 0, i = 0;
117 Ecore_X_Atom *atoms = NULL;
118 Ecore_X_Window_Type *atoms2 = NULL;
119
120 LOGFN(__FILE__, __LINE__, __FUNCTION__);
121
122 if (types) *types = NULL;
123 num =
124 ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
125 &atoms);
126 if ((num <= 0) || (!atoms))
127 {
128 if (atoms) free(atoms);
129 return 0;
130 }
131
132 atoms2 = malloc(num * sizeof(Ecore_X_Window_Type));
133 if (!atoms2)
134 {
135 if (atoms) free(atoms);
136 return 0;
137 }
138
139 for (i = 0; i < num; i++)
140 atoms2[i] = _ecore_xcb_netwm_window_type_type_get(atoms[i]);
141 if (atoms) free(atoms);
142
143 if (types)
144 *types = atoms2;
145 else
146 free(atoms2);
147
148 return num;
149}
150
151EAPI int
152ecore_x_netwm_name_get(Ecore_X_Window win,
153 char **name)
154{
155 LOGFN(__FILE__, __LINE__, __FUNCTION__);
156
157 if (name)
158 *name = ecore_x_window_prop_string_get(win, ECORE_X_ATOM_NET_WM_NAME);
159 return 1;
160}
161
162EAPI void
163ecore_x_netwm_name_set(Ecore_X_Window win,
164 const char *name)
165{
166 LOGFN(__FILE__, __LINE__, __FUNCTION__);
167
168 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_NET_WM_NAME, name);
169}
170
171EAPI void
172ecore_x_netwm_opacity_set(Ecore_X_Window win,
173 unsigned int opacity)
174{
175 LOGFN(__FILE__, __LINE__, __FUNCTION__);
176
177 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
178 &opacity, 1);
179}
180
181EAPI Eina_Bool
182ecore_x_netwm_opacity_get(Ecore_X_Window win,
183 unsigned int *opacity)
184{
185 unsigned int tmp = 0;
186
187 LOGFN(__FILE__, __LINE__, __FUNCTION__);
188
189 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
190 &tmp, 1))
191 return EINA_FALSE;
192
193 if (opacity) *opacity = tmp;
194
195 return EINA_TRUE;
196}
197
198EAPI void
199ecore_x_netwm_wm_identify(Ecore_X_Window root,
200 Ecore_X_Window check,
201 const char *wm_name)
202{
203 LOGFN(__FILE__, __LINE__, __FUNCTION__);
204
205 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
206 &check, 1);
207 ecore_x_window_prop_window_set(check, ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
208 &check, 1);
209 ecore_x_window_prop_string_set(check, ECORE_X_ATOM_NET_WM_NAME, wm_name);
210 ecore_x_window_prop_string_set(root, ECORE_X_ATOM_NET_WM_NAME, wm_name);
211}
212
213EAPI void
214ecore_x_netwm_supported_set(Ecore_X_Window root,
215 Ecore_X_Atom *supported,
216 int num)
217{
218 LOGFN(__FILE__, __LINE__, __FUNCTION__);
219
220 ecore_x_window_prop_atom_set(root, ECORE_X_ATOM_NET_SUPPORTED,
221 supported, num);
222}
223
224EAPI Eina_Bool
225ecore_x_netwm_supported_get(Ecore_X_Window root,
226 Ecore_X_Atom **supported,
227 int *num)
228{
229 int num_ret = 0;
230
231 LOGFN(__FILE__, __LINE__, __FUNCTION__);
232
233 if (num) *num = 0;
234 if (supported) *supported = NULL;
235
236 num_ret =
237 ecore_x_window_prop_atom_list_get(root, ECORE_X_ATOM_NET_SUPPORTED,
238 supported);
239 if (num_ret <= 0) return EINA_FALSE;
240 if (num) *num = num_ret;
241
242 return EINA_TRUE;
243}
244
245EAPI void
246ecore_x_netwm_desk_count_set(Ecore_X_Window root,
247 unsigned int n_desks)
248{
249 LOGFN(__FILE__, __LINE__, __FUNCTION__);
250
251 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS,
252 &n_desks, 1);
253}
254
255EAPI void
256ecore_x_netwm_desk_roots_set(Ecore_X_Window root,
257 Ecore_X_Window *vroots,
258 unsigned int n_desks)
259{
260 LOGFN(__FILE__, __LINE__, __FUNCTION__);
261
262 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_VIRTUAL_ROOTS,
263 vroots, n_desks);
264}
265
266EAPI void
267ecore_x_netwm_desk_names_set(Ecore_X_Window root,
268 const char **names,
269 unsigned int n_desks)
270{
271 char ss[32], *buf = NULL, *t = NULL;
272 const char *s;
273 uint32_t len = 0, i, l;
274
275 LOGFN(__FILE__, __LINE__, __FUNCTION__);
276 CHECK_XCB_CONN;
277
278 for (i = 0; i < n_desks; i++)
279 {
280 s = ((names) ? names[i] : NULL);
281 if (!s)
282 {
283 /* Default to "Desk-<number>" */
284 sprintf(ss, "Desk-%d", i);
285 s = ss;
286 }
287
288 l = strlen(s) + 1;
289 t = realloc(buf, len + 1);
290 if (t)
291 {
292 buf = t;
293 memcpy(buf + len, s, l);
294 }
295 len += l;
296 }
297
298 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, root,
299 ECORE_X_ATOM_NET_DESKTOP_NAMES,
300 ECORE_X_ATOM_UTF8_STRING, 8, len, (const void *)buf);
301// ecore_x_flush();
302 free(buf);
303}
304
305EAPI void
306ecore_x_netwm_desk_size_set(Ecore_X_Window root,
307 unsigned int width,
308 unsigned int height)
309{
310 uint32_t size[2];
311
312 LOGFN(__FILE__, __LINE__, __FUNCTION__);
313
314 size[0] = width;
315 size[1] = height;
316 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_GEOMETRY,
317 size, 2);
318}
319
320EAPI void
321ecore_x_netwm_desk_viewports_set(Ecore_X_Window root,
322 unsigned int *origins,
323 unsigned int n_desks)
324{
325 LOGFN(__FILE__, __LINE__, __FUNCTION__);
326
327 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_VIEWPORT,
328 origins, (2 * n_desks));
329}
330
331EAPI void
332ecore_x_netwm_desk_layout_set(Ecore_X_Window root,
333 int orientation,
334 int columns,
335 int rows,
336 int starting_corner)
337{
338 unsigned int layout[4];
339
340 LOGFN(__FILE__, __LINE__, __FUNCTION__);
341
342 layout[0] = orientation;
343 layout[1] = columns;
344 layout[2] = rows;
345 layout[3] = starting_corner;
346 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_LAYOUT,
347 layout, 4);
348}
349
350EAPI void
351ecore_x_netwm_desk_workareas_set(Ecore_X_Window root,
352 unsigned int *areas,
353 unsigned int n_desks)
354{
355 LOGFN(__FILE__, __LINE__, __FUNCTION__);
356
357 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_WORKAREA, areas,
358 4 * n_desks);
359}
360
361EAPI unsigned int *
362ecore_x_netwm_desk_workareas_get(Ecore_X_Window root, unsigned int *n_desks)
363{
364 int ret;
365 unsigned int *areas = NULL;
366
367 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
368
369 ret = ecore_x_window_prop_card32_list_get(root, ECORE_X_ATOM_NET_WORKAREA,
370 &areas);
371 if (!areas)
372 {
373 if (n_desks) *n_desks = 0;
374 return 0;
375 }
376 if (n_desks) *n_desks = ret / 4;
377 return areas;
378}
379
380EAPI void
381ecore_x_netwm_desk_current_set(Ecore_X_Window root,
382 unsigned int desk)
383{
384 LOGFN(__FILE__, __LINE__, __FUNCTION__);
385
386 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_CURRENT_DESKTOP,
387 &desk, 1);
388}
389
390EAPI void
391ecore_x_netwm_showing_desktop_set(Ecore_X_Window root,
392 Eina_Bool on)
393{
394 unsigned int val = 0;
395
396 LOGFN(__FILE__, __LINE__, __FUNCTION__);
397
398 val = ((on) ? 1 : 0);
399 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_SHOWING_DESKTOP,
400 &val, 1);
401}
402
403EAPI int
404ecore_x_netwm_startup_id_get(Ecore_X_Window win,
405 char **id)
406{
407 LOGFN(__FILE__, __LINE__, __FUNCTION__);
408
409 if (id)
410 {
411 *id =
412 ecore_x_window_prop_string_get(win, ECORE_X_ATOM_NET_STARTUP_ID);
413 }
414
415 return 1;
416}
417
418EAPI void
419ecore_x_netwm_startup_id_set(Ecore_X_Window win,
420 const char *id)
421{
422 LOGFN(__FILE__, __LINE__, __FUNCTION__);
423
424 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_NET_STARTUP_ID, id);
425}
426
427EAPI void
428ecore_x_netwm_state_request_send(Ecore_X_Window win,
429 Ecore_X_Window root,
430 Ecore_X_Window_State s1,
431 Ecore_X_Window_State s2,
432 Eina_Bool set)
433{
434 xcb_client_message_event_t ev;
435
436 LOGFN(__FILE__, __LINE__, __FUNCTION__);
437 CHECK_XCB_CONN;
438
439 if (!win) return;
440 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
441
442 ev.response_type = XCB_CLIENT_MESSAGE;
443 ev.format = 32;
444 ev.window = win;
445 ev.type = ECORE_X_ATOM_NET_WM_STATE;
446 ev.data.data32[0] = !!set;
447 ev.data.data32[1] = _ecore_xcb_netwm_window_state_atom_get(s1);
448 ev.data.data32[2] = _ecore_xcb_netwm_window_state_atom_get(s2);
449 /* 1 == normal client, if used in a pager this should be 2 */
450 ev.data.data32[3] = 1;
451 ev.data.data32[4] = 0;
452
453 xcb_send_event(_ecore_xcb_conn, 0, root,
454 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
455 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
456// ecore_x_flush();
457}
458
459EAPI void
460ecore_x_netwm_window_state_set(Ecore_X_Window win,
461 Ecore_X_Window_State *state,
462 unsigned int num)
463{
464 Ecore_X_Atom *set;
465 unsigned int i = 0;
466
467 LOGFN(__FILE__, __LINE__, __FUNCTION__);
468
469 if (!num)
470 {
471 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_NET_WM_STATE);
472 return;
473 }
474
475 set = malloc(num * sizeof(Ecore_X_Atom));
476 if (!set) return;
477
478 for (i = 0; i < num; i++)
479 set[i] = _ecore_xcb_netwm_window_state_atom_get(state[i]);
480
481 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_STATE, set, num);
482 free(set);
483}
484
485EAPI Eina_Bool
486ecore_x_netwm_window_state_get(Ecore_X_Window win,
487 Ecore_X_Window_State **state,
488 unsigned int *num)
489{
490 Ecore_X_Atom *atoms;
491 int ret = 0;
492
493 LOGFN(__FILE__, __LINE__, __FUNCTION__);
494
495 if (num) *num = 0;
496 if (state) *state = NULL;
497
498 ret =
499 ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_STATE, &atoms);
500
501 if (ret <= 0) return EINA_FALSE;
502
503 if (state)
504 {
505 *state = malloc(ret * sizeof(Ecore_X_Window_State));
506 if (*state)
507 {
508 int i = 0;
509
510 for (i = 0; i < ret; i++)
511 (*state)[i] = _ecore_xcb_netwm_window_state_get(atoms[i]);
512 if (num) *num = ret;
513 }
514 }
515
516 free(atoms);
517
518 return EINA_TRUE;
519}
520
521EAPI void
522ecore_x_netwm_client_active_set(Ecore_X_Window root,
523 Ecore_X_Window win)
524{
525 LOGFN(__FILE__, __LINE__, __FUNCTION__);
526
527 ecore_x_window_prop_window_set(root,
528 ECORE_X_ATOM_NET_ACTIVE_WINDOW, &win, 1);
529}
530
531EAPI void
532ecore_x_netwm_client_active_request(Ecore_X_Window root,
533 Ecore_X_Window win,
534 int type,
535 Ecore_X_Window current_win)
536{
537 xcb_client_message_event_t ev;
538
539 LOGFN(__FILE__, __LINE__, __FUNCTION__);
540 CHECK_XCB_CONN;
541
542 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
543
544 ev.response_type = XCB_CLIENT_MESSAGE;
545 ev.format = 32;
546 ev.window = win;
547 ev.type = ECORE_X_ATOM_NET_ACTIVE_WINDOW;
548 ev.data.data32[0] = type;
549 ev.data.data32[1] = XCB_CURRENT_TIME;
550 ev.data.data32[2] = current_win;
551 ev.data.data32[3] = 0;
552 ev.data.data32[4] = 0;
553
554 xcb_send_event(_ecore_xcb_conn, 0, root,
555 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
556 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
557// ecore_x_flush();
558}
559
560EAPI void
561ecore_x_netwm_client_list_set(Ecore_X_Window root,
562 Ecore_X_Window *p_clients,
563 unsigned int n_clients)
564{
565 LOGFN(__FILE__, __LINE__, __FUNCTION__);
566
567 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST,
568 p_clients, n_clients);
569}
570
571EAPI void
572ecore_x_netwm_client_list_stacking_set(Ecore_X_Window root,
573 Ecore_X_Window *p_clients,
574 unsigned int n_clients)
575{
576 LOGFN(__FILE__, __LINE__, __FUNCTION__);
577
578 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST_STACKING,
579 p_clients, n_clients);
580}
581
582EAPI Eina_Bool
583ecore_x_screen_is_composited(int screen)
584{
585 char buff[32];
586 xcb_get_selection_owner_cookie_t ocookie;
587 xcb_get_selection_owner_reply_t *oreply;
588 Ecore_X_Window win;
589 static Ecore_X_Atom atom = XCB_NONE;
590
591 LOGFN(__FILE__, __LINE__, __FUNCTION__);
592 CHECK_XCB_CONN;
593
594 snprintf(buff, sizeof(buff), "_NET_WM_CM_S%i", screen);
595
596 if (atom == XCB_NONE)
597 {
598 xcb_intern_atom_cookie_t acookie;
599 xcb_intern_atom_reply_t *areply;
600
601 acookie =
602 xcb_intern_atom_unchecked(_ecore_xcb_conn, 0, strlen(buff), buff);
603 areply = xcb_intern_atom_reply(_ecore_xcb_conn, acookie, NULL);
604 if (!areply) return EINA_FALSE;
605 atom = areply->atom;
606 free(areply);
607 }
608 if (atom == XCB_NONE) return EINA_FALSE;
609
610 ocookie = xcb_get_selection_owner_unchecked(_ecore_xcb_conn, atom);
611 oreply = xcb_get_selection_owner_reply(_ecore_xcb_conn, ocookie, NULL);
612 if (!oreply) return EINA_FALSE;
613 win = oreply->owner;
614 free(oreply);
615
616 return (win != XCB_NONE) ? EINA_TRUE : EINA_FALSE;
617}
618
619EAPI void
620ecore_x_screen_is_composited_set(int screen,
621 Ecore_X_Window win)
622{
623 static Ecore_X_Atom atom = XCB_NONE;
624 char buff[32];
625
626 LOGFN(__FILE__, __LINE__, __FUNCTION__);
627 CHECK_XCB_CONN;
628
629 snprintf(buff, sizeof(buff), "_NET_WM_CM_S%i", screen);
630 if (atom == XCB_NONE)
631 {
632 xcb_intern_atom_cookie_t acookie;
633 xcb_intern_atom_reply_t *areply;
634
635 acookie =
636 xcb_intern_atom_unchecked(_ecore_xcb_conn, 0, strlen(buff), buff);
637 areply = xcb_intern_atom_reply(_ecore_xcb_conn, acookie, NULL);
638 if (!areply) return;
639 atom = areply->atom;
640 free(areply);
641 }
642 if (atom == XCB_NONE) return;
643 xcb_set_selection_owner(_ecore_xcb_conn, win, atom,
644 _ecore_xcb_events_last_time_get());
645}
646
647EAPI void
648ecore_x_netwm_ping_send(Ecore_X_Window win)
649{
650 xcb_client_message_event_t ev;
651
652 LOGFN(__FILE__, __LINE__, __FUNCTION__);
653 CHECK_XCB_CONN;
654
655 if (!win) return;
656
657 ev.response_type = XCB_CLIENT_MESSAGE;
658 ev.format = 32;
659 ev.window = win;
660 ev.type = ECORE_X_ATOM_WM_PROTOCOLS;
661 ev.data.data32[0] = ECORE_X_ATOM_NET_WM_PING;
662 ev.data.data32[1] = ecore_x_current_time_get();
663 ev.data.data32[2] = win;
664 ev.data.data32[3] = 0;
665 ev.data.data32[4] = 0;
666
667 xcb_send_event(_ecore_xcb_conn, 0, win,
668 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
669// ecore_x_flush();
670}
671
672EAPI void
673ecore_x_netwm_frame_size_set(Ecore_X_Window win,
674 int fl,
675 int fr,
676 int ft,
677 int fb)
678{
679 uint32_t frames[4];
680
681 LOGFN(__FILE__, __LINE__, __FUNCTION__);
682
683 frames[0] = fl;
684 frames[1] = fr;
685 frames[2] = ft;
686 frames[3] = fb;
687 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_FRAME_EXTENTS,
688 frames, 4);
689}
690
691EAPI Eina_Bool
692ecore_x_netwm_frame_size_get(Ecore_X_Window win,
693 int *fl,
694 int *fr,
695 int *ft,
696 int *fb)
697{
698 int ret = 0;
699 unsigned int frames[4];
700
701 LOGFN(__FILE__, __LINE__, __FUNCTION__);
702
703 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_FRAME_EXTENTS,
704 frames, 4);
705 if (ret != 4) return EINA_FALSE;
706
707 if (fl) *fl = frames[0];
708 if (fr) *fr = frames[1];
709 if (ft) *ft = frames[2];
710 if (fb) *fb = frames[3];
711
712 return EINA_TRUE;
713}
714
715EAPI void
716ecore_x_netwm_sync_request_send(Ecore_X_Window win,
717 unsigned int serial)
718{
719 xcb_client_message_event_t ev;
720
721 LOGFN(__FILE__, __LINE__, __FUNCTION__);
722 CHECK_XCB_CONN;
723
724 if (!win) return;
725
726 /* FIXME: Maybe need XSyncIntToValue ?? */
727 memset(&ev, 0, sizeof(xcb_client_message_event_t));
728
729 ev.response_type = XCB_CLIENT_MESSAGE;
730 ev.format = 32;
731 ev.window = win;
732 ev.type = ECORE_X_ATOM_WM_PROTOCOLS;
733 ev.data.data32[0] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
734 ev.data.data32[1] = _ecore_xcb_events_last_time_get();
735 ev.data.data32[2] = serial;
736 ev.data.data32[3] = 0;
737 ev.data.data32[4] = 0;
738
739 xcb_send_event(_ecore_xcb_conn, 0, win,
740 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
741// ecore_x_flush();
742}
743
744EAPI void
745ecore_x_netwm_desktop_set(Ecore_X_Window win,
746 unsigned int desk)
747{
748 LOGFN(__FILE__, __LINE__, __FUNCTION__);
749
750 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_DESKTOP, &desk, 1);
751}
752
753EAPI Eina_Bool
754ecore_x_netwm_desktop_get(Ecore_X_Window win,
755 unsigned int *desk)
756{
757 unsigned int tmp = 0;
758
759 LOGFN(__FILE__, __LINE__, __FUNCTION__);
760
761 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_DESKTOP,
762 &tmp, 1))
763 return EINA_FALSE;
764
765 if (desk) *desk = tmp;
766
767 return EINA_TRUE;
768}
769
770EAPI void
771ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
772 Ecore_X_Window root,
773 unsigned int desktop)
774{
775 xcb_client_message_event_t ev;
776
777 LOGFN(__FILE__, __LINE__, __FUNCTION__);
778 CHECK_XCB_CONN;
779
780 if (!root) root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
781
782 memset(&ev, 0, sizeof(xcb_client_message_event_t));
783
784 ev.response_type = XCB_CLIENT_MESSAGE;
785 ev.format = 32;
786 ev.window = win;
787 ev.type = ECORE_X_ATOM_NET_WM_DESKTOP;
788 ev.data.data32[0] = desktop;
789
790 xcb_send_event(_ecore_xcb_conn, 0, root,
791 (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
792 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), (const char *)&ev);
793// ecore_x_flush();
794}
795
796EAPI void
797ecore_x_netwm_handled_icons_set(Ecore_X_Window win)
798{
799 LOGFN(__FILE__, __LINE__, __FUNCTION__);
800
801 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
802 NULL, 0);
803}
804
805EAPI Eina_Bool
806ecore_x_netwm_handled_icons_get(Ecore_X_Window win)
807{
808 LOGFN(__FILE__, __LINE__, __FUNCTION__);
809
810 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
811 NULL, 0))
812 return EINA_FALSE;
813
814 return EINA_TRUE;
815}
816
817EAPI int
818ecore_x_netwm_icon_name_get(Ecore_X_Window win,
819 char **name)
820{
821 LOGFN(__FILE__, __LINE__, __FUNCTION__);
822
823 if (name)
824 {
825 *name =
826 ecore_x_window_prop_string_get(win, ECORE_X_ATOM_NET_WM_ICON_NAME);
827 }
828
829 return 1;
830}
831
832EAPI void
833ecore_x_netwm_icon_name_set(Ecore_X_Window win,
834 const char *name)
835{
836 LOGFN(__FILE__, __LINE__, __FUNCTION__);
837
838 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_NET_WM_ICON_NAME, name);
839}
840
841EAPI void
842ecore_x_netwm_icons_set(Ecore_X_Window win,
843 Ecore_X_Icon *icon,
844 int num)
845{
846 unsigned int *data, *p, *p2;
847 unsigned int i, size, x, y;
848
849 LOGFN(__FILE__, __LINE__, __FUNCTION__);
850 size = 0;
851 for (i = 0; i < (unsigned int)num; i++)
852 {
853 size += 2 + (icon[i].width * icon[i].height);
854 }
855 data = malloc(size * sizeof(unsigned int));
856 if (!data) return;
857 p = data;
858 for (i = 0; i < (unsigned int)num; i++)
859 {
860 p[0] = icon[i].width;
861 p[1] = icon[i].height;
862 p += 2;
863 p2 = icon[i].data;
864 for (y = 0; y < icon[i].height; y++)
865 {
866 for (x = 0; x < icon[i].width; x++)
867 {
868 unsigned int r, g, b, a;
869
870 a = (*p2 >> 24) & 0xff;
871 r = (*p2 >> 16) & 0xff;
872 g = (*p2 >> 8 ) & 0xff;
873 b = (*p2 ) & 0xff;
874 if ((a > 0) && (a < 255))
875 {
876 r = (r * 255) / a;
877 g = (g * 255) / a;
878 b = (b * 255) / a;
879 }
880 *p = (a << 24) | (r << 16) | (g << 8) | b;
881 p++;
882 p2++;
883 }
884 }
885 }
886 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_ICON,
887 data, size);
888 free(data);
889}
890
891EAPI Eina_Bool
892ecore_x_netwm_icons_get(Ecore_X_Window win,
893 Ecore_X_Icon **icon,
894 int *num)
895{
896 int num_ret = 0;
897 unsigned int i = 0, len = 0, icons = 0;
898 unsigned int *data, *p, *src;
899
900 LOGFN(__FILE__, __LINE__, __FUNCTION__);
901
902 if (num) *num = 0;
903 if (icon) *icon = NULL;
904
905 num_ret =
906 ecore_x_window_prop_card32_list_get(win, ECORE_X_ATOM_NET_WM_ICON, &data);
907
908 if ((num_ret <= 0) || (!data))
909 {
910 if (data) free(data);
911 return EINA_FALSE;
912 }
913 if (num_ret < 2)
914 {
915 if (data) free(data);
916 return EINA_FALSE;
917 }
918
919 icons = 0;
920 p = data;
921 while (p)
922 {
923 len = (p[0] * p[1]);
924 p += (len + 2);
925 if ((p - data) > num_ret)
926 {
927 if (data) free(data);
928 return EINA_FALSE;
929 }
930 icons++;
931 if ((p - data) == num_ret) p = NULL;
932 }
933 if (num) *num = icons;
934 if (!icon)
935 {
936 if (data) free(data);
937 return EINA_TRUE;
938 }
939
940 *icon = malloc(icons * sizeof(Ecore_X_Icon));
941 if (!(*icon))
942 {
943 if (data) free(data);
944 return EINA_FALSE;
945 }
946
947 /* Fetch the icons */
948 p = data;
949 for (i = 0; i < icons; i++)
950 {
951 unsigned int *ps, *pd, *pe;
952
953 len = p[0] * p[1];
954 ((*icon)[i]).width = p[0];
955 ((*icon)[i]).height = p[1];
956 src = &(p[2]);
957 ((*icon)[i]).data = malloc(len * sizeof(unsigned int));
958 if (!((*icon)[i]).data)
959 {
960 while (i)
961 free(((*icon)[--i]).data);
962 free(*icon);
963 free(data);
964 return EINA_FALSE;
965 }
966
967 pd = ((*icon)[i]).data;
968 ps = src;
969 pe = ps + len;
970 for (; ps < pe; ps++)
971 {
972 unsigned int r, g, b, a;
973
974 a = (*ps >> 24) & 0xff;
975 r = (((*ps >> 16) & 0xff) * a) / 255;
976 g = (((*ps >> 8) & 0xff) * a) / 255;
977 b = (((*ps) & 0xff) * a) / 255;
978 *pd = (a << 24) | (r << 16) | (g << 8) | (b);
979 pd++;
980 }
981 p += (len + 2);
982 }
983
984 if (data) free(data);
985 return EINA_TRUE;
986}
987
988EAPI void
989ecore_x_netwm_icon_geometry_set(Ecore_X_Window win,
990 int x,
991 int y,
992 int w,
993 int h)
994{
995 unsigned int geom[4];
996
997 LOGFN(__FILE__, __LINE__, __FUNCTION__);
998
999 geom[0] = x;
1000 geom[1] = y;
1001 geom[2] = w;
1002 geom[3] = h;
1003 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
1004 geom, 4);
1005}
1006
1007EAPI Eina_Bool
1008ecore_x_netwm_icon_geometry_get(Ecore_X_Window win,
1009 int *x,
1010 int *y,
1011 int *w,
1012 int *h)
1013{
1014 int ret = 0;
1015 unsigned int geom[4];
1016
1017 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1018
1019 ret =
1020 ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
1021 geom, 4);
1022 if (ret != 4) return EINA_FALSE;
1023 if (x) *x = geom[0];
1024 if (y) *y = geom[1];
1025 if (w) *w = geom[2];
1026 if (h) *h = geom[3];
1027
1028 return EINA_TRUE;
1029}
1030
1031EAPI void
1032ecore_x_netwm_strut_set(Ecore_X_Window win,
1033 int l,
1034 int r,
1035 int t,
1036 int b)
1037{
1038 unsigned int strut[4];
1039
1040 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1041
1042 strut[0] = l;
1043 strut[1] = r;
1044 strut[2] = t;
1045 strut[3] = b;
1046 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_STRUT, strut, 4);
1047}
1048
1049EAPI Eina_Bool
1050ecore_x_netwm_strut_get(Ecore_X_Window win,
1051 int *l,
1052 int *r,
1053 int *t,
1054 int *b)
1055{
1056 unsigned int strut[4];
1057 int ret = 0;
1058
1059 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1060
1061 ret =
1062 ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_STRUT, strut, 4);
1063 if (ret != 4) return EINA_FALSE;
1064
1065 if (l) *l = strut[0];
1066 if (r) *r = strut[1];
1067 if (t) *t = strut[2];
1068 if (b) *b = strut[3];
1069
1070 return EINA_TRUE;
1071}
1072
1073EAPI void
1074ecore_x_netwm_strut_partial_set(Ecore_X_Window win,
1075 int left,
1076 int right,
1077 int top,
1078 int bottom,
1079 int left_start_y,
1080 int left_end_y,
1081 int right_start_y,
1082 int right_end_y,
1083 int top_start_x,
1084 int top_end_x,
1085 int bottom_start_x,
1086 int bottom_end_x)
1087{
1088 unsigned int strut[12];
1089
1090 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1091
1092 strut[0] = left;
1093 strut[1] = right;
1094 strut[2] = top;
1095 strut[3] = bottom;
1096 strut[4] = left_start_y;
1097 strut[5] = left_end_y;
1098 strut[6] = right_start_y;
1099 strut[7] = right_end_y;
1100 strut[8] = top_start_x;
1101 strut[9] = top_end_x;
1102 strut[10] = bottom_start_x;
1103 strut[11] = bottom_end_x;
1104 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_STRUT_PARTIAL,
1105 strut, 12);
1106}
1107
1108EAPI Eina_Bool
1109ecore_x_netwm_strut_partial_get(Ecore_X_Window win,
1110 int *left,
1111 int *right,
1112 int *top,
1113 int *bottom,
1114 int *left_start_y,
1115 int *left_end_y,
1116 int *right_start_y,
1117 int *right_end_y,
1118 int *top_start_x,
1119 int *top_end_x,
1120 int *bottom_start_x,
1121 int *bottom_end_x)
1122{
1123 unsigned int strut[12];
1124 int ret = 0;
1125
1126 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1127
1128 ret =
1129 ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_STRUT_PARTIAL,
1130 strut, 12);
1131 if (ret != 12) return EINA_FALSE;
1132
1133 if (left) *left = strut[0];
1134 if (right) *right = strut[1];
1135 if (top) *top = strut[2];
1136 if (bottom) *bottom = strut[3];
1137 if (left_start_y) *left_start_y = strut[4];
1138 if (left_end_y) *left_end_y = strut[5];
1139 if (right_start_y) *right_start_y = strut[6];
1140 if (right_end_y) *right_end_y = strut[7];
1141 if (top_start_x) *top_start_x = strut[8];
1142 if (top_end_x) *top_end_x = strut[9];
1143 if (bottom_start_x) *bottom_start_x = strut[10];
1144 if (bottom_end_x) *bottom_end_x = strut[11];
1145
1146 return EINA_TRUE;
1147}
1148
1149EAPI void
1150ecore_x_netwm_user_time_set(Ecore_X_Window win,
1151 unsigned int t)
1152{
1153 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1154
1155 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_USER_TIME, &t, 1);
1156}
1157
1158EAPI Eina_Bool
1159ecore_x_netwm_user_time_get(Ecore_X_Window win,
1160 unsigned int *t)
1161{
1162 unsigned int tmp;
1163
1164 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1165
1166 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_USER_TIME,
1167 &tmp, 1))
1168 return EINA_FALSE;
1169
1170 if (t) *t = tmp;
1171
1172 return EINA_TRUE;
1173}
1174
1175EAPI void
1176ecore_x_netwm_visible_name_set(Ecore_X_Window win,
1177 const char *name)
1178{
1179 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1180
1181 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_NET_WM_VISIBLE_NAME,
1182 name);
1183}
1184
1185EAPI int
1186ecore_x_netwm_visible_name_get(Ecore_X_Window win,
1187 char **name)
1188{
1189 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1190
1191 if (name)
1192 *name = ecore_x_window_prop_string_get(win,
1193 ECORE_X_ATOM_NET_WM_VISIBLE_NAME);
1194 return 1;
1195}
1196
1197EAPI void
1198ecore_x_netwm_visible_icon_name_set(Ecore_X_Window win,
1199 const char *name)
1200{
1201 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1202
1203 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME,
1204 name);
1205}
1206
1207EAPI int
1208ecore_x_netwm_visible_icon_name_get(Ecore_X_Window win,
1209 char **name)
1210{
1211 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1212
1213 if (name)
1214 {
1215 *name =
1216 ecore_x_window_prop_string_get(win,
1217 ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME);
1218 }
1219
1220 return 1;
1221}
1222
1223EAPI Eina_Bool
1224ecore_x_netwm_sync_counter_get(Ecore_X_Window win,
1225 Ecore_X_Sync_Counter *counter)
1226{
1227 unsigned int tmp;
1228
1229 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1230
1231 if (!ecore_x_window_prop_card32_get(win,
1232 ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER,
1233 &tmp, 1))
1234 return EINA_FALSE;
1235
1236 if (counter) *counter = tmp;
1237
1238 return EINA_TRUE;
1239}
1240
1241EAPI Eina_Bool
1242ecore_x_netwm_allowed_action_isset(Ecore_X_Window win,
1243 Ecore_X_Action action)
1244{
1245 int num = 0, i = 0;
1246 Ecore_X_Atom *atoms, atom;
1247 Eina_Bool ret = EINA_FALSE;
1248
1249 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1250
1251 num =
1252 ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
1253 &atoms);
1254 if (num <= 0) return EINA_FALSE;
1255
1256 atom = _ecore_xcb_netwm_action_atom_get(action);
1257 for (i = 0; i < num; i++)
1258 {
1259 if (atoms[i] == atom)
1260 {
1261 ret = EINA_TRUE;
1262 break;
1263 }
1264 }
1265
1266 if (atoms) free(atoms);
1267 return ret;
1268}
1269
1270EAPI Eina_Bool
1271ecore_x_netwm_allowed_action_get(Ecore_X_Window win,
1272 Ecore_X_Action **action,
1273 unsigned int *num)
1274{
1275 Ecore_X_Atom *atoms;
1276 int num_ret = 0;
1277
1278 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1279
1280 if (num) *num = 0;
1281 if (action) *action = NULL;
1282
1283 num_ret =
1284 ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS,
1285 &atoms);
1286 if (num_ret <= 0) return EINA_FALSE;
1287 if (action)
1288 {
1289 *action = malloc(num_ret * sizeof(Ecore_X_Action));
1290 if (*action)
1291 {
1292 int i = 0;
1293
1294 for (i = 0; i < num_ret; i++)
1295 (*action)[i] = _ecore_xcb_netwm_action_atom_get(atoms[i]);
1296 }
1297 if (num) *num = num_ret;
1298 }
1299 free(atoms);
1300 return EINA_TRUE;
1301}
1302
1303EAPI void
1304ecore_x_netwm_allowed_action_set(Ecore_X_Window win,
1305 Ecore_X_Action *action,
1306 unsigned int num)
1307{
1308 Ecore_X_Atom *set;
1309 unsigned int i = 0;
1310
1311 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1312
1313 if (!num)
1314 {
1315 ecore_x_window_prop_property_del(win,
1316 ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS);
1317 return;
1318 }
1319
1320 set = malloc(num * sizeof(Ecore_X_Atom));
1321 if (!set) return;
1322
1323 for (i = 0; i < num; i++)
1324 set[i] = _ecore_xcb_netwm_action_atom_get(action[i]);
1325
1326 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS,
1327 set, num);
1328 free(set);
1329}
1330
1331/* local functions */
1332int
1333_ecore_xcb_netwm_startup_info_begin(Ecore_X_Window win __UNUSED__,
1334 uint8_t data __UNUSED__)
1335{
1336 // TODO: TBD
1337 return 1;
1338}
1339
1340int
1341_ecore_xcb_netwm_startup_info(Ecore_X_Window win __UNUSED__,
1342 uint8_t data __UNUSED__)
1343{
1344 // TODO: TBD
1345 return 1;
1346}
1347
1348/* static void */
1349/* _ecore_xcb_netwm_startup_info_free(void *data) */
1350/* { */
1351/* Ecore_Xcb_Startup_Info *info; */
1352
1353/* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
1354
1355/* if (!(info = data)) return; */
1356/* if (info->buffer) free(info->buffer); */
1357/* if (info->id) free(info->id); */
1358/* if (info->name) free(info->name); */
1359/* if (info->bin) free(info->bin); */
1360/* if (info->icon) free(info->icon); */
1361/* if (info->description) free(info->description); */
1362/* if (info->wmclass) free(info->wmclass); */
1363/* free(info); */
1364/* } */
1365
1366static Ecore_X_Atom
1367_ecore_xcb_netwm_window_type_atom_get(Ecore_X_Window_Type type)
1368{
1369 switch (type)
1370 {
1371 case ECORE_X_WINDOW_TYPE_DESKTOP:
1372 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
1373
1374 case ECORE_X_WINDOW_TYPE_DOCK:
1375 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
1376
1377 case ECORE_X_WINDOW_TYPE_TOOLBAR:
1378 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
1379
1380 case ECORE_X_WINDOW_TYPE_MENU:
1381 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
1382
1383 case ECORE_X_WINDOW_TYPE_UTILITY:
1384 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
1385
1386 case ECORE_X_WINDOW_TYPE_SPLASH:
1387 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
1388
1389 case ECORE_X_WINDOW_TYPE_DIALOG:
1390 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
1391
1392 case ECORE_X_WINDOW_TYPE_NORMAL:
1393 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
1394
1395 case ECORE_X_WINDOW_TYPE_DROPDOWN_MENU:
1396 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU;
1397
1398 case ECORE_X_WINDOW_TYPE_POPUP_MENU:
1399 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU;
1400
1401 case ECORE_X_WINDOW_TYPE_TOOLTIP:
1402 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP;
1403
1404 case ECORE_X_WINDOW_TYPE_NOTIFICATION:
1405 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION;
1406
1407 case ECORE_X_WINDOW_TYPE_COMBO:
1408 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO;
1409
1410 case ECORE_X_WINDOW_TYPE_DND:
1411 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND;
1412
1413 default:
1414 return 0;
1415 }
1416}
1417
1418static Ecore_X_Window_Type
1419_ecore_xcb_netwm_window_type_type_get(Ecore_X_Atom atom)
1420{
1421 if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP)
1422 return ECORE_X_WINDOW_TYPE_DESKTOP;
1423 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK)
1424 return ECORE_X_WINDOW_TYPE_DOCK;
1425 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR)
1426 return ECORE_X_WINDOW_TYPE_TOOLBAR;
1427 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU)
1428 return ECORE_X_WINDOW_TYPE_MENU;
1429 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY)
1430 return ECORE_X_WINDOW_TYPE_UTILITY;
1431 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH)
1432 return ECORE_X_WINDOW_TYPE_SPLASH;
1433 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG)
1434 return ECORE_X_WINDOW_TYPE_DIALOG;
1435 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL)
1436 return ECORE_X_WINDOW_TYPE_NORMAL;
1437 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU)
1438 return ECORE_X_WINDOW_TYPE_DROPDOWN_MENU;
1439 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU)
1440 return ECORE_X_WINDOW_TYPE_POPUP_MENU;
1441 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP)
1442 return ECORE_X_WINDOW_TYPE_TOOLTIP;
1443 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION)
1444 return ECORE_X_WINDOW_TYPE_NOTIFICATION;
1445 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO)
1446 return ECORE_X_WINDOW_TYPE_COMBO;
1447 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND)
1448 return ECORE_X_WINDOW_TYPE_DND;
1449 else
1450 return ECORE_X_WINDOW_TYPE_UNKNOWN;
1451}
1452
1453static Ecore_X_Atom
1454_ecore_xcb_netwm_window_state_atom_get(Ecore_X_Window_State state)
1455{
1456 switch (state)
1457 {
1458 case ECORE_X_WINDOW_STATE_MODAL:
1459 return ECORE_X_ATOM_NET_WM_STATE_MODAL;
1460
1461 case ECORE_X_WINDOW_STATE_STICKY:
1462 return ECORE_X_ATOM_NET_WM_STATE_STICKY;
1463
1464 case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
1465 return ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT;
1466
1467 case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
1468 return ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ;
1469
1470 case ECORE_X_WINDOW_STATE_SHADED:
1471 return ECORE_X_ATOM_NET_WM_STATE_SHADED;
1472
1473 case ECORE_X_WINDOW_STATE_SKIP_TASKBAR:
1474 return ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR;
1475
1476 case ECORE_X_WINDOW_STATE_SKIP_PAGER:
1477 return ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER;
1478
1479 case ECORE_X_WINDOW_STATE_HIDDEN:
1480 return ECORE_X_ATOM_NET_WM_STATE_HIDDEN;
1481
1482 case ECORE_X_WINDOW_STATE_FULLSCREEN:
1483 return ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN;
1484
1485 case ECORE_X_WINDOW_STATE_ABOVE:
1486 return ECORE_X_ATOM_NET_WM_STATE_ABOVE;
1487
1488 case ECORE_X_WINDOW_STATE_BELOW:
1489 return ECORE_X_ATOM_NET_WM_STATE_BELOW;
1490
1491 case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION:
1492 return ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION;
1493
1494 default:
1495 return 0;
1496 }
1497}
1498
1499Ecore_X_Window_State
1500_ecore_xcb_netwm_window_state_get(Ecore_X_Atom atom)
1501{
1502 if (atom == ECORE_X_ATOM_NET_WM_STATE_MODAL)
1503 return ECORE_X_WINDOW_STATE_MODAL;
1504 else if (atom == ECORE_X_ATOM_NET_WM_STATE_STICKY)
1505 return ECORE_X_WINDOW_STATE_STICKY;
1506 else if (atom == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT)
1507 return ECORE_X_WINDOW_STATE_MAXIMIZED_VERT;
1508 else if (atom == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ)
1509 return ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ;
1510 else if (atom == ECORE_X_ATOM_NET_WM_STATE_SHADED)
1511 return ECORE_X_WINDOW_STATE_SHADED;
1512 else if (atom == ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR)
1513 return ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
1514 else if (atom == ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER)
1515 return ECORE_X_WINDOW_STATE_SKIP_PAGER;
1516 else if (atom == ECORE_X_ATOM_NET_WM_STATE_HIDDEN)
1517 return ECORE_X_WINDOW_STATE_HIDDEN;
1518 else if (atom == ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN)
1519 return ECORE_X_WINDOW_STATE_FULLSCREEN;
1520 else if (atom == ECORE_X_ATOM_NET_WM_STATE_ABOVE)
1521 return ECORE_X_WINDOW_STATE_ABOVE;
1522 else if (atom == ECORE_X_ATOM_NET_WM_STATE_BELOW)
1523 return ECORE_X_WINDOW_STATE_BELOW;
1524 else if (atom == ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION)
1525 return ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION;
1526 else
1527 return ECORE_X_WINDOW_STATE_UNKNOWN;
1528}
1529
1530static Ecore_X_Atom
1531_ecore_xcb_netwm_action_atom_get(Ecore_X_Action action)
1532{
1533 switch (action)
1534 {
1535 case ECORE_X_ACTION_MOVE:
1536 return ECORE_X_ATOM_NET_WM_ACTION_MOVE;
1537
1538 case ECORE_X_ACTION_RESIZE:
1539 return ECORE_X_ATOM_NET_WM_ACTION_RESIZE;
1540
1541 case ECORE_X_ACTION_MINIMIZE:
1542 return ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE;
1543
1544 case ECORE_X_ACTION_SHADE:
1545 return ECORE_X_ATOM_NET_WM_ACTION_SHADE;
1546
1547 case ECORE_X_ACTION_STICK:
1548 return ECORE_X_ATOM_NET_WM_ACTION_STICK;
1549
1550 case ECORE_X_ACTION_MAXIMIZE_HORZ:
1551 return ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ;
1552
1553 case ECORE_X_ACTION_MAXIMIZE_VERT:
1554 return ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT;
1555
1556 case ECORE_X_ACTION_FULLSCREEN:
1557 return ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN;
1558
1559 case ECORE_X_ACTION_CHANGE_DESKTOP:
1560 return ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP;
1561
1562 case ECORE_X_ACTION_CLOSE:
1563 return ECORE_X_ATOM_NET_WM_ACTION_CLOSE;
1564
1565 case ECORE_X_ACTION_ABOVE:
1566 return ECORE_X_ATOM_NET_WM_ACTION_ABOVE;
1567
1568 case ECORE_X_ACTION_BELOW:
1569 return ECORE_X_ATOM_NET_WM_ACTION_BELOW;
1570
1571 default:
1572 return 0;
1573 }
1574}
1575
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c
deleted file mode 100644
index f9bf525..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c
+++ /dev/null
@@ -1,128 +0,0 @@
1#include "ecore_xcb_private.h"
2
3/**
4 * @defgroup Ecore_X_Pixmap_Group X Pixmap Functions
5 *
6 * Functions that operate on pixmaps.
7 */
8
9/**
10 * Creates a new pixmap.
11 * @param win Window used to determine which screen of the display the
12 * pixmap should be created on. If 0, the default root window
13 * is used.
14 * @param w Width of the new pixmap.
15 * @param h Height of the new pixmap.
16 * @param dep Depth of the pixmap. If 0, the default depth of the default
17 * screen is used.
18 * @return New pixmap.
19 * @ingroup Ecore_X_Pixmap_Group
20 */
21EAPI Ecore_X_Pixmap
22ecore_x_pixmap_new(Ecore_X_Window win,
23 int w,
24 int h,
25 int dep)
26{
27 Ecore_X_Pixmap pmap;
28
29 LOGFN(__FILE__, __LINE__, __FUNCTION__);
30 CHECK_XCB_CONN;
31
32 if (win == 0) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
33 if (dep == 0) dep = ((xcb_screen_t *)_ecore_xcb_screen)->root_depth;
34
35 pmap = xcb_generate_id(_ecore_xcb_conn);
36 xcb_create_pixmap(_ecore_xcb_conn, dep, pmap, win, w, h);
37
38// ecore_x_flush();
39 return pmap;
40}
41
42/**
43 * Deletes the reference to the given pixmap.
44 *
45 * If no other clients have a reference to the given pixmap, the server
46 * will destroy it.
47 *
48 * @param pmap The given pixmap.
49 * @ingroup Ecore_X_Pixmap_Group
50 */
51EAPI void
52ecore_x_pixmap_free(Ecore_X_Pixmap pmap)
53{
54 LOGFN(__FILE__, __LINE__, __FUNCTION__);
55 CHECK_XCB_CONN;
56
57 xcb_free_pixmap(_ecore_xcb_conn, pmap);
58// ecore_x_flush();
59}
60
61/**
62 * Pastes a rectangular area of the given pixmap onto the given drawable.
63 * @param pmap The given pixmap.
64 * @param dest The given drawable.
65 * @param gc The graphics context which governs which operation will
66 * be used to paste the area onto the drawable.
67 * @param sx The X position of the area on the pixmap.
68 * @param sy The Y position of the area on the pixmap.
69 * @param w The width of the area.
70 * @param h The height of the area.
71 * @param dx The X position at which to paste the area on @p dest.
72 * @param dy The Y position at which to paste the area on @p dest.
73 * @ingroup Ecore_X_Pixmap_Group
74 */
75EAPI void
76ecore_x_pixmap_paste(Ecore_X_Pixmap pmap,
77 Ecore_X_Drawable dest,
78 Ecore_X_GC gc,
79 int sx,
80 int sy,
81 int w,
82 int h,
83 int dx,
84 int dy)
85{
86 LOGFN(__FILE__, __LINE__, __FUNCTION__);
87 CHECK_XCB_CONN;
88
89 xcb_copy_area(_ecore_xcb_conn, pmap, dest, gc, sx, sy, dx, dy, w, h);
90// ecore_x_flush();
91}
92
93/**
94 * Retrieves the size of the given pixmap.
95 * @param pmap The given pixmap.
96 * @param x Pointer to an integer in which to store the X position.
97 * @param y Pointer to an integer in which to store the Y position.
98 * @param w Pointer to an integer in which to store the width.
99 * @param h Pointer to an integer in which to store the height.
100 * @ingroup Ecore_X_Pixmap_Group
101 */
102EAPI void
103ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap,
104 int *x,
105 int *y,
106 int *w,
107 int *h)
108{
109 LOGFN(__FILE__, __LINE__, __FUNCTION__);
110
111 if (pmap)
112 ecore_x_drawable_geometry_get(pmap, x, y, w, h);
113}
114
115/**
116 * Retrieves the depth of the given pixmap.
117 * @param pmap The given pixmap.
118 * @return The depth of the pixmap.
119 * @ingroup Ecore_X_Pixmap_Group
120 */
121EAPI int
122ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap)
123{
124 LOGFN(__FILE__, __LINE__, __FUNCTION__);
125
126 return ecore_x_drawable_depth_get(pmap);
127}
128
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h
deleted file mode 100644
index cf8f3e5..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h
+++ /dev/null
@@ -1,451 +0,0 @@
1#ifndef __ECORE_XCB_PRIVATE_H__
2# define __ECORE_XCB_PRIVATE_H__
3
4//# define LOGFNS 1
5
6# ifdef HAVE_CONFIG_H
7# include "config.h"
8# endif
9
10# include <unistd.h> // included for close & gethostname functions
11
12/* generic xcb includes */
13# include <xcb/xcb.h>
14# include <xcb/bigreq.h>
15# include <xcb/shm.h>
16# include <xcb/xcb_image.h>
17
18/* EFL includes */
19# include "Ecore.h"
20# include "Ecore_Input.h"
21# include "Ecore_X.h"
22
23/* logging */
24extern int _ecore_xcb_log_dom;
25
26# ifdef ECORE_XCB_DEFAULT_LOG_COLOR
27# undef ECORE_XCB_DEFAULT_LOG_COLOR
28# endif
29# define ECORE_XCB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
30
31# ifdef ERR
32# undef ERR
33# endif
34# define ERR(...) EINA_LOG_DOM_ERR(_ecore_xcb_log_dom, __VA_ARGS__)
35
36# ifdef DBG
37# undef DBG
38# endif
39# define DBG(...) EINA_LOG_DOM_DBG(_ecore_xcb_log_dom, __VA_ARGS__)
40
41# ifdef INF
42# undef INF
43# endif
44# define INF(...) EINA_LOG_DOM_INFO(_ecore_xcb_log_dom, __VA_ARGS__)
45
46# ifdef WRN
47# undef WRN
48# endif
49# define WRN(...) EINA_LOG_DOM_WARN(_ecore_xcb_log_dom, __VA_ARGS__)
50
51# ifdef CRIT
52# undef CRIT
53# endif
54# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_xcb_log_dom, __VA_ARGS__)
55
56# ifdef LOGFNS
57# include <stdio.h>
58# define LOGFN(fl, ln, fn) printf("-ECORE-XCB: %25s: %5i - %s\n", fl, ln, fn);
59# else
60# define LOGFN(fl, ln, fn)
61# endif
62
63# ifndef MAXHOSTNAMELEN
64# define MAXHOSTNAMELEN 256
65# endif
66
67# ifndef MIN
68# define MIN(x, y) (((x) > (y)) ? (y) : (x))
69# endif
70
71# ifndef MAX
72# define MAX(a, b) ((a < b) ? b : a)
73# endif
74
75#define CHECK_XCB_CONN \
76 { \
77 if (xcb_connection_has_error(_ecore_xcb_conn)) \
78 { \
79 DBG("XCB Connection Has Error !!"); \
80 _ecore_xcb_io_error_handle(NULL); \
81 } \
82 }
83
84/* enums */
85typedef enum _Ecore_Xcb_Encoding_Style Ecore_Xcb_Encoding_Style;
86
87enum _Ecore_Xcb_Encoding_Style
88{
89 XcbStringStyle,
90 XcbCompoundTextStyle,
91 XcbTextStyle,
92 XcbStdICCTextStyle,
93 XcbUTF8StringStyle
94};
95
96/* structures */
97typedef struct _Ecore_X_DND_Source Ecore_X_DND_Source;
98typedef struct _Ecore_X_DND_Target Ecore_X_DND_Target;
99typedef struct _Ecore_X_Selection_Intern Ecore_X_Selection_Intern;
100typedef struct _Ecore_X_Selection_Converter Ecore_X_Selection_Converter;
101typedef struct _Ecore_X_Selection_Parser Ecore_X_Selection_Parser;
102typedef struct _Ecore_Xcb_Textproperty Ecore_Xcb_Textproperty;
103
104struct _Ecore_X_DND_Source
105{
106 int version;
107 Ecore_X_Window win, dest;
108
109 enum
110 {
111 ECORE_X_DND_SOURCE_IDLE,
112 ECORE_X_DND_SOURCE_DRAGGING,
113 ECORE_X_DND_SOURCE_DROPPED,
114 ECORE_X_DND_SOURCE_CONVERTING
115 } state;
116
117 struct
118 {
119 short x, y;
120 unsigned short width, height;
121 } rectangle;
122
123 struct
124 {
125 Ecore_X_Window window;
126 int x, y;
127 } prev;
128
129 Ecore_X_Time time;
130
131 Ecore_X_Atom action, accepted_action;
132
133 int will_accept, suppress;
134 int await_status;
135};
136
137struct _Ecore_X_DND_Target
138{
139 int version;
140 Ecore_X_Window win, source;
141
142 enum
143 {
144 ECORE_X_DND_TARGET_IDLE,
145 ECORE_X_DND_TARGET_ENTERED
146 } state;
147
148 struct
149 {
150 int x, y;
151 } pos;
152
153 Ecore_X_Time time;
154
155 Ecore_X_Atom action, accepted_action;
156 int will_accept;
157};
158
159struct _Ecore_X_Selection_Intern
160{
161 Ecore_X_Window win;
162 Ecore_X_Atom selection;
163 unsigned char *data;
164 int length;
165 Ecore_X_Time time;
166};
167
168struct _Ecore_X_Selection_Converter
169{
170 Ecore_X_Atom target;
171 Eina_Bool (*convert)(char *target,
172 void *data,
173 int size,
174 void **data_ret,
175 int *size_ret,
176 Ecore_X_Atom *type,
177 int *size_type);
178 Ecore_X_Selection_Converter *next;
179};
180
181struct _Ecore_X_Selection_Parser
182{
183 char *target;
184 void *(*parse)(const char *target, void *data, int size, int format);
185 Ecore_X_Selection_Parser *next;
186};
187
188struct _Ecore_Xcb_Textproperty
189{
190 char *value;
191 Ecore_X_Atom encoding;
192 unsigned int format, nitems;
193};
194
195/* external variables */
196extern Ecore_X_Connection *_ecore_xcb_conn;
197extern Ecore_X_Screen *_ecore_xcb_screen;
198extern double _ecore_xcb_double_click_time;
199extern int16_t _ecore_xcb_event_last_root_x;
200extern int16_t _ecore_xcb_event_last_root_y;
201
202/* external variables for extension events */
203extern int _ecore_xcb_event_damage;
204extern int _ecore_xcb_event_randr;
205extern int _ecore_xcb_event_screensaver;
206extern int _ecore_xcb_event_shape;
207extern int _ecore_xcb_event_sync;
208extern int _ecore_xcb_event_xfixes;
209extern int _ecore_xcb_event_input;
210extern int _ecore_xcb_event_gesture;
211
212extern int ECORE_X_MODIFIER_SHIFT;
213extern int ECORE_X_MODIFIER_CTRL;
214extern int ECORE_X_MODIFIER_ALT;
215extern int ECORE_X_MODIFIER_WIN;
216extern int ECORE_X_LOCK_SCROLL;
217extern int ECORE_X_LOCK_NUM;
218extern int ECORE_X_LOCK_CAPS;
219extern int ECORE_X_LOCK_SHIFT;
220
221extern Ecore_X_Atom _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_NUM];
222
223extern int _ecore_xcb_button_grabs_num;
224extern int _ecore_xcb_key_grabs_num;
225extern Ecore_X_Window *_ecore_xcb_button_grabs;
226extern Ecore_X_Window *_ecore_xcb_key_grabs;
227extern Eina_Bool (*_ecore_xcb_window_grab_replay_func)(void *data,
228 int type,
229 void *event);
230extern void *_ecore_xcb_window_grab_replay_data;
231
232/* private function prototypes */
233void _ecore_xcb_error_handler_init(void);
234void _ecore_xcb_error_handler_shutdown(void);
235
236void _ecore_xcb_atoms_init(void);
237void _ecore_xcb_atoms_finalize(void);
238
239void _ecore_xcb_extensions_init(void);
240void _ecore_xcb_extensions_finalize(void);
241
242void _ecore_xcb_shape_init(void);
243void _ecore_xcb_shape_finalize(void);
244
245void _ecore_xcb_screensaver_init(void);
246void _ecore_xcb_screensaver_finalize(void);
247
248void _ecore_xcb_sync_init(void);
249void _ecore_xcb_sync_finalize(void);
250void _ecore_xcb_sync_magic_send(int val,
251 Ecore_X_Window win);
252
253void _ecore_xcb_render_init(void);
254void _ecore_xcb_render_finalize(void);
255Eina_Bool _ecore_xcb_render_argb_get(void);
256Eina_Bool _ecore_xcb_render_anim_get(void);
257Eina_Bool _ecore_xcb_render_avail_get(void);
258
259Eina_Bool _ecore_xcb_render_visual_supports_alpha(Ecore_X_Visual visual);
260uint32_t _ecore_xcb_render_find_visual_id(int type,
261 Eina_Bool check_alpha);
262Ecore_X_Visual *_ecore_xcb_render_visual_get(int visual_id);
263
264void _ecore_xcb_randr_init(void);
265void _ecore_xcb_randr_finalize(void);
266
267void _ecore_xcb_gesture_init(void);
268void _ecore_xcb_gesture_finalize(void);
269void _ecore_xcb_gesture_shutdown(void);
270
271void _ecore_xcb_xfixes_init(void);
272void _ecore_xcb_xfixes_finalize(void);
273Eina_Bool _ecore_xcb_xfixes_avail_get(void);
274
275void _ecore_xcb_damage_init(void);
276void _ecore_xcb_damage_finalize(void);
277
278void _ecore_xcb_composite_init(void);
279void _ecore_xcb_composite_finalize(void);
280
281void _ecore_xcb_dpms_init(void);
282void _ecore_xcb_dpms_finalize(void);
283
284void _ecore_xcb_cursor_init(void);
285void _ecore_xcb_cursor_finalize(void);
286
287void _ecore_xcb_xinerama_init(void);
288void _ecore_xcb_xinerama_finalize(void);
289
290void _ecore_xcb_dnd_init(void);
291void _ecore_xcb_dnd_shutdown(void);
292Ecore_X_DND_Source *_ecore_xcb_dnd_source_get(void);
293Ecore_X_DND_Target *_ecore_xcb_dnd_target_get(void);
294void _ecore_xcb_dnd_drag(Ecore_X_Window root,
295 int x,
296 int y);
297
298void _ecore_xcb_selection_init(void);
299void _ecore_xcb_selection_shutdown(void);
300void *_ecore_xcb_selection_parse(const char *target,
301 void *data,
302 int size,
303 int format);
304char *_ecore_xcb_selection_target_get(Ecore_X_Atom target);
305Ecore_X_Selection_Intern *_ecore_xcb_selection_get(Ecore_X_Atom selection);
306
307# ifdef HAVE_ICONV
308Eina_Bool _ecore_xcb_utf8_textlist_to_textproperty(char **list,
309 int count,
310 Ecore_Xcb_Encoding_Style style,
311 Ecore_Xcb_Textproperty *ret);
312# endif
313Eina_Bool _ecore_xcb_mb_textlist_to_textproperty(char **list,
314 int count,
315 Ecore_Xcb_Encoding_Style style,
316 Ecore_Xcb_Textproperty *ret);
317Eina_Bool _ecore_xcb_textlist_to_textproperty(const char *type,
318 char **list,
319 int count,
320 Ecore_Xcb_Encoding_Style style,
321 Ecore_Xcb_Textproperty *ret);
322
323# ifdef HAVE_ICONV
324Eina_Bool _ecore_xcb_utf8_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
325 char ***list_ret,
326 int *count_ret);
327# endif
328Eina_Bool _ecore_xcb_mb_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
329 char ***list_ret,
330 int *count_ret);
331Eina_Bool _ecore_xcb_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
332 const char *type,
333 char ***list_ret,
334 int *count_ret);
335
336void _ecore_xcb_events_init(void);
337void _ecore_xcb_events_shutdown(void);
338void _ecore_xcb_events_handle(xcb_generic_event_t *ev);
339Ecore_X_Time _ecore_xcb_events_last_time_get(void);
340unsigned int _ecore_xcb_events_modifiers_get(unsigned int state);
341void _ecore_xcb_event_mouse_move(uint16_t timestamp,
342 uint16_t modifiers,
343 int16_t x,
344 int16_t y,
345 int16_t root_x,
346 int16_t root_y,
347 xcb_window_t event_win,
348 xcb_window_t win,
349 xcb_window_t root_win,
350 uint8_t same_screen,
351 int dev,
352 double radx,
353 double rady,
354 double pressure,
355 double angle,
356 int16_t mx,
357 int16_t my,
358 int16_t mrx,
359 int16_t mry);
360Ecore_Event_Mouse_Button *_ecore_xcb_event_mouse_button(int event,
361 uint16_t timestamp,
362 uint16_t modifiers,
363 xcb_button_t buttons,
364 int16_t x,
365 int16_t y,
366 int16_t root_x,
367 int16_t root_y,
368 xcb_window_t event_win,
369 xcb_window_t win,
370 xcb_window_t root_win,
371 uint8_t same_screen,
372 int dev,
373 double radx,
374 double rady,
375 double pressure,
376 double angle,
377 int16_t mx,
378 int16_t my,
379 int16_t mrx,
380 int16_t mry);
381
382void _ecore_xcb_keymap_init(void);
383void _ecore_xcb_keymap_finalize(void);
384void _ecore_xcb_keymap_shutdown(void);
385void _ecore_xcb_keymap_refresh(xcb_mapping_notify_event_t *event);
386xcb_keysym_t _ecore_xcb_keymap_keycode_to_keysym(xcb_keycode_t keycode,
387 int col);
388xcb_keycode_t *_ecore_xcb_keymap_keysym_to_keycode(xcb_keysym_t keysym);
389char *_ecore_xcb_keymap_keysym_to_string(xcb_keysym_t keysym);
390xcb_keycode_t _ecore_xcb_keymap_string_to_keycode(const char *key);
391int _ecore_xcb_keymap_lookup_string(xcb_keycode_t keycode,
392 int state,
393 char *buffer,
394 int bytes,
395 xcb_keysym_t *sym);
396
397void _ecore_xcb_input_init(void);
398void _ecore_xcb_input_finalize(void);
399void _ecore_xcb_input_shutdown(void);
400# ifdef ECORE_XCB_XINPUT
401void _ecore_xcb_input_handle_event(xcb_generic_event_t *event);
402# else
403void _ecore_xcb_input_handle_event(xcb_generic_event_t *event __UNUSED__);
404# endif
405
406void _ecore_xcb_dri_init(void);
407void _ecore_xcb_dri_finalize(void);
408
409void _ecore_xcb_xtest_init(void);
410void _ecore_xcb_xtest_finalize(void);
411
412Ecore_X_Window _ecore_xcb_window_root_of_screen_get(int screen);
413void _ecore_xcb_window_prop_string_utf8_set(Ecore_X_Window win,
414 Ecore_X_Atom atom,
415 const char *str);
416Ecore_X_Visual _ecore_xcb_window_visual_get(Ecore_X_Window win);
417void _ecore_xcb_window_button_grab_remove(Ecore_X_Window win);
418void _ecore_xcb_window_key_grab_remove(Ecore_X_Window win);
419void _ecore_xcb_window_grab_allow_events(Ecore_X_Window event_win,
420 Ecore_X_Window child_win,
421 int type,
422 void *event,
423 Ecore_X_Time timestamp);
424
425int _ecore_xcb_netwm_startup_info_begin(Ecore_X_Window win __UNUSED__,
426 uint8_t data __UNUSED__);
427int _ecore_xcb_netwm_startup_info(Ecore_X_Window win __UNUSED__,
428 uint8_t data __UNUSED__);
429Ecore_X_Window_State _ecore_xcb_netwm_window_state_get(Ecore_X_Atom atom);
430
431int _ecore_xcb_error_handle(xcb_generic_error_t *err);
432int _ecore_xcb_io_error_handle(xcb_generic_error_t *err);
433
434xcb_image_t *_ecore_xcb_image_create_native(int w,
435 int h,
436 xcb_image_format_t format,
437 uint8_t depth,
438 void *base,
439 uint32_t bytes,
440 uint8_t *data);
441
442void _ecore_xcb_xdefaults_init(void);
443void _ecore_xcb_xdefaults_shutdown(void);
444char *_ecore_xcb_xdefaults_string_get(const char *prog,
445 const char *param);
446int _ecore_xcb_xdefaults_int_get(const char *prog,
447 const char *param);
448
449void _ecore_xcb_modifiers_get(void);
450
451#endif
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c
deleted file mode 100644
index 81a7c3f..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c
+++ /dev/null
@@ -1,3699 +0,0 @@
1/* TODO: List of missing functions
2 *
3 * ecore_x_randr_crtc_clone_set
4 * ecore_x_randr_output_crtc_set
5 * ecore_x_randr_edid_version_get
6 * ecore_x_randr_edid_info_has_valid_checksum
7 * ecore_x_randr_edid_manufacturer_name_get
8 * ecore_x_randr_edid_display_ascii_get
9 * ecore_x_randr_edid_display_serial_get
10 * ecore_x_randr_edid_model_get
11 * ecore_x_randr_edid_manufacturer_serial_number_get
12 * ecore_x_randr_edid_manufacturer_model_get
13 * ecore_x_randr_edid_dpms_available_get
14 * ecore_x_randr_edid_dpms_standby_available_get
15 * ecore_x_randr_edid_dpms_suspend_available_get
16 * ecore_x_randr_edid_dpms_off_available_get
17 * ecore_x_randr_edid_display_aspect_ratio_preferred_get
18 * ecore_x_randr_edid_display_aspect_ratios_get
19 * ecore_x_randr_edid_display_colorscheme_get
20 * ecore_x_randr_edid_display_type_digital_get
21 * ecore_x_randr_edid_display_interface_type_get
22 * ecore_x_randr_screen_backlight_level_set
23 * ecore_x_randr_output_subpixel_order_get
24 * ecore_x_randr_output_wired_clones_get
25 * ecore_x_randr_output_compatibility_list_get
26 * ecore_x_randr_output_signal_formats_get
27 * ecore_x_randr_output_signal_format_set
28 * ecore_x_randr_output_signal_properties_get
29 * ecore_x_randr_output_connector_number_get
30 * ecore_x_randr_output_connector_type_get
31 * ecore_x_randr_crtc_panning_area_get
32 * ecore_x_randr_crtc_panning_area_set
33 * ecore_x_randr_crtc_tracking_area_get
34 * ecore_x_randr_crtc_tracking_area_set
35 * ecore_x_randr_crtc_border_area_get
36 * ecore_x_randr_crtc_border_area_set
37 */
38
39#include "ecore_xcb_private.h"
40# ifdef ECORE_XCB_RANDR
41# include <xcb/randr.h>
42# endif
43
44#define Ecore_X_Randr_None 0
45#define Ecore_X_Randr_Unset -1
46
47#define RANDR_1_1 ((1 << 16) | 1)
48#define RANDR_1_2 ((1 << 16) | 2)
49#define RANDR_1_3 ((1 << 16) | 3)
50
51#define RANDR_CHECK_1_1_RET(ret) if (_randr_version < RANDR_1_1) return ret
52#define RANDR_CHECK_1_2_RET(ret) if (_randr_version < RANDR_1_2) return ret
53#define RANDR_CHECK_1_3_RET(ret) if (_randr_version < RANDR_1_3) return ret
54
55#define ECORE_X_RANDR_EDID_VERSION_13 ((1 << 8) | 3)
56#define _ECORE_X_RANDR_EDID_OFFSET_VERSION_MAJOR 0x12
57#define _ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR 0x13
58#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK 0x36
59#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE 3
60#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT 5
61#define _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX 13
62
63#define _ECORE_X_RANDR_EDID_FOR_EACH_DESCRIPTOR_BLOCK(edid, block) \
64 for (block = edid + _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK; block <= (edid + _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK + (3 * 18)); block += 18)
65
66#define _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block) \
67 _ECORE_X_RANDR_EDID_FOR_EACH_DESCRIPTOR_BLOCK(edid, block) \
68 if ((block[0] == 0) && (block[1] == 0))
69
70/* local function prototypes */
71static Eina_Bool _ecore_xcb_randr_output_validate(Ecore_X_Window root,
72 Ecore_X_Randr_Output output);
73static Eina_Bool _ecore_xcb_randr_crtc_validate(Ecore_X_Window root,
74 Ecore_X_Randr_Crtc crtc);
75static Eina_Bool _ecore_xcb_randr_root_validate(Ecore_X_Window root);
76static int _ecore_xcb_randr_root_to_screen(Ecore_X_Window root);
77static xcb_randr_get_screen_resources_reply_t *_ecore_xcb_randr_12_get_resources(Ecore_X_Window win);
78static xcb_randr_get_screen_resources_current_reply_t *_ecore_xcb_randr_13_get_resources(Ecore_X_Window win);
79static xcb_timestamp_t _ecore_xcb_randr_12_get_resource_timestamp(Ecore_X_Window win);
80static xcb_timestamp_t _ecore_xcb_randr_13_get_resource_timestamp(Ecore_X_Window win);
81
82static Ecore_X_Randr_Mode *_ecore_xcb_randr_12_output_modes_get(Ecore_X_Window root,
83 Ecore_X_Randr_Output output,
84 int *num,
85 int *npreferred);
86static Ecore_X_Randr_Mode *_ecore_xcb_randr_13_output_modes_get(Ecore_X_Window root,
87 Ecore_X_Randr_Output output,
88 int *num,
89 int *npreferred);
90static Ecore_X_Randr_Mode_Info *_ecore_xcb_randr_12_mode_info_get(Ecore_X_Window root,
91 Ecore_X_Randr_Mode mode);
92static Ecore_X_Randr_Mode_Info *_ecore_xcb_randr_13_mode_info_get(Ecore_X_Window root,
93 Ecore_X_Randr_Mode mode);
94static Ecore_X_Randr_Mode_Info **_ecore_xcb_randr_12_modes_info_get(Ecore_X_Window root,
95 int *num);
96static Ecore_X_Randr_Mode_Info **_ecore_xcb_randr_13_modes_info_get(Ecore_X_Window root,
97 int *num);
98static void _ecore_xcb_randr_12_mode_size_get(Ecore_X_Window root,
99 Ecore_X_Randr_Mode mode,
100 int *w,
101 int *h);
102static void _ecore_xcb_randr_13_mode_size_get(Ecore_X_Window root,
103 Ecore_X_Randr_Mode mode,
104 int *w,
105 int *h);
106static Ecore_X_Randr_Output *_ecore_xcb_randr_12_output_clones_get(Ecore_X_Window root,
107 Ecore_X_Randr_Output output,
108 int *num);
109static Ecore_X_Randr_Output *_ecore_xcb_randr_13_output_clones_get(Ecore_X_Window root,
110 Ecore_X_Randr_Output output,
111 int *num);
112static Ecore_X_Randr_Crtc *_ecore_xcb_randr_12_output_possible_crtcs_get(Ecore_X_Window root,
113 Ecore_X_Randr_Output output,
114 int *num);
115static Ecore_X_Randr_Crtc *_ecore_xcb_randr_13_output_possible_crtcs_get(Ecore_X_Window root,
116 Ecore_X_Randr_Output output,
117 int *num);
118static char *_ecore_xcb_randr_12_output_name_get(Ecore_X_Window root,
119 Ecore_X_Randr_Output output,
120 int *len);
121static char *_ecore_xcb_randr_13_output_name_get(Ecore_X_Window root,
122 Ecore_X_Randr_Output output,
123 int *len);
124static Ecore_X_Randr_Connection_Status _ecore_xcb_randr_12_output_connection_status_get(Ecore_X_Window root,
125 Ecore_X_Randr_Output output);
126static Ecore_X_Randr_Connection_Status _ecore_xcb_randr_13_output_connection_status_get(Ecore_X_Window root,
127 Ecore_X_Randr_Output output);
128static Ecore_X_Randr_Output *_ecore_xcb_randr_12_outputs_get(Ecore_X_Window root,
129 int *num);
130static Ecore_X_Randr_Output *_ecore_xcb_randr_13_outputs_get(Ecore_X_Window root,
131 int *num);
132static Ecore_X_Randr_Crtc _ecore_xcb_randr_12_output_crtc_get(Ecore_X_Window root,
133 Ecore_X_Randr_Output output);
134static Ecore_X_Randr_Crtc _ecore_xcb_randr_13_output_crtc_get(Ecore_X_Window root,
135 Ecore_X_Randr_Output output);
136
137/* local variables */
138static Eina_Bool _randr_avail = EINA_FALSE;
139static int _randr_version = -1;
140
141/* external variables */
142int _ecore_xcb_event_randr = -1;
143
144void
145_ecore_xcb_randr_init(void)
146{
147 LOGFN(__FILE__, __LINE__, __FUNCTION__);
148
149#ifdef ECORE_XCB_RANDR
150 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_randr_id);
151#endif
152}
153
154void
155_ecore_xcb_randr_finalize(void)
156{
157#ifdef ECORE_XCB_RANDR
158 const xcb_query_extension_reply_t *ext_reply;
159#endif
160
161 LOGFN(__FILE__, __LINE__, __FUNCTION__);
162
163#ifdef ECORE_XCB_RANDR
164 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_randr_id);
165 if ((ext_reply) && (ext_reply->present))
166 {
167 xcb_randr_query_version_cookie_t cookie;
168 xcb_randr_query_version_reply_t *reply;
169
170 cookie =
171 xcb_randr_query_version_unchecked(_ecore_xcb_conn,
172 XCB_RANDR_MAJOR_VERSION,
173 XCB_RANDR_MINOR_VERSION);
174 reply = xcb_randr_query_version_reply(_ecore_xcb_conn, cookie, NULL);
175 if (reply)
176 {
177 if ((reply->major_version >= XCB_RANDR_MAJOR_VERSION) &&
178 (reply->minor_version >= XCB_RANDR_MINOR_VERSION))
179 _randr_avail = EINA_TRUE;
180
181 _randr_version =
182 ((reply->major_version << 16) | reply->minor_version);
183
184 free(reply);
185 }
186
187 if (_randr_avail)
188 _ecore_xcb_event_randr = ext_reply->first_event;
189 }
190#endif
191}
192
193static Eina_Bool
194_ecore_xcb_randr_root_validate(Ecore_X_Window root)
195{
196#ifdef ECORE_XCB_RANDR
197 Ecore_X_Randr_Screen scr = -1;
198# define RANDR_VALIDATE_ROOT(screen, root) \
199 ((screen == _ecore_xcb_randr_root_to_screen(root)) != -1)
200#endif
201
202 LOGFN(__FILE__, __LINE__, __FUNCTION__);
203
204#ifdef ECORE_XCB_RANDR
205 if ((root) && RANDR_VALIDATE_ROOT(scr, root))
206 return EINA_TRUE;
207#endif
208
209 return EINA_FALSE;
210}
211
212static int
213_ecore_xcb_randr_root_to_screen(Ecore_X_Window root)
214{
215 int count = 0, num = 0;
216
217 CHECK_XCB_CONN;
218
219 count = xcb_setup_roots_length(xcb_get_setup(_ecore_xcb_conn));
220 for (num = 0; num < count; num++)
221 if (_ecore_xcb_window_root_of_screen_get(num) == root)
222 return num;
223
224 return -1;
225}
226
227/* public functions */
228
229/*
230 * @brief query whether randr is available or not
231 * @return EINA_TRUE, if extension is available, else EINA_FALSE
232 */
233EAPI Eina_Bool
234ecore_x_randr_query(void)
235{
236 return _randr_avail;
237}
238
239/*
240 * @return version of the RandRR extension supported by the server or,
241 * in case RandRR extension is not available, Ecore_X_Randr_Unset (=-1).
242 * bit version information: 31 MAJOR 16 | 15 MINOR 0
243 */
244EAPI int
245ecore_x_randr_version_get(void)
246{
247 return _randr_version;
248}
249
250/*
251 * @param root window which's primary output will be queried
252 */
253EAPI Ecore_X_Randr_Orientation
254ecore_x_randr_screen_primary_output_orientations_get(Ecore_X_Window root)
255{
256 int ret = Ecore_X_Randr_None;
257#ifdef ECORE_XCB_RANDR
258 xcb_randr_get_screen_info_cookie_t cookie;
259 xcb_randr_get_screen_info_reply_t *reply;
260#endif
261
262 LOGFN(__FILE__, __LINE__, __FUNCTION__);
263 CHECK_XCB_CONN;
264
265#ifdef ECORE_XCB_RANDR
266 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
267 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
268 if (reply)
269 {
270 ret = reply->rotations;
271 free(reply);
272 }
273#endif
274
275 return ret;
276}
277
278/*
279 * @param root window which's primary output will be queried
280 * @return the current orientation of the root window's screen primary output
281 */
282EAPI Ecore_X_Randr_Orientation
283ecore_x_randr_screen_primary_output_orientation_get(Ecore_X_Window root)
284{
285 int ret = Ecore_X_Randr_None;
286#ifdef ECORE_XCB_RANDR
287 xcb_randr_get_screen_info_cookie_t cookie;
288 xcb_randr_get_screen_info_reply_t *reply;
289#endif
290
291 LOGFN(__FILE__, __LINE__, __FUNCTION__);
292 CHECK_XCB_CONN;
293
294#ifdef ECORE_XCB_RANDR
295 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
296 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
297 if (reply)
298 {
299 ret = reply->rotation;
300 free(reply);
301 }
302#endif
303
304 return ret;
305}
306
307/*
308 * @brief sets a given screen's primary output's orientation
309 * @param root window which's screen's primary output will be queried
310 * @param orientation orientation which should be set for the root window's screen primary output
311 * @return EINA_TRUE if the primary output's orientation could be successfully altered
312 */
313EAPI Eina_Bool
314ecore_x_randr_screen_primary_output_orientation_set(Ecore_X_Window root,
315 Ecore_X_Randr_Orientation orientation)
316{
317 int ret = EINA_FALSE;
318#ifdef ECORE_XCB_RANDR
319 xcb_randr_get_screen_info_cookie_t cookie;
320 xcb_randr_get_screen_info_reply_t *reply;
321#endif
322
323 LOGFN(__FILE__, __LINE__, __FUNCTION__);
324 CHECK_XCB_CONN;
325
326#ifdef ECORE_XCB_RANDR
327 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
328 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
329 if (reply)
330 {
331 xcb_randr_set_screen_config_cookie_t scookie;
332 xcb_randr_set_screen_config_reply_t *sreply;
333
334 scookie =
335 xcb_randr_set_screen_config_unchecked(_ecore_xcb_conn, root,
336 XCB_CURRENT_TIME,
337 reply->config_timestamp,
338 reply->sizeID, orientation,
339 reply->rate);
340 sreply =
341 xcb_randr_set_screen_config_reply(_ecore_xcb_conn, scookie, NULL);
342 if (!sreply)
343 ret = EINA_FALSE;
344 else
345 {
346 ret = (sreply->status == XCB_RANDR_SET_CONFIG_SUCCESS) ?
347 EINA_TRUE : EINA_FALSE;
348 free(sreply);
349 }
350 free(reply);
351 }
352#endif
353
354 return ret;
355}
356
357/*
358 * @brief gets a screen's primary output's possible sizes
359 * @param root window which's primary output will be queried
360 * @param num number of sizes reported as supported by the screen's primary output
361 * @return an array of sizes reported as supported by the screen's primary output or - if query failed - NULL
362 */
363EAPI Ecore_X_Randr_Screen_Size_MM *
364ecore_x_randr_screen_primary_output_sizes_get(Ecore_X_Window root,
365 int *num)
366{
367#ifdef ECORE_XCB_RANDR
368 xcb_randr_get_screen_info_cookie_t cookie;
369 xcb_randr_get_screen_info_reply_t *reply;
370 Ecore_X_Randr_Screen_Size_MM *ret = NULL;
371#endif
372
373 LOGFN(__FILE__, __LINE__, __FUNCTION__);
374 CHECK_XCB_CONN;
375
376#ifdef ECORE_XCB_RANDR
377 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
378 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
379 if (reply)
380 {
381 int len = 0, i = 0;
382 xcb_randr_screen_size_t *sizes;
383
384 len = xcb_randr_get_screen_info_sizes_length(reply);
385 sizes = xcb_randr_get_screen_info_sizes(reply);
386 if ((!sizes) || (len <= 0))
387 {
388 free(reply);
389 return NULL;
390 }
391 if (num) *num = len;
392 ret = calloc(len, sizeof(Ecore_X_Randr_Screen_Size_MM));
393 if (!ret)
394 {
395 free(reply);
396 return NULL;
397 }
398 for (i = 0; i < len; i++)
399 {
400 ret[i].width = sizes[i].width;
401 ret[i].height = sizes[i].height;
402 ret[i].width_mm = sizes[i].mwidth;
403 ret[i].height_mm = sizes[i].mheight;
404 }
405
406 free(reply);
407 }
408
409 return ret;
410#else
411 return NULL;
412#endif
413}
414
415/*
416 * @brief get the current set size of a given screen's primary output
417 * @param root window which's primary output will be queried
418 * @param w the current size's width
419 * @param h the current size's height
420 * @param w_mm the current size's width in mm
421 * @param h_mm the current size's height in mm
422 * @param size_index of current set size to be used with ecore_x_randr_primary_output_size_set()
423 */
424EAPI void
425ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root,
426 int *w,
427 int *h,
428 int *w_mm,
429 int *h_mm,
430 int *size_index)
431{
432#ifdef ECORE_XCB_RANDR
433 xcb_randr_get_screen_info_cookie_t cookie;
434 xcb_randr_get_screen_info_reply_t *reply;
435#endif
436
437 LOGFN(__FILE__, __LINE__, __FUNCTION__);
438 CHECK_XCB_CONN;
439
440#ifdef ECORE_XCB_RANDR
441 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
442 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
443 if (reply)
444 {
445 int len = 0, idx = 0;
446 xcb_randr_screen_size_t *sizes;
447
448 len = xcb_randr_get_screen_info_sizes_length(reply);
449 sizes = xcb_randr_get_screen_info_sizes(reply);
450 if ((!sizes) || (len <= 0))
451 {
452 free(reply);
453 return;
454 }
455 idx = reply->sizeID;
456 if ((idx < len) && (idx >= 0))
457 {
458 if (w) *w = sizes[idx].width;
459 if (h) *h = sizes[idx].height;
460 if (w_mm) *w_mm = sizes[idx].mwidth;
461 if (h_mm) *h_mm = sizes[idx].mheight;
462 if (size_index) *size_index = idx;
463 }
464
465 free(reply);
466 }
467#endif
468}
469
470/*
471 * @brief sets a given screen's primary output size, but disables all other outputs at the same time
472 * @param root window which's primary output will be queried
473 * @param size_index within the list of sizes reported as supported by the root window's screen primary output
474 * @return EINA_TRUE on success, EINA_FALSE on failure due to e.g. invalid times
475 */
476EAPI Eina_Bool
477ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root,
478 int size_index)
479{
480 Eina_Bool ret = EINA_FALSE;
481#ifdef ECORE_XCB_RANDR
482 xcb_randr_get_screen_info_cookie_t cookie;
483 xcb_randr_get_screen_info_reply_t *reply;
484#endif
485
486 LOGFN(__FILE__, __LINE__, __FUNCTION__);
487 CHECK_XCB_CONN;
488
489#ifdef ECORE_XCB_RANDR
490 if (!((size_index >= 0) && (_ecore_xcb_randr_root_validate(root))))
491 return EINA_FALSE;
492
493 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
494 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
495 if (reply)
496 {
497 int len = 0;
498
499 len = xcb_randr_get_screen_info_sizes_length(reply);
500 if (len <= 0)
501 {
502 free(reply);
503 return EINA_FALSE;
504 }
505 if ((size_index < len) && (size_index >= 0))
506 {
507 xcb_randr_set_screen_config_cookie_t scookie;
508 xcb_randr_set_screen_config_reply_t *sreply;
509
510 scookie =
511 xcb_randr_set_screen_config_unchecked(_ecore_xcb_conn, root,
512 XCB_CURRENT_TIME,
513 reply->config_timestamp,
514 size_index,
515 reply->rotation,
516 reply->rate);
517 sreply =
518 xcb_randr_set_screen_config_reply(_ecore_xcb_conn,
519 scookie, NULL);
520 if (!sreply)
521 ret = EINA_FALSE;
522 else
523 {
524 ret = (sreply->status == XCB_RANDR_SET_CONFIG_SUCCESS) ?
525 EINA_TRUE : EINA_FALSE;
526 free(sreply);
527 }
528 }
529
530 free(reply);
531 }
532#endif
533 return ret;
534}
535
536/*
537 * @param root window which's primary output will be queried
538 * @return currently used refresh rate or - if request failed or RandRR is not available - 0.0
539 */
540EAPI Ecore_X_Randr_Refresh_Rate
541ecore_x_randr_screen_primary_output_current_refresh_rate_get(Ecore_X_Window root)
542{
543#ifdef ECORE_XCB_RANDR
544 xcb_randr_get_screen_info_cookie_t cookie;
545 xcb_randr_get_screen_info_reply_t *reply;
546 Ecore_X_Randr_Refresh_Rate ret = 0.0;
547#endif
548
549 LOGFN(__FILE__, __LINE__, __FUNCTION__);
550 CHECK_XCB_CONN;
551
552#ifdef ECORE_XCB_RANDR
553 if (!_ecore_xcb_randr_root_validate(root)) return ret;
554
555 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
556 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
557 if (reply)
558 {
559 ret = reply->rate;
560 free(reply);
561 }
562
563 return ret;
564#else
565 return 0.0;
566#endif
567}
568
569/*
570 * @param root window which's primary output will be queried
571 * @param size_index referencing the size to query valid refresh rates for
572 * @return currently used refresh rate or - if request failed or RandRR is not available - NULL
573 */
574EAPI Ecore_X_Randr_Refresh_Rate *
575ecore_x_randr_screen_primary_output_refresh_rates_get(Ecore_X_Window root,
576 int size_index,
577 int *num)
578{
579#ifdef ECORE_XCB_RANDR
580 xcb_randr_get_screen_info_cookie_t cookie;
581 xcb_randr_get_screen_info_reply_t *reply;
582 Ecore_X_Randr_Refresh_Rate *ret = NULL;
583#endif
584
585 LOGFN(__FILE__, __LINE__, __FUNCTION__);
586 CHECK_XCB_CONN;
587
588#ifdef ECORE_XCB_RANDR
589 if (!_ecore_xcb_randr_root_validate(root)) return ret;
590
591 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
592 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
593 if (reply)
594 {
595 int len = 0;
596
597 len = xcb_randr_get_screen_info_rates_length(reply);
598 if (num) *num = len;
599
600 ret = malloc(sizeof(Ecore_X_Randr_Refresh_Rate) * len);
601 if (ret)
602 {
603 xcb_randr_refresh_rates_iterator_t iter;
604 int i = 0;
605
606 iter = xcb_randr_get_screen_info_rates_iterator(reply);
607 while (i++ < size_index)
608 xcb_randr_refresh_rates_next(&iter);
609
610 memcpy(ret, xcb_randr_refresh_rates_rates(iter.data),
611 sizeof(Ecore_X_Randr_Refresh_Rate) * len);
612 }
613 free(reply);
614 }
615
616 return ret;
617#else
618 return NULL;
619#endif
620}
621
622/*
623 * @brief sets the current primary output's refresh rate
624 * @param root window which's primary output will be queried
625 * @param size_index referencing the size to be set
626 * @param rate the refresh rate to be set
627 * @return EINA_TRUE on success else EINA_FALSE
628 */
629EAPI Eina_Bool
630ecore_x_randr_screen_primary_output_refresh_rate_set(Ecore_X_Window root,
631 int size_index,
632 Ecore_X_Randr_Refresh_Rate rate)
633{
634 Eina_Bool ret = EINA_FALSE;
635#ifdef ECORE_XCB_RANDR
636 xcb_randr_get_screen_info_cookie_t cookie;
637 xcb_randr_get_screen_info_reply_t *reply;
638#endif
639
640 LOGFN(__FILE__, __LINE__, __FUNCTION__);
641 CHECK_XCB_CONN;
642
643#ifdef ECORE_XCB_RANDR
644 if (_randr_version < RANDR_1_1) return EINA_FALSE;
645
646 cookie = xcb_randr_get_screen_info_unchecked(_ecore_xcb_conn, root);
647 reply = xcb_randr_get_screen_info_reply(_ecore_xcb_conn, cookie, NULL);
648 if (reply)
649 {
650 xcb_randr_set_screen_config_cookie_t scookie;
651 xcb_randr_set_screen_config_reply_t *sreply;
652
653 scookie =
654 xcb_randr_set_screen_config_unchecked(_ecore_xcb_conn, root,
655 XCB_CURRENT_TIME,
656 reply->config_timestamp,
657 size_index,
658 reply->rotation, rate);
659 sreply =
660 xcb_randr_set_screen_config_reply(_ecore_xcb_conn,
661 scookie, NULL);
662 if (!sreply)
663 ret = EINA_FALSE;
664 else
665 {
666 ret = (sreply->status == XCB_RANDR_SET_CONFIG_SUCCESS) ?
667 EINA_TRUE : EINA_FALSE;
668 free(sreply);
669 }
670 free(reply);
671 }
672#endif
673
674 return ret;
675}
676
677/*
678 * @brief free detailed mode information. The pointer handed in will be set to
679 * NULL after freeing the memory.
680 * @param mode_info the mode information that should be freed
681 */
682EAPI void
683ecore_x_randr_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info)
684{
685 LOGFN(__FILE__, __LINE__, __FUNCTION__);
686 CHECK_XCB_CONN;
687
688 RANDR_CHECK_1_2_RET();
689
690 if (!mode_info) return;
691
692 if (mode_info->name) free(mode_info->name);
693 free(mode_info);
694 mode_info = NULL;
695}
696
697/*
698 * @param root window which's screen should be queried
699 * @return Ecore_X_Randr_Ouptut_Id or - if query failed or none is set - Ecore_X_Randr_None
700 */
701EAPI Ecore_X_Randr_Output
702ecore_x_randr_primary_output_get(Ecore_X_Window root)
703{
704 Ecore_X_Randr_Output ret = Ecore_X_Randr_None;
705#ifdef ECORE_XCB_RANDR
706 xcb_randr_get_output_primary_cookie_t cookie;
707 xcb_randr_get_output_primary_reply_t *reply;
708#endif
709
710 LOGFN(__FILE__, __LINE__, __FUNCTION__);
711 CHECK_XCB_CONN;
712
713#ifdef ECORE_XCB_RANDR
714 RANDR_CHECK_1_3_RET(Ecore_X_Randr_None);
715
716 if (!_ecore_xcb_randr_root_validate(root))
717 return Ecore_X_Randr_None;
718
719 cookie = xcb_randr_get_output_primary_unchecked(_ecore_xcb_conn, root);
720 reply = xcb_randr_get_output_primary_reply(_ecore_xcb_conn, cookie, NULL);
721 if (reply)
722 {
723 ret = reply->output;
724 free(reply);
725 }
726#endif
727 return ret;
728}
729
730/*
731 * @param root window which's screen should be queried
732 * @param output that should be set as given root window's screen primary output
733 */
734EAPI void
735ecore_x_randr_primary_output_set(Ecore_X_Window root,
736 Ecore_X_Randr_Output output)
737{
738 LOGFN(__FILE__, __LINE__, __FUNCTION__);
739 CHECK_XCB_CONN;
740
741#ifdef ECORE_XCB_RANDR
742 RANDR_CHECK_1_3_RET();
743
744 if ((output) && (_ecore_xcb_randr_root_validate(root)))
745 xcb_randr_set_output_primary(_ecore_xcb_conn, root, output);
746#endif
747}
748
749EAPI Ecore_X_Randr_Mode *
750ecore_x_randr_output_modes_get(Ecore_X_Window root,
751 Ecore_X_Randr_Output output,
752 int *num,
753 int *npreferred)
754{
755 Ecore_X_Randr_Mode *modes = NULL;
756
757 LOGFN(__FILE__, __LINE__, __FUNCTION__);
758 CHECK_XCB_CONN;
759
760#ifdef ECORE_XCB_RANDR
761 RANDR_CHECK_1_2_RET(NULL);
762
763 if (_randr_version >= RANDR_1_3)
764 {
765 modes =
766 _ecore_xcb_randr_13_output_modes_get(root, output, num, npreferred);
767 }
768 else if (_randr_version == RANDR_1_2)
769 {
770 modes =
771 _ecore_xcb_randr_12_output_modes_get(root, output, num, npreferred);
772 }
773#endif
774
775 return modes;
776}
777
778EAPI Eina_Bool
779ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output, Ecore_X_Randr_Mode mode)
780{
781 LOGFN(__FILE__, __LINE__, __FUNCTION__);
782 CHECK_XCB_CONN;
783
784#ifdef ECORE_XCB_RANDR
785 RANDR_CHECK_1_2_RET(EINA_FALSE);
786
787 if ((output == Ecore_X_Randr_None) || (mode == Ecore_X_Randr_None))
788 return EINA_FALSE;
789
790 xcb_randr_add_output_mode(_ecore_xcb_conn, output, mode);
791 return EINA_TRUE;
792#endif
793 return EINA_FALSE;
794}
795
796/*
797 * @brief get detailed information for a given mode id
798 * @param root window which's screen's ressources are queried
799 * @param mode the XID which identifies the mode of interest
800 * @return mode's detailed information
801 */
802EAPI Ecore_X_Randr_Mode_Info *
803ecore_x_randr_mode_info_get(Ecore_X_Window root,
804 Ecore_X_Randr_Mode mode)
805{
806 Ecore_X_Randr_Mode_Info *ret = NULL;
807
808 LOGFN(__FILE__, __LINE__, __FUNCTION__);
809 CHECK_XCB_CONN;
810
811#ifdef ECORE_XCB_RANDR
812 RANDR_CHECK_1_2_RET(NULL);
813
814 if (!_ecore_xcb_randr_root_validate(root)) return NULL;
815
816 if (_randr_version >= RANDR_1_3)
817 ret = _ecore_xcb_randr_13_mode_info_get(root, mode);
818 else if (_randr_version == RANDR_1_2)
819 ret = _ecore_xcb_randr_12_mode_info_get(root, mode);
820#endif
821 return ret;
822}
823
824/*
825 * @brief add a mode to a display
826 * @param root window to which's screen's ressources are added
827 * @param mode_info
828 * @return Ecore_X_Randr_Mode of the added mode. Ecore_X_Randr_None if mode
829 * adding failed.
830 * @since 1.2.0
831 */
832EAPI Ecore_X_Randr_Mode
833ecore_x_randr_mode_info_add(Ecore_X_Window root, Ecore_X_Randr_Mode_Info *mode_info)
834{
835#ifdef ECORE_XCB_RANDR
836 Ecore_X_Randr_Mode mode = Ecore_X_Randr_None;
837 xcb_randr_create_mode_cookie_t cookie;
838 xcb_randr_create_mode_reply_t *reply;
839 xcb_randr_mode_info_t info;
840 int namelen = 0;
841#endif
842
843 LOGFN(__FILE__, __LINE__, __FUNCTION__);
844 CHECK_XCB_CONN;
845
846#ifdef ECORE_XCB_RANDR
847 RANDR_CHECK_1_2_RET(EINA_FALSE);
848
849 if (!mode_info) return Ecore_X_Randr_None;
850 if (!_ecore_xcb_randr_root_validate(root)) return Ecore_X_Randr_None;
851
852 namelen = strlen(mode_info->name);
853
854 memset(&info, 0, sizeof(info));
855 info.width = mode_info->width;
856 info.height = mode_info->height;
857 info.dot_clock = mode_info->dotClock;
858 info.hsync_start = mode_info->hSyncStart;
859 info.hsync_end = mode_info->hSyncEnd;
860 info.htotal = mode_info->hTotal;
861 info.hskew = mode_info->hSkew;
862 info.vsync_start = mode_info->vSyncStart;
863 info.vsync_end = mode_info->vSyncEnd;
864 info.vtotal = mode_info->vTotal;
865 info.mode_flags = mode_info->modeFlags;
866 info.name_len = namelen;
867
868 cookie =
869 xcb_randr_create_mode_unchecked(_ecore_xcb_conn, root, info,
870 namelen, mode_info->name);
871 reply = xcb_randr_create_mode_reply(_ecore_xcb_conn, cookie, NULL);
872 if (reply)
873 {
874 mode = mode_info->xid;
875 free(reply);
876 }
877#endif
878 return mode;
879}
880
881/*
882 * @brief get detailed information for all modes related to a root window's screen
883 * @param root window which's screen's ressources are queried
884 * @param num number of modes returned
885 * @return modes' information
886 */
887EAPI Ecore_X_Randr_Mode_Info **
888ecore_x_randr_modes_info_get(Ecore_X_Window root,
889 int *num)
890{
891 Ecore_X_Randr_Mode_Info **ret = NULL;
892
893 LOGFN(__FILE__, __LINE__, __FUNCTION__);
894 CHECK_XCB_CONN;
895
896 if (num) *num = 0;
897
898#ifdef ECORE_XCB_RANDR
899 RANDR_CHECK_1_2_RET(NULL);
900
901 if (!_ecore_xcb_randr_root_validate(root)) return NULL;
902
903 if (_randr_version >= RANDR_1_3)
904 ret = _ecore_xcb_randr_13_modes_info_get(root, num);
905 else if (_randr_version == RANDR_1_2)
906 ret = _ecore_xcb_randr_12_modes_info_get(root, num);
907#endif
908 return ret;
909}
910
911/**
912 * @brief gets the width and hight of a given mode
913 * @param mode the mode which's size is to be looked up
914 * @param w width of given mode in px
915 * @param h height of given mode in px
916 */
917EAPI void
918ecore_x_randr_mode_size_get(Ecore_X_Window root,
919 Ecore_X_Randr_Mode mode,
920 int *w,
921 int *h)
922{
923 LOGFN(__FILE__, __LINE__, __FUNCTION__);
924 CHECK_XCB_CONN;
925
926#ifdef ECORE_XCB_RANDR
927 RANDR_CHECK_1_2_RET();
928
929 if (mode == Ecore_X_Randr_None) return;
930
931 if (_randr_version >= RANDR_1_3)
932 _ecore_xcb_randr_13_mode_size_get(root, mode, w, h);
933 else if (_randr_version == RANDR_1_2)
934 _ecore_xcb_randr_12_mode_size_get(root, mode, w, h);
935#endif
936}
937
938/**
939 * @brief gets the EDID information of an attached output if available.
940 * Note that this information is not to be compared using ordinary string
941 * comparison functions, since it includes 0-bytes.
942 * @param root window this information should be queried from
943 * @param output the XID of the output
944 * @param length length of the byte-array. If NULL, request will fail.
945 */
946EAPI unsigned char *
947ecore_x_randr_output_edid_get(Ecore_X_Window root,
948 Ecore_X_Randr_Output output,
949 unsigned long *length)
950{
951 unsigned char *ret = NULL;
952#ifdef ECORE_XCB_RANDR
953 xcb_randr_get_output_property_cookie_t cookie;
954 xcb_randr_get_output_property_reply_t *reply;
955 Ecore_X_Atom atom;
956#endif
957
958 LOGFN(__FILE__, __LINE__, __FUNCTION__);
959 CHECK_XCB_CONN;
960
961#ifdef ECORE_XCB_RANDR
962 RANDR_CHECK_1_2_RET(NULL);
963
964 if ((!length) || (!_ecore_xcb_randr_output_validate(root, output)))
965 return NULL;
966
967 atom = ecore_x_atom_get("EDID");
968 cookie =
969 xcb_randr_get_output_property_unchecked(_ecore_xcb_conn, output, atom,
970 XCB_GET_PROPERTY_TYPE_ANY,
971 0, 100, 0, 0);
972 reply =
973 xcb_randr_get_output_property_reply(_ecore_xcb_conn, cookie, NULL);
974 if (reply)
975 {
976 if ((reply->type == XCB_ATOM_INTEGER) && (reply->format == 8))
977 {
978 if (length) *length = reply->num_items;
979 if ((ret = malloc(reply->num_items * sizeof(unsigned char))))
980 {
981 memcpy(ret, xcb_randr_get_output_property_data(reply),
982 (reply->num_items * sizeof(unsigned char)));
983 }
984 }
985 free(reply);
986 }
987#endif
988 return ret;
989}
990
991/**
992 * @brief gets the the outputs which might be used simultenously on the same
993 * CRTC.
994 * @param root window that this information should be queried for.
995 * @param output the output which's clones we concern
996 * @param num number of possible clones
997 */
998EAPI Ecore_X_Randr_Output *
999ecore_x_randr_output_clones_get(Ecore_X_Window root,
1000 Ecore_X_Randr_Output output,
1001 int *num)
1002{
1003 Ecore_X_Randr_Output *outputs = NULL;
1004
1005 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1006 CHECK_XCB_CONN;
1007
1008#ifdef ECORE_XCB_RANDR
1009 RANDR_CHECK_1_2_RET(NULL);
1010
1011 if (output == Ecore_X_Randr_None) return NULL;
1012
1013 if (_randr_version >= RANDR_1_3)
1014 outputs = _ecore_xcb_randr_13_output_clones_get(root, output, num);
1015 else if (_randr_version == RANDR_1_2)
1016 outputs = _ecore_xcb_randr_12_output_clones_get(root, output, num);
1017#endif
1018 return outputs;
1019}
1020
1021EAPI Ecore_X_Randr_Crtc *
1022ecore_x_randr_output_possible_crtcs_get(Ecore_X_Window root,
1023 Ecore_X_Randr_Output output,
1024 int *num)
1025{
1026 Ecore_X_Randr_Crtc *crtcs = NULL;
1027
1028 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1029 CHECK_XCB_CONN;
1030
1031#ifdef ECORE_XCB_RANDR
1032 RANDR_CHECK_1_2_RET(NULL);
1033
1034 if (output == Ecore_X_Randr_None) return NULL;
1035
1036 if (_randr_version >= RANDR_1_3)
1037 crtcs = _ecore_xcb_randr_13_output_possible_crtcs_get(root, output, num);
1038 else if (_randr_version == RANDR_1_2)
1039 crtcs = _ecore_xcb_randr_12_output_possible_crtcs_get(root, output, num);
1040#endif
1041 return crtcs;
1042}
1043
1044/**
1045 * @brief gets the given output's name as reported by X
1046 * @param root the window which's screen will be queried
1047 * @param len length of returned c-string.
1048 * @return name of the output as reported by X
1049 */
1050EAPI char *
1051ecore_x_randr_output_name_get(Ecore_X_Window root,
1052 Ecore_X_Randr_Output output,
1053 int *len)
1054{
1055 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1056 CHECK_XCB_CONN;
1057
1058#ifdef ECORE_XCB_RANDR
1059 RANDR_CHECK_1_2_RET(NULL);
1060
1061 if (output == Ecore_X_Randr_None) return NULL;
1062
1063 if (_randr_version >= RANDR_1_3)
1064 return _ecore_xcb_randr_13_output_name_get(root, output, len);
1065 else if (_randr_version == RANDR_1_2)
1066 return _ecore_xcb_randr_12_output_name_get(root, output, len);
1067#endif
1068
1069 return NULL;
1070}
1071
1072EAPI Ecore_X_Randr_Connection_Status
1073ecore_x_randr_output_connection_status_get(Ecore_X_Window root,
1074 Ecore_X_Randr_Output output)
1075{
1076 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1077 CHECK_XCB_CONN;
1078
1079#ifdef ECORE_XCB_RANDR
1080 RANDR_CHECK_1_2_RET(ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN);
1081
1082 if (output == Ecore_X_Randr_None)
1083 return ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
1084
1085 if (_randr_version >= RANDR_1_3)
1086 return _ecore_xcb_randr_13_output_connection_status_get(root, output);
1087 else if (_randr_version == RANDR_1_2)
1088 return _ecore_xcb_randr_12_output_connection_status_get(root, output);
1089#endif
1090
1091 return ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
1092}
1093
1094EAPI Ecore_X_Randr_Output *
1095ecore_x_randr_outputs_get(Ecore_X_Window root,
1096 int *num)
1097{
1098 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1099 CHECK_XCB_CONN;
1100
1101#ifdef ECORE_XCB_RANDR
1102 RANDR_CHECK_1_2_RET(NULL);
1103
1104 if (_randr_version >= RANDR_1_3)
1105 return _ecore_xcb_randr_13_outputs_get(root, num);
1106 else if (_randr_version == RANDR_1_2)
1107 return _ecore_xcb_randr_12_outputs_get(root, num);
1108#endif
1109
1110 return NULL;
1111}
1112
1113EAPI Ecore_X_Randr_Crtc
1114ecore_x_randr_output_crtc_get(Ecore_X_Window root,
1115 Ecore_X_Randr_Output output)
1116{
1117 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1118 CHECK_XCB_CONN;
1119
1120#ifdef ECORE_XCB_RANDR
1121 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
1122
1123 if (output == Ecore_X_Randr_None) return Ecore_X_Randr_None;
1124
1125 if (_randr_version >= RANDR_1_3)
1126 return _ecore_xcb_randr_13_output_crtc_get(root, output);
1127 else if (_randr_version == RANDR_1_2)
1128 return _ecore_xcb_randr_12_output_crtc_get(root, output);
1129#endif
1130
1131 return Ecore_X_Randr_None;
1132}
1133
1134EAPI void
1135ecore_x_randr_output_size_mm_get(Ecore_X_Window root, Ecore_X_Randr_Output output, int *w_mm, int *h_mm)
1136{
1137#ifdef ECORE_XCB_RANDR
1138 xcb_randr_get_output_info_cookie_t ocookie;
1139 xcb_randr_get_output_info_reply_t *oreply;
1140 xcb_timestamp_t timestamp = 0;
1141#endif
1142
1143 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1144 CHECK_XCB_CONN;
1145
1146 if (w_mm) *w_mm = 0;
1147 if (h_mm) *h_mm = 0;
1148
1149#ifdef ECORE_XCB_RANDR
1150 RANDR_CHECK_1_2_RET();
1151
1152 if ((output != Ecore_X_Randr_None) && (_randr_version >= RANDR_1_3))
1153 {
1154 xcb_randr_get_screen_resources_current_reply_t *reply;
1155
1156 reply = _ecore_xcb_randr_13_get_resources(root);
1157 timestamp = reply->config_timestamp;
1158 free(reply);
1159 }
1160 else if ((output != Ecore_X_Randr_None) && (_randr_version == RANDR_1_2))
1161 {
1162 xcb_randr_get_screen_resources_reply_t *reply;
1163
1164 reply = _ecore_xcb_randr_12_get_resources(root);
1165 timestamp = reply->config_timestamp;
1166 free(reply);
1167 }
1168
1169 ocookie =
1170 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output, timestamp);
1171 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn, ocookie, NULL);
1172 if (oreply)
1173 {
1174 if (w_mm) *w_mm = oreply->mm_width;
1175 if (h_mm) *h_mm = oreply->mm_height;
1176 free(oreply);
1177 }
1178#endif
1179}
1180
1181/**
1182 * @brief sets the demanded parameters for a given CRTC. Note that the CRTC is
1183 * auto enabled in it's preferred mode, when it was disabled before.
1184 * @param root the root window which's default display will be queried
1185 * @param crtc the CRTC which's configuration should be altered
1186 * @param outputs an array of outputs, that should display this CRTC's content.
1187 * @param noutputs number of outputs in the array of outputs.
1188 * If set to Ecore_X_Randr_Unset, current outputs and number of outputs will be used.
1189 * If set to Ecore_X_Randr_None, CRTC will be disabled
1190 * @param x new x coordinate. If <0 (e.g. Ecore_X_Randr_Unset) the current x
1191 * corrdinate will be assumed.
1192 * @param y new y coordinate. If <0 (e.g. Ecore_X_Randr_Unset) the current y
1193 * corrdinate will be assumed.
1194 * @param mode the new mode to be set. If Ecore_X_Randr_None is passed, the
1195 * CRTC will be disabled. If Ecore_X_Randr_Unset is passed, the current mode is assumed.
1196 * @param orientation the new orientation to be set. If Ecore_X_Randr_Unset is used,
1197 * the current mode is assumed.
1198 * @return EINA_TRUE if the configuration alteration was successful, else
1199 * EINA_FALSE
1200 */
1201EAPI Eina_Bool
1202ecore_x_randr_crtc_settings_set(Ecore_X_Window root,
1203 Ecore_X_Randr_Crtc crtc,
1204 Ecore_X_Randr_Output *outputs,
1205 int num,
1206 int x,
1207 int y,
1208 Ecore_X_Randr_Mode mode,
1209 Ecore_X_Randr_Orientation orientation)
1210{
1211 Eina_Bool ret = EINA_FALSE;
1212#ifdef ECORE_XCB_RANDR
1213 xcb_timestamp_t stamp = 0;
1214 xcb_randr_get_crtc_info_cookie_t ccookie;
1215 xcb_randr_get_crtc_info_reply_t *creply;
1216#endif
1217
1218 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1219 CHECK_XCB_CONN;
1220
1221#ifdef ECORE_XCB_RANDR
1222 RANDR_CHECK_1_2_RET(EINA_FALSE);
1223
1224 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1225
1226 if (_randr_version >= RANDR_1_3)
1227 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1228 else if (_randr_version == RANDR_1_2)
1229 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1230
1231 ccookie =
1232 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1233 creply =
1234 xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ccookie, NULL);
1235 if (creply)
1236 {
1237 xcb_randr_set_crtc_config_cookie_t scookie;
1238 xcb_randr_set_crtc_config_reply_t *sreply;
1239
1240 if ((mode == Ecore_X_Randr_None) ||
1241 (num == Ecore_X_Randr_None))
1242 {
1243 outputs = NULL;
1244 num = 0;
1245 }
1246 else if (num == (int)Ecore_X_Randr_Unset)
1247 {
1248 outputs = xcb_randr_get_crtc_info_outputs(creply);
1249 num = creply->num_outputs;
1250 }
1251 if ((int)mode == Ecore_X_Randr_Unset) mode = creply->mode;
1252 if (x < 0) x = creply->x;
1253 if (y < 0) y = creply->y;
1254 if ((int)orientation == Ecore_X_Randr_Unset)
1255 orientation = creply->rotation;
1256
1257 scookie =
1258 xcb_randr_set_crtc_config_unchecked(_ecore_xcb_conn,
1259 crtc, XCB_CURRENT_TIME, stamp,
1260 x, y, mode, orientation,
1261 num, outputs);
1262 sreply =
1263 xcb_randr_set_crtc_config_reply(_ecore_xcb_conn, scookie, NULL);
1264 if (sreply)
1265 {
1266 ret = (sreply->status == XCB_RANDR_SET_CONFIG_SUCCESS) ?
1267 EINA_TRUE : EINA_FALSE;
1268 free(sreply);
1269 }
1270 free(creply);
1271 }
1272#endif
1273
1274 return ret;
1275}
1276
1277/**
1278 * @brief sets a mode for a CRTC and the outputs attached to it
1279 * @param root the window's screen to be queried
1280 * @param crtc the CRTC which shall be set
1281 * @param outputs array of outputs which have to be compatible with the mode. If
1282 * NULL CRTC will be disabled.
1283 * @param noutputs number of outputs in array to be used. Use
1284 * Ecore_X_Randr_Unset (or -1) to use currently used outputs.
1285 * @param mode XID of the mode to be set. If set to 0 the CRTC will be disabled.
1286 * If set to -1 the call will fail.
1287 * @return EINA_TRUE if mode setting was successful. Else EINA_FALSE
1288 */
1289EAPI Eina_Bool
1290ecore_x_randr_crtc_mode_set(Ecore_X_Window root,
1291 Ecore_X_Randr_Crtc crtc,
1292 Ecore_X_Randr_Output *outputs,
1293 int num,
1294 Ecore_X_Randr_Mode mode)
1295{
1296 Eina_Bool ret = EINA_FALSE;
1297
1298 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1299 CHECK_XCB_CONN;
1300
1301#ifdef ECORE_XCB_RANDR
1302 RANDR_CHECK_1_2_RET(EINA_FALSE);
1303
1304 if ((int)mode == Ecore_X_Randr_Unset) return ret;
1305 ret =
1306 ecore_x_randr_crtc_settings_set(root, crtc, outputs, num,
1307 Ecore_X_Randr_Unset, Ecore_X_Randr_Unset,
1308 mode, Ecore_X_Randr_Unset);
1309#endif
1310
1311 return ret;
1312}
1313
1314/**
1315 * @brief Get the current set mode of a given CRTC
1316 * @param root the window's screen to be queried
1317 * @param crtc the CRTC which's should be queried
1318 * @return currently set mode or - in case parameters are invalid -
1319 * Ecore_X_Randr_Unset
1320 */
1321EAPI Ecore_X_Randr_Mode
1322ecore_x_randr_crtc_mode_get(Ecore_X_Window root,
1323 Ecore_X_Randr_Crtc crtc)
1324{
1325 Ecore_X_Randr_Mode ret = Ecore_X_Randr_Unset;
1326#ifdef ECORE_XCB_RANDR
1327 xcb_timestamp_t stamp = 0;
1328 xcb_randr_get_crtc_info_cookie_t ocookie;
1329 xcb_randr_get_crtc_info_reply_t *oreply;
1330#endif
1331
1332 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1333 CHECK_XCB_CONN;
1334
1335#ifdef ECORE_XCB_RANDR
1336 RANDR_CHECK_1_2_RET(Ecore_X_Randr_Unset);
1337
1338 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1339
1340 if (_randr_version >= RANDR_1_3)
1341 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1342 else if (_randr_version == RANDR_1_2)
1343 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1344
1345 ocookie =
1346 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1347 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1348 if (oreply)
1349 {
1350 ret = oreply->mode;
1351 free(oreply);
1352 }
1353#endif
1354
1355 return ret;
1356}
1357
1358EAPI Ecore_X_Randr_Orientation
1359ecore_x_randr_crtc_orientation_get(Ecore_X_Window root,
1360 Ecore_X_Randr_Crtc crtc)
1361{
1362 Ecore_X_Randr_Orientation ret = Ecore_X_Randr_None;
1363#ifdef ECORE_XCB_RANDR
1364 xcb_timestamp_t stamp = 0;
1365 xcb_randr_get_crtc_info_cookie_t ocookie;
1366 xcb_randr_get_crtc_info_reply_t *oreply;
1367#endif
1368
1369 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1370 CHECK_XCB_CONN;
1371
1372#ifdef ECORE_XCB_RANDR
1373 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
1374
1375 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1376
1377 if (_randr_version >= RANDR_1_3)
1378 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1379 else if (_randr_version == RANDR_1_2)
1380 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1381
1382 ocookie =
1383 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1384 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1385 if (oreply)
1386 {
1387 ret = oreply->rotation;
1388 free(oreply);
1389 }
1390#endif
1391
1392 return ret;
1393}
1394
1395EAPI Eina_Bool
1396ecore_x_randr_crtc_orientation_set(Ecore_X_Window root,
1397 Ecore_X_Randr_Crtc crtc,
1398 Ecore_X_Randr_Orientation orientation)
1399{
1400 Eina_Bool ret = EINA_FALSE;
1401
1402 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1403 CHECK_XCB_CONN;
1404
1405#ifdef ECORE_XCB_RANDR
1406 RANDR_CHECK_1_2_RET(EINA_FALSE);
1407
1408 if (orientation != Ecore_X_Randr_None)
1409 {
1410 ret =
1411 ecore_x_randr_crtc_settings_set(root, crtc, NULL,
1412 Ecore_X_Randr_Unset, Ecore_X_Randr_Unset,
1413 Ecore_X_Randr_Unset, Ecore_X_Randr_Unset,
1414 orientation);
1415 }
1416#endif
1417 return ret;
1418}
1419
1420EAPI Ecore_X_Randr_Orientation
1421ecore_x_randr_crtc_orientations_get(Ecore_X_Window root,
1422 Ecore_X_Randr_Crtc crtc)
1423{
1424 Ecore_X_Randr_Orientation ret = Ecore_X_Randr_None;
1425#ifdef ECORE_XCB_RANDR
1426 xcb_timestamp_t stamp = 0;
1427 xcb_randr_get_crtc_info_cookie_t ocookie;
1428 xcb_randr_get_crtc_info_reply_t *oreply;
1429#endif
1430
1431 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1432 CHECK_XCB_CONN;
1433
1434#ifdef ECORE_XCB_RANDR
1435 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
1436
1437 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1438
1439 if (_randr_version >= RANDR_1_3)
1440 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1441 else if (_randr_version == RANDR_1_2)
1442 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1443
1444 ocookie =
1445 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1446 oreply =
1447 xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1448 if (oreply)
1449 {
1450 ret = oreply->rotations;
1451 free(oreply);
1452 }
1453#endif
1454
1455 return ret;
1456}
1457
1458/*
1459 * @brief get a CRTC's possible outputs.
1460 * @param root the root window which's screen will be queried
1461 * @param num number of possible outputs referenced by given CRTC
1462 */
1463EAPI Ecore_X_Randr_Output *
1464ecore_x_randr_crtc_possible_outputs_get(Ecore_X_Window root,
1465 Ecore_X_Randr_Crtc crtc,
1466 int *num)
1467{
1468 Ecore_X_Randr_Output *ret = NULL;
1469#ifdef ECORE_XCB_RANDR
1470 xcb_timestamp_t stamp = 0;
1471 xcb_randr_get_crtc_info_cookie_t ocookie;
1472 xcb_randr_get_crtc_info_reply_t *oreply;
1473#endif
1474
1475 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1476 CHECK_XCB_CONN;
1477
1478#ifdef ECORE_XCB_RANDR
1479 RANDR_CHECK_1_2_RET(NULL);
1480
1481 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1482
1483 if (_randr_version >= RANDR_1_3)
1484 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1485 else if (_randr_version == RANDR_1_2)
1486 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1487
1488 ocookie =
1489 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1490 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1491 if (oreply)
1492 {
1493 if (num) *num = oreply->num_possible_outputs;
1494 ret = malloc(sizeof(Ecore_X_Randr_Output) *
1495 oreply->num_possible_outputs);
1496 if (ret)
1497 {
1498 memcpy(ret, xcb_randr_get_crtc_info_possible(oreply),
1499 sizeof(Ecore_X_Randr_Output) *
1500 oreply->num_possible_outputs);
1501 }
1502 free(oreply);
1503 }
1504#endif
1505
1506 return ret;
1507}
1508
1509/*
1510 * @brief get all known CRTCs related to a root window's screen
1511 * @param root window which's screen's ressources are queried
1512 * @param num number of CRTCs returned
1513 * @return CRTC IDs
1514 */
1515EAPI Ecore_X_Randr_Crtc *
1516ecore_x_randr_crtcs_get(Ecore_X_Window root,
1517 int *num)
1518{
1519 Ecore_X_Randr_Crtc *ret = NULL;
1520
1521 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1522 CHECK_XCB_CONN;
1523
1524#ifdef ECORE_XCB_RANDR
1525 RANDR_CHECK_1_2_RET(NULL);
1526
1527 if (_randr_version >= RANDR_1_3)
1528 {
1529 xcb_randr_get_screen_resources_current_reply_t *reply;
1530
1531 reply = _ecore_xcb_randr_13_get_resources(root);
1532 if (reply)
1533 {
1534 if (num) *num = reply->num_crtcs;
1535 ret = malloc(sizeof(Ecore_X_Randr_Crtc) * reply->num_crtcs);
1536 if (ret)
1537 memcpy(ret, xcb_randr_get_screen_resources_current_crtcs(reply),
1538 sizeof(Ecore_X_Randr_Crtc) * reply->num_crtcs);
1539 free(reply);
1540 }
1541 }
1542 else if (_randr_version == RANDR_1_2)
1543 {
1544 xcb_randr_get_screen_resources_reply_t *reply;
1545
1546 reply = _ecore_xcb_randr_12_get_resources(root);
1547 if (reply)
1548 {
1549 if (num) *num = reply->num_crtcs;
1550 ret = malloc(sizeof(Ecore_X_Randr_Crtc) * reply->num_crtcs);
1551 if (ret)
1552 memcpy(ret, xcb_randr_get_screen_resources_crtcs(reply),
1553 sizeof(Ecore_X_Randr_Crtc) * reply->num_crtcs);
1554 free(reply);
1555 }
1556 }
1557#endif
1558
1559 return ret;
1560}
1561
1562/*
1563 * @deprecated bad naming. Use ecore_x_randr_window_crtcs_get instead.
1564 * @brief get the CRTCs, which display a certain window
1565 * @param window window the displaying CRTCs shall be found for
1566 * @param num the number of CRTCs displaying the window
1567 * @return array of CRTCs that display a certain window. NULL if no CRTCs
1568 * was found that displays the specified window.
1569 */
1570EAPI Ecore_X_Randr_Crtc *
1571ecore_x_randr_current_crtc_get(Ecore_X_Window window,
1572 int *num)
1573{
1574 return ecore_x_randr_window_crtcs_get(window, num);
1575}
1576
1577/*
1578 * @brief get the CRTCs, which display a certain window
1579 * @param window window the displaying crtcs shall be found for
1580 * @param num the number of crtcs displaying the window
1581 * @return array of crtcs that display a certain window. NULL if no crtcs
1582 * was found that displays the specified window.
1583 * @since 1.2.0
1584 */
1585EAPI Ecore_X_Randr_Crtc *
1586ecore_x_randr_window_crtcs_get(Ecore_X_Window window,
1587 int *num)
1588{
1589#ifdef ECORE_XCB_RANDR
1590 Ecore_X_Window root;
1591 Eina_Rectangle w_geo, c_geo;
1592 Ecore_X_Randr_Crtc *crtcs, *ret = NULL;
1593 Ecore_X_Randr_Mode mode;
1594 int ncrtcs, i, nret = 0;
1595 xcb_translate_coordinates_cookie_t cookie;
1596 xcb_translate_coordinates_reply_t *trans;
1597#endif
1598
1599 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1600 CHECK_XCB_CONN;
1601
1602#ifdef ECORE_XCB_RANDR
1603 RANDR_CHECK_1_2_RET(NULL);
1604
1605 ecore_x_window_geometry_get(window, &w_geo.x, &w_geo.y, &w_geo.w, &w_geo.h);
1606
1607 root = ecore_x_window_root_get(window);
1608 crtcs = ecore_x_randr_crtcs_get(root, &ncrtcs);
1609 if (!crtcs) return NULL;
1610
1611 /* now get window RELATIVE to root window - thats what matters. */
1612 cookie = xcb_translate_coordinates(_ecore_xcb_conn, window, root, 0, 0);
1613 trans = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL);
1614 w_geo.x = trans->dst_x;
1615 w_geo.y = trans->dst_y;
1616 free(trans);
1617
1618 for (i = 0, nret = 0; i < ncrtcs; i++)
1619 {
1620 /* if crtc is not enabled, don't bother about it any further */
1621 mode = ecore_x_randr_crtc_mode_get(root, crtcs[i]);
1622 if (mode == Ecore_X_Randr_None) continue;
1623
1624 ecore_x_randr_crtc_geometry_get(root, crtcs[i], &c_geo.x, &c_geo.y,
1625 &c_geo.w, &c_geo.h);
1626 if (eina_rectangles_intersect(&w_geo, &c_geo))
1627 {
1628 ret = realloc(ret, (++nret *
1629 sizeof(Ecore_X_Randr_Output)));
1630 ret[nret] = crtcs[i];
1631 }
1632 }
1633 free(crtcs);
1634
1635 if (num) *num = nret;
1636 return ret;
1637
1638#endif
1639 if (num) *num = 0;
1640 return NULL;
1641}
1642
1643/*
1644 * @brief get a CRTC's outputs.
1645 * @param root the root window which's screen will be queried
1646 * @param num number of outputs referenced by given CRTC
1647 */
1648EAPI Ecore_X_Randr_Output *
1649ecore_x_randr_crtc_outputs_get(Ecore_X_Window root,
1650 Ecore_X_Randr_Crtc crtc,
1651 int *num)
1652{
1653 Ecore_X_Randr_Output *ret = NULL;
1654#ifdef ECORE_XCB_RANDR
1655 xcb_timestamp_t stamp = 0;
1656 xcb_randr_get_crtc_info_cookie_t ocookie;
1657 xcb_randr_get_crtc_info_reply_t *oreply;
1658#endif
1659
1660 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1661 CHECK_XCB_CONN;
1662
1663#ifdef ECORE_XCB_RANDR
1664 RANDR_CHECK_1_2_RET(NULL);
1665
1666 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret;
1667
1668 if (_randr_version >= RANDR_1_3)
1669 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1670 else if (_randr_version == RANDR_1_2)
1671 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1672
1673 ocookie =
1674 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1675 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1676 if (oreply)
1677 {
1678 if (num) *num = oreply->num_outputs;
1679 ret = malloc(sizeof(Ecore_X_Randr_Output) * oreply->num_outputs);
1680 if (ret)
1681 memcpy(ret, xcb_randr_get_crtc_info_outputs(oreply),
1682 sizeof(Ecore_X_Randr_Output) * oreply->num_outputs);
1683 free(oreply);
1684 }
1685#endif
1686
1687 return ret;
1688}
1689
1690EAPI void
1691ecore_x_randr_crtc_geometry_get(Ecore_X_Window root,
1692 Ecore_X_Randr_Crtc crtc,
1693 int *x,
1694 int *y,
1695 int *w,
1696 int *h)
1697{
1698#ifdef ECORE_XCB_RANDR
1699 xcb_timestamp_t stamp = 0;
1700 xcb_randr_get_crtc_info_cookie_t ocookie;
1701 xcb_randr_get_crtc_info_reply_t *oreply;
1702#endif
1703
1704 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1705 CHECK_XCB_CONN;
1706
1707#ifdef ECORE_XCB_RANDR
1708 RANDR_CHECK_1_2_RET();
1709
1710 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return;
1711
1712 if (_randr_version >= RANDR_1_3)
1713 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
1714 else if (_randr_version == RANDR_1_2)
1715 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
1716
1717 ocookie =
1718 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, stamp);
1719 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL);
1720 if (oreply)
1721 {
1722 if (x) *x = oreply->x;
1723 if (y) *y = oreply->y;
1724 if (w) *w = oreply->width;
1725 if (h) *h = oreply->height;
1726 free(oreply);
1727 }
1728#endif
1729}
1730
1731/**
1732 * @brief sets a CRTC relative to another one.
1733 * @param crtc1 the CRTC to be positioned.
1734 * @param crtc2 the CRTC the position should be relative to
1735 * @param policy the relation between the crtcs
1736 * @param alignment in case CRTCs size differ, aligns CRTC1 accordingly at CRTC2's
1737 * borders
1738 * @return EINA_TRUE if crtc could be successfully positioned. EINA_FALSE if
1739 * repositioning failed or if position of new crtc would be out of given screen's min/max bounds.
1740 */
1741EAPI Eina_Bool
1742ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root,
1743 Ecore_X_Randr_Crtc crtc1,
1744 Ecore_X_Randr_Crtc crtc2,
1745 Ecore_X_Randr_Output_Policy policy,
1746 Ecore_X_Randr_Relative_Alignment alignment)
1747{
1748#ifdef ECORE_XCB_RANDR
1749 Eina_Rectangle r1, r2;
1750 int w_max = 0, h_max = 0, cw = 0, ch = 0, xn = -1, yn = -1;
1751#endif
1752
1753 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1754 CHECK_XCB_CONN;
1755
1756#ifdef ECORE_XCB_RANDR
1757 RANDR_CHECK_1_2_RET(EINA_FALSE);
1758
1759 if ((ecore_x_randr_crtc_mode_get(root, crtc1) == 0) ||
1760 (ecore_x_randr_crtc_mode_get(root, crtc2) == 0))
1761 return EINA_FALSE;
1762
1763 if ((!_ecore_xcb_randr_crtc_validate(root, crtc1) ||
1764 (!(crtc1 != crtc2) && (!_ecore_xcb_randr_crtc_validate(root, crtc2)))))
1765 return EINA_FALSE;
1766
1767 ecore_x_randr_crtc_geometry_get(root, crtc1, &r1.x, &r1.y, &r1.w, &r1.h);
1768 ecore_x_randr_crtc_geometry_get(root, crtc2, &r2.x, &r2.y, &r2.w, &r2.h);
1769 ecore_x_randr_screen_size_range_get(root, NULL, NULL, &w_max, &h_max);
1770 ecore_x_randr_screen_current_size_get(root, &cw, &ch, NULL, NULL);
1771
1772 switch (policy)
1773 {
1774 case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT:
1775 xn = (r2.x + r2.w);
1776 if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE)
1777 yn = -1;
1778 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL)
1779 yn = ((int)(((double)r2.h / 2.0) + (double)r2.y - ((double)r1.h / 2.0)));
1780 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR)
1781 yn = ((int)((double)ch / 2.0) - ((double)r1.h / 2.0));
1782 break;
1783
1784 case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
1785 xn = (r2.x - r1.w);
1786 if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE)
1787 yn = -1;
1788 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL)
1789 yn = ((int)(((double)r2.h / 2.0) + (double)r2.y - ((double)r1.h / 2.0)));
1790 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR)
1791 yn = ((int)((double)ch / 2.0) - ((double)r1.h / 2.0));
1792 break;
1793
1794 case ECORE_X_RANDR_OUTPUT_POLICY_BELOW:
1795 yn = (r2.y + r2.h);
1796 if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE)
1797 xn = -1;
1798 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL)
1799 xn = ((int)((((double)r2.x + (double)r2.w) / 2.0) - ((double)r1.w / 2.0)));
1800 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR)
1801 xn = ((int)((double)cw / 2.0));
1802 break;
1803
1804 case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
1805 yn = (r2.y - r1.h);
1806 if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE)
1807 xn = -1;
1808 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL)
1809 xn = ((int)((((double)r2.x + (double)r2.w) / 2.0) - ((double)r1.w / 2.0)));
1810 else if (alignment == ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR)
1811 xn = ((int)((double)cw / 2.0));
1812 break;
1813
1814 case ECORE_X_RANDR_OUTPUT_POLICY_CLONE:
1815 return ecore_x_randr_crtc_pos_set(root, crtc1, r2.x, r2.y);
1816 break;
1817
1818 case ECORE_X_RANDR_OUTPUT_POLICY_NONE:
1819 break;
1820 }
1821
1822 if ((xn == r1.x) && (yn == r1.x)) return EINA_TRUE;
1823 if (((yn + r1.h) > h_max) || ((xn + r1.w) > w_max))
1824 return EINA_FALSE;
1825
1826 return ecore_x_randr_crtc_pos_set(root, crtc1, xn, yn);
1827#endif
1828
1829 return EINA_FALSE;
1830}
1831
1832EAPI Eina_Bool
1833ecore_x_randr_move_all_crtcs_but(Ecore_X_Window root,
1834 const Ecore_X_Randr_Crtc *not_moved,
1835 int num,
1836 int dx,
1837 int dy)
1838{
1839 Eina_Bool ret = EINA_FALSE;
1840#ifdef ECORE_XCB_RANDR
1841 Ecore_X_Randr_Crtc *crtcs = NULL, *move = NULL;
1842 int i = 0, j = 0, k = 0, n = 0, total = 0;
1843#endif
1844
1845 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1846 CHECK_XCB_CONN;
1847
1848#ifdef ECORE_XCB_RANDR
1849 if ((num <= 0) || (!not_moved) || (!_ecore_xcb_randr_root_validate(root)))
1850 return EINA_FALSE;
1851
1852 crtcs = ecore_x_randr_crtcs_get(root, &total);
1853 n = (total - num);
1854 move = malloc(sizeof(Ecore_X_Randr_Crtc) * n);
1855 if (move)
1856 {
1857 for (i = 0, k = 0; (i < total) && (k < n); i++)
1858 {
1859 for (j = 0; j < num; j++)
1860 if (crtcs[i] == not_moved[j]) break;
1861 if (j == num)
1862 move[k++] = crtcs[i];
1863 }
1864 ret = ecore_x_randr_move_crtcs(root, move, n, dx, dy);
1865 free(move);
1866 free(crtcs);
1867 }
1868#endif
1869
1870 return ret;
1871}
1872
1873EAPI void
1874ecore_x_randr_crtc_pos_get(Ecore_X_Window root,
1875 Ecore_X_Randr_Crtc crtc,
1876 int *x,
1877 int *y)
1878{
1879 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1880 CHECK_XCB_CONN;
1881
1882#ifdef ECORE_XCB_RANDR
1883 RANDR_CHECK_1_2_RET();
1884
1885 ecore_x_randr_crtc_geometry_get(root, crtc, x, y, NULL, NULL);
1886#endif
1887}
1888
1889/*
1890 * @brief sets the position of given CRTC within root window's screen
1891 * @param root the window's screen to be queried
1892 * @param crtc the CRTC which's position within the mentioned screen is to be altered
1893 * @param x position on the x-axis (0 == left) of the screen. if x < 0 current value will be kept.
1894 * @param y position on the y-ayis (0 == top) of the screen. if y < 0, current value will be kept.
1895 * @return EINA_TRUE if position could be successfully be altered.
1896 */
1897EAPI Eina_Bool
1898ecore_x_randr_crtc_pos_set(Ecore_X_Window root,
1899 Ecore_X_Randr_Crtc crtc,
1900 int x,
1901 int y)
1902{
1903 Eina_Bool ret = EINA_FALSE;
1904#ifdef ECORE_XCB_RANDR
1905 int w = 0, h = 0, nw = 0, nh = 0;
1906 Eina_Rectangle rect;
1907#endif
1908
1909 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1910 CHECK_XCB_CONN;
1911
1912#ifdef ECORE_XCB_RANDR
1913 RANDR_CHECK_1_2_RET(EINA_FALSE);
1914
1915 ecore_x_randr_crtc_geometry_get(root, crtc,
1916 &rect.x, &rect.y, &rect.w, &rect.h);
1917 ecore_x_randr_screen_current_size_get(root, &w, &h, NULL, NULL);
1918 if (x < 0) x = rect.x;
1919 if (y < 0) y = rect.y;
1920 if ((x + rect.w) > w)
1921 nw = (x + rect.w);
1922 if ((y + rect.h) > h)
1923 nh = (y + rect.h);
1924
1925 if ((nw != 0) || (nh != 0))
1926 {
1927 if (!ecore_x_randr_screen_current_size_set(root, nw, nh, 0, 0))
1928 return EINA_FALSE;
1929 }
1930
1931 ret = ecore_x_randr_crtc_settings_set(root, crtc, NULL, -1, x, y, -1, -1);
1932#endif
1933
1934 return ret;
1935}
1936
1937EAPI void
1938ecore_x_randr_crtc_size_get(Ecore_X_Window root,
1939 Ecore_X_Randr_Crtc crtc,
1940 int *w,
1941 int *h)
1942{
1943 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1944 CHECK_XCB_CONN;
1945
1946#ifdef ECORE_XCB_RANDR
1947 RANDR_CHECK_1_2_RET();
1948 ecore_x_randr_crtc_geometry_get(root, crtc, NULL, NULL, w, h);
1949#endif
1950}
1951
1952EAPI Ecore_X_Randr_Refresh_Rate
1953ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root,
1954 Ecore_X_Randr_Crtc crtc,
1955 Ecore_X_Randr_Mode mode)
1956{
1957 Ecore_X_Randr_Refresh_Rate ret = 0.0;
1958
1959 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1960 CHECK_XCB_CONN;
1961
1962#ifdef ECORE_XCB_RANDR
1963 RANDR_CHECK_1_2_RET(0.0);
1964
1965 if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return 0.0;
1966
1967 if (_randr_version >= RANDR_1_3)
1968 {
1969 xcb_randr_get_screen_resources_current_reply_t *reply;
1970
1971 reply = _ecore_xcb_randr_13_get_resources(root);
1972 if (reply)
1973 {
1974 xcb_randr_mode_info_iterator_t miter;
1975
1976 miter =
1977 xcb_randr_get_screen_resources_current_modes_iterator(reply);
1978 while (miter.rem)
1979 {
1980 xcb_randr_mode_info_t *minfo;
1981
1982 minfo = miter.data;
1983 if (minfo->id == mode)
1984 {
1985 if ((minfo->htotal) && (minfo->vtotal))
1986 {
1987 ret = ((double)minfo->dot_clock /
1988 ((double)minfo->htotal *
1989 (double)minfo->vtotal));
1990 }
1991 break;
1992 }
1993 xcb_randr_mode_info_next(&miter);
1994 }
1995 free(reply);
1996 }
1997 }
1998 else if (_randr_version == RANDR_1_2)
1999 {
2000 xcb_randr_get_screen_resources_reply_t *reply;
2001
2002 reply = _ecore_xcb_randr_12_get_resources(root);
2003 if (reply)
2004 {
2005 xcb_randr_mode_info_iterator_t miter;
2006
2007 miter = xcb_randr_get_screen_resources_modes_iterator(reply);
2008 while (miter.rem)
2009 {
2010 xcb_randr_mode_info_t *minfo;
2011
2012 minfo = miter.data;
2013 if (minfo->id == mode)
2014 {
2015 if ((minfo->htotal) && (minfo->vtotal))
2016 {
2017 ret = ((double)minfo->dot_clock /
2018 ((double)minfo->htotal *
2019 (double)minfo->vtotal));
2020 }
2021 break;
2022 }
2023 xcb_randr_mode_info_next(&miter);
2024 }
2025 free(reply);
2026 }
2027 }
2028#endif
2029 return ret;
2030}
2031
2032/*
2033 * @brief move given CRTCs belonging to the given root window's screen dx/dy pixels relative to their current position. The screen size will be automatically adjusted if necessary and possible.
2034 * @param root window which's screen's resources are used
2035 * @param crtcs list of CRTCs to be moved
2036 * @param ncrtc number of CRTCs in array
2037 * @param dx amount of pixels the CRTCs should be moved in x direction
2038 * @param dy amount of pixels the CRTCs should be moved in y direction
2039 * @return EINA_TRUE if all crtcs could be moved successfully.
2040 */
2041EAPI Eina_Bool
2042ecore_x_randr_move_crtcs(Ecore_X_Window root,
2043 const Ecore_X_Randr_Crtc *crtcs,
2044 int num,
2045 int dx,
2046 int dy)
2047{
2048 Eina_Bool ret = EINA_TRUE;
2049#ifdef ECORE_XCB_RANDR
2050 xcb_timestamp_t stamp = 0;
2051 xcb_randr_get_crtc_info_reply_t *oreply[num];
2052 int i = 0, cw = 0, ch = 0;
2053 int mw = 0, mh = 0, nw = 0, nh = 0;
2054#endif
2055
2056 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2057 CHECK_XCB_CONN;
2058
2059#ifdef ECORE_XCB_RANDR
2060 RANDR_CHECK_1_2_RET(EINA_FALSE);
2061
2062 if (!_ecore_xcb_randr_root_validate(root)) return EINA_FALSE;
2063
2064 if (_randr_version >= RANDR_1_3)
2065 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
2066 else if (_randr_version == RANDR_1_2)
2067 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
2068
2069 ecore_x_randr_screen_size_range_get(root, NULL, NULL, &mw, &mh);
2070 ecore_x_randr_screen_current_size_get(root, &cw, &ch, NULL, NULL);
2071 nw = cw;
2072 nh = ch;
2073
2074 for (i = 0; i < num; i++)
2075 {
2076 xcb_randr_get_crtc_info_cookie_t ocookie;
2077
2078 ocookie =
2079 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtcs[i],
2080 stamp);
2081 oreply[i] = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn,
2082 ocookie, NULL);
2083 if (oreply[i])
2084 {
2085 if (((oreply[i]->x + dx) < 0) ||
2086 ((oreply[i]->y + dy) < 0) ||
2087 ((oreply[i]->x + oreply[i]->width + dx) > mw) ||
2088 ((oreply[i]->y + oreply[i]->height + dy) > mh))
2089 {
2090 continue;
2091 }
2092 nw = MAX((int)(oreply[i]->x + oreply[i]->width + dx), nw);
2093 nh = MAX((int)(oreply[i]->y + oreply[i]->height + dy), nh);
2094 }
2095 }
2096
2097 if ((nw > cw) || (nh > ch))
2098 {
2099 if (!ecore_x_randr_screen_current_size_set(root, nw, nh, -1, -1))
2100 {
2101 for (i = 0; i < num; i++)
2102 if (oreply[i]) free(oreply[i]);
2103
2104 return EINA_FALSE;
2105 }
2106 }
2107
2108 for (i = 0; ((i < num) && (oreply[i])); i++)
2109 {
2110 if (!oreply[i]) continue;
2111 if (!ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
2112 (oreply[i]->x + dx),
2113 (oreply[i]->y + dy),
2114 oreply[i]->mode,
2115 oreply[i]->rotation))
2116 {
2117 ret = EINA_FALSE;
2118 break;
2119 }
2120 }
2121
2122 if (i < num)
2123 {
2124 while (i-- >= 0)
2125 {
2126 if (oreply[i])
2127 ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL, -1,
2128 (oreply[i]->x - dx),
2129 (oreply[i]->y - dy),
2130 oreply[i]->mode,
2131 oreply[i]->rotation);
2132 }
2133 }
2134
2135 for (i = 0; i < num; i++)
2136 if (oreply[i]) free(oreply[i]);
2137#endif
2138
2139 return ret;
2140}
2141
2142/**
2143 * @brief enable event selection. This enables basic interaction with
2144 * output/crtc events and requires RRandR >= 1.2.
2145 * @param win select this window's properties for RandRR events
2146 * @param on enable/disable selecting
2147 */
2148EAPI void
2149ecore_x_randr_events_select(Ecore_X_Window win,
2150 Eina_Bool on)
2151{
2152#ifdef ECORE_XCB_RANDR
2153 uint16_t mask = 0;
2154#endif
2155
2156 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2157 CHECK_XCB_CONN;
2158
2159#ifdef ECORE_XCB_RANDR
2160 if (on)
2161 {
2162 mask = XCB_RANDR_NOTIFY_MASK_SCREEN_CHANGE;
2163 if (_randr_version >= ((1 << 16) | 2))
2164 {
2165 mask |= (XCB_RANDR_NOTIFY_MASK_CRTC_CHANGE |
2166 XCB_RANDR_NOTIFY_MASK_OUTPUT_CHANGE |
2167 XCB_RANDR_NOTIFY_MASK_OUTPUT_PROPERTY);
2168 }
2169 }
2170
2171 xcb_randr_select_input(_ecore_xcb_conn, win, mask);
2172#endif
2173}
2174
2175/**
2176 * @brief removes unused screen space. The most upper left CRTC is set to 0x0
2177 * and all other CRTCs dx,dy respectively.
2178 * @param root the window's screen which will be reset.
2179 */
2180EAPI void
2181ecore_x_randr_screen_reset(Ecore_X_Window root)
2182{
2183#ifdef ECORE_XCB_RANDR
2184 xcb_timestamp_t stamp = 0;
2185 Ecore_X_Randr_Crtc *crtcs = NULL;
2186 int total = 0, i = 0, w = 0, h = 0;
2187 int dx = 100000, dy = 100000, num = 0;
2188#endif
2189
2190 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2191 CHECK_XCB_CONN;
2192
2193#ifdef ECORE_XCB_RANDR
2194 if (!_ecore_xcb_randr_root_validate(root)) return;
2195 crtcs = ecore_x_randr_crtcs_get(root, &total);
2196
2197 if (_randr_version >= RANDR_1_3)
2198 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
2199 else if (_randr_version == RANDR_1_2)
2200 stamp = _ecore_xcb_randr_12_get_resource_timestamp(root);
2201
2202 /* I hate declaring variables inside code like this, but we need the
2203 * value of 'total' before we can */
2204 Ecore_X_Randr_Crtc enabled[total];
2205
2206 for (i = 0; i < total; i++)
2207 {
2208 xcb_randr_get_crtc_info_cookie_t ocookie;
2209 xcb_randr_get_crtc_info_reply_t *oreply;
2210
2211 ocookie =
2212 xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtcs[i], stamp);
2213 oreply = xcb_randr_get_crtc_info_reply(_ecore_xcb_conn,
2214 ocookie, NULL);
2215 if (!oreply) continue;
2216 if ((oreply->mode <= 0) || (oreply->num_outputs == 0))
2217 {
2218 free(oreply);
2219 continue;
2220 }
2221
2222 enabled[num++] = crtcs[i];
2223 if ((int)(oreply->x + oreply->width) > w)
2224 w = (oreply->x + oreply->width);
2225 if ((int)(oreply->y + oreply->height) > h)
2226 h = (oreply->y + oreply->height);
2227
2228 if (oreply->x < dx) dx = oreply->x;
2229 if (oreply->y < dy) dy = oreply->y;
2230
2231 free(oreply);
2232 }
2233 free(crtcs);
2234
2235 if ((dx > 0) || (dy > 0))
2236 {
2237 if (ecore_x_randr_move_crtcs(root, enabled, num, -dx, -dy))
2238 {
2239 w -= dx;
2240 h -= dy;
2241 }
2242 }
2243
2244 ecore_x_randr_screen_current_size_set(root, w, h, -1, -1);
2245#endif
2246}
2247
2248/*
2249 * @param root window which's screen will be queried
2250 * @param wmin minimum width the screen can be set to
2251 * @param hmin minimum height the screen can be set to
2252 * @param wmax maximum width the screen can be set to
2253 * @param hmax maximum height the screen can be set to
2254 */
2255EAPI void
2256ecore_x_randr_screen_size_range_get(Ecore_X_Window root,
2257 int *minw,
2258 int *minh,
2259 int *maxw,
2260 int *maxh)
2261{
2262#ifdef ECORE_XCB_RANDR
2263 xcb_randr_get_screen_size_range_cookie_t cookie;
2264 xcb_randr_get_screen_size_range_reply_t *reply;
2265#endif
2266
2267 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2268 CHECK_XCB_CONN;
2269
2270#ifdef ECORE_XCB_RANDR
2271 RANDR_CHECK_1_2_RET();
2272
2273 cookie = xcb_randr_get_screen_size_range_unchecked(_ecore_xcb_conn, root);
2274 reply = xcb_randr_get_screen_size_range_reply(_ecore_xcb_conn, cookie, NULL);
2275 if (reply)
2276 {
2277 if (minw) *minw = reply->min_width;
2278 if (minh) *minh = reply->min_height;
2279 if (maxw) *maxw = reply->max_width;
2280 if (maxh) *maxh = reply->max_height;
2281 free(reply);
2282 }
2283#endif
2284}
2285
2286/*
2287 * @param w width of screen in px
2288 * @param h height of screen in px
2289 */
2290EAPI void
2291ecore_x_randr_screen_current_size_get(Ecore_X_Window root,
2292 int *w,
2293 int *h,
2294 int *w_mm,
2295 int *h_mm)
2296{
2297#ifdef ECORE_XCB_RANDR
2298 Ecore_X_Randr_Screen scr = 0;
2299 xcb_screen_t *s;
2300# define RANDR_VALIDATE_ROOT(screen, root) \
2301 ((screen == _ecore_xcb_randr_root_to_screen(root)) != -1)
2302#endif
2303
2304 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2305 CHECK_XCB_CONN;
2306
2307#ifdef ECORE_XCB_RANDR
2308 RANDR_CHECK_1_2_RET();
2309
2310 if (!RANDR_VALIDATE_ROOT(scr, root)) return;
2311
2312 s = ecore_x_screen_get(scr);
2313 if (w) *w = s->width_in_pixels;
2314 if (h) *h = s->height_in_pixels;
2315 if (w_mm) *w_mm = s->width_in_millimeters;
2316 if (h_mm) *h_mm = s->height_in_millimeters;
2317#endif
2318}
2319
2320/*
2321 * @param root window which's screen's size should be set. If invalid (e.g. NULL) no action is taken.
2322 * @param w width in px the screen should be set to. If out of valid boundaries, current value is assumed.
2323 * @param h height in px the screen should be set to. If out of valid boundaries, current value is assumed.
2324 * @param w_mm width in mm the screen should be set to. If 0, current aspect is assumed.
2325 * @param h_mm height in mm the screen should be set to. If 0, current aspect is assumed.
2326 * @return EINA_TRUE if request was successfully sent or screen is already in
2327 * requested size, EINA_FALSE if parameters are invalid
2328 */
2329EAPI Eina_Bool
2330ecore_x_randr_screen_current_size_set(Ecore_X_Window root,
2331 int w,
2332 int h,
2333 int w_mm,
2334 int h_mm)
2335{
2336 Eina_Bool ret = EINA_TRUE;
2337#ifdef ECORE_XCB_RANDR
2338 Ecore_X_Randr_Screen scr;
2339 int wc = 0, hc = 0, w_mm_c = 0, h_mm_c = 0;
2340 int mw = 0, mh = 0, xw = 0, xh = 0;
2341# define RANDR_VALIDATE_ROOT(screen, root) \
2342 ((screen == _ecore_xcb_randr_root_to_screen(root)) != -1)
2343#endif
2344
2345 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2346 CHECK_XCB_CONN;
2347
2348#ifdef ECORE_XCB_RANDR
2349 RANDR_CHECK_1_2_RET(EINA_FALSE);
2350
2351 if (!RANDR_VALIDATE_ROOT(scr, root)) return EINA_FALSE;
2352 ecore_x_randr_screen_current_size_get(root, &wc, &hc, &w_mm_c, &h_mm_c);
2353 if ((w == wc) && (h == hc) && (w_mm == w_mm_c) && (h_mm == h_mm_c))
2354 return EINA_TRUE;
2355 ecore_x_randr_screen_size_range_get(root, &mw, &mh, &xw, &xh);
2356 if (((w != 1) && ((w < mw) || (w > xw))) ||
2357 ((h != -1) && ((h < mh) || (h > xh)))) return EINA_FALSE;
2358
2359 if (w <= 0)
2360 w = ((xcb_screen_t *)_ecore_xcb_screen)->width_in_pixels;
2361 if (h <= 0)
2362 h = ((xcb_screen_t *)_ecore_xcb_screen)->height_in_pixels;
2363
2364 /* NB: Hmmmm, xlib version divides w_mm by width ... that seems wrong */
2365 if (w_mm <= 0)
2366 w_mm = ((xcb_screen_t *)_ecore_xcb_screen)->width_in_millimeters;
2367 if (h_mm <= 0)
2368 h_mm = ((xcb_screen_t *)_ecore_xcb_screen)->height_in_millimeters;
2369
2370 xcb_randr_set_screen_size(_ecore_xcb_conn, root, w, h, w_mm, h_mm);
2371#endif
2372
2373 return ret;
2374}
2375
2376/*
2377 * @deprecated bad naming. Use ecore_x_randr_window_outputs_get instead.
2378 * @brief get the outputs, which display a certain window
2379 * @param window window the displaying outputs shall be found for
2380 * @param num the number of outputs displaying the window
2381 * @return array of outputs that display a certain window. NULL if no outputs
2382 * was found that displays the specified window.
2383 */
2384
2385Ecore_X_Randr_Output *
2386ecore_x_randr_current_output_get(Ecore_X_Window window,
2387 int *num)
2388{
2389 return ecore_x_randr_window_outputs_get(window, num);
2390}
2391
2392/*
2393 * @brief get the outputs, which display a certain window
2394 * @param window window the displaying outputs shall be found for
2395 * @param num the number of outputs displaying the window
2396 * @return array of outputs that display a certain window. NULL if no outputs
2397 * was found that displays the specified window.
2398 */
2399EAPI Ecore_X_Randr_Output *
2400ecore_x_randr_window_outputs_get(Ecore_X_Window window,
2401 int *num)
2402{
2403#ifdef ECORE_XCB_RANDR
2404 Ecore_X_Window root;
2405 Ecore_X_Randr_Crtc *crtcs;
2406 Ecore_X_Randr_Output *outputs, *ret = NULL;
2407 int ncrtcs, noutputs, i, nret = 0;
2408#endif
2409
2410 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2411 CHECK_XCB_CONN;
2412
2413 if (num) *num = 0;
2414
2415#ifdef ECORE_XCB_RANDR
2416 if (_randr_version < RANDR_1_2) goto _ecore_x_randr_current_output_get_fail;
2417
2418 root = ecore_x_window_root_get(window);
2419 if (!(crtcs = ecore_x_randr_window_crtcs_get(window, &ncrtcs)))
2420 goto _ecore_x_randr_current_output_get_fail;
2421
2422 for (i = 0, nret = 0; i < ncrtcs; i++)
2423 {
2424
2425 outputs = ecore_x_randr_crtc_outputs_get(root, crtcs[i],
2426 &noutputs);
2427 if (!outputs)
2428 goto _ecore_x_randr_current_output_get_fail_free;
2429 nret += noutputs;
2430 ret = realloc(ret, (nret * sizeof(Ecore_X_Randr_Output)));
2431 memcpy(&ret[nret], outputs, (noutputs * sizeof(Ecore_X_Randr_Output)));
2432 free(outputs);
2433 }
2434 free(crtcs);
2435
2436 if (num)
2437 *num = nret;
2438
2439 return ret;
2440
2441_ecore_x_randr_current_output_get_fail_free:
2442 free(outputs);
2443 free(crtcs);
2444 free(ret);
2445_ecore_x_randr_current_output_get_fail:
2446#endif
2447 if (num) *num = 0;
2448 return NULL;
2449}
2450
2451/*
2452 * @brief get the backlight level of the given output
2453 * @param root window which's screen should be queried
2454 * @param output from which the backlight level should be retrieved
2455 * @return the backlight level
2456 */
2457EAPI double
2458ecore_x_randr_output_backlight_level_get(Ecore_X_Window root,
2459 Ecore_X_Randr_Output output)
2460{
2461#ifdef ECORE_XCB_RANDR
2462 Ecore_X_Atom _backlight;
2463 xcb_intern_atom_cookie_t acookie;
2464 xcb_intern_atom_reply_t *areply;
2465 xcb_randr_get_output_property_cookie_t cookie;
2466 xcb_randr_get_output_property_reply_t *reply;
2467 xcb_randr_query_output_property_cookie_t qcookie;
2468 xcb_randr_query_output_property_reply_t *qreply;
2469 double dvalue;
2470 long value, max, min;
2471#endif
2472
2473 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2474 CHECK_XCB_CONN;
2475
2476#ifdef ECORE_XCB_RANDR
2477 RANDR_CHECK_1_2_RET(-1);
2478
2479 acookie =
2480 xcb_intern_atom_unchecked(_ecore_xcb_conn, 1,
2481 strlen("Backlight"), "Backlight");
2482 areply = xcb_intern_atom_reply(_ecore_xcb_conn, acookie, NULL);
2483
2484 if (!areply)
2485 {
2486 ERR("Backlight property is not suppported on this server or driver");
2487 return -1;
2488 }
2489 else
2490 {
2491 _backlight = areply->atom;
2492 free(areply);
2493 }
2494
2495 if (!_ecore_xcb_randr_output_validate(root, output))
2496 {
2497 ERR("Invalid output");
2498 return -1;
2499 }
2500
2501 cookie =
2502 xcb_randr_get_output_property_unchecked(_ecore_xcb_conn,
2503 output, _backlight,
2504 XCB_ATOM_NONE, 0, 4, 0, 0);
2505 reply =
2506 xcb_randr_get_output_property_reply(_ecore_xcb_conn, cookie, NULL);
2507 if (!reply)
2508 {
2509 WRN("Backlight not supported on this output");
2510 return -1;
2511 }
2512
2513 if ((reply->format != 32) || (reply->num_items != 1) ||
2514 (reply->type != XCB_ATOM_INTEGER))
2515 {
2516 free(reply);
2517 return -1;
2518 }
2519
2520 value = *((long *)xcb_randr_get_output_property_data(reply));
2521 free (reply);
2522
2523 /* I have the current value of the backlight */
2524 /* Now retrieve the min and max intensities of the output */
2525 qcookie =
2526 xcb_randr_query_output_property_unchecked(_ecore_xcb_conn,
2527 output, _backlight);
2528 qreply =
2529 xcb_randr_query_output_property_reply(_ecore_xcb_conn, qcookie, NULL);
2530 if (qreply)
2531 {
2532 dvalue = -1;
2533 if ((qreply->range) &&
2534 (xcb_randr_query_output_property_valid_values_length(qreply) == 2))
2535 {
2536 int32_t *vals;
2537
2538 vals = xcb_randr_query_output_property_valid_values(qreply);
2539 /* finally convert the current value in the interval [0..1] */
2540 min = vals[0];
2541 max = vals[1];
2542 dvalue = ((double)(value - min)) / ((double)(max - min));
2543 }
2544 free(qreply);
2545 return dvalue;
2546 }
2547#endif
2548 return -1;
2549}
2550
2551/*
2552 * @brief set the backlight level of a given output
2553 * @param root window which's screen should be queried
2554 * @param output that should be set
2555 * @param level for which the backlight should be set
2556 * @return EINA_TRUE in case of success
2557 */
2558EAPI Eina_Bool
2559ecore_x_randr_output_backlight_level_set(Ecore_X_Window root,
2560 Ecore_X_Randr_Output output,
2561 double level)
2562{
2563#ifdef ECORE_XCB_RANDR
2564 Ecore_X_Atom _backlight;
2565 xcb_intern_atom_cookie_t acookie;
2566 xcb_intern_atom_reply_t *areply;
2567 xcb_randr_query_output_property_cookie_t qcookie;
2568 xcb_randr_query_output_property_reply_t *qreply;
2569#endif
2570
2571 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2572 CHECK_XCB_CONN;
2573
2574#ifdef ECORE_XCB_RANDR
2575 RANDR_CHECK_1_2_RET(EINA_FALSE);
2576
2577 if ((level < 0) || (level > 1))
2578 {
2579 ERR("Backlight level should be between 0 and 1");
2580 return EINA_FALSE;
2581 }
2582
2583 if (!_ecore_xcb_randr_output_validate(root, output))
2584 {
2585 ERR("Wrong output value");
2586 return EINA_FALSE;
2587 }
2588
2589 acookie =
2590 xcb_intern_atom_unchecked(_ecore_xcb_conn, 1,
2591 strlen("Backlight"), "Backlight");
2592 areply = xcb_intern_atom_reply(_ecore_xcb_conn, acookie, NULL);
2593 if (!areply)
2594 {
2595 WRN("Backlight property is not suppported on this server or driver");
2596 return EINA_FALSE;
2597 }
2598 else
2599 {
2600 _backlight = areply->atom;
2601 free(areply);
2602 }
2603
2604 qcookie =
2605 xcb_randr_query_output_property_unchecked(_ecore_xcb_conn,
2606 output, _backlight);
2607 qreply =
2608 xcb_randr_query_output_property_reply(_ecore_xcb_conn, qcookie, NULL);
2609 if (qreply)
2610 {
2611 if ((qreply->range) && (qreply->length == 2))
2612 {
2613 int32_t *vals;
2614 double min, max, tmp;
2615 long n;
2616
2617 vals = xcb_randr_query_output_property_valid_values(qreply);
2618 min = vals[0];
2619 max = vals[1];
2620 tmp = (level * (max - min)) + min;
2621 n = tmp;
2622 if (n > max) n = max;
2623 if (n < min) n = min;
2624 xcb_randr_change_output_property(_ecore_xcb_conn, output,
2625 _backlight, XCB_ATOM_INTEGER,
2626 32, XCB_PROP_MODE_REPLACE,
2627 1, (unsigned char *)&n);
2628 ecore_x_flush(); // needed
2629 }
2630
2631 free(qreply);
2632 return EINA_TRUE;
2633 }
2634#endif
2635 return EINA_FALSE;
2636}
2637
2638/*
2639 * @brief check if a backlight is available
2640 * @return whether a blacklight is available
2641 */
2642EAPI Eina_Bool
2643ecore_x_randr_output_backlight_available(void)
2644{
2645#ifdef ECORE_XCB_RANDR
2646 Ecore_X_Atom _backlight;
2647 xcb_intern_atom_cookie_t acookie;
2648 xcb_intern_atom_reply_t *areply;
2649#endif
2650
2651 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2652 CHECK_XCB_CONN;
2653
2654#ifdef ECORE_XCB_RANDR
2655 RANDR_CHECK_1_2_RET(EINA_FALSE);
2656
2657 acookie =
2658 xcb_intern_atom_unchecked(_ecore_xcb_conn, 1,
2659 strlen("Backlight"), "Backlight");
2660 areply = xcb_intern_atom_reply(_ecore_xcb_conn, acookie, NULL);
2661
2662 if (!areply)
2663 {
2664 ERR("Backlight property is not suppported on this server or driver");
2665 return EINA_FALSE;
2666 }
2667 else
2668 {
2669 _backlight = areply->atom;
2670 free(areply);
2671 return EINA_TRUE;
2672 }
2673#endif
2674 return EINA_FALSE;
2675}
2676
2677EAPI int
2678ecore_x_randr_edid_version_get(unsigned char *edid, unsigned long edid_length)
2679{
2680 if ((edid_length > _ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR) &&
2681 (ecore_x_randr_edid_has_valid_header(edid, edid_length)))
2682 return (edid[_ECORE_X_RANDR_EDID_OFFSET_VERSION_MAJOR] << 8) |
2683 edid[_ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR];
2684 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
2685}
2686
2687EAPI char *
2688ecore_x_randr_edid_display_name_get(unsigned char *edid, unsigned long edid_length)
2689{
2690 unsigned char *block = NULL;
2691 int version = 0;
2692
2693 version = ecore_x_randr_edid_version_get(edid, edid_length);
2694 if (version < ECORE_X_RANDR_EDID_VERSION_13) return NULL;
2695
2696 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
2697 {
2698 if (block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xfc)
2699 {
2700 char *name, *p;
2701 const char *edid_name;
2702
2703 edid_name = (const char *)block +
2704 _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT;
2705 name =
2706 malloc(sizeof(char) *
2707 _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX);
2708 if (!name) return NULL;
2709
2710 strncpy(name, edid_name,
2711 (_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX - 1));
2712 name[_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX] = 0;
2713 for (p = name; *p; p++)
2714 if ((*p < ' ') || (*p > '~')) *p = 0;
2715
2716 return name;
2717 }
2718 }
2719 return NULL;
2720}
2721
2722EAPI Eina_Bool
2723ecore_x_randr_edid_has_valid_header(unsigned char *edid, unsigned long edid_length)
2724{
2725 const unsigned char header[] =
2726 {
2727 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
2728 };
2729
2730 if ((!edid) || (edid_length < 8)) return EINA_FALSE;
2731 if (!memcmp(edid, header, 8)) return EINA_TRUE;
2732 return EINA_FALSE;
2733}
2734
2735/* local functions */
2736static Eina_Bool
2737_ecore_xcb_randr_output_validate(Ecore_X_Window root,
2738 Ecore_X_Randr_Output output)
2739{
2740 Eina_Bool ret = EINA_FALSE;
2741
2742 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2743 CHECK_XCB_CONN;
2744
2745#ifdef ECORE_XCB_RANDR
2746 RANDR_CHECK_1_2_RET(EINA_FALSE);
2747
2748 if ((output) && (_ecore_xcb_randr_root_validate(root)))
2749 {
2750 if (_randr_version >= RANDR_1_3)
2751 {
2752 xcb_randr_get_screen_resources_current_reply_t *reply;
2753
2754 reply = _ecore_xcb_randr_13_get_resources(root);
2755 if (reply)
2756 {
2757 int len = 0, i = 0;
2758 xcb_randr_output_t *outputs;
2759
2760 len =
2761 xcb_randr_get_screen_resources_current_outputs_length(reply);
2762 outputs =
2763 xcb_randr_get_screen_resources_current_outputs(reply);
2764 for (i = 0; i < len; i++)
2765 {
2766 if (outputs[i] == output)
2767 {
2768 ret = EINA_TRUE;
2769 break;
2770 }
2771 }
2772 free(reply);
2773 }
2774 }
2775 else if (_randr_version == RANDR_1_2)
2776 {
2777 xcb_randr_get_screen_resources_reply_t *reply;
2778
2779 reply = _ecore_xcb_randr_12_get_resources(root);
2780 if (reply)
2781 {
2782 int len = 0, i = 0;
2783 xcb_randr_output_t *outputs;
2784
2785 len = xcb_randr_get_screen_resources_outputs_length(reply);
2786 outputs = xcb_randr_get_screen_resources_outputs(reply);
2787 for (i = 0; i < len; i++)
2788 {
2789 if (outputs[i] == output)
2790 {
2791 ret = EINA_TRUE;
2792 break;
2793 }
2794 }
2795 free(reply);
2796 }
2797 }
2798 }
2799#endif
2800 return ret;
2801}
2802
2803/**
2804 * @brief validates a CRTC for a given root window's screen.
2805 * @param root the window which's default display will be queried
2806 * @param crtc the CRTC to be validated.
2807 * @return in case it is found EINA_TRUE will be returned. Else EINA_FALSE is returned.
2808 */
2809static Eina_Bool
2810_ecore_xcb_randr_crtc_validate(Ecore_X_Window root,
2811 Ecore_X_Randr_Crtc crtc)
2812{
2813 Eina_Bool ret = EINA_FALSE;
2814
2815 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2816 CHECK_XCB_CONN;
2817
2818#ifdef ECORE_XCB_RANDR
2819 RANDR_CHECK_1_2_RET(EINA_FALSE);
2820
2821 if (((int)crtc == Ecore_X_Randr_None) || ((int)crtc == Ecore_X_Randr_Unset))
2822 return ret;
2823
2824 if ((crtc) && (_ecore_xcb_randr_root_validate(root)))
2825 {
2826 if (_randr_version >= RANDR_1_3)
2827 {
2828 xcb_randr_get_screen_resources_current_reply_t *reply;
2829
2830 reply = _ecore_xcb_randr_13_get_resources(root);
2831 if (reply)
2832 {
2833 int i = 0;
2834 xcb_randr_crtc_t *crtcs;
2835
2836 crtcs = xcb_randr_get_screen_resources_current_crtcs(reply);
2837 for (i = 0; i < reply->num_crtcs; i++)
2838 {
2839 if (crtcs[i] == crtc)
2840 {
2841 ret = EINA_TRUE;
2842 break;
2843 }
2844 }
2845 free(reply);
2846 }
2847 }
2848 else if (_randr_version == RANDR_1_2)
2849 {
2850 xcb_randr_get_screen_resources_reply_t *reply;
2851
2852 reply = _ecore_xcb_randr_12_get_resources(root);
2853 if (reply)
2854 {
2855 int i = 0;
2856 xcb_randr_crtc_t *crtcs;
2857
2858 crtcs = xcb_randr_get_screen_resources_crtcs(reply);
2859 for (i = 0; i < reply->num_crtcs; i++)
2860 {
2861 if (crtcs[i] == crtc)
2862 {
2863 ret = EINA_TRUE;
2864 break;
2865 }
2866 }
2867 free(reply);
2868 }
2869 }
2870 }
2871#endif
2872
2873 return ret;
2874}
2875
2876static Ecore_X_Randr_Mode *
2877_ecore_xcb_randr_12_output_modes_get(Ecore_X_Window root,
2878 Ecore_X_Randr_Output output,
2879 int *num,
2880 int *npreferred)
2881{
2882 Ecore_X_Randr_Mode *modes = NULL;
2883 xcb_randr_get_screen_resources_reply_t *reply;
2884
2885 reply = _ecore_xcb_randr_12_get_resources(root);
2886 if (reply)
2887 {
2888 xcb_randr_get_output_info_cookie_t ocookie;
2889 xcb_randr_get_output_info_reply_t *oreply;
2890
2891 ocookie =
2892 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
2893 reply->config_timestamp);
2894 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
2895 ocookie, NULL);
2896 if (oreply)
2897 {
2898 if (num) *num = oreply->num_modes;
2899 if (npreferred) *npreferred = oreply->num_preferred;
2900
2901 modes = malloc(sizeof(Ecore_X_Randr_Mode) *
2902 oreply->num_modes);
2903 if (modes)
2904 {
2905 xcb_randr_mode_t *rmodes;
2906 int len = 0;
2907
2908 len = xcb_randr_get_output_info_modes_length(oreply);
2909 rmodes = xcb_randr_get_output_info_modes(oreply);
2910 memcpy(modes, rmodes, sizeof(Ecore_X_Randr_Mode) * len);
2911 }
2912 free(oreply);
2913 }
2914 free(reply);
2915 }
2916
2917 return modes;
2918}
2919
2920static Ecore_X_Randr_Mode *
2921_ecore_xcb_randr_13_output_modes_get(Ecore_X_Window root,
2922 Ecore_X_Randr_Output output,
2923 int *num,
2924 int *npreferred)
2925{
2926 Ecore_X_Randr_Mode *modes = NULL;
2927 xcb_timestamp_t stamp = 0;
2928 xcb_randr_get_output_info_cookie_t ocookie;
2929 xcb_randr_get_output_info_reply_t *oreply;
2930
2931 stamp = _ecore_xcb_randr_13_get_resource_timestamp(root);
2932
2933 ocookie =
2934 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output, stamp);
2935 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn, ocookie, NULL);
2936 if (oreply)
2937 {
2938 if (num) *num = oreply->num_modes;
2939 if (npreferred) *npreferred = oreply->num_preferred;
2940
2941 modes = malloc(sizeof(Ecore_X_Randr_Mode) * oreply->num_modes);
2942 if (modes)
2943 {
2944 xcb_randr_mode_t *rmodes;
2945 int len = 0;
2946
2947 len = xcb_randr_get_output_info_modes_length(oreply);
2948 rmodes = xcb_randr_get_output_info_modes(oreply);
2949 memcpy(modes, rmodes, sizeof(Ecore_X_Randr_Mode) * len);
2950 }
2951 free(oreply);
2952 }
2953
2954 return modes;
2955}
2956
2957static Ecore_X_Randr_Mode_Info *
2958_ecore_xcb_randr_12_mode_info_get(Ecore_X_Window root,
2959 Ecore_X_Randr_Mode mode)
2960{
2961 Ecore_X_Randr_Mode_Info *ret = NULL;
2962 xcb_randr_get_screen_resources_reply_t *reply;
2963
2964 reply = _ecore_xcb_randr_12_get_resources(root);
2965 if (reply)
2966 {
2967 if ((ret = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
2968 {
2969 uint8_t *nbuf;
2970 xcb_randr_mode_info_iterator_t miter;
2971
2972 nbuf = xcb_randr_get_screen_resources_names(reply);
2973 miter = xcb_randr_get_screen_resources_modes_iterator(reply);
2974 while (miter.rem)
2975 {
2976 xcb_randr_mode_info_t *minfo;
2977
2978 minfo = miter.data;
2979 nbuf += minfo->name_len;
2980
2981 if (minfo->id == mode)
2982 {
2983 ret->xid = minfo->id;
2984 ret->width = minfo->width;
2985 ret->height = minfo->height;
2986 ret->dotClock = minfo->dot_clock;
2987 ret->hSyncStart = minfo->hsync_start;
2988 ret->hSyncEnd = minfo->hsync_end;
2989 ret->hTotal = minfo->htotal;
2990 ret->vSyncStart = minfo->vsync_start;
2991 ret->vSyncEnd = minfo->vsync_end;
2992 ret->vTotal = minfo->vtotal;
2993 ret->modeFlags = minfo->mode_flags;
2994
2995 ret->name = NULL;
2996 ret->nameLength = minfo->name_len;
2997 if (ret->nameLength > 0)
2998 {
2999 ret->name = malloc(ret->nameLength + 1);
3000 if (ret->name)
3001 memcpy(ret->name, nbuf, ret->nameLength + 1);
3002 }
3003
3004 break;
3005 }
3006 xcb_randr_mode_info_next(&miter);
3007 }
3008 }
3009
3010 free(reply);
3011 }
3012 return ret;
3013}
3014
3015static Ecore_X_Randr_Mode_Info *
3016_ecore_xcb_randr_13_mode_info_get(Ecore_X_Window root,
3017 Ecore_X_Randr_Mode mode)
3018{
3019 Ecore_X_Randr_Mode_Info *ret = NULL;
3020 xcb_randr_get_screen_resources_current_reply_t *reply;
3021
3022 reply = _ecore_xcb_randr_13_get_resources(root);
3023 if (reply)
3024 {
3025 if ((ret = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
3026 {
3027 uint8_t *nbuf;
3028 xcb_randr_mode_info_iterator_t miter;
3029
3030 nbuf = xcb_randr_get_screen_resources_current_names(reply);
3031 miter =
3032 xcb_randr_get_screen_resources_current_modes_iterator(reply);
3033 while (miter.rem)
3034 {
3035 xcb_randr_mode_info_t *minfo;
3036
3037 minfo = miter.data;
3038 nbuf += minfo->name_len;
3039
3040 if (minfo->id == mode)
3041 {
3042 ret->xid = minfo->id;
3043 ret->width = minfo->width;
3044 ret->height = minfo->height;
3045 ret->dotClock = minfo->dot_clock;
3046 ret->hSyncStart = minfo->hsync_start;
3047 ret->hSyncEnd = minfo->hsync_end;
3048 ret->hTotal = minfo->htotal;
3049 ret->vSyncStart = minfo->vsync_start;
3050 ret->vSyncEnd = minfo->vsync_end;
3051 ret->vTotal = minfo->vtotal;
3052 ret->modeFlags = minfo->mode_flags;
3053
3054 ret->name = NULL;
3055 ret->nameLength = minfo->name_len;
3056 if (ret->nameLength > 0)
3057 {
3058 ret->name = malloc(ret->nameLength + 1);
3059 if (ret->name)
3060 memcpy(ret->name, nbuf, ret->nameLength + 1);
3061 }
3062
3063 break;
3064 }
3065 xcb_randr_mode_info_next(&miter);
3066 }
3067 }
3068
3069 free(reply);
3070 }
3071 return ret;
3072}
3073
3074static Ecore_X_Randr_Mode_Info **
3075_ecore_xcb_randr_12_modes_info_get(Ecore_X_Window root,
3076 int *num)
3077{
3078 Ecore_X_Randr_Mode_Info **ret = NULL;
3079 xcb_randr_get_screen_resources_reply_t *reply;
3080
3081 reply = _ecore_xcb_randr_12_get_resources(root);
3082 if (reply)
3083 {
3084 if (num) *num = reply->num_modes;
3085 ret = malloc(sizeof(Ecore_X_Randr_Mode_Info *) * reply->num_modes);
3086 if (ret)
3087 {
3088 xcb_randr_mode_info_iterator_t miter;
3089 int i = 0;
3090 uint8_t *nbuf;
3091
3092 nbuf = xcb_randr_get_screen_resources_names(reply);
3093 miter = xcb_randr_get_screen_resources_modes_iterator(reply);
3094 while (miter.rem)
3095 {
3096 xcb_randr_mode_info_t *minfo;
3097
3098 minfo = miter.data;
3099 nbuf += minfo->name_len;
3100 if ((ret[i] = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
3101 {
3102 ret[i]->xid = minfo->id;
3103 ret[i]->width = minfo->width;
3104 ret[i]->height = minfo->height;
3105 ret[i]->dotClock = minfo->dot_clock;
3106 ret[i]->hSyncStart = minfo->hsync_start;
3107 ret[i]->hSyncEnd = minfo->hsync_end;
3108 ret[i]->hTotal = minfo->htotal;
3109 ret[i]->vSyncStart = minfo->vsync_start;
3110 ret[i]->vSyncEnd = minfo->vsync_end;
3111 ret[i]->vTotal = minfo->vtotal;
3112 ret[i]->modeFlags = minfo->mode_flags;
3113
3114 ret[i]->name = NULL;
3115 ret[i]->nameLength = minfo->name_len;
3116 if (ret[i]->nameLength > 0)
3117 {
3118 ret[i]->name = malloc(ret[i]->nameLength + 1);
3119 if (ret[i]->name)
3120 memcpy(ret[i]->name, nbuf,
3121 ret[i]->nameLength + 1);
3122 }
3123 }
3124 else
3125 {
3126 while (i > 0)
3127 free(ret[--i]);
3128 free(ret);
3129 ret = NULL;
3130 break;
3131 }
3132 i++;
3133 xcb_randr_mode_info_next(&miter);
3134 }
3135 }
3136 free(reply);
3137 }
3138 return ret;
3139}
3140
3141static Ecore_X_Randr_Mode_Info **
3142_ecore_xcb_randr_13_modes_info_get(Ecore_X_Window root,
3143 int *num)
3144{
3145 Ecore_X_Randr_Mode_Info **ret = NULL;
3146 xcb_randr_get_screen_resources_current_reply_t *reply;
3147
3148 reply = _ecore_xcb_randr_13_get_resources(root);
3149 if (reply)
3150 {
3151 if (num) *num = reply->num_modes;
3152 ret = malloc(sizeof(Ecore_X_Randr_Mode_Info *) * reply->num_modes);
3153 if (ret)
3154 {
3155 xcb_randr_mode_info_iterator_t miter;
3156 int i = 0;
3157 uint8_t *nbuf;
3158
3159 nbuf = xcb_randr_get_screen_resources_current_names(reply);
3160 miter =
3161 xcb_randr_get_screen_resources_current_modes_iterator(reply);
3162 while (miter.rem)
3163 {
3164 xcb_randr_mode_info_t *minfo;
3165
3166 minfo = miter.data;
3167 nbuf += minfo->name_len;
3168 if ((ret[i] = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
3169 {
3170 ret[i]->xid = minfo->id;
3171 ret[i]->width = minfo->width;
3172 ret[i]->height = minfo->height;
3173 ret[i]->dotClock = minfo->dot_clock;
3174 ret[i]->hSyncStart = minfo->hsync_start;
3175 ret[i]->hSyncEnd = minfo->hsync_end;
3176 ret[i]->hTotal = minfo->htotal;
3177 ret[i]->vSyncStart = minfo->vsync_start;
3178 ret[i]->vSyncEnd = minfo->vsync_end;
3179 ret[i]->vTotal = minfo->vtotal;
3180 ret[i]->modeFlags = minfo->mode_flags;
3181
3182 ret[i]->name = NULL;
3183 ret[i]->nameLength = minfo->name_len;
3184 if (ret[i]->nameLength > 0)
3185 {
3186 ret[i]->name = malloc(ret[i]->nameLength + 1);
3187 if (ret[i]->name)
3188 memcpy(ret[i]->name, nbuf,
3189 ret[i]->nameLength + 1);
3190 }
3191 }
3192 else
3193 {
3194 while (i > 0)
3195 free(ret[--i]);
3196 free(ret);
3197 ret = NULL;
3198 break;
3199 }
3200 i++;
3201 xcb_randr_mode_info_next(&miter);
3202 }
3203 }
3204 free(reply);
3205 }
3206 return ret;
3207}
3208
3209static void
3210_ecore_xcb_randr_12_mode_size_get(Ecore_X_Window root,
3211 Ecore_X_Randr_Mode mode,
3212 int *w,
3213 int *h)
3214{
3215 xcb_randr_get_screen_resources_reply_t *reply;
3216
3217 reply = _ecore_xcb_randr_12_get_resources(root);
3218 if (reply)
3219 {
3220 xcb_randr_mode_info_iterator_t miter;
3221
3222 miter = xcb_randr_get_screen_resources_modes_iterator(reply);
3223 while (miter.rem)
3224 {
3225 xcb_randr_mode_info_t *minfo;
3226
3227 minfo = miter.data;
3228 if (minfo->id == mode)
3229 {
3230 if (w) *w = minfo->width;
3231 if (h) *h = minfo->height;
3232 break;
3233 }
3234 xcb_randr_mode_info_next(&miter);
3235 }
3236 free(reply);
3237 }
3238}
3239
3240static void
3241_ecore_xcb_randr_13_mode_size_get(Ecore_X_Window root,
3242 Ecore_X_Randr_Mode mode,
3243 int *w,
3244 int *h)
3245{
3246 xcb_randr_get_screen_resources_current_reply_t *reply;
3247
3248 reply = _ecore_xcb_randr_13_get_resources(root);
3249 if (reply)
3250 {
3251 xcb_randr_mode_info_iterator_t miter;
3252
3253 miter = xcb_randr_get_screen_resources_current_modes_iterator(reply);
3254 while (miter.rem)
3255 {
3256 xcb_randr_mode_info_t *minfo;
3257
3258 minfo = miter.data;
3259 if (minfo->id == mode)
3260 {
3261 if (w) *w = minfo->width;
3262 if (h) *h = minfo->height;
3263 break;
3264 }
3265 xcb_randr_mode_info_next(&miter);
3266 }
3267 free(reply);
3268 }
3269}
3270
3271static Ecore_X_Randr_Output *
3272_ecore_xcb_randr_12_output_clones_get(Ecore_X_Window root,
3273 Ecore_X_Randr_Output output,
3274 int *num)
3275{
3276 Ecore_X_Randr_Output *outputs = NULL;
3277 xcb_randr_get_screen_resources_reply_t *reply;
3278
3279 reply = _ecore_xcb_randr_12_get_resources(root);
3280 if (reply)
3281 {
3282 xcb_randr_get_output_info_cookie_t ocookie;
3283 xcb_randr_get_output_info_reply_t *oreply;
3284
3285 ocookie =
3286 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3287 reply->config_timestamp);
3288 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3289 ocookie, NULL);
3290 if (oreply)
3291 {
3292 if (num) *num = oreply->num_clones;
3293
3294 outputs =
3295 malloc(sizeof(Ecore_X_Randr_Output) * oreply->num_clones);
3296 if (outputs)
3297 {
3298 memcpy(outputs, xcb_randr_get_output_info_clones(oreply),
3299 sizeof(Ecore_X_Randr_Output) * oreply->num_clones);
3300 }
3301 free(oreply);
3302 }
3303 free(reply);
3304 }
3305 return outputs;
3306}
3307
3308static Ecore_X_Randr_Output *
3309_ecore_xcb_randr_13_output_clones_get(Ecore_X_Window root,
3310 Ecore_X_Randr_Output output,
3311 int *num)
3312{
3313 Ecore_X_Randr_Output *outputs = NULL;
3314 xcb_randr_get_screen_resources_current_reply_t *reply;
3315
3316 reply = _ecore_xcb_randr_13_get_resources(root);
3317 if (reply)
3318 {
3319 xcb_randr_get_output_info_cookie_t ocookie;
3320 xcb_randr_get_output_info_reply_t *oreply;
3321
3322 ocookie =
3323 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3324 reply->config_timestamp);
3325 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3326 ocookie, NULL);
3327 if (oreply)
3328 {
3329 if (num) *num = oreply->num_clones;
3330
3331 outputs =
3332 malloc(sizeof(Ecore_X_Randr_Output) * oreply->num_clones);
3333 if (outputs)
3334 {
3335 memcpy(outputs, xcb_randr_get_output_info_clones(oreply),
3336 sizeof(Ecore_X_Randr_Output) * oreply->num_clones);
3337 }
3338 free(oreply);
3339 }
3340 free(reply);
3341 }
3342 return outputs;
3343}
3344
3345static Ecore_X_Randr_Crtc *
3346_ecore_xcb_randr_12_output_possible_crtcs_get(Ecore_X_Window root,
3347 Ecore_X_Randr_Output output,
3348 int *num)
3349{
3350 Ecore_X_Randr_Crtc *crtcs = NULL;
3351 xcb_randr_get_screen_resources_reply_t *reply;
3352
3353 reply = _ecore_xcb_randr_12_get_resources(root);
3354 if (reply)
3355 {
3356 xcb_randr_get_output_info_cookie_t ocookie;
3357 xcb_randr_get_output_info_reply_t *oreply;
3358
3359 ocookie =
3360 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3361 reply->config_timestamp);
3362 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3363 ocookie, NULL);
3364 if (oreply)
3365 {
3366 if (num) *num = oreply->num_crtcs;
3367
3368 crtcs = malloc(sizeof(Ecore_X_Randr_Crtc) * oreply->num_crtcs);
3369 if (crtcs)
3370 {
3371 memcpy(crtcs, xcb_randr_get_output_info_crtcs(oreply),
3372 sizeof(Ecore_X_Randr_Crtc) * oreply->num_crtcs);
3373 }
3374 free(oreply);
3375 }
3376 free(reply);
3377 }
3378 return crtcs;
3379}
3380
3381static Ecore_X_Randr_Crtc *
3382_ecore_xcb_randr_13_output_possible_crtcs_get(Ecore_X_Window root,
3383 Ecore_X_Randr_Output output,
3384 int *num)
3385{
3386 Ecore_X_Randr_Crtc *crtcs = NULL;
3387 xcb_randr_get_screen_resources_current_reply_t *reply;
3388
3389 reply = _ecore_xcb_randr_13_get_resources(root);
3390 if (reply)
3391 {
3392 xcb_randr_get_output_info_cookie_t ocookie;
3393 xcb_randr_get_output_info_reply_t *oreply;
3394
3395 ocookie =
3396 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3397 reply->config_timestamp);
3398 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3399 ocookie, NULL);
3400 if (oreply)
3401 {
3402 if (num) *num = oreply->num_crtcs;
3403
3404 crtcs = malloc(sizeof(Ecore_X_Randr_Crtc) * oreply->num_crtcs);
3405 if (crtcs)
3406 {
3407 memcpy(crtcs, xcb_randr_get_output_info_crtcs(oreply),
3408 sizeof(Ecore_X_Randr_Crtc) * oreply->num_crtcs);
3409 }
3410 free(oreply);
3411 }
3412 free(reply);
3413 }
3414 return crtcs;
3415}
3416
3417static char *
3418_ecore_xcb_randr_12_output_name_get(Ecore_X_Window root,
3419 Ecore_X_Randr_Output output,
3420 int *len)
3421{
3422 char *ret = NULL;
3423 xcb_randr_get_screen_resources_reply_t *reply;
3424
3425 reply = _ecore_xcb_randr_12_get_resources(root);
3426 if (reply)
3427 {
3428 xcb_randr_get_output_info_cookie_t ocookie;
3429 xcb_randr_get_output_info_reply_t *oreply;
3430
3431 ocookie =
3432 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3433 reply->config_timestamp);
3434 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3435 ocookie, NULL);
3436 if (oreply)
3437 {
3438 uint8_t *nbuf;
3439
3440 nbuf = xcb_randr_get_output_info_name(oreply);
3441 nbuf += oreply->name_len;
3442
3443 if (len) *len = oreply->name_len;
3444 if (oreply->name_len > 0)
3445 {
3446 ret = malloc(oreply->name_len + 1);
3447 if (ret)
3448 memcpy(ret, nbuf, oreply->name_len + 1);
3449 }
3450
3451 free(oreply);
3452 }
3453 free(reply);
3454 }
3455 return ret;
3456}
3457
3458static char *
3459_ecore_xcb_randr_13_output_name_get(Ecore_X_Window root,
3460 Ecore_X_Randr_Output output,
3461 int *len)
3462{
3463 char *ret = NULL;
3464 xcb_randr_get_screen_resources_current_reply_t *reply;
3465
3466 reply = _ecore_xcb_randr_13_get_resources(root);
3467 if (reply)
3468 {
3469 xcb_randr_get_output_info_cookie_t ocookie;
3470 xcb_randr_get_output_info_reply_t *oreply;
3471
3472 ocookie =
3473 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3474 reply->config_timestamp);
3475 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3476 ocookie, NULL);
3477 if (oreply)
3478 {
3479 uint8_t *nbuf;
3480
3481 nbuf = xcb_randr_get_output_info_name(oreply);
3482 nbuf += oreply->name_len;
3483
3484 if (len) *len = oreply->name_len;
3485 if (oreply->name_len > 0)
3486 {
3487 ret = malloc(oreply->name_len + 1);
3488 if (ret)
3489 memcpy(ret, nbuf, oreply->name_len + 1);
3490 }
3491
3492 free(oreply);
3493 }
3494 free(reply);
3495 }
3496 return ret;
3497}
3498
3499static Ecore_X_Randr_Connection_Status
3500_ecore_xcb_randr_12_output_connection_status_get(Ecore_X_Window root,
3501 Ecore_X_Randr_Output output)
3502{
3503 Ecore_X_Randr_Connection_Status ret = ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
3504 xcb_randr_get_screen_resources_reply_t *reply;
3505
3506 reply = _ecore_xcb_randr_12_get_resources(root);
3507 if (reply)
3508 {
3509 xcb_randr_get_output_info_cookie_t ocookie;
3510 xcb_randr_get_output_info_reply_t *oreply;
3511
3512 ocookie =
3513 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3514 reply->config_timestamp);
3515 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3516 ocookie, NULL);
3517 if (oreply)
3518 {
3519 ret = oreply->connection;
3520 free(oreply);
3521 }
3522 free(reply);
3523 }
3524 return ret;
3525}
3526
3527static Ecore_X_Randr_Connection_Status
3528_ecore_xcb_randr_13_output_connection_status_get(Ecore_X_Window root,
3529 Ecore_X_Randr_Output output)
3530{
3531 Ecore_X_Randr_Connection_Status ret = ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
3532 xcb_randr_get_screen_resources_current_reply_t *reply;
3533
3534 reply = _ecore_xcb_randr_13_get_resources(root);
3535 if (reply)
3536 {
3537 xcb_randr_get_output_info_cookie_t ocookie;
3538 xcb_randr_get_output_info_reply_t *oreply;
3539
3540 ocookie =
3541 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3542 reply->config_timestamp);
3543 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3544 ocookie, NULL);
3545 if (oreply)
3546 {
3547 ret = oreply->connection;
3548 free(oreply);
3549 }
3550 free(reply);
3551 }
3552 return ret;
3553}
3554
3555static Ecore_X_Randr_Output *
3556_ecore_xcb_randr_12_outputs_get(Ecore_X_Window root,
3557 int *num)
3558{
3559 Ecore_X_Randr_Output *ret = NULL;
3560 xcb_randr_get_screen_resources_reply_t *reply;
3561
3562 reply = _ecore_xcb_randr_12_get_resources(root);
3563 if (reply)
3564 {
3565 if (num) *num = reply->num_outputs;
3566 ret = malloc(sizeof(Ecore_X_Randr_Output) * reply->num_outputs);
3567 if (ret)
3568 memcpy(ret, xcb_randr_get_screen_resources_outputs(reply),
3569 sizeof(Ecore_X_Randr_Output) * reply->num_outputs);
3570 free(reply);
3571 }
3572 return ret;
3573}
3574
3575static Ecore_X_Randr_Output *
3576_ecore_xcb_randr_13_outputs_get(Ecore_X_Window root,
3577 int *num)
3578{
3579 Ecore_X_Randr_Output *ret = NULL;
3580 xcb_randr_get_screen_resources_current_reply_t *reply;
3581
3582 reply = _ecore_xcb_randr_13_get_resources(root);
3583 if (reply)
3584 {
3585 if (num) *num = reply->num_outputs;
3586 ret = malloc(sizeof(Ecore_X_Randr_Output) * reply->num_outputs);
3587 if (ret)
3588 memcpy(ret, xcb_randr_get_screen_resources_current_outputs(reply),
3589 sizeof(Ecore_X_Randr_Output) * reply->num_outputs);
3590 free(reply);
3591 }
3592 return ret;
3593}
3594
3595static Ecore_X_Randr_Crtc
3596_ecore_xcb_randr_12_output_crtc_get(Ecore_X_Window root,
3597 Ecore_X_Randr_Output output)
3598{
3599 Ecore_X_Randr_Crtc ret = Ecore_X_Randr_None;
3600 xcb_randr_get_screen_resources_reply_t *reply;
3601
3602 reply = _ecore_xcb_randr_12_get_resources(root);
3603 if (reply)
3604 {
3605 xcb_randr_get_output_info_cookie_t ocookie;
3606 xcb_randr_get_output_info_reply_t *oreply;
3607
3608 ocookie =
3609 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3610 reply->config_timestamp);
3611 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3612 ocookie, NULL);
3613 if (oreply)
3614 {
3615 ret = oreply->crtc;
3616 free(oreply);
3617 }
3618 free(reply);
3619 }
3620 return ret;
3621}
3622
3623static Ecore_X_Randr_Crtc
3624_ecore_xcb_randr_13_output_crtc_get(Ecore_X_Window root,
3625 Ecore_X_Randr_Output output)
3626{
3627 Ecore_X_Randr_Crtc ret = Ecore_X_Randr_None;
3628 xcb_randr_get_screen_resources_current_reply_t *reply;
3629
3630 reply = _ecore_xcb_randr_13_get_resources(root);
3631 if (reply)
3632 {
3633 xcb_randr_get_output_info_cookie_t ocookie;
3634 xcb_randr_get_output_info_reply_t *oreply;
3635
3636 ocookie =
3637 xcb_randr_get_output_info_unchecked(_ecore_xcb_conn, output,
3638 reply->config_timestamp);
3639 oreply = xcb_randr_get_output_info_reply(_ecore_xcb_conn,
3640 ocookie, NULL);
3641 if (oreply)
3642 {
3643 ret = oreply->crtc;
3644 free(oreply);
3645 }
3646 free(reply);
3647 }
3648 return ret;
3649}
3650
3651static xcb_randr_get_screen_resources_reply_t *
3652_ecore_xcb_randr_12_get_resources(Ecore_X_Window win)
3653{
3654 xcb_randr_get_screen_resources_cookie_t cookie;
3655 xcb_randr_get_screen_resources_reply_t *reply;
3656
3657 cookie = xcb_randr_get_screen_resources_unchecked(_ecore_xcb_conn, win);
3658 reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL);
3659 return reply;
3660}
3661
3662static xcb_randr_get_screen_resources_current_reply_t *
3663_ecore_xcb_randr_13_get_resources(Ecore_X_Window win)
3664{
3665 xcb_randr_get_screen_resources_current_cookie_t cookie;
3666 xcb_randr_get_screen_resources_current_reply_t *reply;
3667
3668 cookie =
3669 xcb_randr_get_screen_resources_current_unchecked(_ecore_xcb_conn, win);
3670 reply =
3671 xcb_randr_get_screen_resources_current_reply(_ecore_xcb_conn,
3672 cookie, NULL);
3673 return reply;
3674}
3675
3676static xcb_timestamp_t
3677_ecore_xcb_randr_12_get_resource_timestamp(Ecore_X_Window win)
3678{
3679 xcb_timestamp_t stamp = 0;
3680 xcb_randr_get_screen_resources_reply_t *reply;
3681
3682 reply = _ecore_xcb_randr_12_get_resources(win);
3683 stamp = reply->config_timestamp;
3684 free(reply);
3685 return stamp;
3686}
3687
3688static xcb_timestamp_t
3689_ecore_xcb_randr_13_get_resource_timestamp(Ecore_X_Window win)
3690{
3691 xcb_timestamp_t stamp = 0;
3692 xcb_randr_get_screen_resources_current_reply_t *reply;
3693
3694 reply = _ecore_xcb_randr_13_get_resources(win);
3695 stamp = reply->config_timestamp;
3696 free(reply);
3697 return stamp;
3698}
3699
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_region.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_region.c
deleted file mode 100644
index a221d8f..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_region.c
+++ /dev/null
@@ -1,159 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <pixman.h>
3
4/*
5 * [ ] XPolygonRegion
6 * [ ] XShrinkRegion
7 * [ ] XClipBox
8 * [ ] XXorRegion
9 */
10
11EAPI Ecore_X_XRegion *
12ecore_x_xregion_new()
13{
14 pixman_region16_t *region;
15
16 region = (pixman_region16_t *)malloc(sizeof(pixman_region16_t));
17 if (!region) return NULL;
18
19 pixman_region_init(region);
20
21 return (Ecore_X_XRegion *)region;
22}
23
24EAPI void
25ecore_x_xregion_free(Ecore_X_XRegion *region)
26{
27 if (!region) return;
28
29 pixman_region_fini(region);
30 free(region);
31}
32
33EAPI Eina_Bool
34ecore_x_xregion_set(Ecore_X_XRegion *region,
35 Ecore_X_GC gc)
36{
37 xcb_rectangle_t *rects;
38 pixman_box16_t *boxes;
39 int num = 0, i = 0;
40
41 CHECK_XCB_CONN;
42
43 if (!region) return EINA_FALSE;
44
45 boxes = pixman_region_rectangles((pixman_region16_t *)region, &num);
46 if ((!boxes) || (num == 0)) return EINA_FALSE;
47
48 rects = (xcb_rectangle_t *)malloc(sizeof(xcb_rectangle_t) * num);
49 if (!rects) return EINA_FALSE;
50
51 for (i = 0; i < num; i++)
52 {
53 rects[i].x = boxes[i].x1;
54 rects[i].y = boxes[i].y1;
55 rects[i].width = boxes[i].x2 - boxes[i].x1 + 1;
56 rects[i].height = boxes[i].y2 - boxes[i].y1 + 1;
57 }
58
59 xcb_set_clip_rectangles(_ecore_xcb_conn, XCB_CLIP_ORDERING_YX_BANDED,
60 gc, 0, 0, num, rects);
61
62// ecore_x_flush();
63 return EINA_TRUE;
64}
65
66EAPI void
67ecore_x_xregion_translate(Ecore_X_XRegion *region,
68 int x,
69 int y)
70{
71 if (!region) return;
72
73 pixman_region_translate((pixman_region16_t *)region, x, y);
74}
75
76EAPI Eina_Bool
77ecore_x_xregion_intersect(Ecore_X_XRegion *dst,
78 Ecore_X_XRegion *r1,
79 Ecore_X_XRegion *r2)
80{
81 return pixman_region_intersect((pixman_region16_t *)dst,
82 (pixman_region16_t *)r1,
83 (pixman_region16_t *)r2);
84}
85
86EAPI Eina_Bool
87ecore_x_xregion_union(Ecore_X_XRegion *dst,
88 Ecore_X_XRegion *r1,
89 Ecore_X_XRegion *r2)
90{
91 return pixman_region_union((pixman_region16_t *)dst,
92 (pixman_region16_t *)r1,
93 (pixman_region16_t *)r2);
94}
95
96EAPI Eina_Bool
97ecore_x_xregion_union_rect(Ecore_X_XRegion *dst,
98 Ecore_X_XRegion *src,
99 Ecore_X_Rectangle *rect)
100{
101 return pixman_region_union_rect((pixman_region16_t *)dst,
102 (pixman_region16_t *)src,
103 rect->x, rect->y, rect->width, rect->height);
104}
105
106EAPI Eina_Bool
107ecore_x_xregion_subtract(Ecore_X_XRegion *dst,
108 Ecore_X_XRegion *rm,
109 Ecore_X_XRegion *rs)
110{
111 return pixman_region_subtract((pixman_region16_t *)dst,
112 (pixman_region16_t *)rm,
113 (pixman_region16_t *)rs);
114}
115
116EAPI Eina_Bool
117ecore_x_xregion_is_empty(Ecore_X_XRegion *region)
118{
119 if (!region) return EINA_TRUE;
120
121 return !pixman_region_not_empty((pixman_region16_t *)region);
122}
123
124EAPI Eina_Bool
125ecore_x_xregion_is_equal(Ecore_X_XRegion *r1,
126 Ecore_X_XRegion *r2)
127{
128 if ((!r1) || (!r2)) return EINA_FALSE;
129
130 return pixman_region_equal((pixman_region16_t *)r1,
131 (pixman_region16_t *)r2);
132}
133
134EAPI Eina_Bool
135ecore_x_xregion_point_contain(Ecore_X_XRegion *region,
136 int x,
137 int y)
138{
139 if (!region) return EINA_FALSE;
140
141 return pixman_region_contains_point((pixman_region16_t *)region, x, y, NULL);
142}
143
144EAPI Eina_Bool
145ecore_x_xregion_rect_contain(Ecore_X_XRegion *region,
146 Ecore_X_Rectangle *rect)
147{
148 pixman_box16_t box;
149
150 if ((!region) || (!rect)) return EINA_FALSE;
151
152 box.x1 = rect->x;
153 box.y1 = rect->y;
154 box.x2 = rect->x + rect->width - 1;
155 box.y2 = rect->y + rect->height - 1;
156
157 return pixman_region_contains_rectangle((pixman_region16_t *)region, &box);
158}
159
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c
deleted file mode 100644
index f36b4d2..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c
+++ /dev/null
@@ -1,225 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <ctype.h> // for isupper/tolower
3#ifdef ECORE_XCB_RENDER
4# include <xcb/render.h>
5# include <xcb/xcb_renderutil.h>
6#endif
7
8/* local function prototypes */
9static Eina_Bool _ecore_xcb_render_parse_boolean(char *v);
10
11/* local variables */
12static Eina_Bool _render_avail = EINA_FALSE;
13static Eina_Bool _render_argb = EINA_FALSE;
14static Eina_Bool _render_anim = EINA_FALSE;
15
16void
17_ecore_xcb_render_init(void)
18{
19 LOGFN(__FILE__, __LINE__, __FUNCTION__);
20
21#ifdef ECORE_XCB_RENDER
22 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_render_id);
23#endif
24}
25
26void
27_ecore_xcb_render_finalize(void)
28{
29#ifdef ECORE_XCB_RENDER
30 const xcb_query_extension_reply_t *ext_reply;
31#endif
32
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34
35#ifdef ECORE_XCB_RENDER
36 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_render_id);
37 if ((ext_reply) && (ext_reply->present))
38 {
39 xcb_render_query_version_cookie_t cookie;
40 xcb_render_query_version_reply_t *reply;
41
42 cookie =
43 xcb_render_query_version_unchecked(_ecore_xcb_conn,
44 XCB_RENDER_MAJOR_VERSION,
45 XCB_RENDER_MINOR_VERSION);
46 reply = xcb_render_query_version_reply(_ecore_xcb_conn, cookie, NULL);
47 if (reply)
48 {
49// if ((reply->major_version >= XCB_RENDER_MAJOR_VERSION) &&
50 if (reply->minor_version >= XCB_RENDER_MINOR_VERSION)
51 {
52 char *v = NULL;
53
54 _render_avail = EINA_TRUE;
55 _ecore_xcb_xdefaults_init();
56 if ((reply->major_version > 0) || (reply->minor_version >= 5))
57 {
58 _render_argb = EINA_TRUE;
59 v = getenv("XCURSOR_CORE");
60 if (!v)
61 v = _ecore_xcb_xdefaults_string_get("Xcursor", "core");
62 if ((v) && (_ecore_xcb_render_parse_boolean(v)))
63 _render_argb = EINA_FALSE;
64 }
65 if ((_render_argb) &&
66 ((reply->major_version > 0) || (reply->minor_version >= 8)))
67 {
68 _render_anim = EINA_TRUE;
69 v = getenv("XCURSOR_ANIM");
70 if (!v)
71 v = _ecore_xcb_xdefaults_string_get("Xcursor", "anim");
72 if ((v) && (_ecore_xcb_render_parse_boolean(v)))
73 _render_anim = EINA_FALSE;
74 }
75 _ecore_xcb_xdefaults_shutdown();
76 }
77 }
78 free(reply);
79 }
80#endif
81}
82
83Eina_Bool
84_ecore_xcb_render_avail_get(void)
85{
86 return _render_avail;
87}
88
89Eina_Bool
90_ecore_xcb_render_argb_get(void)
91{
92 return _render_argb;
93}
94
95Eina_Bool
96_ecore_xcb_render_anim_get(void)
97{
98 return _render_anim;
99}
100
101Eina_Bool
102_ecore_xcb_render_visual_supports_alpha(Ecore_X_Visual visual)
103{
104 Eina_Bool ret = EINA_FALSE;
105#ifdef ECORE_XCB_RENDER
106 const xcb_render_query_pict_formats_reply_t *reply;
107 xcb_render_pictvisual_t *vis;
108#endif
109
110 LOGFN(__FILE__, __LINE__, __FUNCTION__);
111 CHECK_XCB_CONN;
112
113 if (!visual) return EINA_FALSE;
114 if (!_render_avail) return EINA_FALSE;
115
116#ifdef ECORE_XCB_RENDER
117 reply = xcb_render_util_query_formats(_ecore_xcb_conn);
118 if (!reply) return EINA_FALSE;
119
120 vis =
121 xcb_render_util_find_visual_format(reply,
122 ((xcb_visualtype_t *)visual)->visual_id);
123 if (vis)
124 {
125 xcb_render_pictforminfo_t temp;
126 xcb_render_pictforminfo_t *format;
127
128 temp.id = vis->format;
129 format =
130 xcb_render_util_find_format(reply, XCB_PICT_FORMAT_ID, &temp, 0);
131
132 if ((format->type == XCB_RENDER_PICT_TYPE_DIRECT) &&
133 (format->direct.alpha_mask))
134 ret = EINA_TRUE;
135 }
136
137#endif
138
139 return ret;
140}
141
142uint32_t
143_ecore_xcb_render_find_visual_id(int type,
144 Eina_Bool check_alpha)
145{
146#ifdef ECORE_XCB_RENDER
147 const xcb_render_query_pict_formats_reply_t *reply;
148 xcb_render_pictvisual_t *visual = NULL;
149 xcb_render_pictscreen_iterator_t screens;
150 xcb_render_pictdepth_iterator_t depths;
151 xcb_render_pictvisual_iterator_t visuals;
152#endif
153
154 LOGFN(__FILE__, __LINE__, __FUNCTION__);
155 CHECK_XCB_CONN;
156
157 if (!_render_avail) return 0;
158
159#ifdef ECORE_XCB_RENDER
160 reply = xcb_render_util_query_formats(_ecore_xcb_conn);
161 if (!reply) return 0;
162
163 for (screens = xcb_render_query_pict_formats_screens_iterator(reply);
164 screens.rem; xcb_render_pictscreen_next(&screens))
165 {
166 for (depths = xcb_render_pictscreen_depths_iterator(screens.data);
167 depths.rem; xcb_render_pictdepth_next(&depths))
168 {
169 for (visuals = xcb_render_pictdepth_visuals_iterator(depths.data);
170 visuals.rem; xcb_render_pictvisual_next(&visuals))
171 {
172 xcb_render_pictforminfo_t temp;
173 xcb_render_pictforminfo_t *format;
174
175 visual = visuals.data;
176 temp.id = visual->format;
177
178 format =
179 xcb_render_util_find_format(reply, XCB_PICT_FORMAT_ID,
180 &temp, 0);
181 if (!format) continue;
182 if (format->type == type)
183 {
184 if (check_alpha)
185 {
186 if (format->direct.alpha_mask)
187 return visual->visual;
188 }
189 else
190 return visual->visual;
191 }
192 }
193 }
194 }
195#endif
196
197 return 0;
198}
199
200/* local function prototypes */
201static Eina_Bool
202_ecore_xcb_render_parse_boolean(char *v)
203{
204 char c;
205
206 c = *v;
207 if (isupper((int)c))
208 c = tolower(c);
209 if ((c == 't') || (c == 'y') || (c == '1'))
210 return EINA_TRUE;
211 if ((c == 'f') || (c == 'n') || (c == '0'))
212 return EINA_FALSE;
213 if (c == 'o')
214 {
215 char d;
216
217 d = v[1];
218 if (isupper((int)d))
219 d = tolower(d);
220 if (d == 'n') return EINA_TRUE;
221 if (d == 'f') return EINA_FALSE;
222 }
223 return EINA_FALSE;
224}
225
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c
deleted file mode 100644
index cb7249f..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c
+++ /dev/null
@@ -1,338 +0,0 @@
1#include "ecore_xcb_private.h"
2# ifdef ECORE_XCB_SCREENSAVER
3# include <xcb/screensaver.h>
4# endif
5
6/* local variables */
7static Eina_Bool _screensaver_avail = EINA_FALSE;
8
9/* external variables */
10int _ecore_xcb_event_screensaver = -1;
11
12void
13_ecore_xcb_screensaver_init(void)
14{
15 LOGFN(__FILE__, __LINE__, __FUNCTION__);
16
17#ifdef ECORE_XCB_SCREENSAVER
18 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_screensaver_id);
19#endif
20}
21
22void
23_ecore_xcb_screensaver_finalize(void)
24{
25#ifdef ECORE_XCB_SCREENSAVER
26 const xcb_query_extension_reply_t *ext_reply;
27#endif
28
29 LOGFN(__FILE__, __LINE__, __FUNCTION__);
30
31#ifdef ECORE_XCB_SCREENSAVER
32 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_screensaver_id);
33 if ((ext_reply) && (ext_reply->present))
34 {
35 xcb_screensaver_query_version_cookie_t cookie;
36 xcb_screensaver_query_version_reply_t *reply;
37
38 cookie =
39 xcb_screensaver_query_version_unchecked(_ecore_xcb_conn,
40 XCB_SCREENSAVER_MAJOR_VERSION,
41 XCB_SCREENSAVER_MINOR_VERSION);
42 reply =
43 xcb_screensaver_query_version_reply(_ecore_xcb_conn, cookie, NULL);
44 if (reply)
45 {
46 if ((reply->server_major_version >= XCB_SCREENSAVER_MAJOR_VERSION) &&
47 (reply->server_minor_version >= XCB_SCREENSAVER_MINOR_VERSION))
48 _screensaver_avail = EINA_TRUE;
49
50 free(reply);
51 }
52
53 if (_screensaver_avail)
54 _ecore_xcb_event_screensaver = ext_reply->first_event;
55 }
56#endif
57}
58
59EAPI int
60ecore_x_screensaver_idle_time_get(void)
61{
62 int ret = 0;
63#ifdef ECORE_XCB_SCREENSAVER
64 xcb_screensaver_query_info_cookie_t cookie;
65 xcb_screensaver_query_info_reply_t *reply;
66 Ecore_X_Window root;
67#endif
68
69 LOGFN(__FILE__, __LINE__, __FUNCTION__);
70 CHECK_XCB_CONN;
71
72 if (!_screensaver_avail) return 0;
73
74#ifdef ECORE_XCB_SCREENSAVER
75 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
76 cookie = xcb_screensaver_query_info_unchecked(_ecore_xcb_conn, root);
77 reply = xcb_screensaver_query_info_reply(_ecore_xcb_conn, cookie, NULL);
78 if (!reply) return 0;
79 ret = (reply->ms_until_server / 1000);
80 free(reply);
81#endif
82
83 return ret;
84}
85
86EAPI void
87ecore_x_screensaver_set(int timeout,
88 int interval,
89 int prefer_blanking,
90 int allow_exposures)
91{
92 LOGFN(__FILE__, __LINE__, __FUNCTION__);
93 CHECK_XCB_CONN;
94
95 if (!_screensaver_avail) return;
96
97#ifdef ECORE_XCB_SCREENSAVER
98 xcb_set_screen_saver(_ecore_xcb_conn,
99 timeout, interval, prefer_blanking, allow_exposures);
100#endif
101}
102
103EAPI void
104ecore_x_screensaver_timeout_set(int timeout)
105{
106#ifdef ECORE_XCB_SCREENSAVER
107 xcb_get_screen_saver_cookie_t cookie;
108 xcb_get_screen_saver_reply_t *reply;
109 uint16_t pint;
110 uint8_t pblank, pexpo;
111#endif
112
113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
114 CHECK_XCB_CONN;
115
116 if (!_screensaver_avail) return;
117
118#ifdef ECORE_XCB_SCREENSAVER
119 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
120 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
121 if (!reply) return;
122 pint = reply->interval;
123 pblank = reply->prefer_blanking;
124 pexpo = reply->allow_exposures;
125 free(reply);
126 xcb_set_screen_saver(_ecore_xcb_conn, timeout, pint, pblank, pexpo);
127#endif
128}
129
130EAPI int
131ecore_x_screensaver_timeout_get(void)
132{
133 int timeout = 0;
134#ifdef ECORE_XCB_SCREENSAVER
135 xcb_get_screen_saver_cookie_t cookie;
136 xcb_get_screen_saver_reply_t *reply;
137#endif
138
139 LOGFN(__FILE__, __LINE__, __FUNCTION__);
140 CHECK_XCB_CONN;
141
142 if (!_screensaver_avail) return 0;
143
144#ifdef ECORE_XCB_SCREENSAVER
145 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
146 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
147 if (!reply) return 0;
148 timeout = reply->timeout;
149 free(reply);
150#endif
151
152 return timeout;
153}
154
155EAPI void
156ecore_x_screensaver_blank_set(int blank)
157{
158#ifdef ECORE_XCB_SCREENSAVER
159 xcb_get_screen_saver_cookie_t cookie;
160 xcb_get_screen_saver_reply_t *reply;
161 uint16_t pint, pto;
162 uint8_t pexpo;
163#endif
164
165 LOGFN(__FILE__, __LINE__, __FUNCTION__);
166 CHECK_XCB_CONN;
167
168 if (!_screensaver_avail) return;
169
170#ifdef ECORE_XCB_SCREENSAVER
171 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
172 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
173 if (!reply) return;
174 pto = reply->timeout;
175 pint = reply->interval;
176 pexpo = reply->allow_exposures;
177 free(reply);
178 xcb_set_screen_saver(_ecore_xcb_conn, pto, pint, blank, pexpo);
179#endif
180}
181
182EAPI int
183ecore_x_screensaver_blank_get(void)
184{
185 int blank = 0;
186#ifdef ECORE_XCB_SCREENSAVER
187 xcb_get_screen_saver_cookie_t cookie;
188 xcb_get_screen_saver_reply_t *reply;
189#endif
190
191 LOGFN(__FILE__, __LINE__, __FUNCTION__);
192 CHECK_XCB_CONN;
193
194 if (!_screensaver_avail) return 0;
195
196#ifdef ECORE_XCB_SCREENSAVER
197 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
198 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
199 if (!reply) return 0;
200 blank = reply->prefer_blanking;
201 free(reply);
202#endif
203
204 return blank;
205}
206
207EAPI void
208ecore_x_screensaver_expose_set(int expose)
209{
210#ifdef ECORE_XCB_SCREENSAVER
211 xcb_get_screen_saver_cookie_t cookie;
212 xcb_get_screen_saver_reply_t *reply;
213 uint16_t pint, pto;
214 uint8_t pblank;
215#endif
216
217 LOGFN(__FILE__, __LINE__, __FUNCTION__);
218 CHECK_XCB_CONN;
219
220 if (!_screensaver_avail) return;
221
222#ifdef ECORE_XCB_SCREENSAVER
223 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
224 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
225 if (!reply) return;
226 pto = reply->timeout;
227 pint = reply->interval;
228 pblank = reply->prefer_blanking;
229 free(reply);
230 xcb_set_screen_saver(_ecore_xcb_conn, pto, pint, pblank, expose);
231#endif
232}
233
234EAPI int
235ecore_x_screensaver_expose_get(void)
236{
237 int expose = 0;
238#ifdef ECORE_XCB_SCREENSAVER
239 xcb_get_screen_saver_cookie_t cookie;
240 xcb_get_screen_saver_reply_t *reply;
241#endif
242
243 LOGFN(__FILE__, __LINE__, __FUNCTION__);
244 CHECK_XCB_CONN;
245
246 if (!_screensaver_avail) return 0;
247
248#ifdef ECORE_XCB_SCREENSAVER
249 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
250 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
251 if (!reply) return 0;
252 expose = reply->allow_exposures;
253 free(reply);
254#endif
255
256 return expose;
257}
258
259EAPI void
260ecore_x_screensaver_interval_set(int interval)
261{
262#ifdef ECORE_XCB_SCREENSAVER
263 xcb_get_screen_saver_cookie_t cookie;
264 xcb_get_screen_saver_reply_t *reply;
265 uint16_t pto;
266 uint8_t pblank, pexpose;
267#endif
268
269 LOGFN(__FILE__, __LINE__, __FUNCTION__);
270 CHECK_XCB_CONN;
271
272 if (!_screensaver_avail) return;
273
274#ifdef ECORE_XCB_SCREENSAVER
275 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
276 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
277 if (!reply) return;
278 pto = reply->timeout;
279 pblank = reply->prefer_blanking;
280 pexpose = reply->allow_exposures;
281 free(reply);
282 xcb_set_screen_saver(_ecore_xcb_conn, pto, interval, pblank, pexpose);
283#endif
284}
285
286EAPI int
287ecore_x_screensaver_interval_get(void)
288{
289 int interval = 0;
290#ifdef ECORE_XCB_SCREENSAVER
291 xcb_get_screen_saver_cookie_t cookie;
292 xcb_get_screen_saver_reply_t *reply;
293#endif
294
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
296 CHECK_XCB_CONN;
297
298 if (!_screensaver_avail) return 0;
299
300#ifdef ECORE_XCB_SCREENSAVER
301 cookie = xcb_get_screen_saver_unchecked(_ecore_xcb_conn);
302 reply = xcb_get_screen_saver_reply(_ecore_xcb_conn, cookie, NULL);
303 if (!reply) return 0;
304 interval = reply->interval;
305 free(reply);
306#endif
307
308 return interval;
309}
310
311EAPI void
312ecore_x_screensaver_event_listen_set(Eina_Bool on)
313{
314#ifdef ECORE_XCB_SCREENSAVER
315 Ecore_X_Window root;
316#endif
317
318 LOGFN(__FILE__, __LINE__, __FUNCTION__);
319 CHECK_XCB_CONN;
320
321 if (!_screensaver_avail) return;
322
323#ifdef ECORE_XCB_SCREENSAVER
324 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
325 if (on)
326 xcb_screensaver_select_input(_ecore_xcb_conn, root,
327 XCB_SCREENSAVER_EVENT_NOTIFY_MASK);
328 else
329 xcb_screensaver_select_input(_ecore_xcb_conn, root, 0);
330#endif
331}
332
333EAPI Eina_Bool
334ecore_x_screensaver_event_available_get(void)
335{
336 return _screensaver_avail;
337}
338
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c
deleted file mode 100644
index 7b994bd..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c
+++ /dev/null
@@ -1,1039 +0,0 @@
1#include "ecore_xcb_private.h"
2//#include "Ecore_X_Atoms.h"
3
4#define ECORE_XCB_SELECTION_DATA(x) ((Ecore_X_Selection_Data *)(x))
5
6/* local function prototypes */
7static Eina_Bool _ecore_xcb_selection_converter_text(char *target,
8 void *data,
9 int size,
10 void **data_ret,
11 int *size_ret,
12 Ecore_X_Atom *type,
13 int *size_type);
14static void *_ecore_xcb_selection_parser_text(const char *target __UNUSED__,
15 void *data,
16 int size,
17 int format __UNUSED__);
18static void *_ecore_xcb_selection_parser_files(const char *target,
19 void *data,
20 int size,
21 int format __UNUSED__);
22static void *_ecore_xcb_selection_parser_targets(const char *target __UNUSED__,
23 void *data,
24 int size,
25 int format __UNUSED__);
26
27//static int _ecore_xcb_selection_data_free(void *data);
28static int _ecore_xcb_selection_data_text_free(void *data);
29static int _ecore_xcb_selection_data_targets_free(void *data);
30static int _ecore_xcb_selection_data_files_free(void *data);
31static int _ecore_xcb_selection_data_default_free(void *data);
32static Eina_Bool _ecore_xcb_selection_set(Ecore_X_Window win,
33 const void *data,
34 int size,
35 Ecore_X_Atom selection);
36static void _ecore_xcb_selection_request(Ecore_X_Window win,
37 Ecore_X_Atom selection,
38 const char *target);
39static Ecore_X_Atom _ecore_xcb_selection_target_atom_get(const char *target);
40
41/* local variables */
42static Ecore_X_Selection_Intern _selections[4];
43static Ecore_X_Selection_Converter *_converters = NULL;
44static Ecore_X_Selection_Parser *_parsers = NULL;
45
46/* local functions */
47void
48_ecore_xcb_selection_init(void)
49{
50 LOGFN(__FILE__, __LINE__, __FUNCTION__);
51
52 memset(_selections, 0, sizeof(_selections));
53
54 /* init converters */
55 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT,
56 _ecore_xcb_selection_converter_text);
57 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING,
58 _ecore_xcb_selection_converter_text);
59 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_COMPOUND_TEXT,
60 _ecore_xcb_selection_converter_text);
61 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_STRING,
62 _ecore_xcb_selection_converter_text);
63
64 /* init parsers */
65 ecore_x_selection_parser_add("text/plain",
66 _ecore_xcb_selection_parser_text);
67 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_UTF8_STRING,
68 _ecore_xcb_selection_parser_text);
69 ecore_x_selection_parser_add("text/uri-list",
70 _ecore_xcb_selection_parser_files);
71 ecore_x_selection_parser_add("_NETSCAPE_URL",
72 _ecore_xcb_selection_parser_files);
73 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_TARGETS,
74 _ecore_xcb_selection_parser_targets);
75}
76
77void
78_ecore_xcb_selection_shutdown(void)
79{
80 Ecore_X_Selection_Converter *cnv;
81 Ecore_X_Selection_Parser *prs;
82
83 LOGFN(__FILE__, __LINE__, __FUNCTION__);
84
85 /* free selection converters */
86 cnv = _converters;
87 while (cnv)
88 {
89 Ecore_X_Selection_Converter *tmp;
90
91 tmp = cnv->next;
92 free(cnv);
93 cnv = tmp;
94 }
95 _converters = NULL;
96
97 /* free parsers */
98 prs = _parsers;
99 while (prs)
100 {
101 Ecore_X_Selection_Parser *tmp;
102
103 tmp = prs;
104 prs = prs->next;
105 free(tmp->target);
106 free(tmp);
107 }
108 _parsers = NULL;
109}
110
111/* public functions */
112EAPI void
113ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
114 Eina_Bool (*func)(char *target,
115 void *data,
116 int size,
117 void **data_ret,
118 int *size_ret,
119 Ecore_X_Atom *type,
120 int *size_type))
121{
122 Ecore_X_Selection_Converter *cnv;
123
124 LOGFN(__FILE__, __LINE__, __FUNCTION__);
125
126 cnv = _converters;
127 if (_converters)
128 {
129 while (1)
130 {
131 if (cnv->target == target)
132 {
133 cnv->convert = func;
134 return;
135 }
136 if (cnv->next)
137 cnv = cnv->next;
138 else
139 break;
140 }
141 cnv->next = calloc(1, sizeof(Ecore_X_Selection_Converter));
142 if (!cnv->next) return;
143 cnv = cnv->next;
144 }
145 else
146 {
147 _converters = calloc(1, sizeof(Ecore_X_Selection_Converter));
148 if (!_converters) return;
149 cnv = _converters;
150 }
151 cnv->target = target;
152 cnv->convert = func;
153}
154
155EAPI void
156ecore_x_selection_converter_add(char *target,
157 Eina_Bool (*func)(char *target,
158 void *data,
159 int size,
160 void **date_ret,
161 int *size_ret,
162 Ecore_X_Atom *atom_ret,
163 int *ret))
164{
165 Ecore_X_Atom atarget;
166
167 LOGFN(__FILE__, __LINE__, __FUNCTION__);
168
169 if ((!func) || (!target)) return;
170 atarget = _ecore_xcb_selection_target_atom_get(target);
171 ecore_x_selection_converter_atom_add(atarget, func);
172}
173
174EAPI void
175ecore_x_selection_converter_del(char *target)
176{
177 Ecore_X_Atom atarget;
178
179 LOGFN(__FILE__, __LINE__, __FUNCTION__);
180
181 if (!target) return;
182 atarget = _ecore_xcb_selection_target_atom_get(target);
183 ecore_x_selection_converter_atom_del(atarget);
184}
185
186EAPI void
187ecore_x_selection_converter_atom_del(Ecore_X_Atom target)
188{
189 Ecore_X_Selection_Converter *conv, *pconv = NULL;
190
191 LOGFN(__FILE__, __LINE__, __FUNCTION__);
192
193 conv = _converters;
194 while (conv)
195 {
196 if (conv->target == target)
197 {
198 if (pconv)
199 pconv->next = conv->next;
200 else
201 _converters = conv->next;
202 free(conv);
203 return;
204 }
205 pconv = conv;
206 conv = conv->next;
207 }
208}
209
210EAPI void
211ecore_x_selection_parser_add(const char *target,
212 void *(*func)(const char *target, void *data, int size, int format))
213{
214 Ecore_X_Selection_Parser *prs;
215
216 LOGFN(__FILE__, __LINE__, __FUNCTION__);
217
218 if (!target) return;
219 prs = _parsers;
220 if (prs)
221 {
222 while (prs->next)
223 {
224 if (!strcmp(prs->target, target))
225 {
226 prs->parse = func;
227 return;
228 }
229 prs = prs->next;
230 }
231 prs->next = calloc(1, sizeof(Ecore_X_Selection_Parser));
232 prs = prs->next;
233 }
234 else
235 {
236 _parsers = calloc(1, sizeof(Ecore_X_Selection_Parser));
237 prs = _parsers;
238 }
239 prs->target = strdup(target);
240 prs->parse = func;
241}
242
243EAPI void
244ecore_x_selection_parser_del(const char *target)
245{
246 Ecore_X_Selection_Parser *prs, *pprs = NULL;
247
248 LOGFN(__FILE__, __LINE__, __FUNCTION__);
249
250 if (!target) return;
251
252 prs = _parsers;
253 while (prs)
254 {
255 if (!strcmp(prs->target, target))
256 {
257 if (pprs)
258 pprs->next = prs->next;
259 else
260 _parsers = prs->next;
261 free(prs->target);
262 free(prs);
263 return;
264 }
265 pprs = prs;
266 prs = prs->next;
267 }
268}
269
270/**
271 * Claim ownership of the PRIMARY selection and set its data.
272 * @param w The window to which this selection belongs
273 * @param data The data associated with the selection
274 * @param size The size of the data buffer in bytes
275 * @return Returns 1 if the ownership of the selection was successfully
276 * claimed, or 0 if unsuccessful.
277 */
278EAPI Eina_Bool
279ecore_x_selection_primary_set(Ecore_X_Window win,
280 const void *data,
281 int size)
282{
283 LOGFN(__FILE__, __LINE__, __FUNCTION__);
284
285 return _ecore_xcb_selection_set(win, data, size,
286 ECORE_X_ATOM_SELECTION_PRIMARY);
287}
288
289/**
290 * Release ownership of the primary selection
291 * @return Returns 1 if the selection was successfully cleared,
292 * or 0 if unsuccessful.
293 */
294EAPI Eina_Bool
295ecore_x_selection_primary_clear(void)
296{
297 LOGFN(__FILE__, __LINE__, __FUNCTION__);
298
299 return _ecore_xcb_selection_set(XCB_NONE, NULL, 0,
300 ECORE_X_ATOM_SELECTION_PRIMARY);
301}
302
303EAPI void
304ecore_x_selection_primary_request(Ecore_X_Window win,
305 const char *target)
306{
307 LOGFN(__FILE__, __LINE__, __FUNCTION__);
308
309 _ecore_xcb_selection_request(win, ECORE_X_ATOM_SELECTION_PRIMARY, target);
310}
311
312/**
313 * Claim ownership of the SECONDARY selection and set its data.
314 * @param w The window to which this selection belongs
315 * @param data The data associated with the selection
316 * @param size The size of the data buffer in bytes
317 * @return Returns 1 if the ownership of the selection was successfully
318 * claimed, or 0 if unsuccessful.
319 */
320EAPI Eina_Bool
321ecore_x_selection_secondary_set(Ecore_X_Window win,
322 const void *data,
323 int size)
324{
325 LOGFN(__FILE__, __LINE__, __FUNCTION__);
326
327 return _ecore_xcb_selection_set(win, data, size,
328 ECORE_X_ATOM_SELECTION_SECONDARY);
329}
330
331/**
332 * Release ownership of the secondary selection
333 * @return Returns 1 if the selection was successfully cleared,
334 * or 0 if unsuccessful.
335 */
336EAPI Eina_Bool
337ecore_x_selection_secondary_clear(void)
338{
339 LOGFN(__FILE__, __LINE__, __FUNCTION__);
340
341 return _ecore_xcb_selection_set(XCB_NONE, NULL, 0,
342 ECORE_X_ATOM_SELECTION_SECONDARY);
343}
344
345EAPI void
346ecore_x_selection_secondary_request(Ecore_X_Window win,
347 const char *target)
348{
349 LOGFN(__FILE__, __LINE__, __FUNCTION__);
350
351 _ecore_xcb_selection_request(win, ECORE_X_ATOM_SELECTION_SECONDARY, target);
352}
353
354/**
355 * Claim ownership of the XDND selection and set its data.
356 * @param w The window to which this selection belongs
357 * @param data The data associated with the selection
358 * @param size The size of the data buffer in bytes
359 * @return Returns 1 if the ownership of the selection was successfully
360 * claimed, or 0 if unsuccessful.
361 */
362EAPI Eina_Bool
363ecore_x_selection_xdnd_set(Ecore_X_Window win,
364 const void *data,
365 int size)
366{
367 LOGFN(__FILE__, __LINE__, __FUNCTION__);
368
369 return _ecore_xcb_selection_set(win, data, size,
370 ECORE_X_ATOM_SELECTION_XDND);
371}
372
373/**
374 * Release ownership of the XDND selection
375 * @return Returns 1 if the selection was successfully cleared,
376 * or 0 if unsuccessful.
377 */
378EAPI Eina_Bool
379ecore_x_selection_xdnd_clear(void)
380{
381 LOGFN(__FILE__, __LINE__, __FUNCTION__);
382
383 return _ecore_xcb_selection_set(XCB_NONE, NULL, 0,
384 ECORE_X_ATOM_SELECTION_XDND);
385}
386
387EAPI void
388ecore_x_selection_xdnd_request(Ecore_X_Window win,
389 const char *target)
390{
391 Ecore_X_Atom atom;
392 Ecore_X_DND_Target *_target;
393
394 LOGFN(__FILE__, __LINE__, __FUNCTION__);
395 CHECK_XCB_CONN;
396
397 _target = _ecore_xcb_dnd_target_get();
398 atom = _ecore_xcb_selection_target_atom_get(target);
399
400 xcb_convert_selection(_ecore_xcb_conn, win, ECORE_X_ATOM_SELECTION_XDND,
401 atom, ECORE_X_ATOM_SELECTION_PROP_XDND, _target->time);
402}
403
404/**
405 * Claim ownership of the CLIPBOARD selection and set its data.
406 * @param w The window to which this selection belongs
407 * @param data The data associated with the selection
408 * @param size The size of the data buffer in bytes
409 * @return Returns 1 if the ownership of the selection was successfully
410 * claimed, or 0 if unsuccessful.
411 *
412 * Get the converted data from a previous CLIPBOARD selection
413 * request. The buffer must be freed when done with.
414 */
415EAPI Eina_Bool
416ecore_x_selection_clipboard_set(Ecore_X_Window win,
417 const void *data,
418 int size)
419{
420 LOGFN(__FILE__, __LINE__, __FUNCTION__);
421
422 return _ecore_xcb_selection_set(win, data, size,
423 ECORE_X_ATOM_SELECTION_CLIPBOARD);
424}
425
426/**
427 * Release ownership of the clipboard selection
428 * @return Returns 1 if the selection was successfully cleared,
429 * or 0 if unsuccessful.
430 */
431EAPI Eina_Bool
432ecore_x_selection_clipboard_clear(void)
433{
434 LOGFN(__FILE__, __LINE__, __FUNCTION__);
435
436 return _ecore_xcb_selection_set(XCB_NONE, NULL, 0,
437 ECORE_X_ATOM_SELECTION_CLIPBOARD);
438}
439
440EAPI void
441ecore_x_selection_clipboard_request(Ecore_X_Window win,
442 const char *target)
443{
444 LOGFN(__FILE__, __LINE__, __FUNCTION__);
445
446 _ecore_xcb_selection_request(win, ECORE_X_ATOM_SELECTION_CLIPBOARD, target);
447}
448
449EAPI Eina_Bool
450ecore_x_selection_convert(Ecore_X_Atom selection,
451 Ecore_X_Atom target,
452 void **data_ret,
453 int *size,
454 Ecore_X_Atom *targtype,
455 int *typesize)
456{
457 Ecore_X_Selection_Intern *sel;
458 Ecore_X_Selection_Converter *cnv;
459 void *data;
460 char *tgt_str;
461
462 LOGFN(__FILE__, __LINE__, __FUNCTION__);
463
464 sel = _ecore_xcb_selection_get(selection);
465 tgt_str = _ecore_xcb_selection_target_get(target);
466
467 for (cnv = _converters; cnv; cnv = cnv->next)
468 {
469 if (cnv->target == target)
470 {
471 int r = 0;
472
473 r = cnv->convert(tgt_str, sel->data, sel->length, &data, size,
474 targtype, typesize);
475 free(tgt_str);
476 if (r)
477 {
478 if (data_ret) *data_ret = data;
479 return r;
480 }
481 else
482 return EINA_FALSE;
483 }
484 }
485
486 return EINA_FALSE;
487}
488
489EAPI Eina_Bool
490ecore_x_selection_notify_send(Ecore_X_Window requestor,
491 Ecore_X_Atom selection,
492 Ecore_X_Atom target,
493 Ecore_X_Atom property,
494 Ecore_X_Time tim)
495{
496 xcb_selection_notify_event_t ev;
497
498 LOGFN(__FILE__, __LINE__, __FUNCTION__);
499 CHECK_XCB_CONN;
500
501 memset(&ev, 0, sizeof(xcb_selection_notify_event_t));
502
503 ev.response_type = XCB_SELECTION_NOTIFY;
504 ev.requestor = requestor;
505 ev.selection = selection;
506 ev.target = target;
507 ev.property = property;
508 ev.time = tim;
509
510 xcb_send_event(_ecore_xcb_conn, 0, requestor,
511 XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
512// ecore_x_flush();
513
514 return EINA_TRUE;
515}
516
517EAPI void
518ecore_x_selection_owner_set(Ecore_X_Window win,
519 Ecore_X_Atom atom,
520 Ecore_X_Time tim)
521{
522 LOGFN(__FILE__, __LINE__, __FUNCTION__);
523 CHECK_XCB_CONN;
524
525 xcb_set_selection_owner(_ecore_xcb_conn, win, atom, tim);
526}
527
528EAPI Ecore_X_Window
529ecore_x_selection_owner_get(Ecore_X_Atom atom)
530{
531 xcb_get_selection_owner_cookie_t cookie;
532 xcb_get_selection_owner_reply_t *reply;
533 Ecore_X_Window ret;
534
535 LOGFN(__FILE__, __LINE__, __FUNCTION__);
536 CHECK_XCB_CONN;
537
538 cookie = xcb_get_selection_owner(_ecore_xcb_conn, atom);
539 reply = xcb_get_selection_owner_reply(_ecore_xcb_conn, cookie, NULL);
540 if (!reply) return 0;
541 ret = reply->owner;
542 free(reply);
543 return ret;
544}
545
546void *
547_ecore_xcb_selection_parse(const char *target,
548 void *data,
549 int size,
550 int format)
551{
552 Ecore_X_Selection_Parser *prs;
553 Ecore_X_Selection_Data *sel;
554
555 for (prs = _parsers; prs; prs = prs->next)
556 {
557 if (!strcmp(prs->target, target))
558 {
559 sel = prs->parse(target, data, size, format);
560 if (sel) return sel;
561 }
562 }
563
564 sel = calloc(1, sizeof(Ecore_X_Selection_Data));
565 if (!sel) return NULL;
566 sel->free = _ecore_xcb_selection_data_default_free;
567 sel->length = size;
568 sel->format = format;
569 sel->data = data;
570
571 return sel;
572}
573
574Ecore_X_Selection_Intern *
575_ecore_xcb_selection_get(Ecore_X_Atom selection)
576{
577 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
578 return &_selections[0];
579 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
580 return &_selections[1];
581 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
582 return &_selections[2];
583 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
584 return &_selections[3];
585 else
586 return NULL;
587}
588
589/* local functions */
590static Eina_Bool
591_ecore_xcb_selection_set(Ecore_X_Window win,
592 const void *data,
593 int size,
594 Ecore_X_Atom selection)
595{
596 xcb_get_selection_owner_cookie_t cookie;
597 xcb_get_selection_owner_reply_t *reply;
598 int in = 0;
599
600 LOGFN(__FILE__, __LINE__, __FUNCTION__);
601 CHECK_XCB_CONN;
602
603 xcb_set_selection_owner(_ecore_xcb_conn, win, selection, XCB_CURRENT_TIME);
604
605 cookie = xcb_get_selection_owner(_ecore_xcb_conn, selection);
606 reply = xcb_get_selection_owner_reply(_ecore_xcb_conn, cookie, NULL);
607 if (!reply) return EINA_FALSE;
608
609 if (reply->owner != win)
610 {
611 free(reply);
612 return EINA_FALSE;
613 }
614 free(reply);
615
616 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
617 in = 0;
618 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
619 in = 1;
620 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
621 in = 2;
622 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
623 in = 3;
624 else
625 return EINA_FALSE;
626
627 if (data)
628 {
629 unsigned char *buff = NULL;
630
631 _selections[in].win = win;
632 _selections[in].selection = selection;
633 _selections[in].length = size;
634 _selections[in].time = _ecore_xcb_events_last_time_get();
635
636 buff = malloc(size);
637 if (!buff) return EINA_FALSE;
638 memcpy(buff, data, size);
639 _selections[in].data = buff;
640 }
641 else if (_selections[in].data)
642 {
643 free(_selections[in].data);
644 memset(&_selections[in], 0, sizeof(Ecore_X_Selection_Data));
645 }
646
647 return EINA_TRUE;
648}
649
650static void
651_ecore_xcb_selection_request(Ecore_X_Window win,
652 Ecore_X_Atom selection,
653 const char *target)
654{
655 Ecore_X_Atom atarget, prop;
656
657 LOGFN(__FILE__, __LINE__, __FUNCTION__);
658 CHECK_XCB_CONN;
659
660 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
661 prop = ECORE_X_ATOM_SELECTION_PROP_PRIMARY;
662 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
663 prop = ECORE_X_ATOM_SELECTION_PROP_SECONDARY;
664 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
665 prop = ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD;
666 else
667 return;
668
669 atarget = _ecore_xcb_selection_target_atom_get(target);
670
671 xcb_convert_selection(_ecore_xcb_conn, win, selection, atarget, prop,
672 XCB_CURRENT_TIME);
673}
674
675static Eina_Bool
676_ecore_xcb_selection_converter_text(char *target,
677 void *data,
678 int size,
679 void **data_ret,
680 int *size_ret,
681 Ecore_X_Atom *type __UNUSED__,
682 int *size_type __UNUSED__)
683{
684 Ecore_Xcb_Encoding_Style style;
685 Ecore_Xcb_Textproperty ret;
686 char *str;
687
688 LOGFN(__FILE__, __LINE__, __FUNCTION__);
689 CHECK_XCB_CONN;
690
691 if ((!data) || (!size)) return EINA_FALSE;
692
693 if (!strcmp(target, ECORE_X_SELECTION_TARGET_TEXT))
694 style = XcbTextStyle;
695 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_COMPOUND_TEXT))
696 style = XcbCompoundTextStyle;
697 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_STRING))
698 style = XcbStringStyle;
699 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_UTF8_STRING))
700 style = XcbUTF8StringStyle;
701 else
702 return EINA_FALSE;
703
704 str = alloca(size + 1);
705 memcpy(str, data, size);
706 str[size] = '\0';
707
708#ifdef HAVE_ICONV
709 if (_ecore_xcb_utf8_textlist_to_textproperty(&str, 1, style, &ret))
710 {
711 int size = 0;
712
713 size = (strlen((char *)ret.value) + 1);
714 *data_ret = malloc(size);
715 if (!*data_ret) return EINA_FALSE;
716 memcpy(*data_ret, ret.value, size);
717 *size_ret = size;
718 if (ret.value) free(ret.value);
719 return EINA_TRUE;
720 }
721#else
722 if (_ecore_xcb_mb_textlist_to_textproperty(&str, 1, style, &ret))
723 {
724 int size = 0;
725
726 size = (strlen((char *)ret.value) + 1);
727 *data_ret = malloc(size);
728 if (!*data_ret) return EINA_FALSE;
729 memcpy(*data_ret, ret.value, size);
730 *size_ret = size;
731 if (ret.value) free(ret.value);
732 return EINA_TRUE;
733 }
734#endif
735 else
736 return EINA_TRUE;
737
738 return EINA_FALSE;
739}
740
741static void *
742_ecore_xcb_selection_parser_text(const char *target __UNUSED__,
743 void *data,
744 int size,
745 int format __UNUSED__)
746{
747 Ecore_X_Selection_Data_Text *sel;
748 unsigned char *_data;
749 void *t;
750
751 LOGFN(__FILE__, __LINE__, __FUNCTION__);
752
753 if (!(_data = data)) return NULL;
754
755 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Text));
756 if (!sel) return NULL;
757
758 if (_data[size - 1])
759 {
760 size++;
761 t = realloc(_data, size);
762 if (!t)
763 {
764 free(sel);
765 return NULL;
766 }
767 _data = t;
768 _data[size - 1] = 0;
769 }
770 sel->text = (char *)_data;
771 ECORE_XCB_SELECTION_DATA(sel)->length = size;
772 ECORE_XCB_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_TEXT;
773 ECORE_XCB_SELECTION_DATA(sel)->data = _data;
774 ECORE_XCB_SELECTION_DATA(sel)->free = _ecore_xcb_selection_data_text_free;
775 return sel;
776}
777
778static void *
779_ecore_xcb_selection_parser_files(const char *target,
780 void *data,
781 int size,
782 int format __UNUSED__)
783{
784 Ecore_X_Selection_Data_Files *sel;
785 char *_data, *tmp, *t, **t2;
786 int i = 0, is = 0;
787
788 LOGFN(__FILE__, __LINE__, __FUNCTION__);
789
790 if ((strcmp(target, "text/uri-list")) &&
791 (strcmp(target, "_NETSCAPE_URL"))) return NULL;
792
793 if (!(_data = data)) return NULL;
794
795 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Files));
796 if (!sel) return NULL;
797
798 ECORE_XCB_SELECTION_DATA(sel)->free = _ecore_xcb_selection_data_files_free;
799
800 if (_data[size - 1])
801 {
802 size++;
803 t = realloc(_data, size);
804 if (!t)
805 {
806 free(sel);
807 return NULL;
808 }
809 _data = t;
810 _data[size - 1] = 0;
811 }
812
813 tmp = malloc(size);
814 if (!tmp)
815 {
816 free(sel);
817 return NULL;
818 }
819
820 while ((is < size) && (_data[is]))
821 {
822 if ((i == 0) && (_data[is] == '#'))
823 {
824 for (; ((_data[is]) && (_data[is] != '\n')); is++) ;
825 }
826 else
827 {
828 if ((_data[is] != '\r') && (_data[is] != '\n'))
829 tmp[i++] = _data[is++];
830 else
831 {
832 while ((_data[is] == '\r') || (_data[is] == '\n'))
833 is++;
834 tmp[i] = 0;
835 sel->num_files++;
836 t2 = realloc(sel->files, sel->num_files * sizeof(char *));
837 if (t2)
838 {
839 sel->files = t2;
840 sel->files[sel->num_files - 1] = strdup(tmp);
841 }
842 tmp[0] = 0;
843 i = 0;
844 }
845 }
846 }
847 if (i > 0)
848 {
849 tmp[i] = 0;
850 sel->num_files++;
851 t2 = realloc(sel->files, sel->num_files * sizeof(char *));
852 if (t2)
853 {
854 sel->files = t2;
855 sel->files[sel->num_files - 1] = strdup(tmp);
856 }
857 }
858 if (tmp) free(tmp);
859 if (_data) free(_data);
860
861 ECORE_XCB_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_FILES;
862 ECORE_XCB_SELECTION_DATA(sel)->length = sel->num_files;
863
864 return ECORE_XCB_SELECTION_DATA(sel);
865}
866
867static void *
868_ecore_xcb_selection_parser_targets(const char *target __UNUSED__,
869 void *data,
870 int size,
871 int format __UNUSED__)
872{
873 Ecore_X_Selection_Data_Targets *sel;
874 unsigned long *targets;
875 int i = 0;
876
877 LOGFN(__FILE__, __LINE__, __FUNCTION__);
878 CHECK_XCB_CONN;
879
880 if (!(targets = (unsigned long *)data)) return NULL;
881
882 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Targets));
883 if (!sel) return NULL;
884
885 sel->num_targets = (size - 2);
886 sel->targets = malloc((size - 2) * sizeof(char *));
887 if (!sel->targets)
888 {
889 free(sel);
890 return NULL;
891 }
892
893 for (i = 2; i < size; i++)
894 {
895 xcb_get_atom_name_cookie_t cookie;
896 xcb_get_atom_name_reply_t *reply;
897 char *name = NULL;
898 int len = 0;
899
900 cookie = xcb_get_atom_name_unchecked(_ecore_xcb_conn, targets[i]);
901 reply = xcb_get_atom_name_reply(_ecore_xcb_conn, cookie, NULL);
902 if (reply)
903 {
904 len = xcb_get_atom_name_name_length(reply);
905 name = (char *)malloc(sizeof(char) * (len + 1));
906 if (name)
907 {
908 memcpy(name, xcb_get_atom_name_name(reply), len);
909 name[len] = '\0';
910 sel->targets[i - 2] = name;
911 }
912 free(reply);
913 }
914 }
915
916 ECORE_XCB_SELECTION_DATA(sel)->free =
917 _ecore_xcb_selection_data_targets_free;
918 ECORE_XCB_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_TARGETS;
919 ECORE_XCB_SELECTION_DATA(sel)->length = size;
920 ECORE_XCB_SELECTION_DATA(sel)->data = data;
921
922 return sel;
923}
924
925/*
926 static int
927 _ecore_xcb_selection_data_free(void *data)
928 {
929 Ecore_X_Selection_Data *sel;
930
931 LOGFN(__FILE__, __LINE__, __FUNCTION__);
932
933 if (!(sel = data)) return 0;
934 if (sel->data) free(sel->data);
935 free(sel);
936 return 1;
937 }
938 */
939
940static int
941_ecore_xcb_selection_data_text_free(void *data)
942{
943 Ecore_X_Selection_Data_Text *sel;
944
945 LOGFN(__FILE__, __LINE__, __FUNCTION__);
946
947 if (!(sel = data)) return 0;
948 if (sel->text) free(sel->text);
949 free(sel);
950 return 1;
951}
952
953static int
954_ecore_xcb_selection_data_targets_free(void *data)
955{
956 Ecore_X_Selection_Data_Targets *sel;
957
958 LOGFN(__FILE__, __LINE__, __FUNCTION__);
959
960 if (!(sel = data)) return 0;
961 if (sel->targets)
962 {
963 int i = 0;
964
965 for (i = 0; i < sel->num_targets; i++)
966 if (sel->targets[i]) free(sel->targets[i]);
967 if (sel->targets) free(sel->targets);
968 }
969 free(sel);
970 return 1;
971}
972
973static int
974_ecore_xcb_selection_data_files_free(void *data)
975{
976 Ecore_X_Selection_Data_Files *sel;
977
978 LOGFN(__FILE__, __LINE__, __FUNCTION__);
979
980 if (!(sel = data)) return 0;
981 if (sel->files)
982 {
983 int i = 0;
984
985 for (i = 0; i < sel->num_files; i++)
986 if (sel->files[i]) free(sel->files[i]);
987 if (sel->files) free(sel->files);
988 }
989 free(sel);
990 return 0;
991}
992
993static int
994_ecore_xcb_selection_data_default_free(void *data)
995{
996 Ecore_X_Selection_Data *sel;
997
998 if (!(sel = data)) return 1;
999 free(sel->data);
1000 free(sel);
1001 return 1;
1002}
1003
1004static Ecore_X_Atom
1005_ecore_xcb_selection_target_atom_get(const char *target)
1006{
1007 Ecore_X_Atom x_target;
1008
1009 if (!strcmp(target, ECORE_X_SELECTION_TARGET_TEXT))
1010 x_target = ECORE_X_ATOM_TEXT;
1011 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_COMPOUND_TEXT))
1012 x_target = ECORE_X_ATOM_COMPOUND_TEXT;
1013 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_STRING))
1014 x_target = ECORE_X_ATOM_STRING;
1015 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_UTF8_STRING))
1016 x_target = ECORE_X_ATOM_UTF8_STRING;
1017 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_FILENAME))
1018 x_target = ECORE_X_ATOM_FILE_NAME;
1019 else
1020 x_target = ecore_x_atom_get(target);
1021
1022 return x_target;
1023}
1024
1025char *
1026_ecore_xcb_selection_target_get(Ecore_X_Atom target)
1027{
1028 if (target == ECORE_X_ATOM_FILE_NAME)
1029 return strdup(ECORE_X_SELECTION_TARGET_FILENAME);
1030 else if (target == ECORE_X_ATOM_STRING)
1031 return strdup(ECORE_X_SELECTION_TARGET_STRING);
1032 else if (target == ECORE_X_ATOM_UTF8_STRING)
1033 return strdup(ECORE_X_SELECTION_TARGET_UTF8_STRING);
1034 else if (target == ECORE_X_ATOM_TEXT)
1035 return strdup(ECORE_X_SELECTION_TARGET_TEXT);
1036 else
1037 return ecore_x_atom_name_get(target);
1038}
1039
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c
deleted file mode 100644
index 913f199..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c
+++ /dev/null
@@ -1,50 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_SHAPE
3# include <xcb/shape.h>
4#endif
5
6/* external variables */
7int _ecore_xcb_event_shape = -1;
8
9void
10_ecore_xcb_shape_init(void)
11{
12 LOGFN(__FILE__, __LINE__, __FUNCTION__);
13
14#ifdef ECORE_XCB_SHAPE
15 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_shape_id);
16#endif
17}
18
19void
20_ecore_xcb_shape_finalize(void)
21{
22#ifdef ECORE_XCB_SHAPE
23 const xcb_query_extension_reply_t *ext_reply;
24#endif
25
26 LOGFN(__FILE__, __LINE__, __FUNCTION__);
27
28#ifdef ECORE_XCB_SHAPE
29 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_shape_id);
30 if ((ext_reply) && (ext_reply->present))
31 {
32 xcb_shape_query_version_cookie_t cookie;
33 xcb_shape_query_version_reply_t *reply;
34 Eina_Bool _shape_avail;
35
36 _shape_avail = EINA_FALSE;
37 cookie = xcb_shape_query_version_unchecked(_ecore_xcb_conn);
38 reply = xcb_shape_query_version_reply(_ecore_xcb_conn, cookie, NULL);
39 if (reply)
40 {
41 _shape_avail = EINA_TRUE;
42 free(reply);
43 }
44
45 if (_shape_avail)
46 _ecore_xcb_event_shape = ext_reply->first_event;
47 }
48#endif
49}
50
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 */
7static Eina_Bool _sync_avail = EINA_FALSE;
8
9/* external variables */
10int _ecore_xcb_event_sync = -1;
11
12void
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
22void
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
55void
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 */
78EAPI Ecore_X_Sync_Alarm
79ecore_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
116EAPI Eina_Bool
117ecore_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
133EAPI Eina_Bool
134ecore_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
160EAPI void
161ecore_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
182EAPI void
183ecore_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
221EAPI Ecore_X_Sync_Counter
222ecore_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
248EAPI void
249ecore_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
262EAPI void
263ecore_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
284EAPI void
285ecore_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
307EAPI Eina_Bool
308ecore_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
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_textlist.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_textlist.c
deleted file mode 100644
index 2a5c854..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_textlist.c
+++ /dev/null
@@ -1,509 +0,0 @@
1#include "ecore_xcb_private.h"
2//#include "Ecore_X_Atoms.h"
3#include <langinfo.h>
4#ifdef HAVE_ICONV
5# include <iconv.h>
6#endif
7#ifndef CODESET
8# define CODESET "INVALID"
9#endif
10
11static int _ecore_xcb_textlist_get_buffer_size(Eina_Bool is_wide,
12 void *list,
13 int count);
14static int _ecore_xcb_textlist_get_wc_len(wchar_t *wstr);
15static void *_ecore_xcb_textlist_alloc_list(Eina_Bool is_wide,
16 int count,
17 int nitems);
18static void _ecore_xcb_textlist_copy_list(Eina_Bool is_wide,
19 void *text,
20 char **list,
21 int count);
22static wchar_t *_ecore_xcb_textlist_copy_wchar(wchar_t *str1,
23 wchar_t *str2);
24static int _ecore_xcb_textlist_len_wchar(wchar_t *str);
25
26#ifdef HAVE_ICONV
27Eina_Bool
28_ecore_xcb_utf8_textlist_to_textproperty(char **list,
29 int count,
30 Ecore_Xcb_Encoding_Style style,
31 Ecore_Xcb_Textproperty *ret)
32{
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34
35 return _ecore_xcb_textlist_to_textproperty("utf8string", list, count,
36 style, ret);
37}
38
39#endif
40
41Eina_Bool
42_ecore_xcb_mb_textlist_to_textproperty(char **list,
43 int count,
44 Ecore_Xcb_Encoding_Style style,
45 Ecore_Xcb_Textproperty *ret)
46{
47 LOGFN(__FILE__, __LINE__, __FUNCTION__);
48
49 return _ecore_xcb_textlist_to_textproperty("multiByte", list, count,
50 style, ret);
51}
52
53/* NB: This Function May Not Be Correct !!!
54 * (as I do not know text conversion, locales, etc, etc very well)
55 *
56 * Portions were ripped from libX11 XTextListToTextProperty
57 */
58Eina_Bool
59_ecore_xcb_textlist_to_textproperty(const char *type,
60 char **list,
61 int count,
62 Ecore_Xcb_Encoding_Style style,
63 Ecore_Xcb_Textproperty *ret)
64{
65 Eina_Bool is_wide = EINA_FALSE;
66 Ecore_X_Atom encoding;
67 int len = 0, nitems = 0, i = 0;
68 size_t from_left = 0, to_left = 0;
69 int unconv_num = 0, val = 0;
70 char *buff, *to, *value, *from;
71 const char *to_type, *from_type;
72 char **mb = NULL;
73 wchar_t **wc = NULL;
74#ifdef HAVE_ICONV
75 iconv_t conv;
76#endif
77
78 LOGFN(__FILE__, __LINE__, __FUNCTION__);
79
80 if (!strcmp("wideChar", type)) is_wide = EINA_TRUE;
81 len = _ecore_xcb_textlist_get_buffer_size(is_wide, list, count);
82 if (!(buff = (char *)malloc(len * sizeof(char)))) return EINA_FALSE;
83 from_type = nl_langinfo(CODESET);
84 switch (style)
85 {
86 case XcbStringStyle:
87 case XcbStdICCTextStyle:
88 encoding = ECORE_X_ATOM_STRING;
89 to_type = nl_langinfo(CODESET);
90// to_type = "string";
91 break;
92
93 case XcbUTF8StringStyle:
94 encoding = ECORE_X_ATOM_UTF8_STRING;
95 to_type = "UTF-8";
96 break;
97
98 case XcbCompoundTextStyle:
99 encoding = ECORE_X_ATOM_COMPOUND_TEXT;
100 to_type = nl_langinfo(CODESET);
101// to_type = "compoundText";
102 break;
103
104 case XcbTextStyle:
105 encoding = ECORE_X_ATOM_TEXT;
106 to_type = nl_langinfo(CODESET);
107// to_type = "multiByte";
108 if (!is_wide)
109 {
110 nitems = 0;
111 mb = (char **)list;
112 to = buff;
113 for (i = 0; ((i < count) && (len > 0)); i++)
114 {
115 if (*mb) strcpy(to, *mb);
116 else *to = '\0';
117 from_left = (*mb ? strlen(*mb) : 0) + 1;
118 nitems += from_left;
119 to += from_left;
120 mb++;
121 }
122 unconv_num = 0;
123 goto done;
124 }
125 break;
126
127 default:
128 free(buff);
129 return EINA_FALSE;
130 break;
131 }
132
133 if (count < 1)
134 {
135 nitems = 0;
136 goto done;
137 }
138
139retry:
140#ifdef HAVE_ICONV
141 conv = iconv_open(to_type, from_type);
142#endif
143
144 if (is_wide)
145 wc = (wchar_t **)list;
146 else
147 mb = (char **)list;
148
149 to = buff;
150 to_left = len;
151 unconv_num = 0;
152 for (i = 1; to_left > 0; i++)
153 {
154 if (is_wide)
155 {
156 from = (char *)*wc;
157 from_left = _ecore_xcb_textlist_get_wc_len(*wc);
158 wc++;
159 }
160 else
161 {
162 from = *mb;
163 from_left = (*mb ? strlen(*mb) : 0);
164 mb++;
165 }
166
167#ifdef HAVE_ICONV
168 val = iconv(conv, &from, &from_left, &to, &to_left);
169#endif
170 if (val < 0) continue;
171 if ((val > 0) && (style == XcbStdICCTextStyle) &&
172 (encoding == ECORE_X_ATOM_STRING))
173 {
174#ifdef HAVE_ICONV
175 iconv_close(conv);
176#endif
177 encoding = ECORE_X_ATOM_COMPOUND_TEXT;
178 goto retry;
179 }
180
181 unconv_num += val;
182 *to++ = '\0';
183 to_left--;
184 if (i >= count) break;
185 }
186
187#ifdef HAVE_ICONV
188 iconv_close(conv);
189#endif
190 nitems = (to - buff);
191
192done:
193 if (nitems <= 0) nitems = 1;
194 if (!(value = (char *)malloc(nitems * sizeof(char))))
195 {
196 free(buff);
197 return EINA_FALSE;
198 }
199 if (nitems == 1)
200 *value = 0;
201 else
202 memcpy(value, buff, nitems);
203 nitems--;
204 free(buff);
205
206 ret->value = value;
207 ret->encoding = encoding;
208 ret->format = 8;
209 ret->nitems = nitems;
210
211 return EINA_TRUE;
212}
213
214#ifdef HAVE_ICONV
215Eina_Bool
216_ecore_xcb_utf8_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
217 char ***list_ret,
218 int *count_ret)
219{
220 LOGFN(__FILE__, __LINE__, __FUNCTION__);
221
222 return _ecore_xcb_textproperty_to_textlist(text_prop, "utf8String",
223 list_ret, count_ret);
224}
225
226#endif
227
228Eina_Bool
229_ecore_xcb_mb_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
230 char ***list_ret,
231 int *count_ret)
232{
233 LOGFN(__FILE__, __LINE__, __FUNCTION__);
234
235 return _ecore_xcb_textproperty_to_textlist(text_prop, "multiByte",
236 list_ret, count_ret);
237}
238
239Eina_Bool
240_ecore_xcb_textproperty_to_textlist(const Ecore_Xcb_Textproperty *text_prop,
241 const char *type,
242 char ***list_ret,
243 int *count_ret)
244{
245 Eina_Bool is_wide = EINA_FALSE;
246 Eina_Bool do_strcpy = EINA_FALSE;
247 const char *from_type;
248 char *buff, *to, *from;
249 char *lptr, *sptr;
250 int nitems = 0, len = 0, num = 0, ret = 0;
251 size_t from_left = 0, to_left = 0;
252#ifdef HAVE_ICONV
253 iconv_t conv = 0;
254#endif
255
256 *list_ret = NULL;
257 *count_ret = 0;
258 if (!strcmp("wideChar", type)) is_wide = EINA_TRUE;
259
260 nitems = text_prop->nitems;
261 if (nitems <= 0) return EINA_TRUE;
262
263 if (text_prop->format != 8) return EINA_FALSE;
264
265 from_type = nl_langinfo(CODESET);
266 if (text_prop->encoding == ECORE_X_ATOM_UTF8_STRING)
267 from_type = "UTF-8";
268
269 if (is_wide)
270 len = (text_prop->nitems + 1) * sizeof(wchar_t);
271 else
272 {
273 if (!strcmp(type, "utf8String"))
274 len = text_prop->nitems * 6 + 1;
275 else
276 len = text_prop->nitems * MB_CUR_MAX + 1;
277 }
278
279 buff = (char *)malloc(len * sizeof(char));
280 if (!buff) return EINA_FALSE;
281
282 to = buff;
283 to_left = len;
284
285 if (!strcmp(from_type, type))
286 do_strcpy = EINA_TRUE;
287 else
288 {
289#ifdef HAVE_ICONV
290 conv = iconv_open(type, from_type);
291#endif
292 if (!conv)
293 {
294 free(buff);
295 return EINA_FALSE;
296 }
297 }
298
299 lptr = sptr = text_prop->value;
300 num = *count_ret = 0;
301 while (1)
302 {
303 if ((nitems == 0) || (*sptr == 0))
304 {
305 from = lptr;
306 from_left = sptr - lptr;
307 lptr = sptr;
308 if (do_strcpy)
309 {
310 int l = 0;
311
312 l = MIN(from_left, to_left);
313 strncpy(to, from, l);
314 from += len;
315 to += len;
316 from_left -= l;
317 to_left -= l;
318 ret = 0;
319 }
320 else
321 ret = iconv(conv, &from, &from_left, &to, &to_left);
322
323 if (ret < 0) continue;
324 num += ret;
325 (*count_ret)++;
326 if (nitems == 0) break;
327 lptr = ++sptr;
328 if (is_wide)
329 {
330 *((wchar_t *)to) = (wchar_t)0;
331 to += sizeof(wchar_t);
332 to_left -= sizeof(wchar_t);
333 }
334 else
335 {
336 *((char *)to) = '\0';
337 to++;
338 to_left--;
339 }
340 }
341 else
342 sptr++;
343
344 nitems--;
345 }
346
347#if HAVE_ICONV
348 if (!do_strcpy) iconv_close(conv);
349#endif
350
351 if (is_wide)
352 {
353 *((wchar_t *)to) = (wchar_t)0;
354 to_left -= sizeof(wchar_t);
355 }
356 else
357 {
358 *((char *)to) = '\0';
359 to_left--;
360 }
361
362 *list_ret =
363 _ecore_xcb_textlist_alloc_list(is_wide, *count_ret, (len - to_left));
364 if (*list_ret)
365 _ecore_xcb_textlist_copy_list(is_wide, buff, *list_ret, *count_ret);
366
367 free(buff);
368
369 return EINA_TRUE;
370}
371
372static int
373_ecore_xcb_textlist_get_buffer_size(Eina_Bool is_wide,
374 void *list,
375 int count)
376{
377 int len = 0;
378 char **mb;
379 wchar_t **wc;
380
381 if (!list) return 0;
382 if (is_wide)
383 {
384 wc = (wchar_t **)list;
385 for (; count-- > 0; wc++)
386 if (*wc) len += _ecore_xcb_textlist_get_wc_len(*wc) + 1;
387 len *= 5;
388 }
389 else
390 {
391 mb = (char **)list;
392 for (; count-- > 0; mb++)
393 if (*mb) len += strlen(*mb) + 1;
394 len *= 3;
395 }
396 len = (len / 2048 + 1) * 2048;
397 return len;
398}
399
400static int
401_ecore_xcb_textlist_get_wc_len(wchar_t *wstr)
402{
403 wchar_t *ptr;
404
405 ptr = wstr;
406 while (*ptr)
407 ptr++;
408
409 return ptr - wstr;
410}
411
412static void *
413_ecore_xcb_textlist_alloc_list(Eina_Bool is_wide,
414 int count,
415 int nitems)
416{
417 if (is_wide)
418 {
419 wchar_t **list;
420
421 list = (wchar_t **)malloc(count * sizeof(wchar_t *));
422 if (!list) return NULL;
423 *list = (wchar_t *)malloc(nitems * sizeof(wchar_t));
424 if (!*list)
425 {
426 free(list);
427 return NULL;
428 }
429 return *list;
430 }
431 else
432 {
433 char **list;
434
435 list = (char **)malloc(count * sizeof(char *));
436 if (!list) return NULL;
437 *list = (char *)malloc(nitems * sizeof(char));
438 if (!*list)
439 {
440 free(list);
441 return NULL;
442 }
443 return *list;
444 }
445}
446
447static void
448_ecore_xcb_textlist_copy_list(Eina_Bool is_wide,
449 void *text,
450 char **list,
451 int count)
452{
453 int len = 0;
454
455 if (is_wide)
456 {
457 wchar_t *txt, *str, **wlist;
458
459 txt = (wchar_t *)text;
460 wlist = (wchar_t **)list;
461 for (str = *wlist; count > 0; count--, wlist++)
462 {
463 _ecore_xcb_textlist_copy_wchar(str, txt);
464 *wlist = str;
465 len = (_ecore_xcb_textlist_len_wchar(str) + 1);
466 str += len;
467 txt += len;
468 }
469 }
470 else
471 {
472 char *txt, *str, **slist;
473
474 txt = (char *)text;
475 slist = (char **)list;
476 for (str = *slist; count > 0; count--, slist++)
477 {
478 strcpy(str, txt);
479 *slist = str;
480 len = strlen(str) + 1;
481 str += len;
482 txt += len;
483 }
484 }
485}
486
487static wchar_t *
488_ecore_xcb_textlist_copy_wchar(wchar_t *str1,
489 wchar_t *str2)
490{
491 wchar_t *tmp;
492
493 tmp = str1;
494 while ((*str1++ = *str2++))
495 ;
496 return tmp;
497}
498
499static int
500_ecore_xcb_textlist_len_wchar(wchar_t *str)
501{
502 wchar_t *ptr;
503
504 ptr = str;
505 while (*ptr)
506 ptr++;
507 return ptr - str;
508}
509
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_vsync.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_vsync.c
deleted file mode 100644
index 47efefc..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_vsync.c
+++ /dev/null
@@ -1,375 +0,0 @@
1#include "ecore_xcb_private.h"
2# include <fcntl.h>
3# include <dlfcn.h>
4# include <X11/Xlib-xcb.h>
5
6#define ECORE_XCB_VSYNC_DRI2 1
7#define DRM_EVENT_CONTEXT_VERSION 2
8
9#ifdef ECORE_XCB_VSYNC_DRI2
10
11/* relevant header bits of dri/drm inlined here to avoid needing external */
12/* headers to build drm */
13typedef unsigned int drm_magic_t;
14
15typedef enum
16{
17 DRM_VBLANK_ABSOLUTE = 0x00000000,
18 DRM_VBLANK_RELATIVE = 0x00000001,
19 DRM_VBLANK_EVENT = 0x04000000,
20 DRM_VBLANK_FLIP = 0x08000000,
21 DRM_VBLANK_NEXTONMISS = 0x10000000,
22 DRM_VBLANK_SECONDARY = 0x20000000,
23 DRM_VBLANK_SIGNAL = 0x40000000
24} drmVBlankSeqType;
25
26typedef struct _drmVBlankReq
27{
28 drmVBlankSeqType type;
29 unsigned int sequence;
30 unsigned long signal;
31} drmVBlankReq;
32
33typedef struct _drmVBlankReply
34{
35 drmVBlankSeqType type;
36 unsigned int sequence;
37 long tval_sec, tval_usec;
38} drmVBlankReply;
39
40typedef union _drmVBlank
41{
42 drmVBlankReq request;
43 drmVBlankReply reply;
44} drmVBlank;
45
46typedef struct _drmEventContext
47{
48 int version;
49 void (*vblank_handler)(int fd,
50 unsigned int sequence,
51 unsigned int tv_sec,
52 unsigned int tv_usec,
53 void *user_data);
54 void (*page_flip_handler)(int fd,
55 unsigned int sequence,
56 unsigned int tv_sec,
57 unsigned int tv_usec,
58 void *user_data);
59} drmEventContext;
60
61static int (*sym_drmClose)(int fd) = NULL;
62static int (*sym_drmGetMagic)(int fd,
63 drm_magic_t *magic) = NULL;
64static int (*sym_drmWaitVBlank)(int fd,
65 drmVBlank *vbl) = NULL;
66static int (*sym_drmHandleEvent)(int fd,
67 drmEventContext *evctx) = NULL;
68
69/* dri */
70static Bool (*sym_DRI2QueryExtension)(Display *display,
71 int *eventBase,
72 int *errorBase) = NULL;
73static Bool (*sym_DRI2QueryVersion)(Display *display,
74 int *major,
75 int *minor) = NULL;
76static Bool (*sym_DRI2Connect)(Display *display,
77 XID window,
78 char **driverName,
79 char **deviceName) = NULL;
80static Bool (*sym_DRI2Authenticate)(Display *display,
81 XID window,
82 drm_magic_t magic) = NULL;
83
84/* local function prototypes */
85static Eina_Bool _ecore_xcb_dri_link(void);
86static Eina_Bool _ecore_xcb_dri_start(void);
87static void _ecore_xcb_dri_shutdown(void);
88
89static Eina_Bool _ecore_xcb_dri_cb(void *data __UNUSED__,
90 Ecore_Fd_Handler *fdh __UNUSED__);
91static void _ecore_xcb_dri_tick_begin(void *data __UNUSED__);
92static void _ecore_xcb_dri_tick_end(void *data __UNUSED__);
93static void _ecore_xcb_dri_tick_schedule(void);
94static void _ecore_xcb_dri_vblank_handler(int fd __UNUSED__,
95 unsigned int frame __UNUSED__,
96 unsigned int sec __UNUSED__,
97 unsigned int usec __UNUSED__,
98 void *data __UNUSED__);
99
100/* local variables */
101static Ecore_X_Window _vsync_root = 0;
102static int _drm_fd = -1;
103static Ecore_Fd_Handler *_drm_fdh = NULL;
104static unsigned int _drm_magic = 0;
105static Eina_Bool _drm_event_busy = EINA_FALSE;
106static void *_drm_lib = NULL;
107static void *_dri_lib = NULL;
108static drmEventContext _drm_evctx;
109#endif
110
111void
112_ecore_xcb_dri_init(void)
113{
114 LOGFN(__FILE__, __LINE__, __FUNCTION__);
115}
116
117void
118_ecore_xcb_dri_finalize(void)
119{
120 LOGFN(__FILE__, __LINE__, __FUNCTION__);
121}
122
123EAPI Eina_Bool
124ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win)
125{
126#ifdef ECORE_XCB_VSYNC_DRI2
127 Ecore_X_Window root;
128#endif
129
130 LOGFN(__FILE__, __LINE__, __FUNCTION__);
131 CHECK_XCB_CONN;
132
133#ifdef ECORE_XCB_VSYNC_DRI2
134 root = ecore_x_window_root_get(win);
135 if (root != _vsync_root)
136 {
137 _vsync_root = root;
138 if (_vsync_root)
139 {
140 if (!_ecore_xcb_dri_link())
141 {
142 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
143 return EINA_FALSE;
144 }
145 _ecore_xcb_dri_shutdown();
146 if (!_ecore_xcb_dri_start())
147 {
148 _vsync_root = 0;
149 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
150 return EINA_FALSE;
151 }
152 ecore_animator_custom_source_tick_begin_callback_set
153 (_ecore_xcb_dri_tick_begin, NULL);
154 ecore_animator_custom_source_tick_end_callback_set
155 (_ecore_xcb_dri_tick_end, NULL);
156 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_CUSTOM);
157 }
158 else
159 {
160 if (_drm_fd >= 0)
161 {
162 _ecore_xcb_dri_shutdown();
163 ecore_animator_custom_source_tick_begin_callback_set
164 (NULL, NULL);
165 ecore_animator_custom_source_tick_end_callback_set
166 (NULL, NULL);
167 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
168 }
169 }
170 }
171 return EINA_TRUE;
172#else
173 return EINA_FALSE;
174 win = 0;
175#endif
176}
177
178/* local functions */
179#ifdef ECORE_XCB_VSYNC_DRI2
180static Eina_Bool
181_ecore_xcb_dri_link(void)
182{
183 const char *_drm_libs[] =
184 {
185 "libdrm.so.2",
186 "libdrm.so.1",
187 "libdrm.so.0",
188 "libdrm.so",
189 NULL,
190 };
191 const char *_dri_libs[] =
192 {
193 "libdri2.so.2",
194 "libdri2.so.1",
195 "libdri2.so.0",
196 "libdri2.so",
197 "libGL.so.4",
198 "libGL.so.3",
199 "libGL.so.2",
200 "libGL.so.1",
201 "libGL.so.0",
202 "libGL.so",
203 NULL,
204 };
205 int i = 0, fail = 0;
206
207 LOGFN(__FILE__, __LINE__, __FUNCTION__);
208
209# define SYM(lib, xx) \
210 do { \
211 sym_## xx = dlsym(lib, #xx); \
212 if (!(sym_## xx)) { \
213 fprintf(stderr, "%s\n", dlerror()); \
214 fail = 1; \
215 } \
216 } while (0);
217
218 if (_drm_lib) return EINA_TRUE;
219
220 for (i = 0; _drm_libs[i]; i++)
221 {
222 _drm_lib = dlopen(_drm_libs[i], (RTLD_LOCAL | RTLD_LAZY));
223 if (_drm_lib)
224 {
225 fail = 0;
226 SYM(_drm_lib, drmClose);
227 SYM(_drm_lib, drmGetMagic);
228 SYM(_drm_lib, drmWaitVBlank);
229 SYM(_drm_lib, drmHandleEvent);
230 if (fail)
231 {
232 dlclose(_drm_lib);
233 _drm_lib = NULL;
234 }
235 else
236 break;
237 }
238 }
239 if (!_drm_lib) return EINA_FALSE;
240 for (i = 0; _dri_libs[i]; i++)
241 {
242 if ((_dri_lib = dlopen(_dri_libs[i], (RTLD_LOCAL | RTLD_LAZY))))
243 {
244 fail = 0;
245 SYM(_dri_lib, DRI2QueryExtension);
246 SYM(_dri_lib, DRI2QueryVersion);
247 SYM(_dri_lib, DRI2Connect);
248 SYM(_dri_lib, DRI2Authenticate);
249 if (fail)
250 {
251 dlclose(_dri_lib);
252 _dri_lib = NULL;
253 }
254 else
255 break;
256 }
257 }
258 if (!_dri_lib)
259 {
260 dlclose(_drm_lib);
261 _drm_lib = NULL;
262 return EINA_FALSE;
263 }
264
265 return EINA_TRUE;
266}
267
268static Eina_Bool
269_ecore_xcb_dri_start(void)
270{
271 Ecore_X_Display *disp;
272 int _dri2_event = 0, _dri2_error = 0;
273 int _dri2_major = 0, _dri2_minor = 0;
274 char *device = NULL, *driver = NULL;
275
276 disp = ecore_x_display_get();
277 if (!sym_DRI2QueryExtension(disp, &_dri2_event, &_dri2_error))
278 return 0;
279 if (!sym_DRI2QueryVersion(disp, &_dri2_major, &_dri2_minor))
280 return 0;
281 if (_dri2_major < 2) return 0;
282 if (!sym_DRI2Connect(disp, _vsync_root, &driver, &device))
283 return 0;
284
285 _drm_fd = open(device, O_RDWR);
286 if (_drm_fd < 0) return 0;
287
288 sym_drmGetMagic(_drm_fd, &_drm_magic);
289 if (!sym_DRI2Authenticate(disp, _vsync_root, _drm_magic))
290 {
291 close(_drm_fd);
292 _drm_fd = -1;
293 return EINA_FALSE;
294 }
295
296 memset(&_drm_evctx, 0, sizeof(_drm_evctx));
297 _drm_evctx.version = DRM_EVENT_CONTEXT_VERSION;
298 _drm_evctx.vblank_handler = _ecore_xcb_dri_vblank_handler;
299 _drm_evctx.page_flip_handler = NULL;
300
301 _drm_fdh = ecore_main_fd_handler_add(_drm_fd, ECORE_FD_READ,
302 _ecore_xcb_dri_cb, NULL, NULL, NULL);
303 if (!_drm_fdh)
304 {
305 close(_drm_fd);
306 _drm_fd = -1;
307 return EINA_FALSE;
308 }
309
310 return EINA_TRUE;
311}
312
313static void
314_ecore_xcb_dri_shutdown(void)
315{
316 if (_drm_fd >= 0)
317 {
318 close(_drm_fd);
319 _drm_fd = -1;
320 }
321 if (_drm_fdh)
322 {
323 ecore_main_fd_handler_del(_drm_fdh);
324 _drm_fdh = NULL;
325 }
326}
327
328static Eina_Bool
329_ecore_xcb_dri_cb(void *data __UNUSED__,
330 Ecore_Fd_Handler *fdh __UNUSED__)
331{
332 sym_drmHandleEvent(_drm_fd, &_drm_evctx);
333 return ECORE_CALLBACK_RENEW;
334}
335
336static void
337_ecore_xcb_dri_tick_begin(void *data __UNUSED__)
338{
339 _drm_event_busy = EINA_TRUE;
340 _ecore_xcb_dri_tick_schedule();
341}
342
343static void
344_ecore_xcb_dri_tick_end(void *data __UNUSED__)
345{
346 _drm_event_busy = EINA_FALSE;
347}
348
349static void
350_ecore_xcb_dri_tick_schedule(void)
351{
352 drmVBlank vbl;
353
354 LOGFN(__FILE__, __LINE__, __FUNCTION__);
355 CHECK_XCB_CONN;
356
357 vbl.request.type = (DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT);
358 vbl.request.sequence = 1;
359 vbl.request.signal = 0;
360
361 sym_drmWaitVBlank(_drm_fd, &vbl);
362}
363
364static void
365_ecore_xcb_dri_vblank_handler(int fd __UNUSED__,
366 unsigned int frame __UNUSED__,
367 unsigned int sec __UNUSED__,
368 unsigned int usec __UNUSED__,
369 void *data __UNUSED__)
370{
371 ecore_animator_custom_tick();
372 if (_drm_event_busy) _ecore_xcb_dri_tick_schedule();
373}
374
375#endif
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c
deleted file mode 100644
index 3458729..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c
+++ /dev/null
@@ -1,2234 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_RENDER
3# include <xcb/render.h>
4#endif
5#ifdef ECORE_XCB_SHAPE
6# include <xcb/shape.h>
7#endif
8#ifdef ECORE_XCB_XPRINT
9#include <xcb/xprint.h>
10#endif
11
12/* local function prototypes */
13static Ecore_X_Window _ecore_xcb_window_argb_internal_new(Ecore_X_Window parent,
14 int x,
15 int y,
16 int w,
17 int h,
18 uint8_t override_redirect,
19 uint8_t save_under);
20static Ecore_X_Window _ecore_xcb_window_at_xy_get(Ecore_X_Window base,
21 int bx,
22 int by,
23 int x,
24 int y,
25 Ecore_X_Window *skip,
26 int skip_num);
27static int _ecore_xcb_window_modifiers_get(unsigned int state);
28static xcb_visualtype_t *_ecore_xcb_window_find_visual_by_id(xcb_visualid_t id);
29#ifdef ECORE_XCB_XPRINT
30static xcb_screen_t *_ecore_xcb_window_screen_of_display(int screen);
31#endif
32
33/* local variables */
34static int ignore_num = 0;
35static Ecore_X_Window *ignore_list = NULL;
36
37/* external variables */
38int _ecore_xcb_button_grabs_num = 0;
39int _ecore_xcb_key_grabs_num = 0;
40Ecore_X_Window *_ecore_xcb_button_grabs = NULL;
41Ecore_X_Window *_ecore_xcb_key_grabs = NULL;
42Eina_Bool (*_ecore_xcb_window_grab_replay_func)(void *data,
43 int type,
44 void *event);
45void *_ecore_xcb_window_grab_replay_data;
46
47/**
48 * @defgroup Ecore_X_Window_Create_Group X Window Creation Functions
49 *
50 * Functions that can be used to create an X window.
51 */
52
53/**
54 * Creates a new window.
55 * @param parent The parent window to use. If @p parent is @c 0, the root
56 * window of the default display is used.
57 * @param x X position.
58 * @param y Y position.
59 * @param w Width.
60 * @param h Height.
61 * @return The new window handle.
62 * @ingroup Ecore_X_Window_Create_Group
63 */
64EAPI Ecore_X_Window
65ecore_x_window_new(Ecore_X_Window parent,
66 int x,
67 int y,
68 int w,
69 int h)
70{
71 Ecore_X_Window win;
72 uint32_t mask, mask_list[9];
73
74 LOGFN(__FILE__, __LINE__, __FUNCTION__);
75 CHECK_XCB_CONN;
76
77 if (parent == 0)
78 parent = ((xcb_screen_t *)_ecore_xcb_screen)->root;
79
80 /* NB: Order here is very important due to xcb_cw_t enum */
81 mask = (XCB_CW_BACK_PIXMAP | XCB_CW_BORDER_PIXEL | XCB_CW_BIT_GRAVITY |
82 XCB_CW_WIN_GRAVITY | XCB_CW_BACKING_STORE |
83 XCB_CW_OVERRIDE_REDIRECT | XCB_CW_SAVE_UNDER | XCB_CW_EVENT_MASK |
84 XCB_CW_DONT_PROPAGATE);
85
86 mask_list[0] = XCB_BACK_PIXMAP_NONE;
87 mask_list[1] = 0;
88 mask_list[2] = XCB_GRAVITY_NORTH_WEST;
89 mask_list[3] = XCB_GRAVITY_NORTH_WEST;
90 mask_list[4] = XCB_BACKING_STORE_NOT_USEFUL;
91 mask_list[5] = 0;
92 mask_list[6] = 0;
93 mask_list[7] = (XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
94 XCB_EVENT_MASK_BUTTON_PRESS |
95 XCB_EVENT_MASK_BUTTON_RELEASE |
96 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
97 XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
98 XCB_EVENT_MASK_VISIBILITY_CHANGE |
99 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
100 XCB_EVENT_MASK_FOCUS_CHANGE |
101 XCB_EVENT_MASK_PROPERTY_CHANGE |
102 XCB_EVENT_MASK_COLOR_MAP_CHANGE);
103 mask_list[8] = XCB_EVENT_MASK_NO_EVENT;
104
105 win = xcb_generate_id(_ecore_xcb_conn);
106 xcb_create_window(_ecore_xcb_conn, XCB_COPY_FROM_PARENT,
107 win, parent, x, y, w, h, 0,
108 XCB_WINDOW_CLASS_INPUT_OUTPUT,
109 XCB_COPY_FROM_PARENT, mask, mask_list);
110
111 if (parent == ((xcb_screen_t *)_ecore_xcb_screen)->root)
112 ecore_x_window_defaults_set(win);
113
114 return win;
115}
116
117/**
118 * Creates a window with the override redirect attribute set to @c True.
119 * @param parent The parent window to use. If @p parent is @c 0, the root
120 * window of the default display is used.
121 * @param x X position.
122 * @param y Y position.
123 * @param w Width.
124 * @param h Height.
125 * @return The new window handle.
126 * @ingroup Ecore_X_Window_Create_Group
127 */
128EAPI Ecore_X_Window
129ecore_x_window_override_new(Ecore_X_Window parent,
130 int x,
131 int y,
132 int w,
133 int h)
134{
135 Ecore_X_Window win;
136 uint32_t mask, mask_list[9];
137
138 LOGFN(__FILE__, __LINE__, __FUNCTION__);
139 CHECK_XCB_CONN;
140
141 if (parent == 0)
142 parent = ((xcb_screen_t *)_ecore_xcb_screen)->root;
143
144 /* NB: Order here is very important due to xcb_cw_t enum */
145 mask = (XCB_CW_BACK_PIXMAP | XCB_CW_BORDER_PIXEL | XCB_CW_BIT_GRAVITY |
146 XCB_CW_WIN_GRAVITY | XCB_CW_BACKING_STORE |
147 XCB_CW_OVERRIDE_REDIRECT | XCB_CW_SAVE_UNDER | XCB_CW_EVENT_MASK |
148 XCB_CW_DONT_PROPAGATE);
149
150 mask_list[0] = XCB_BACK_PIXMAP_NONE;
151 mask_list[1] = 0;
152 mask_list[2] = XCB_GRAVITY_NORTH_WEST;
153 mask_list[3] = XCB_GRAVITY_NORTH_WEST;
154 mask_list[4] = XCB_BACKING_STORE_NOT_USEFUL;
155 mask_list[5] = 1;
156 mask_list[6] = 0;
157 mask_list[7] = (XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
158 XCB_EVENT_MASK_BUTTON_PRESS |
159 XCB_EVENT_MASK_BUTTON_RELEASE |
160 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
161 XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
162 XCB_EVENT_MASK_VISIBILITY_CHANGE |
163 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
164 XCB_EVENT_MASK_FOCUS_CHANGE |
165 XCB_EVENT_MASK_PROPERTY_CHANGE |
166 XCB_EVENT_MASK_COLOR_MAP_CHANGE);
167 mask_list[8] = XCB_EVENT_MASK_NO_EVENT;
168
169 win = xcb_generate_id(_ecore_xcb_conn);
170 xcb_create_window(_ecore_xcb_conn, XCB_COPY_FROM_PARENT,
171 win, parent, x, y, w, h, 0,
172 XCB_WINDOW_CLASS_INPUT_OUTPUT,
173 XCB_COPY_FROM_PARENT, mask, mask_list);
174
175 return win;
176}
177
178/**
179 * Creates a new input window.
180 * @param parent The parent window to use. If @p parent is @c 0, the root
181 * window of the default display is used.
182 * @param x X position.
183 * @param y Y position.
184 * @param w Width.
185 * @param h Height.
186 * @return The new window.
187 * @ingroup Ecore_X_Window_Create_Group
188 */
189EAPI Ecore_X_Window
190ecore_x_window_input_new(Ecore_X_Window parent,
191 int x,
192 int y,
193 int w,
194 int h)
195{
196 Ecore_X_Window win;
197 uint32_t mask, mask_list[3];
198
199 LOGFN(__FILE__, __LINE__, __FUNCTION__)
200 CHECK_XCB_CONN;
201
202 if (parent == 0)
203 parent = ((xcb_screen_t *)_ecore_xcb_screen)->root;
204
205 /* NB: Order here is very important due to xcb_cw_t enum */
206 mask = (XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK |
207 XCB_CW_DONT_PROPAGATE);
208
209 mask_list[0] = 1;
210 mask_list[1] = (XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
211 XCB_EVENT_MASK_BUTTON_PRESS |
212 XCB_EVENT_MASK_BUTTON_RELEASE |
213 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
214 XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
215 XCB_EVENT_MASK_VISIBILITY_CHANGE |
216 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
217 XCB_EVENT_MASK_FOCUS_CHANGE |
218 XCB_EVENT_MASK_PROPERTY_CHANGE |
219 XCB_EVENT_MASK_COLOR_MAP_CHANGE);
220 mask_list[2] = XCB_EVENT_MASK_NO_EVENT;
221
222 win = xcb_generate_id(_ecore_xcb_conn);
223 xcb_create_window(_ecore_xcb_conn, XCB_COPY_FROM_PARENT,
224 win, parent, x, y, w, h, 0,
225 XCB_WINDOW_CLASS_INPUT_ONLY,
226 XCB_COPY_FROM_PARENT, mask, mask_list);
227
228 return win;
229}
230
231/**
232 * Creates a new window.
233 * @param parent The parent window to use. If @p parent is @c 0, the root
234 * window of the default display is used.
235 * @param x X position.
236 * @param y Y position.
237 * @param w Width.
238 * @param h Height.
239 * @return The new window handle.
240 * @ingroup Ecore_X_Window_Create_Group
241 */
242EAPI Ecore_X_Window
243ecore_x_window_manager_argb_new(Ecore_X_Window parent,
244 int x,
245 int y,
246 int w,
247 int h)
248{
249 Ecore_X_Window win = 0;
250
251 LOGFN(__FILE__, __LINE__, __FUNCTION__);
252
253 win = _ecore_xcb_window_argb_internal_new(parent, x, y, w, h, 1, 0);
254
255 return win;
256}
257
258/**
259 * Creates a new window.
260 * @param parent The parent window to use. If @p parent is @c 0, the root
261 * window of the default display is used.
262 * @param x X position.
263 * @param y Y position.
264 * @param w Width.
265 * @param h Height.
266 * @return The new window handle.
267 * @ingroup Ecore_X_Window_Create_Group
268 */
269EAPI Ecore_X_Window
270ecore_x_window_argb_new(Ecore_X_Window parent,
271 int x,
272 int y,
273 int w,
274 int h)
275{
276 Ecore_X_Window win = 0;
277
278 LOGFN(__FILE__, __LINE__, __FUNCTION__);
279
280 win = _ecore_xcb_window_argb_internal_new(parent, x, y, w, h, 0, 0);
281
282 return win;
283}
284
285/**
286 * Creates a window with the override redirect attribute set to @c True.
287 * @param parent The parent window to use. If @p parent is @c 0, the root
288 * window of the default display is used.
289 * @param x X position.
290 * @param y Y position.
291 * @param w Width.
292 * @param h Height.
293 * @return The new window handle.
294 * @ingroup Ecore_X_Window_Create_Group
295 */
296EAPI Ecore_X_Window
297ecore_x_window_override_argb_new(Ecore_X_Window parent,
298 int x,
299 int y,
300 int w,
301 int h)
302{
303 Ecore_X_Window win = 0;
304
305 LOGFN(__FILE__, __LINE__, __FUNCTION__);
306
307 win = _ecore_xcb_window_argb_internal_new(parent, x, y, w, h, 1, 0);
308
309 return win;
310}
311
312/**
313 * @defgroup Ecore_X_Window_Destroy_Group X Window Destroy Functions
314 *
315 * Functions to destroy X windows.
316 */
317
318/**
319 * Deletes the given window.
320 * @param win The given window.
321 * @ingroup Ecore_X_Window_Destroy_Group
322 */
323EAPI void
324ecore_x_window_free(Ecore_X_Window win)
325{
326 LOGFN(__FILE__, __LINE__, __FUNCTION__);
327 CHECK_XCB_CONN;
328
329 if (win)
330 {
331 /* xcb_destroy_notify_event_t ev; */
332 /* Ecore_X_Window root; */
333
334 /* if (xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).rem == 1) */
335 /* root = ((xcb_screen_t *)_ecore_xcb_screen)->root; */
336 /* else */
337 /* { */
338 /* xcb_get_geometry_cookie_t cookie; */
339 /* xcb_get_geometry_reply_t *reply; */
340
341 /* cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win); */
342 /* reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL); */
343 /* if (!reply) return; */
344 /* root = reply->root; */
345 /* free(reply); */
346 /* } */
347
348 /* memset(&ev, 0, sizeof(xcb_destroy_notify_event_t)); */
349
350 /* ev.response_type = XCB_DESTROY_NOTIFY; */
351 /* ev.window = win; */
352 /* ev.event = root; */
353
354 /* xcb_send_event(_ecore_xcb_conn, 0, root, */
355 /* XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | */
356 /* XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, */
357 /* (const char *)&ev); */
358
359 xcb_destroy_window(_ecore_xcb_conn, win);
360// ecore_x_flush();
361 }
362}
363
364/**
365 * Sends a delete request to the given window.
366 * @param win The given window.
367 * @ingroup Ecore_X_Window_Destroy_Group
368 */
369EAPI void
370ecore_x_window_delete_request_send(Ecore_X_Window win)
371{
372 LOGFN(__FILE__, __LINE__, __FUNCTION__);
373
374 if (!win) return;
375 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
376 XCB_EVENT_MASK_NO_EVENT,
377 ECORE_X_ATOM_WM_DELETE_WINDOW,
378 XCB_CURRENT_TIME, 0, 0, 0);
379}
380
381EAPI void
382ecore_x_window_configure(Ecore_X_Window win,
383 Ecore_X_Window_Configure_Mask mask,
384 int x,
385 int y,
386 int w,
387 int h,
388 int border_width,
389 Ecore_X_Window sibling,
390 int stack_mode)
391{
392 uint16_t vmask = 0;
393 uint32_t vlist[7];
394 unsigned int i = 0;
395
396 LOGFN(__FILE__, __LINE__, __FUNCTION__);
397 CHECK_XCB_CONN;
398
399 if (!win) return;
400
401 if (mask & XCB_CONFIG_WINDOW_X)
402 {
403 vmask |= XCB_CONFIG_WINDOW_X;
404 vlist[i++] = x;
405 }
406 if (mask & XCB_CONFIG_WINDOW_Y)
407 {
408 vmask |= XCB_CONFIG_WINDOW_Y;
409 vlist[i++] = y;
410 }
411 if (mask & XCB_CONFIG_WINDOW_WIDTH)
412 {
413 vmask |= XCB_CONFIG_WINDOW_WIDTH;
414 vlist[i++] = w;
415 }
416 if (mask & XCB_CONFIG_WINDOW_HEIGHT)
417 {
418 vmask |= XCB_CONFIG_WINDOW_HEIGHT;
419 vlist[i++] = h;
420 }
421 if (mask & XCB_CONFIG_WINDOW_BORDER_WIDTH)
422 {
423 vmask |= XCB_CONFIG_WINDOW_BORDER_WIDTH;
424 vlist[i++] = border_width;
425 }
426 if (mask & XCB_CONFIG_WINDOW_SIBLING)
427 {
428 vmask |= XCB_CONFIG_WINDOW_SIBLING;
429 vlist[i++] = sibling;
430 }
431 if (mask & XCB_CONFIG_WINDOW_STACK_MODE)
432 {
433 vmask |= XCB_CONFIG_WINDOW_STACK_MODE;
434 vlist[i++] = stack_mode;
435 }
436
437 xcb_configure_window(_ecore_xcb_conn, win, vmask,
438 (const uint32_t *)&vlist);
439// ecore_x_flush();
440}
441
442/**
443 * @defgroup Ecore_X_Window_Geometry_Group X Window Geometry Functions
444 *
445 * Functions that change or retrieve the geometry of X windows.
446 */
447
448/**
449 * Moves a window to the position @p x, @p y.
450 *
451 * The position is relative to the upper left hand corner of the
452 * parent window.
453 *
454 * @param win The window to move.
455 * @param x X position.
456 * @param y Y position.
457 * @ingroup Ecore_X_Window_Geometry_Group
458 */
459EAPI void
460ecore_x_window_move(Ecore_X_Window win,
461 int x,
462 int y)
463{
464 uint32_t list[2], mask;
465
466 LOGFN(__FILE__, __LINE__, __FUNCTION__);
467 CHECK_XCB_CONN;
468
469 if (!win) return;
470
471 mask = (XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y);
472 list[0] = x;
473 list[1] = y;
474
475 xcb_configure_window(_ecore_xcb_conn, win, mask,
476 (const uint32_t *)&list);
477// ecore_x_flush();
478}
479
480/**
481 * Resizes a window.
482 * @param win The window to resize.
483 * @param w New width of the window.
484 * @param h New height of the window.
485 * @ingroup Ecore_X_Window_Geometry_Group
486 */
487EAPI void
488ecore_x_window_resize(Ecore_X_Window win,
489 int w,
490 int h)
491{
492 uint32_t list[2], mask;
493
494 LOGFN(__FILE__, __LINE__, __FUNCTION__);
495 CHECK_XCB_CONN;
496
497 if (!win) return;
498 if (w < 1) w = 1;
499 if (h < 1) h = 1;
500
501 mask = (XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT);
502 list[0] = w;
503 list[1] = h;
504
505 xcb_configure_window(_ecore_xcb_conn, win, mask,
506 (const uint32_t *)&list);
507// ecore_x_flush();
508}
509
510/**
511 * Moves and resizes a window.
512 * @param win The window to move and resize.
513 * @param x New X position of the window.
514 * @param y New Y position of the window.
515 * @param w New width of the window.
516 * @param h New height of the window.
517 * @ingroup Ecore_X_Window_Geometry_Group
518 */
519EAPI void
520ecore_x_window_move_resize(Ecore_X_Window win,
521 int x,
522 int y,
523 int w,
524 int h)
525{
526 uint32_t list[4], mask;
527
528 LOGFN(__FILE__, __LINE__, __FUNCTION__);
529 CHECK_XCB_CONN;
530
531 if (!win) return;
532 if (w < 1) w = 1;
533 if (h < 1) h = 1;
534
535 mask = (XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y |
536 XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT);
537 list[0] = x;
538 list[1] = y;
539 list[2] = w;
540 list[3] = h;
541
542 xcb_configure_window(_ecore_xcb_conn, win, mask,
543 (const uint32_t *)&list);
544// ecore_x_flush();
545}
546
547/**
548 * Retrieves the width of the border of the given window.
549 * @param win The given window.
550 * @return Width of the border of @p win.
551 * @ingroup Ecore_X_Window_Geometry_Group
552 */
553EAPI int
554ecore_x_window_border_width_get(Ecore_X_Window win)
555{
556 LOGFN(__FILE__, __LINE__, __FUNCTION__);
557
558 if (!win) return 0;
559 return ecore_x_drawable_border_width_get(win);
560}
561
562/**
563 * Sets the width of the border of the given window.
564 * @param win The given window.
565 * @param width The new border width.
566 * @ingroup Ecore_X_Window_Geometry_Group
567 */
568EAPI void
569ecore_x_window_border_width_set(Ecore_X_Window win,
570 int border_width)
571{
572 uint32_t list;
573
574 LOGFN(__FILE__, __LINE__, __FUNCTION__);
575 CHECK_XCB_CONN;
576
577 if (!win) return;
578
579 list = border_width;
580
581 xcb_configure_window(_ecore_xcb_conn, win,
582 XCB_CONFIG_WINDOW_BORDER_WIDTH, &list);
583// ecore_x_flush();
584}
585
586/**
587 * @defgroup Ecore_X_Window_Z_Order_Group X Window Z Order Functions
588 *
589 * Functions that change the Z order of X windows.
590 */
591
592/**
593 * Raises the given window.
594 * @param win The window to raise.
595 * @ingroup Ecore_X_Window_Z_Order_Group
596 */
597EAPI void
598ecore_x_window_raise(Ecore_X_Window win)
599{
600 uint32_t list[] = { XCB_STACK_MODE_ABOVE };
601
602 LOGFN(__FILE__, __LINE__, __FUNCTION__);
603 CHECK_XCB_CONN;
604
605 xcb_configure_window(_ecore_xcb_conn, win,
606 XCB_CONFIG_WINDOW_STACK_MODE, list);
607// ecore_x_flush();
608}
609
610/**
611 * Lowers the given window.
612 * @param win The window to lower.
613 * @ingroup Ecore_X_Window_Z_Order_Group
614 */
615EAPI void
616ecore_x_window_lower(Ecore_X_Window win)
617{
618 uint32_t list[] = { XCB_STACK_MODE_BELOW };
619
620 LOGFN(__FILE__, __LINE__, __FUNCTION__);
621 CHECK_XCB_CONN;
622
623 xcb_configure_window(_ecore_xcb_conn, win,
624 XCB_CONFIG_WINDOW_STACK_MODE, list);
625// ecore_x_flush();
626}
627
628/**
629 * Retrieves the depth of the given window.
630 * @param win The given window.
631 * @return Depth of the window.
632 */
633EAPI int
634ecore_x_window_depth_get(Ecore_X_Window win)
635{
636 LOGFN(__FILE__, __LINE__, __FUNCTION__);
637
638 return ecore_x_drawable_depth_get(win);
639}
640
641/**
642 * @defgroup Ecore_X_Window_Properties_Group X Window Property Functions
643 *
644 * Functions that set window properties.
645 */
646
647/**
648 * Sets the default properties for the given window.
649 *
650 * The default properties set for the window are @c WM_CLIENT_MACHINE and
651 * @c _NET_WM_PID.
652 *
653 * @param win The given window.
654 * @ingroup Ecore_X_Window_Properties_Group
655 */
656EAPI void
657ecore_x_window_defaults_set(Ecore_X_Window win)
658{
659 char buff[MAXHOSTNAMELEN], **argv;
660 int argc;
661 pid_t pid;
662
663 LOGFN(__FILE__, __LINE__, __FUNCTION__);
664 CHECK_XCB_CONN;
665
666 gethostname(buff, MAXHOSTNAMELEN);
667 buff[MAXHOSTNAMELEN - 1] = '\0';
668
669 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
670 ECORE_X_ATOM_WM_CLIENT_MACHINE, ECORE_X_ATOM_STRING,
671 8, strlen(buff), buff);
672
673 pid = getpid();
674 ecore_x_netwm_pid_set(win, pid);
675 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
676 ecore_app_args_get(&argc, &argv);
677 ecore_x_icccm_command_set(win, argc, argv);
678}
679
680/**
681 * @defgroup Ecore_X_Window_Visibility_Group X Window Visibility Functions
682 *
683 * Functions to access and change the visibility of X windows.
684 */
685
686/**
687 * Shows a window.
688 *
689 * Synonymous to "mapping" a window in X Window System terminology.
690 *
691 * @param win The window to show.
692 * @ingroup Ecore_X_Window_Visibility
693 */
694EAPI void
695ecore_x_window_show(Ecore_X_Window win)
696{
697 LOGFN(__FILE__, __LINE__, __FUNCTION__);
698 CHECK_XCB_CONN;
699
700 if (win)
701 xcb_map_window(_ecore_xcb_conn, win);
702}
703
704/**
705 * Hides a window.
706 *
707 * Synonymous to "unmapping" a window in X Window System terminology.
708 *
709 * @param win The window to hide.
710 * @ingroup Ecore_X_Window_Visibility
711 */
712EAPI void
713ecore_x_window_hide(Ecore_X_Window win)
714{
715 LOGFN(__FILE__, __LINE__, __FUNCTION__);
716 CHECK_XCB_CONN;
717
718 if (win)
719 {
720 xcb_unmap_notify_event_t ev;
721 Ecore_X_Window root;
722
723 if (xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).rem == 1)
724 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
725 else
726 {
727 xcb_get_geometry_cookie_t cookie;
728 xcb_get_geometry_reply_t *reply;
729
730 cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win);
731 reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL);
732 if (!reply) return;
733 root = reply->root;
734 free(reply);
735 }
736
737 memset(&ev, 0, sizeof(xcb_unmap_notify_event_t));
738
739 ev.response_type = XCB_UNMAP_NOTIFY;
740 ev.window = win;
741 ev.event = root;
742 ev.from_configure = 0;
743
744 xcb_send_event(_ecore_xcb_conn, 0, root,
745 (XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
746 XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT),
747 (const char *)&ev);
748
749 xcb_unmap_window(_ecore_xcb_conn, win);
750// ecore_x_flush();
751 }
752}
753
754/**
755 * @defgroup Ecore_X_Window_Focus_Functions X Window Focus Functions
756 *
757 * Functions that give the focus to an X Window.
758 */
759
760/**
761 * Sets the focus to the window @p win.
762 * @param win The window to focus.
763 * @ingroup Ecore_X_Window_Focus_Functions
764 */
765EAPI void
766ecore_x_window_focus(Ecore_X_Window win)
767{
768 LOGFN(__FILE__, __LINE__, __FUNCTION__);
769 CHECK_XCB_CONN;
770
771 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
772
773 xcb_set_input_focus(_ecore_xcb_conn,
774 XCB_INPUT_FOCUS_PARENT, win, XCB_CURRENT_TIME);
775// ecore_x_flush();
776}
777
778/**
779 * Sets the focus to the given window at a specific time.
780 * @param win The window to focus.
781 * @param t When to set the focus to the window.
782 * @ingroup Ecore_X_Window_Focus_Functions
783 */
784EAPI void
785ecore_x_window_focus_at_time(Ecore_X_Window win,
786 Ecore_X_Time time __UNUSED__)
787{
788 LOGFN(__FILE__, __LINE__, __FUNCTION__);
789 CHECK_XCB_CONN;
790
791 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
792 xcb_set_input_focus(_ecore_xcb_conn,
793 XCB_INPUT_FOCUS_PARENT, win, XCB_CURRENT_TIME);
794// ecore_x_flush();
795}
796
797/**
798 * @defgroup Ecore_X_Window_Parent_Group X Window Parent Functions
799 *
800 * Functions that retrieve or changes the parent window of a window.
801 */
802
803/**
804 * Moves a window to within another window at a given position.
805 * @param win The window to reparent.
806 * @param new_parent The new parent window.
807 * @param x X position within new parent window.
808 * @param y Y position within new parent window.
809 * @ingroup Ecore_X_Window_Parent_Group
810 */
811EAPI void
812ecore_x_window_reparent(Ecore_X_Window win,
813 Ecore_X_Window parent,
814 int x,
815 int y)
816{
817 LOGFN(__FILE__, __LINE__, __FUNCTION__);
818 CHECK_XCB_CONN;
819
820 if (parent == 0)
821 parent = ((xcb_screen_t *)_ecore_xcb_screen)->root;
822
823 xcb_reparent_window(_ecore_xcb_conn, win, parent, x, y);
824// ecore_x_flush();
825}
826
827EAPI void
828ecore_x_window_pixmap_set(Ecore_X_Window win,
829 Ecore_X_Pixmap pixmap)
830{
831 uint32_t list;
832
833 LOGFN(__FILE__, __LINE__, __FUNCTION__);
834 CHECK_XCB_CONN;
835
836 list = pixmap;
837
838 xcb_change_window_attributes(_ecore_xcb_conn, win,
839 XCB_CW_BACK_PIXMAP, &list);
840// ecore_x_flush();
841}
842
843/**
844 * Sets the background color of the given window.
845 * @param win The given window
846 * @param r red value (0...65536, 16 bits)
847 * @param g green value (0...65536, 16 bits)
848 * @param b blue value (0...65536, 16 bits)
849 */
850EAPI void
851ecore_x_window_background_color_set(Ecore_X_Window win,
852 unsigned short red,
853 unsigned short green,
854 unsigned short blue)
855{
856 xcb_alloc_color_cookie_t cookie;
857 xcb_alloc_color_reply_t *reply;
858 uint32_t list;
859
860 LOGFN(__FILE__, __LINE__, __FUNCTION__);
861 CHECK_XCB_CONN;
862
863 cookie =
864 xcb_alloc_color_unchecked(_ecore_xcb_conn,
865 ((xcb_screen_t *)_ecore_xcb_screen)->default_colormap,
866 red, green, blue);
867 reply = xcb_alloc_color_reply(_ecore_xcb_conn, cookie, NULL);
868 if (!reply) return;
869 list = reply->pixel;
870 free(reply);
871
872 xcb_change_window_attributes(_ecore_xcb_conn, win,
873 XCB_CW_BACK_PIXEL, &list);
874// ecore_x_flush();
875}
876
877EAPI void
878ecore_x_window_pixel_gravity_set(Ecore_X_Window win,
879 Ecore_X_Gravity gravity)
880{
881 uint32_t list;
882
883 LOGFN(__FILE__, __LINE__, __FUNCTION__);
884 CHECK_XCB_CONN;
885
886 list = gravity;
887
888 xcb_change_window_attributes(_ecore_xcb_conn, win,
889 XCB_CW_BIT_GRAVITY, &list);
890// ecore_x_flush();
891}
892
893EAPI void
894ecore_x_window_gravity_set(Ecore_X_Window win,
895 Ecore_X_Gravity gravity)
896{
897 uint32_t list;
898
899 LOGFN(__FILE__, __LINE__, __FUNCTION__);
900 CHECK_XCB_CONN;
901
902 list = gravity;
903
904 xcb_change_window_attributes(_ecore_xcb_conn, win,
905 XCB_CW_WIN_GRAVITY, &list);
906// ecore_x_flush();
907}
908
909EAPI void
910ecore_x_window_override_set(Ecore_X_Window win,
911 Eina_Bool override)
912{
913 uint32_t list;
914
915 LOGFN(__FILE__, __LINE__, __FUNCTION__);
916 CHECK_XCB_CONN;
917
918 list = override;
919
920 xcb_change_window_attributes(_ecore_xcb_conn, win,
921 XCB_CW_OVERRIDE_REDIRECT, &list);
922// ecore_x_flush();
923}
924
925/**
926 * To be documented.
927 *
928 * FIXME: To be fixed.
929 */
930EAPI void
931ecore_x_window_cursor_show(Ecore_X_Window win,
932 Eina_Bool show)
933{
934 uint32_t list = 0;
935
936 LOGFN(__FILE__, __LINE__, __FUNCTION__);
937 CHECK_XCB_CONN;
938
939 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
940
941 if (!show)
942 {
943 Ecore_X_Cursor cursor;
944 Ecore_X_Pixmap p, m;
945 Ecore_X_GC gc;
946 xcb_point_t point;
947
948 p = xcb_generate_id(_ecore_xcb_conn);
949 xcb_create_pixmap(_ecore_xcb_conn, 1, p, win, 1, 1);
950 m = xcb_generate_id(_ecore_xcb_conn);
951 xcb_create_pixmap(_ecore_xcb_conn, 1, m, win, 1, 1);
952 gc = xcb_generate_id(_ecore_xcb_conn);
953 xcb_create_gc(_ecore_xcb_conn, gc, win, 0, NULL);
954 xcb_change_gc(_ecore_xcb_conn, gc, XCB_GC_FOREGROUND, &list);
955 point.x = 0;
956 point.y = 0;
957 xcb_poly_point(_ecore_xcb_conn, XCB_COORD_MODE_ORIGIN,
958 win, gc, 1, &point);
959 xcb_free_gc(_ecore_xcb_conn, gc);
960
961 cursor = xcb_generate_id(_ecore_xcb_conn);
962 xcb_create_cursor(_ecore_xcb_conn, cursor,
963 p, m, 0, 0, 0, 0, 0, 0, 0, 0);
964 list = cursor;
965
966 xcb_change_window_attributes(_ecore_xcb_conn, win,
967 XCB_CW_CURSOR, &list);
968
969 xcb_free_cursor(_ecore_xcb_conn, cursor);
970 xcb_free_pixmap(_ecore_xcb_conn, m);
971 xcb_free_pixmap(_ecore_xcb_conn, p);
972 }
973 else
974 {
975 xcb_change_window_attributes(_ecore_xcb_conn, win,
976 XCB_CW_CURSOR, &list);
977 }
978// ecore_x_flush();
979}
980
981EAPI void
982ecore_x_window_cursor_set(Ecore_X_Window win,
983 Ecore_X_Cursor cursor)
984{
985 uint32_t list;
986
987 LOGFN(__FILE__, __LINE__, __FUNCTION__);
988 CHECK_XCB_CONN;
989
990 list = cursor;
991
992 xcb_change_window_attributes(_ecore_xcb_conn, win, XCB_CW_CURSOR, &list);
993// ecore_x_flush();
994}
995
996EAPI void
997ecore_x_window_container_manage(Ecore_X_Window win)
998{
999 uint32_t list;
1000
1001 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1002 CHECK_XCB_CONN;
1003
1004 list = (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
1005 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY);
1006
1007 xcb_change_window_attributes(_ecore_xcb_conn, win,
1008 XCB_CW_EVENT_MASK, &list);
1009// ecore_x_flush();
1010}
1011
1012EAPI void
1013ecore_x_window_client_manage(Ecore_X_Window win)
1014{
1015 uint32_t list;
1016
1017 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1018 CHECK_XCB_CONN;
1019
1020 list = (XCB_EVENT_MASK_VISIBILITY_CHANGE |
1021 XCB_EVENT_MASK_FOCUS_CHANGE |
1022 XCB_EVENT_MASK_PROPERTY_CHANGE |
1023 XCB_EVENT_MASK_COLOR_MAP_CHANGE |
1024 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
1025 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY);
1026
1027 xcb_change_window_attributes(_ecore_xcb_conn, win,
1028 XCB_CW_EVENT_MASK, &list);
1029
1030#ifdef ECORE_XCB_SHAPE
1031 xcb_shape_select_input(_ecore_xcb_conn, win, EINA_TRUE);
1032#endif
1033// ecore_x_flush();
1034}
1035
1036EAPI void
1037ecore_x_window_sniff(Ecore_X_Window win)
1038{
1039 uint32_t list;
1040
1041 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1042 CHECK_XCB_CONN;
1043
1044 list = (XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
1045 XCB_EVENT_MASK_PROPERTY_CHANGE);
1046
1047 xcb_change_window_attributes(_ecore_xcb_conn, win,
1048 XCB_CW_EVENT_MASK, &list);
1049// ecore_x_flush();
1050}
1051
1052EAPI void
1053ecore_x_window_client_sniff(Ecore_X_Window win)
1054{
1055 uint32_t list;
1056
1057 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1058 CHECK_XCB_CONN;
1059
1060 list = (XCB_EVENT_MASK_VISIBILITY_CHANGE |
1061 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
1062 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
1063 XCB_EVENT_MASK_FOCUS_CHANGE |
1064 XCB_EVENT_MASK_PROPERTY_CHANGE |
1065 XCB_EVENT_MASK_COLOR_MAP_CHANGE);
1066
1067 xcb_change_window_attributes(_ecore_xcb_conn, win,
1068 XCB_CW_EVENT_MASK, &list);
1069#ifdef ECORE_XCB_SHAPE
1070 xcb_shape_select_input(_ecore_xcb_conn, win, EINA_TRUE);
1071#endif
1072// ecore_x_flush();
1073}
1074
1075EAPI void
1076ecore_x_window_area_clear(Ecore_X_Window win,
1077 int x,
1078 int y,
1079 int w,
1080 int h)
1081{
1082 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1083 CHECK_XCB_CONN;
1084
1085 xcb_clear_area(_ecore_xcb_conn, 0, win, x, y, w, h);
1086// ecore_x_flush();
1087}
1088
1089EAPI void
1090ecore_x_window_area_expose(Ecore_X_Window win,
1091 int x,
1092 int y,
1093 int w,
1094 int h)
1095{
1096 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1097 CHECK_XCB_CONN;
1098
1099 xcb_clear_area(_ecore_xcb_conn, 1, win, x, y, w, h);
1100// ecore_x_flush();
1101}
1102
1103EAPI void
1104ecore_x_window_save_set_add(Ecore_X_Window win)
1105{
1106 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1107 CHECK_XCB_CONN;
1108
1109 xcb_change_save_set(_ecore_xcb_conn, XCB_SET_MODE_INSERT, win);
1110}
1111
1112EAPI void
1113ecore_x_window_save_set_del(Ecore_X_Window win)
1114{
1115 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1116 CHECK_XCB_CONN;
1117
1118 xcb_change_save_set(_ecore_xcb_conn, XCB_SET_MODE_DELETE, win);
1119}
1120
1121/**
1122 * gets the window that has focus.
1123 * @return The window that has focus.
1124 * @ingroup Ecore_X_Window_Focus_Functions
1125 */
1126EAPI Ecore_X_Window
1127ecore_x_window_focus_get(void)
1128{
1129 xcb_get_input_focus_cookie_t cookie;
1130 xcb_get_input_focus_reply_t *reply;
1131 Ecore_X_Window focus = 0;
1132
1133 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1134 CHECK_XCB_CONN;
1135
1136 cookie = xcb_get_input_focus_unchecked(_ecore_xcb_conn);
1137 reply = xcb_get_input_focus_reply(_ecore_xcb_conn, cookie, NULL);
1138 if (!reply) return 0;
1139 focus = reply->focus;
1140 free(reply);
1141 return focus;
1142}
1143
1144EAPI int
1145ecore_x_window_argb_get(Ecore_X_Window win)
1146{
1147 uint8_t ret = 0;
1148#ifdef ECORE_XCB_RENDER
1149 Ecore_X_Visual visual;
1150#endif
1151
1152 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1153 CHECK_XCB_CONN;
1154
1155// if (!win) return ret;
1156
1157#ifdef ECORE_XCB_RENDER
1158 /* grab the window's visual */
1159 visual = _ecore_xcb_window_visual_get(win);
1160
1161 /* check if this visual supports alpha */
1162 ret = _ecore_xcb_render_visual_supports_alpha(visual);
1163#endif
1164
1165 return ret;
1166}
1167
1168EAPI Eina_Bool
1169ecore_x_window_manage(Ecore_X_Window win)
1170{
1171 xcb_get_window_attributes_cookie_t cookie;
1172 xcb_get_window_attributes_reply_t *reply;
1173 xcb_void_cookie_t change_cookie;
1174 xcb_generic_error_t *err;
1175 uint32_t list;
1176
1177 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1178 CHECK_XCB_CONN;
1179
1180 cookie = xcb_get_window_attributes(_ecore_xcb_conn, win);
1181 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
1182 if (!reply) return EINA_FALSE;
1183
1184 ecore_x_sync(); // needed
1185
1186 list = (XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
1187 XCB_EVENT_MASK_PROPERTY_CHANGE | XCB_EVENT_MASK_RESIZE_REDIRECT |
1188 XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
1189 XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
1190 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
1191 XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
1192 reply->your_event_mask);
1193 free(reply);
1194
1195 change_cookie = xcb_change_window_attributes(_ecore_xcb_conn, win,
1196 XCB_CW_EVENT_MASK, &list);
1197
1198 ecore_x_sync(); // needed
1199
1200 err = xcb_request_check(_ecore_xcb_conn, change_cookie);
1201 if (err)
1202 {
1203 _ecore_xcb_error_handle(err);
1204 free(err);
1205 return EINA_FALSE;
1206 }
1207
1208 return EINA_TRUE;
1209}
1210
1211EAPI Eina_Bool
1212ecore_x_window_attributes_get(Ecore_X_Window win,
1213 Ecore_X_Window_Attributes *att_ret)
1214{
1215 xcb_get_window_attributes_cookie_t cookie;
1216 xcb_get_window_attributes_reply_t *reply;
1217 xcb_get_geometry_cookie_t gcookie;
1218 xcb_get_geometry_reply_t *greply;
1219
1220 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1221 CHECK_XCB_CONN;
1222
1223 cookie = xcb_get_window_attributes_unchecked(_ecore_xcb_conn, win);
1224 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
1225 if (!reply) return EINA_FALSE;
1226
1227 memset(att_ret, 0, sizeof(Ecore_X_Window_Attributes));
1228
1229 if (reply->map_state != XCB_MAP_STATE_UNMAPPED)
1230 att_ret->visible = EINA_TRUE;
1231
1232 if (reply->map_state == XCB_MAP_STATE_VIEWABLE)
1233 att_ret->viewable = EINA_TRUE;
1234
1235 if (reply->override_redirect)
1236 att_ret->override = EINA_TRUE;
1237
1238 if (reply->_class == XCB_WINDOW_CLASS_INPUT_ONLY)
1239 att_ret->input_only = EINA_TRUE;
1240
1241 if (reply->save_under)
1242 att_ret->save_under = EINA_TRUE;
1243
1244 att_ret->event_mask.mine = reply->your_event_mask;
1245 att_ret->event_mask.all = reply->all_event_masks;
1246 att_ret->event_mask.no_propagate = reply->do_not_propagate_mask;
1247 att_ret->window_gravity = reply->win_gravity;
1248 att_ret->pixel_gravity = reply->bit_gravity;
1249 att_ret->colormap = reply->colormap;
1250 att_ret->visual = _ecore_xcb_window_find_visual_by_id(reply->visual);
1251
1252 free(reply);
1253
1254 gcookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win);
1255 greply = xcb_get_geometry_reply(_ecore_xcb_conn, gcookie, NULL);
1256 if (!greply) return EINA_TRUE;
1257
1258 /* xcb_translate_coordinates_reply_t *trans; */
1259 /* xcb_query_tree_cookie_t tcookie; */
1260 /* xcb_query_tree_reply_t *treply; */
1261
1262 /* tcookie = xcb_query_tree(_ecore_xcb_conn, win); */
1263 /* treply = xcb_query_tree_reply(_ecore_xcb_conn, tcookie, NULL); */
1264
1265 /* trans = */
1266 /* xcb_translate_coordinates_reply(_ecore_xcb_conn, */
1267 /* xcb_translate_coordinates(_ecore_xcb_conn, */
1268 /* win, treply->parent, greply->x, greply->y), NULL); */
1269 /* free(treply); */
1270
1271 att_ret->root = greply->root;
1272 att_ret->depth = greply->depth;
1273// att_ret->x = trans->dst_x;
1274// att_ret->y = trans->dst_y;
1275 att_ret->x = greply->x;
1276 att_ret->y = greply->y;
1277 att_ret->w = greply->width;
1278 att_ret->h = greply->height;
1279 att_ret->border = greply->border_width;
1280
1281// free(trans);
1282
1283 free(greply);
1284 return EINA_TRUE;
1285}
1286
1287/**
1288 * Retrieves the size of the given window.
1289 * @param win The given window.
1290 * @param w Pointer to an integer into which the width is to be stored.
1291 * @param h Pointer to an integer into which the height is to be stored.
1292 * @ingroup Ecore_X_Window_Geometry_Group
1293 */
1294EAPI void
1295ecore_x_window_size_get(Ecore_X_Window win,
1296 int *width,
1297 int *height)
1298{
1299 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1300 CHECK_XCB_CONN;
1301
1302 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1303 ecore_x_drawable_geometry_get(win, NULL, NULL, width, height);
1304}
1305
1306/**
1307 * Set if a window should be ignored.
1308 * @param win The given window.
1309 * @param ignore if to ignore
1310 */
1311EAPI void
1312ecore_x_window_ignore_set(Ecore_X_Window win,
1313 int ignore)
1314{
1315 int i = 0, j = 0, count = 0;
1316
1317 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1318 CHECK_XCB_CONN;
1319
1320 if (ignore)
1321 {
1322 if (ignore_list)
1323 {
1324 for (i = 0; i < ignore_num; i++)
1325 if (win == ignore_list[i]) return;
1326
1327 ignore_list =
1328 realloc(ignore_list, (ignore_num + 1) * sizeof(Ecore_X_Window));
1329 if (!ignore_list) return;
1330
1331 ignore_list[ignore_num++] = win;
1332 }
1333 else
1334 {
1335 ignore_num = 0;
1336 ignore_list = malloc(sizeof(Ecore_X_Window));
1337 if (!ignore_list) return;
1338 ignore_list[ignore_num++] = win;
1339 }
1340 }
1341 else
1342 {
1343 if (!ignore_list) return;
1344 for (count = ignore_num, i = 0, j = 0; i < count; i++)
1345 {
1346 if (win != ignore_list[i])
1347 ignore_list[j++] = ignore_list[i];
1348 else
1349 ignore_num--;
1350 }
1351 if (ignore_num <= 0)
1352 {
1353 free(ignore_list);
1354 ignore_list = NULL;
1355 return;
1356 }
1357
1358 ignore_list =
1359 realloc(ignore_list, ignore_num * sizeof(Ecore_X_Window));
1360 }
1361}
1362
1363/**
1364 * Get the ignore list
1365 * @param num number of windows in the list
1366 * @return list of windows to ignore
1367 */
1368EAPI Ecore_X_Window *
1369ecore_x_window_ignore_list(int *num)
1370{
1371 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1372
1373 if (num) *num = ignore_num;
1374 return ignore_list;
1375}
1376
1377/**
1378 * Get a list of all the root windows on the server.
1379 *
1380 * @note The returned array will need to be freed after use.
1381 * @param num_ret Pointer to integer to put number of windows returned in.
1382 * @return An array of all the root windows. @c NULL is returned if memory
1383 * could not be allocated for the list, or if @p num_ret is @c NULL.
1384 */
1385EAPI Ecore_X_Window *
1386ecore_x_window_root_list(int *num_ret)
1387{
1388 xcb_screen_iterator_t iter;
1389 uint8_t i, num;
1390 Ecore_X_Window *roots = NULL;
1391#ifdef ECORE_XCB_XPRINT
1392 const xcb_query_extension_reply_t *ext_reply;
1393#endif
1394
1395 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1396 CHECK_XCB_CONN;
1397
1398 if (!num_ret) return NULL;
1399 if (num_ret) *num_ret = 0;
1400
1401 /* if (xcb_connection_has_error(_ecore_xcb_conn)) */
1402 /* { */
1403 /* DBG("XCB Connection Has Error !!!"); */
1404 /* return NULL; */
1405 /* } */
1406
1407 num = ecore_x_screen_count_get();
1408
1409#ifdef ECORE_XCB_XPRINT
1410 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_x_print_id);
1411 if ((ext_reply) && (ext_reply->present))
1412 {
1413 xcb_x_print_print_query_screens_cookie_t cookie;
1414 xcb_x_print_print_query_screens_reply_t *reply;
1415
1416 cookie = xcb_x_print_print_query_screens_unchecked(_ecore_xcb_conn);
1417 reply =
1418 xcb_x_print_print_query_screens_reply(_ecore_xcb_conn, cookie, NULL);
1419 if (reply)
1420 {
1421 xcb_window_t *screens;
1422 int psnum = 0, overlap = 0, j = 0, k = 0;
1423
1424 psnum = xcb_x_print_print_query_screens_roots_length(reply);
1425 screens = xcb_x_print_print_query_screens_roots(reply);
1426 for (i = 0; i < num; i++)
1427 {
1428 for (j = 0; j < psnum; j++)
1429 {
1430 xcb_screen_t *s;
1431
1432 if ((s = _ecore_xcb_window_screen_of_display(i)))
1433 {
1434 if (s->root == screens[j])
1435 overlap++;
1436 }
1437 }
1438 }
1439 if (!(roots = malloc((num - overlap)
1440 * sizeof(Ecore_X_Window)))) return NULL;
1441 for (i = 0; i < num; i++)
1442 {
1443 Eina_Bool is_print = EINA_FALSE;
1444
1445 for (j = 0; j < psnum; j++)
1446 {
1447 xcb_screen_t *s;
1448
1449 if ((s = _ecore_xcb_window_screen_of_display(i)))
1450 {
1451 if (s->root == screens[j])
1452 {
1453 is_print = EINA_TRUE;
1454 break;
1455 }
1456 }
1457 }
1458 if (!is_print)
1459 {
1460 xcb_screen_t *s;
1461
1462 if ((s = _ecore_xcb_window_screen_of_display(i)))
1463 {
1464 roots[k] = s->root;
1465 k++;
1466 }
1467 }
1468 }
1469 if (num_ret) *num_ret = k;
1470 free(reply);
1471 }
1472 else
1473 {
1474 /* Fallback to default method */
1475 iter =
1476 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1477 if (!(roots = malloc(num * sizeof(Ecore_X_Window)))) return NULL;
1478 if (num_ret) *num_ret = num;
1479 for (i = 0; iter.rem; xcb_screen_next(&iter), i++)
1480 roots[i] = iter.data->root;
1481 }
1482 }
1483 else
1484 {
1485 /* Fallback to default method */
1486 iter =
1487 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1488 if (!(roots = malloc(num * sizeof(Ecore_X_Window)))) return NULL;
1489 if (num_ret) *num_ret = num;
1490 for (i = 0; iter.rem; xcb_screen_next(&iter), i++)
1491 roots[i] = iter.data->root;
1492 }
1493#else
1494 iter =
1495 xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1496 if (!(roots = malloc(num * sizeof(Ecore_X_Window)))) return NULL;
1497 if (num_ret) *num_ret = num;
1498 for (i = 0; iter.rem; xcb_screen_next(&iter), i++)
1499 roots[i] = iter.data->root;
1500#endif
1501
1502 return roots;
1503}
1504
1505EAPI Ecore_X_Window *
1506ecore_x_window_children_get(Ecore_X_Window win,
1507 int *num)
1508{
1509 xcb_query_tree_cookie_t cookie;
1510 xcb_query_tree_reply_t *reply;
1511 Ecore_X_Window *windows = NULL;
1512
1513 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1514 CHECK_XCB_CONN;
1515
1516 if (num) *num = 0;
1517 cookie = xcb_query_tree_unchecked(_ecore_xcb_conn, win);
1518 reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL);
1519 if (!reply) return NULL;
1520
1521 if (num) *num = reply->children_len;
1522 if (reply->children_len > 0)
1523 {
1524 windows = malloc(sizeof(Ecore_X_Window) * reply->children_len);
1525 if (windows)
1526 {
1527 unsigned int i = 0;
1528 xcb_window_t *w;
1529
1530 w = xcb_query_tree_children(reply);
1531 for (i = 0; i < reply->children_len; i++)
1532 windows[i] = w[i];
1533 }
1534 }
1535
1536 free(reply);
1537 return windows;
1538}
1539
1540/**
1541 * Retrieves the root window a given window is on.
1542 * @param win The window to get the root window of
1543 * @return The root window of @p win
1544 * @ingroup Ecore_X_Window_Geometry_Group
1545 */
1546EAPI Ecore_X_Window
1547ecore_x_window_root_get(Ecore_X_Window win)
1548{
1549 xcb_get_geometry_cookie_t gcookie;
1550 xcb_get_geometry_reply_t *greply;
1551 Ecore_X_Window window = 0;
1552
1553 /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
1554 CHECK_XCB_CONN;
1555
1556 gcookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win);
1557 greply = xcb_get_geometry_reply(_ecore_xcb_conn, gcookie, NULL);
1558 if (!greply) return 0;
1559 window = greply->root;
1560 free(greply);
1561
1562 return window;
1563}
1564
1565EAPI Ecore_X_Window
1566ecore_x_window_root_first_get(void)
1567{
1568 return ((xcb_screen_t *)_ecore_xcb_screen)->root;
1569}
1570
1571/**
1572 * Retrieves the geometry of the given window.
1573 *
1574 * Note that the x & y coordingates are relative to your parent. In
1575 * particular for reparenting window managers - relative to you window border.
1576 * If you want screen coordinates either walk the window tree to the root,
1577 * else for ecore_evas applications see ecore_evas_geometry_get(). Elementary
1578 * applications can use elm_win_screen_position_get().
1579 *
1580 * @param win The given window.
1581 * @param x Pointer to an integer in which the X position is to be stored.
1582 * @param y Pointer to an integer in which the Y position is to be stored.
1583 * @param w Pointer to an integer in which the width is to be stored.
1584 * @param h Pointer to an integer in which the height is to be stored.
1585 * @ingroup Ecore_X_Window_Geometry_Group
1586 */
1587EAPI void
1588ecore_x_window_geometry_get(Ecore_X_Window win,
1589 int *x,
1590 int *y,
1591 int *w,
1592 int *h)
1593{
1594 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1595 CHECK_XCB_CONN;
1596
1597 if (!win) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1598 ecore_x_drawable_geometry_get(win, x, y, w, h);
1599}
1600
1601/**
1602 * Retrieves the top, visible window at the given location.
1603 * @param x The given X position.
1604 * @param y The given Y position.
1605 * @return The window at that position.
1606 * @ingroup Ecore_X_Window_Geometry_Group
1607 */
1608EAPI Ecore_X_Window
1609ecore_x_window_at_xy_get(int x,
1610 int y)
1611{
1612 Ecore_X_Window root, win = 0;
1613
1614 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1615 CHECK_XCB_CONN;
1616
1617 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1618
1619 ecore_x_grab();
1620 win = _ecore_xcb_window_at_xy_get(root, 0, 0, x, y, NULL, 0);
1621 ecore_x_ungrab();
1622
1623 return win ? win : root;
1624}
1625
1626/**
1627 * Retrieves the top, visible window at the given location,
1628 * but skips the windows in the list.
1629 * @param x The given X position.
1630 * @param y The given Y position.
1631 * @return The window at that position.
1632 * @ingroup Ecore_X_Window_Geometry_Group
1633 */
1634EAPI Ecore_X_Window
1635ecore_x_window_at_xy_with_skip_get(int x,
1636 int y,
1637 Ecore_X_Window *skip,
1638 int skip_num)
1639{
1640 Ecore_X_Window root, win = 0;
1641
1642 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1643 CHECK_XCB_CONN;
1644
1645 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1646
1647 ecore_x_grab();
1648 win = _ecore_xcb_window_at_xy_get(root, 0, 0, x, y, skip, skip_num);
1649 ecore_x_ungrab();
1650
1651 return win ? win : root;
1652}
1653
1654EAPI Ecore_X_Window
1655ecore_x_window_at_xy_begin_get(Ecore_X_Window begin,
1656 int x,
1657 int y)
1658{
1659 Ecore_X_Window win = 0;
1660
1661 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1662 CHECK_XCB_CONN;
1663
1664 ecore_x_grab();
1665 win = _ecore_xcb_window_at_xy_get(begin, 0, 0, x, y, NULL, 0);
1666 ecore_x_ungrab();
1667
1668 return win ? win : begin;
1669}
1670
1671/**
1672 * Retrieves the parent window of the given window.
1673 * @param win The given window.
1674 * @return The parent window of @p win.
1675 * @ingroup Ecore_X_Window_Parent_Group
1676 */
1677EAPI Ecore_X_Window
1678ecore_x_window_parent_get(Ecore_X_Window win)
1679{
1680 xcb_query_tree_cookie_t cookie;
1681 xcb_query_tree_reply_t *reply;
1682 Ecore_X_Window window = 0;
1683
1684 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1685 CHECK_XCB_CONN;
1686
1687// if (!win) return 0;
1688 cookie = xcb_query_tree(_ecore_xcb_conn, win);
1689 reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL);
1690 if (!reply) return 0;
1691 window = reply->parent;
1692 free(reply);
1693
1694 return window;
1695}
1696
1697/**
1698 * Finds out whether the given window is currently visible.
1699 * @param win The given window.
1700 * @return 1 if the window is visible, otherwise 0.
1701 * @ingroup Ecore_X_Window_Visibility_Group
1702 */
1703EAPI int
1704ecore_x_window_visible_get(Ecore_X_Window win)
1705{
1706 xcb_get_window_attributes_cookie_t cookie;
1707 xcb_get_window_attributes_reply_t *reply;
1708 int ret = EINA_FALSE;
1709
1710 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1711 CHECK_XCB_CONN;
1712
1713 cookie = xcb_get_window_attributes_unchecked(_ecore_xcb_conn, win);
1714 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
1715 if (!reply) return EINA_FALSE;
1716
1717 if (reply->map_state == XCB_MAP_STATE_VIEWABLE)
1718 ret = EINA_TRUE;
1719
1720 free(reply);
1721 return ret;
1722}
1723
1724EAPI void
1725ecore_x_window_button_grab(Ecore_X_Window win,
1726 int button,
1727 Ecore_X_Event_Mask mask,
1728 int mod,
1729 int any_mod)
1730{
1731 int i = 0;
1732 uint16_t m, locks[8], ev;
1733 uint8_t b;
1734 Ecore_X_Window *t;
1735
1736 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1737 CHECK_XCB_CONN;
1738
1739 b = button;
1740 if (b == 0)
1741 b = XCB_BUTTON_INDEX_ANY;
1742
1743 m = _ecore_xcb_window_modifiers_get(mod);
1744 if (any_mod) m = XCB_MOD_MASK_ANY;
1745
1746 locks[0] = 0;
1747 locks[1] = ECORE_X_LOCK_CAPS;
1748 locks[2] = ECORE_X_LOCK_NUM;
1749 locks[3] = ECORE_X_LOCK_SCROLL;
1750 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1751 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1752 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1753 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1754
1755 ev = mask;
1756 for (i = 0; i < 8; i++)
1757 xcb_grab_button(_ecore_xcb_conn, 0, win, ev,
1758 XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC,
1759 XCB_NONE, XCB_NONE, b, m | locks[i]);
1760
1761 _ecore_xcb_button_grabs_num++;
1762 t = realloc(_ecore_xcb_button_grabs,
1763 _ecore_xcb_button_grabs_num * sizeof(Ecore_X_Window));
1764 if (!t) return;
1765
1766 _ecore_xcb_button_grabs = t;
1767 _ecore_xcb_button_grabs[_ecore_xcb_button_grabs_num - 1] = win;
1768}
1769
1770EAPI void
1771ecore_x_window_button_ungrab(Ecore_X_Window win,
1772 int button,
1773 int mod,
1774 int any_mod)
1775{
1776 int i = 0;
1777 uint16_t m = 0, locks[8];
1778 uint8_t b;
1779
1780 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1781 CHECK_XCB_CONN;
1782
1783 b = button;
1784 if (b == 0) b = XCB_BUTTON_INDEX_ANY;
1785
1786 m = _ecore_xcb_window_modifiers_get(mod);
1787 if (any_mod) m = XCB_MOD_MASK_ANY;
1788
1789 locks[0] = 0;
1790 locks[1] = ECORE_X_LOCK_CAPS;
1791 locks[2] = ECORE_X_LOCK_NUM;
1792 locks[3] = ECORE_X_LOCK_SCROLL;
1793 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1794 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1795 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1796 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1797
1798 for (i = 0; i < 8; i++)
1799 xcb_ungrab_button(_ecore_xcb_conn, b, win, m | locks[i]);
1800
1801 _ecore_xcb_sync_magic_send(1, win);
1802}
1803
1804EAPI void
1805ecore_x_window_key_grab(Ecore_X_Window win,
1806 const char *key,
1807 int mod,
1808 int any_mod)
1809{
1810 xcb_keycode_t keycode = XCB_NO_SYMBOL;
1811 uint16_t m = 0, locks[8];
1812 int i = 0;
1813 Ecore_X_Window *t;
1814
1815 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1816 CHECK_XCB_CONN;
1817
1818 keycode = _ecore_xcb_keymap_string_to_keycode(key);
1819 if (keycode == XCB_NO_SYMBOL) return;
1820
1821 m = _ecore_xcb_window_modifiers_get(mod);
1822 if (any_mod) m = XCB_MOD_MASK_ANY;
1823
1824 locks[0] = 0;
1825 locks[1] = ECORE_X_LOCK_CAPS;
1826 locks[2] = ECORE_X_LOCK_NUM;
1827 locks[3] = ECORE_X_LOCK_SCROLL;
1828 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1829 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1830 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1831 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1832
1833 for (i = 0; i < 8; i++)
1834 xcb_grab_key(_ecore_xcb_conn, 0, win, m | locks[i],
1835 keycode, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC);
1836 _ecore_xcb_key_grabs_num++;
1837 t = realloc(_ecore_xcb_key_grabs,
1838 _ecore_xcb_key_grabs_num * sizeof(Ecore_X_Window));
1839 if (!t) return;
1840 _ecore_xcb_key_grabs = t;
1841 _ecore_xcb_key_grabs[_ecore_xcb_key_grabs_num - 1] = win;
1842}
1843
1844EAPI void
1845ecore_x_window_key_ungrab(Ecore_X_Window win,
1846 const char *key,
1847 int mod,
1848 int any_mod)
1849{
1850 xcb_keycode_t keycode = XCB_NO_SYMBOL;
1851 uint16_t m = 0, locks[8];
1852 int i = 0;
1853
1854 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1855 CHECK_XCB_CONN;
1856
1857 keycode = _ecore_xcb_keymap_string_to_keycode(key);
1858 if (keycode == XCB_NO_SYMBOL) return;
1859
1860 m = _ecore_xcb_window_modifiers_get(mod);
1861 if (any_mod) m = XCB_MOD_MASK_ANY;
1862
1863 locks[0] = 0;
1864 locks[1] = ECORE_X_LOCK_CAPS;
1865 locks[2] = ECORE_X_LOCK_NUM;
1866 locks[3] = ECORE_X_LOCK_SCROLL;
1867 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1868 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1869 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1870 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1871
1872 for (i = 0; i < 8; i++)
1873 xcb_ungrab_key(_ecore_xcb_conn, keycode, win, m | locks[i]);
1874
1875 _ecore_xcb_sync_magic_send(2, win);
1876}
1877
1878/* local functions */
1879Ecore_X_Window
1880_ecore_xcb_window_root_of_screen_get(int screen)
1881{
1882 xcb_screen_iterator_t iter;
1883
1884 CHECK_XCB_CONN;
1885 iter = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
1886 for (; iter.rem; --screen, xcb_screen_next(&iter))
1887 if (screen == 0)
1888 {
1889 xcb_screen_t *s;
1890
1891 if ((s = iter.data))
1892 return s->root;
1893 }
1894 return 0;
1895}
1896
1897static Ecore_X_Window
1898_ecore_xcb_window_argb_internal_new(Ecore_X_Window parent,
1899 int x,
1900 int y,
1901 int w,
1902 int h,
1903 uint8_t override_redirect,
1904 uint8_t save_under)
1905{
1906 Ecore_X_Window win = 0;
1907#ifdef ECORE_XCB_RENDER
1908 uint32_t value_list[10];
1909 uint32_t value_mask;
1910 uint32_t vis;
1911 Ecore_X_Colormap colormap;
1912#endif
1913
1914 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1915 CHECK_XCB_CONN;
1916
1917#ifdef ECORE_XCB_RENDER
1918 if (parent == 0)
1919 parent = ((xcb_screen_t *)_ecore_xcb_screen)->root;
1920
1921 vis =
1922 _ecore_xcb_render_find_visual_id(XCB_RENDER_PICT_TYPE_DIRECT, EINA_TRUE);
1923
1924 colormap = xcb_generate_id(_ecore_xcb_conn);
1925 xcb_create_colormap(_ecore_xcb_conn, XCB_COLORMAP_ALLOC_NONE,
1926 colormap, parent, vis);
1927
1928 value_mask = (XCB_CW_BACK_PIXMAP | XCB_CW_BORDER_PIXEL | XCB_CW_BIT_GRAVITY |
1929 XCB_CW_WIN_GRAVITY | XCB_CW_BACKING_STORE |
1930 XCB_CW_OVERRIDE_REDIRECT | XCB_CW_SAVE_UNDER |
1931 XCB_CW_EVENT_MASK | XCB_CW_DONT_PROPAGATE | XCB_CW_COLORMAP);
1932
1933 value_list[0] = XCB_BACK_PIXMAP_NONE;
1934 value_list[1] = 0;
1935 value_list[2] = XCB_GRAVITY_NORTH_WEST;
1936 value_list[3] = XCB_GRAVITY_NORTH_WEST;
1937 value_list[4] = XCB_BACKING_STORE_NOT_USEFUL;
1938 value_list[5] = override_redirect;
1939 value_list[6] = save_under;
1940 value_list[7] = (XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
1941 XCB_EVENT_MASK_BUTTON_PRESS |
1942 XCB_EVENT_MASK_BUTTON_RELEASE |
1943 XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
1944 XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
1945 XCB_EVENT_MASK_VISIBILITY_CHANGE |
1946 XCB_EVENT_MASK_STRUCTURE_NOTIFY |
1947 XCB_EVENT_MASK_FOCUS_CHANGE |
1948 XCB_EVENT_MASK_PROPERTY_CHANGE |
1949 XCB_EVENT_MASK_COLOR_MAP_CHANGE);
1950 value_list[8] = XCB_EVENT_MASK_NO_EVENT;
1951 value_list[9] = colormap;
1952
1953 win = xcb_generate_id(_ecore_xcb_conn);
1954 xcb_create_window(_ecore_xcb_conn, 32, win, parent, x, y, w, h, 0,
1955 XCB_WINDOW_CLASS_INPUT_OUTPUT, vis, value_mask,
1956 value_list);
1957
1958 xcb_free_colormap(_ecore_xcb_conn, colormap);
1959
1960 if (parent == ((xcb_screen_t *)_ecore_xcb_screen)->root)
1961 ecore_x_window_defaults_set(win);
1962#endif
1963
1964 return win;
1965}
1966
1967static Ecore_X_Window
1968_ecore_xcb_window_at_xy_get(Ecore_X_Window base,
1969 int bx,
1970 int by,
1971 int x,
1972 int y,
1973 Ecore_X_Window *skip,
1974 int skip_num)
1975{
1976 xcb_query_tree_cookie_t cookie;
1977 xcb_query_tree_reply_t *reply;
1978 Ecore_X_Window *windows = NULL;
1979 int wx, wy, ww, wh, num, i = 0;
1980 Eina_Bool skipit = EINA_FALSE;
1981
1982 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1983 CHECK_XCB_CONN;
1984
1985 if (!ecore_x_window_visible_get(base)) return 0;
1986
1987 ecore_x_window_geometry_get(base, &wx, &wy, &ww, &wh);
1988 wx += bx;
1989 wy += by;
1990
1991 if (!((x >= wx) && (y >= wy) && (x < (wx + ww)) && (y < (wy + wh))))
1992 return 0;
1993
1994 cookie = xcb_query_tree_unchecked(_ecore_xcb_conn, base);
1995 reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL);
1996 if (!reply) return 0;
1997
1998 num = reply->children_len;
1999 windows = xcb_query_tree_children(reply);
2000
2001 for (i = (num - 1); i >= 0; --i)
2002 {
2003 skipit = EINA_FALSE;
2004
2005 if (skip)
2006 {
2007 int j = 0;
2008
2009 for (j = 0; j < skip_num; j++)
2010 {
2011 if (windows[i] == skip[j])
2012 {
2013 skipit = EINA_TRUE;
2014 goto onward;
2015 }
2016 }
2017 }
2018onward:
2019 if (!skipit)
2020 {
2021 Ecore_X_Window child = 0;
2022
2023 child =
2024 _ecore_xcb_window_at_xy_get(windows[i],
2025 wx, wy, x, y, skip, skip_num);
2026 if (child)
2027 {
2028 if (reply) free(reply);
2029 return child;
2030 }
2031 }
2032 }
2033
2034 if (reply) free(reply);
2035 return base;
2036}
2037
2038Ecore_X_Visual
2039_ecore_xcb_window_visual_get(Ecore_X_Window win)
2040{
2041 xcb_get_window_attributes_cookie_t cookie;
2042 xcb_get_window_attributes_reply_t *reply;
2043 Ecore_X_Visual visual = 0;
2044
2045 CHECK_XCB_CONN;
2046
2047 cookie = xcb_get_window_attributes(_ecore_xcb_conn, win);
2048 reply = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie, NULL);
2049 if (!reply) return 0;
2050 visual = _ecore_xcb_window_find_visual_by_id(reply->visual);
2051 free(reply);
2052
2053 return visual;
2054}
2055
2056void
2057_ecore_xcb_window_button_grab_remove(Ecore_X_Window win)
2058{
2059 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2060 CHECK_XCB_CONN;
2061
2062 if (_ecore_xcb_button_grabs_num > 0)
2063 {
2064 int i = 0, shuffle = 0;
2065
2066 for (i = 0; i < _ecore_xcb_button_grabs_num; i++)
2067 {
2068 if (shuffle)
2069 _ecore_xcb_button_grabs[i - 1] = _ecore_xcb_button_grabs[i];
2070
2071 if ((!shuffle) && (_ecore_xcb_button_grabs[i] == win))
2072 shuffle = 1;
2073 }
2074
2075 if (shuffle)
2076 {
2077 Ecore_X_Window *t;
2078
2079 _ecore_xcb_button_grabs_num--;
2080 if (_ecore_xcb_button_grabs_num <= 0)
2081 {
2082 free(_ecore_xcb_button_grabs);
2083 _ecore_xcb_button_grabs = NULL;
2084 return;
2085 }
2086
2087 t = realloc(_ecore_xcb_button_grabs,
2088 _ecore_xcb_button_grabs_num * sizeof(Ecore_X_Window));
2089 if (!t) return;
2090 _ecore_xcb_button_grabs = t;
2091 }
2092 }
2093}
2094
2095void
2096_ecore_xcb_window_key_grab_remove(Ecore_X_Window win)
2097{
2098 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2099 CHECK_XCB_CONN;
2100
2101 if (_ecore_xcb_key_grabs_num > 0)
2102 {
2103 int i = 0, shuffle = 0;
2104
2105 for (i = 0; i < _ecore_xcb_key_grabs_num; i++)
2106 {
2107 if (shuffle)
2108 _ecore_xcb_key_grabs[i - 1] = _ecore_xcb_key_grabs[i];
2109
2110 if ((!shuffle) && (_ecore_xcb_key_grabs[i] == win))
2111 shuffle = 1;
2112 }
2113
2114 if (shuffle)
2115 {
2116 Ecore_X_Window *t;
2117
2118 _ecore_xcb_key_grabs_num--;
2119 if (_ecore_xcb_key_grabs_num <= 0)
2120 {
2121 free(_ecore_xcb_key_grabs);
2122 _ecore_xcb_key_grabs = NULL;
2123 return;
2124 }
2125
2126 t = realloc(_ecore_xcb_key_grabs,
2127 _ecore_xcb_key_grabs_num * sizeof(Ecore_X_Window));
2128 if (!t) return;
2129 _ecore_xcb_key_grabs = t;
2130 }
2131 }
2132}
2133
2134void
2135_ecore_xcb_window_grab_allow_events(Ecore_X_Window event_win,
2136 Ecore_X_Window child_win,
2137 int type,
2138 void *event,
2139 Ecore_X_Time timestamp)
2140{
2141 int i = 0;
2142
2143 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2144 CHECK_XCB_CONN;
2145
2146 for (i = 0; i < _ecore_xcb_button_grabs_num; i++)
2147 {
2148 if ((_ecore_xcb_button_grabs[i] == event_win) ||
2149 (_ecore_xcb_button_grabs[i] == child_win))
2150 {
2151 Eina_Bool replay = EINA_FALSE;
2152
2153 if (_ecore_xcb_window_grab_replay_func)
2154 {
2155 replay =
2156 _ecore_xcb_window_grab_replay_func(_ecore_xcb_window_grab_replay_data,
2157 type, event);
2158 }
2159 if (replay)
2160 {
2161 xcb_allow_events(_ecore_xcb_conn,
2162 XCB_ALLOW_REPLAY_POINTER, timestamp);
2163 }
2164 else
2165 {
2166 xcb_allow_events(_ecore_xcb_conn,
2167 XCB_ALLOW_ASYNC_POINTER, timestamp);
2168 }
2169 break;
2170 }
2171 }
2172}
2173
2174static int
2175_ecore_xcb_window_modifiers_get(unsigned int state)
2176{
2177 int xmodifiers = 0;
2178
2179 if (state & ECORE_EVENT_MODIFIER_SHIFT)
2180 xmodifiers |= ECORE_X_MODIFIER_SHIFT;
2181 if (state & ECORE_EVENT_MODIFIER_CTRL)
2182 xmodifiers |= ECORE_X_MODIFIER_CTRL;
2183 if (state & ECORE_EVENT_MODIFIER_ALT)
2184 xmodifiers |= ECORE_X_MODIFIER_ALT;
2185 if (state & ECORE_EVENT_MODIFIER_WIN)
2186 xmodifiers |= ECORE_X_MODIFIER_WIN;
2187 if (state & ECORE_EVENT_LOCK_SCROLL)
2188 xmodifiers |= ECORE_X_LOCK_SCROLL;
2189 if (state & ECORE_EVENT_LOCK_NUM)
2190 xmodifiers |= ECORE_X_LOCK_NUM;
2191 if (state & ECORE_EVENT_LOCK_CAPS)
2192 xmodifiers |= ECORE_X_LOCK_CAPS;
2193 if (state & ECORE_EVENT_LOCK_SHIFT)
2194 xmodifiers |= ECORE_X_LOCK_SHIFT;
2195
2196 return xmodifiers;
2197}
2198
2199static xcb_visualtype_t *
2200_ecore_xcb_window_find_visual_by_id(xcb_visualid_t id)
2201{
2202 xcb_depth_iterator_t diter;
2203 xcb_visualtype_iterator_t viter;
2204
2205 CHECK_XCB_CONN;
2206 diter = xcb_screen_allowed_depths_iterator(_ecore_xcb_screen);
2207 for (; diter.rem; xcb_depth_next(&diter))
2208 {
2209 viter = xcb_depth_visuals_iterator(diter.data);
2210 for (; viter.rem; xcb_visualtype_next(&viter))
2211 {
2212 if (viter.data->visual_id == id)
2213 return viter.data;
2214 }
2215 }
2216 return 0;
2217}
2218
2219#ifdef ECORE_XCB_XPRINT
2220static xcb_screen_t *
2221_ecore_xcb_window_screen_of_display(int screen)
2222{
2223 xcb_screen_iterator_t iter;
2224
2225 CHECK_XCB_CONN;
2226 iter = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn));
2227 for (; iter.rem; --screen, xcb_screen_next(&iter))
2228 if (screen == 0)
2229 return iter.data;
2230
2231 return NULL;
2232}
2233
2234#endif
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_prop.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_prop.c
deleted file mode 100644
index e00fdc1..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_prop.c
+++ /dev/null
@@ -1,720 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <xcb/xcb_icccm.h>
3
4EAPI int
5ecore_x_window_prop_card32_get(Ecore_X_Window win,
6 Ecore_X_Atom atom,
7 unsigned int *val,
8 unsigned int len)
9{
10 xcb_get_property_cookie_t cookie;
11 xcb_get_property_reply_t *reply;
12 int num = 0;
13
14 LOGFN(__FILE__, __LINE__, __FUNCTION__);
15 CHECK_XCB_CONN;
16
17 cookie = xcb_get_property_unchecked(_ecore_xcb_conn, 0, win, atom,
18 ECORE_X_ATOM_CARDINAL, 0, 0x7fffffff);
19 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
20 if (!reply) return -1;
21
22 if ((reply->type != ECORE_X_ATOM_CARDINAL) || (reply->format != 32))
23 num = -1;
24 else if (reply->value_len == 0)
25 num = 0;
26 else
27 {
28 if (reply->value_len < len)
29 len = reply->value_len;
30
31 if (val)
32 {
33 unsigned int i = 0;
34 unsigned char *v;
35
36 v = xcb_get_property_value(reply);
37 for (i = 0; i < len; i++)
38 val[i] = ((uint32_t *)v)[i];
39 num = len;
40 }
41 }
42
43 if (reply) free(reply);
44 return num;
45}
46
47EAPI void
48ecore_x_window_prop_card32_set(Ecore_X_Window win,
49 Ecore_X_Atom atom,
50 unsigned int *val,
51 unsigned int num)
52{
53 LOGFN(__FILE__, __LINE__, __FUNCTION__);
54 CHECK_XCB_CONN;
55
56#if SIZEOF_INT == SIZEOF_LONG
57 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom,
58 ECORE_X_ATOM_CARDINAL, 32, num, (unsigned char *)val);
59// ecore_x_flush();
60#else
61 long *v2;
62 unsigned int i;
63
64 v2 = malloc(num * sizeof(long));
65 if (!v2) return;
66 for (i = 0; i < num; i++)
67 v2[i] = val[i];
68
69 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom,
70 ECORE_X_ATOM_CARDINAL, 32, num, (unsigned char *)v2);
71 free(v2);
72// ecore_x_flush();
73#endif
74}
75
76EAPI int
77ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
78 Ecore_X_Atom atom,
79 unsigned int **list)
80{
81 xcb_get_property_cookie_t cookie;
82 xcb_get_property_reply_t *reply;
83 int num = -1;
84
85 LOGFN(__FILE__, __LINE__, __FUNCTION__);
86 CHECK_XCB_CONN;
87
88 if (list) *list = NULL;
89
90 cookie = xcb_get_property_unchecked(_ecore_xcb_conn, 0, win, atom,
91 XCB_ATOM_CARDINAL, 0, 0x7fffffff);
92 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
93 if (!reply) return -1;
94
95 if ((reply->type != XCB_ATOM_CARDINAL) || (reply->format != 32))
96 num = -1;
97 else if ((reply->value_len == 0) || (!xcb_get_property_value(reply)))
98 num = 0;
99 else
100 {
101 num = reply->value_len;
102 if (list)
103 {
104 unsigned int *val;
105 void *data;
106 int i = 0;
107
108 val = malloc(num * sizeof(unsigned int));
109 if (!val)
110 {
111 free(reply);
112 return -1;
113 }
114 data = xcb_get_property_value(reply);
115 for (i = 0; i < num; i++)
116 val[i] = ((uint32_t *)data)[i];
117 *list = val;
118 }
119 }
120
121 free(reply);
122 return num;
123}
124
125EAPI int
126ecore_x_window_prop_atom_get(Ecore_X_Window win,
127 Ecore_X_Atom atom,
128 Ecore_X_Atom *list,
129 unsigned int len)
130{
131 LOGFN(__FILE__, __LINE__, __FUNCTION__);
132
133 return ecore_x_window_prop_xid_get(win, atom, ECORE_X_ATOM_ATOM, list, len);
134}
135
136EAPI void
137ecore_x_window_prop_atom_set(Ecore_X_Window win,
138 Ecore_X_Atom atom,
139 Ecore_X_Atom *list,
140 unsigned int num)
141{
142 LOGFN(__FILE__, __LINE__, __FUNCTION__);
143
144 /* xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom, */
145 /* ECORE_X_ATOM_ATOM, 32, num, list); */
146 ecore_x_window_prop_xid_set(win, atom, ECORE_X_ATOM_ATOM, list, num);
147}
148
149EAPI void
150ecore_x_window_prop_xid_set(Ecore_X_Window win,
151 Ecore_X_Atom atom,
152 Ecore_X_Atom type,
153 Ecore_X_ID *xids,
154 unsigned int num)
155{
156 LOGFN(__FILE__, __LINE__, __FUNCTION__);
157 CHECK_XCB_CONN;
158
159#if SIZEOF_INT == SIZEOF_LONG
160 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom,
161 type, 32, num, (unsigned char *)xids);
162// ecore_x_flush();
163#else
164 long *v2;
165 unsigned int i;
166
167 v2 = malloc(num * sizeof(long));
168 if (!v2) return;
169 for (i = 0; i < num; i++)
170 v2[i] = xids[i];
171
172 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, atom,
173 type, 32, num, (unsigned char *)v2);
174 free(v2);
175// ecore_x_flush();
176#endif
177}
178
179EAPI int
180ecore_x_window_prop_xid_get(Ecore_X_Window win,
181 Ecore_X_Atom atom,
182 Ecore_X_Atom type,
183 Ecore_X_ID *xids,
184 unsigned int len)
185{
186 xcb_get_property_cookie_t cookie;
187 xcb_get_property_reply_t *reply;
188 int num = 0;
189
190 LOGFN(__FILE__, __LINE__, __FUNCTION__);
191 CHECK_XCB_CONN;
192
193 num = len;
194 cookie = xcb_get_property_unchecked(_ecore_xcb_conn, 0, win, atom, type,
195 0, 0x7fffffff);
196 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
197 if (!reply) return -1;
198
199 if ((reply->type != type) || (reply->format != 32))
200 num = -1;
201 else if (reply->value_len == 0)
202 num = 0;
203 else
204 {
205 unsigned int i = 0;
206 unsigned char *v;
207
208 if (reply->value_len < len)
209 len = reply->value_len;
210
211 v = xcb_get_property_value(reply);
212 for (i = 0; i < len; i++)
213 xids[i] = ((uint32_t *)v)[i];
214
215 num = len;
216 }
217
218 if (reply) free(reply);
219 return num;
220}
221
222EAPI void
223ecore_x_window_prop_string_set(Ecore_X_Window win,
224 Ecore_X_Atom type,
225 const char *str)
226{
227 LOGFN(__FILE__, __LINE__, __FUNCTION__);
228 CHECK_XCB_CONN;
229
230 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win, type,
231 ECORE_X_ATOM_UTF8_STRING, 8, strlen(str), str);
232// ecore_x_flush();
233}
234
235EAPI char *
236ecore_x_window_prop_string_get(Ecore_X_Window win,
237 Ecore_X_Atom type)
238{
239 xcb_get_property_cookie_t cookie;
240 xcb_get_property_reply_t *reply;
241 char *str = NULL;
242 int len = 0;
243
244 LOGFN(__FILE__, __LINE__, __FUNCTION__);
245 CHECK_XCB_CONN;
246
247 cookie =
248 xcb_get_property_unchecked(_ecore_xcb_conn, 0,
249 win ? win : ((xcb_screen_t *)_ecore_xcb_screen)->root,
250 type, XCB_GET_PROPERTY_TYPE_ANY, 0, 1000000L);
251 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
252 if (!reply) return NULL;
253
254 len = ((reply->value_len * reply->format) / 8);
255 str = (char *)malloc((len + 1) * sizeof(char));
256 memcpy(str, xcb_get_property_value(reply), len);
257 str[len] = '\0';
258
259 if (reply->type != ECORE_X_ATOM_UTF8_STRING)
260 {
261 Ecore_Xcb_Textproperty prop;
262 int count = 0;
263 char **list = NULL;
264 Eina_Bool ret = EINA_FALSE;
265
266 prop.value = strdup(str);
267 prop.nitems = len;
268 prop.encoding = reply->type;
269
270#ifdef HAVE_ICONV
271 ret = _ecore_xcb_utf8_textproperty_to_textlist(&prop, &list, &count);
272#else
273 ret = _ecore_xcb_mb_textproperty_to_textlist(&prop, &list, &count);
274#endif
275 if (ret)
276 {
277 if (count > 0)
278 str = strdup(list[0]);
279 else
280 str = strdup((char *)prop.value);
281
282 if (list) free(list);
283 }
284 else
285 str = strdup((char *)prop.value);
286 }
287
288 free(reply);
289 return str;
290}
291
292EAPI int
293ecore_x_window_prop_window_get(Ecore_X_Window win,
294 Ecore_X_Atom atom,
295 Ecore_X_Window *list,
296 unsigned int len)
297{
298 LOGFN(__FILE__, __LINE__, __FUNCTION__);
299
300 return ecore_x_window_prop_xid_get(win, atom, ECORE_X_ATOM_WINDOW, list, len);
301}
302
303EAPI void
304ecore_x_window_prop_window_set(Ecore_X_Window win,
305 Ecore_X_Atom atom,
306 Ecore_X_Window *list,
307 unsigned int num)
308{
309 LOGFN(__FILE__, __LINE__, __FUNCTION__);
310
311 ecore_x_window_prop_xid_set(win, atom, ECORE_X_ATOM_WINDOW, list, num);
312}
313
314EAPI int
315ecore_x_window_prop_window_list_get(Ecore_X_Window win,
316 Ecore_X_Atom atom,
317 Ecore_X_Window **plst)
318{
319 LOGFN(__FILE__, __LINE__, __FUNCTION__);
320
321 return ecore_x_window_prop_xid_list_get(win, atom, ECORE_X_ATOM_WINDOW, plst);
322}
323
324EAPI Ecore_X_Atom
325ecore_x_window_prop_any_type(void)
326{
327 return XCB_ATOM_ANY;
328}
329
330EAPI void
331ecore_x_window_prop_property_del(Ecore_X_Window win,
332 Ecore_X_Atom property)
333{
334 LOGFN(__FILE__, __LINE__, __FUNCTION__);
335 CHECK_XCB_CONN;
336
337 xcb_delete_property(_ecore_xcb_conn, win, property);
338}
339
340EAPI void
341ecore_x_window_prop_property_set(Ecore_X_Window win,
342 Ecore_X_Atom property,
343 Ecore_X_Atom type,
344 int size,
345 void *data,
346 int num)
347{
348 LOGFN(__FILE__, __LINE__, __FUNCTION__);
349 CHECK_XCB_CONN;
350
351 if (win == 0)
352 win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
353
354 if (size != 32)
355 {
356 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
357 property, type, size, num, (unsigned char *)data);
358// ecore_x_flush();
359 }
360 else
361 {
362 uint32_t *dat;
363 int i = 0, *ptr;
364
365 dat = malloc(sizeof(uint32_t) * num);
366 if (dat)
367 {
368 for (ptr = (int *)data, i = 0; i < num; i++)
369 dat[i] = ptr[i];
370 xcb_change_property(_ecore_xcb_conn, XCB_PROP_MODE_REPLACE, win,
371 property, type, size, num,
372 (unsigned char *)dat);
373 free(dat);
374// ecore_x_flush();
375 }
376 }
377}
378
379EAPI int
380ecore_x_window_prop_property_get(Ecore_X_Window win,
381 Ecore_X_Atom property,
382 Ecore_X_Atom type,
383 int size,
384 unsigned char **data,
385 int *num)
386{
387 xcb_get_property_cookie_t cookie;
388 xcb_get_property_reply_t *reply;
389 int format = 0;
390 unsigned int i = 0;
391 void *value;
392
393 LOGFN(__FILE__, __LINE__, __FUNCTION__);
394 CHECK_XCB_CONN;
395
396 if (num) *num = 0;
397
398 if (data)
399 *data = NULL;
400 else
401 return 0;
402
403 if (win == 0)
404 win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
405
406 cookie =
407 xcb_get_property_unchecked(_ecore_xcb_conn, 0, win,
408 property, type, 0, UINT_MAX);
409 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
410 if (!reply) return 0;
411 if ((reply->format != size) || (reply->value_len == 0))
412 {
413 free(reply);
414 return 0;
415 }
416
417 if (!(*data = malloc(reply->value_len * reply->format / 8)))
418 {
419 free(reply);
420 return 0;
421 }
422
423 value = xcb_get_property_value(reply);
424 switch (reply->format)
425 {
426 case 8:
427 for (i = 0; i < reply->value_len; i++)
428 (*data)[i] = ((unsigned char *)value)[i];
429 break;
430
431 case 16:
432 for (i = 0; i < reply->value_len; i++)
433 ((unsigned short *)*data)[i] = ((unsigned short *)value)[i];
434 break;
435
436 case 32:
437 for (i = 0; i < reply->value_len; i++)
438 ((unsigned int *)*data)[i] = ((uint32_t *)value)[i];
439 break;
440 }
441
442 if (num) *num = reply->value_len;
443 format = reply->format;
444 free(reply);
445 return format;
446}
447
448EAPI int
449ecore_x_window_prop_atom_list_get(Ecore_X_Window win,
450 Ecore_X_Atom atom,
451 Ecore_X_Atom **list)
452{
453 LOGFN(__FILE__, __LINE__, __FUNCTION__);
454
455 return ecore_x_window_prop_xid_list_get(win, atom, ECORE_X_ATOM_ATOM, list);
456}
457
458EAPI void
459ecore_x_window_prop_atom_list_change(Ecore_X_Window win,
460 Ecore_X_Atom atom,
461 Ecore_X_Atom item,
462 int op)
463{
464 LOGFN(__FILE__, __LINE__, __FUNCTION__);
465 ecore_x_window_prop_xid_list_change(win, atom, ECORE_X_ATOM_ATOM, item, op);
466}
467
468EAPI int
469ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
470 Ecore_X_Atom atom,
471 Ecore_X_Atom type,
472 Ecore_X_ID **xids)
473{
474 xcb_get_property_cookie_t cookie;
475 xcb_get_property_reply_t *reply;
476 int num = -1;
477
478 LOGFN(__FILE__, __LINE__, __FUNCTION__);
479 CHECK_XCB_CONN;
480
481 if (xids) *xids = NULL;
482
483 cookie = xcb_get_property_unchecked(_ecore_xcb_conn, 0, win, atom, type,
484 0, 0x7fffffff);
485 reply = xcb_get_property_reply(_ecore_xcb_conn, cookie, NULL);
486 if (!reply) return -1;
487
488 if ((reply->type != type) || (reply->format != 32))
489 num = -1;
490 else if ((reply->value_len == 0) || (!xcb_get_property_value(reply)))
491 num = 0;
492 else
493 {
494 Ecore_X_Atom *alst;
495 void *val;
496
497 num = xcb_get_property_value_length(reply);
498 val = xcb_get_property_value(reply);
499 alst = malloc(num * sizeof(Ecore_X_ID));
500 if (alst)
501 {
502 int i = 0;
503
504 for (i = 0; i < num; i++)
505 alst[i] = ((uint32_t *)val)[i];
506 *xids = alst;
507 }
508 }
509
510 free(reply);
511 return num;
512}
513
514EAPI void
515ecore_x_window_prop_xid_list_change(Ecore_X_Window win,
516 Ecore_X_Atom atom,
517 Ecore_X_Atom type,
518 Ecore_X_ID item,
519 int op)
520{
521 Ecore_X_ID *lst;
522 int i = 0, num = 0;
523
524 LOGFN(__FILE__, __LINE__, __FUNCTION__);
525 CHECK_XCB_CONN;
526
527 num = ecore_x_window_prop_xid_list_get(win, atom, type, &lst);
528 if (num < 0) return;
529
530 for (i = 0; i < num; i++)
531 {
532 if (lst[i] == item) break;
533 }
534
535 if (i < num)
536 {
537 if (op == ECORE_X_PROP_LIST_ADD)
538 goto done;
539 num--;
540 for (; i < num; i++)
541 lst[i] = lst[i + 1];
542 }
543 else
544 {
545 if (op == ECORE_X_PROP_LIST_REMOVE)
546 goto done;
547 num++;
548 lst = realloc(lst, num * sizeof(Ecore_X_ID));
549 lst[i] = item;
550 }
551 ecore_x_window_prop_xid_set(win, atom, type, lst, num);
552
553done:
554 if (lst) free(lst);
555}
556
557EAPI Eina_Bool
558ecore_x_window_prop_protocol_isset(Ecore_X_Window win,
559 Ecore_X_WM_Protocol protocol)
560{
561 Eina_Bool ret = EINA_FALSE;
562 Ecore_X_Atom proto;
563#ifdef OLD_XCB_VERSION
564 xcb_get_wm_protocols_reply_t protos;
565#else
566 xcb_icccm_get_wm_protocols_reply_t protos;
567#endif
568 xcb_get_property_cookie_t cookie;
569 uint8_t reply;
570 uint32_t count = 0, i = 0;
571
572 LOGFN(__FILE__, __LINE__, __FUNCTION__);
573 CHECK_XCB_CONN;
574
575 if (protocol >= ECORE_X_WM_PROTOCOL_NUM) return EINA_FALSE;
576
577 proto = _ecore_xcb_atoms_wm_protocol[protocol];
578#ifdef OLD_XCB_VERSION
579 cookie = xcb_get_wm_protocols_unchecked(_ecore_xcb_conn, win,
580 ECORE_X_ATOM_WM_PROTOCOLS);
581 reply = xcb_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &protos, NULL);
582#else
583 cookie = xcb_icccm_get_wm_protocols_unchecked(_ecore_xcb_conn, win,
584 ECORE_X_ATOM_WM_PROTOCOLS);
585 reply = xcb_icccm_get_wm_protocols_reply(_ecore_xcb_conn, cookie,
586 &protos, NULL);
587#endif
588 if (!reply) return EINA_FALSE;
589
590 count = protos.atoms_len;
591 for (i = 0; i < count; i++)
592 {
593 if (protos.atoms[i] == proto)
594 {
595 ret = EINA_TRUE;
596 break;
597 }
598 }
599
600#ifdef OLD_XCB_VERSION
601 xcb_get_wm_protocols_reply_wipe(&protos);
602#else
603 xcb_icccm_get_wm_protocols_reply_wipe(&protos);
604#endif
605 return ret;
606}
607
608EAPI Ecore_X_WM_Protocol *
609ecore_x_window_prop_protocol_list_get(Ecore_X_Window win,
610 int *num_ret)
611{
612#ifdef OLD_XCB_VERSION
613 xcb_get_wm_protocols_reply_t protos;
614#else
615 xcb_icccm_get_wm_protocols_reply_t protos;
616#endif
617 xcb_get_property_cookie_t cookie;
618 uint8_t reply;
619 uint32_t count = 0, i = 0;
620 Ecore_X_WM_Protocol *prot_ret = NULL;
621
622 LOGFN(__FILE__, __LINE__, __FUNCTION__);
623 CHECK_XCB_CONN;
624
625 if (!num_ret) return NULL;
626
627 *num_ret = 0;
628
629#ifdef OLD_XCB_VERSION
630 cookie = xcb_get_wm_protocols_unchecked(_ecore_xcb_conn, win,
631 ECORE_X_ATOM_WM_PROTOCOLS);
632 reply = xcb_get_wm_protocols_reply(_ecore_xcb_conn, cookie, &protos, NULL);
633#else
634 cookie = xcb_icccm_get_wm_protocols_unchecked(_ecore_xcb_conn, win,
635 ECORE_X_ATOM_WM_PROTOCOLS);
636 reply = xcb_icccm_get_wm_protocols_reply(_ecore_xcb_conn, cookie,
637 &protos, NULL);
638#endif
639 if (!reply) return NULL;
640
641 count = protos.atoms_len;
642 if (count <= 0)
643 {
644#ifdef OLD_XCB_VERSION
645 xcb_get_wm_protocols_reply_wipe(&protos);
646#else
647 xcb_icccm_get_wm_protocols_reply_wipe(&protos);
648#endif
649 return NULL;
650 }
651
652 prot_ret = calloc(1, count * sizeof(Ecore_X_WM_Protocol));
653 if (!prot_ret)
654 {
655#ifdef OLD_XCB_VERSION
656 xcb_get_wm_protocols_reply_wipe(&protos);
657#else
658 xcb_icccm_get_wm_protocols_reply_wipe(&protos);
659#endif
660 return NULL;
661 }
662
663 for (i = 0; i < count; i++)
664 {
665 Ecore_X_WM_Protocol j;
666
667 prot_ret[i] = -1;
668 for (j = 0; j < ECORE_X_WM_PROTOCOL_NUM; j++)
669 {
670 if (_ecore_xcb_atoms_wm_protocol[j] == protos.atoms[i])
671 prot_ret[i] = j;
672 }
673 }
674
675 if (num_ret) *num_ret = count;
676
677#ifdef OLD_XCB_VERSION
678 xcb_get_wm_protocols_reply_wipe(&protos);
679#else
680 xcb_icccm_get_wm_protocols_reply_wipe(&protos);
681#endif
682 return prot_ret;
683}
684
685EAPI Ecore_X_Atom *
686ecore_x_window_prop_list(Ecore_X_Window win,
687 int *num)
688{
689 xcb_list_properties_cookie_t cookie;
690 xcb_list_properties_reply_t *reply;
691 xcb_atom_t *atm;
692 Ecore_X_Atom *atoms;
693 int i = 0;
694
695 LOGFN(__FILE__, __LINE__, __FUNCTION__);
696 CHECK_XCB_CONN;
697
698 if (num) *num = 0;
699
700 cookie = xcb_list_properties_unchecked(_ecore_xcb_conn, win);
701 reply = xcb_list_properties_reply(_ecore_xcb_conn, cookie, NULL);
702 if (!reply) return NULL;
703
704 atoms = (Ecore_X_Atom *)malloc(reply->atoms_len * sizeof(Ecore_X_Atom));
705 if (!atoms)
706 {
707 free(reply);
708 return NULL;
709 }
710
711 atm = xcb_list_properties_atoms(reply);
712 for (i = 0; i < reply->atoms_len; i++)
713 atoms[i] = atm[i];
714
715 if (num) *num = reply->atoms_len;
716 free(reply);
717
718 return atoms;
719}
720
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c
deleted file mode 100644
index 4f24d62..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c
+++ /dev/null
@@ -1,408 +0,0 @@
1#include "ecore_xcb_private.h"
2
3typedef struct _Shadow Shadow;
4struct _Shadow
5{
6 Shadow *parent, **children;
7 Ecore_X_Window win;
8 int children_num;
9 short x, y;
10 unsigned short w, h;
11};
12
13static Eina_Bool _inside_rects(Shadow *s,
14 int x,
15 int y,
16 int bx,
17 int by,
18 Ecore_X_Rectangle *rects,
19 int num);
20
21//static int shadow_count = 0;
22static Shadow **shadow_base = NULL;
23static int shadow_num = 0;
24
25/* FIXME: round trips */
26static Shadow *
27_ecore_x_window_tree_walk(Ecore_X_Window window)
28{
29 Shadow *s, **sl;
30 xcb_get_window_attributes_reply_t *reply_attr;
31 xcb_get_geometry_reply_t *reply_geom;
32 xcb_query_tree_reply_t *reply_tree;
33 xcb_get_window_attributes_cookie_t cookie_attr;
34 xcb_get_geometry_cookie_t cookie_geom;
35 xcb_query_tree_cookie_t cookie_tree;
36 int i, j;
37
38 CHECK_XCB_CONN;
39
40 cookie_attr = xcb_get_window_attributes_unchecked(_ecore_xcb_conn, window);
41 reply_attr = xcb_get_window_attributes_reply(_ecore_xcb_conn, cookie_attr, NULL);
42 if (!reply_attr) return NULL;
43 if (reply_attr->map_state != XCB_MAP_STATE_VIEWABLE)
44 {
45 free(reply_attr);
46 return NULL;
47 }
48
49 free(reply_attr);
50
51 cookie_geom = xcb_get_geometry_unchecked(_ecore_xcb_conn, window);
52 reply_geom = xcb_get_geometry_reply(_ecore_xcb_conn, cookie_geom, NULL);
53 if (!reply_geom) return NULL;
54
55 if (!(s = calloc(1, sizeof(Shadow))))
56 {
57 free(reply_geom);
58 return NULL;
59 }
60
61 s->win = window;
62 s->x = reply_geom->x;
63 s->y = reply_geom->y;
64 s->w = reply_geom->width;
65 s->h = reply_geom->height;
66
67 free(reply_geom);
68
69 cookie_tree = xcb_query_tree_unchecked(_ecore_xcb_conn, window);
70 reply_tree = xcb_query_tree_reply(_ecore_xcb_conn, cookie_tree, NULL);
71 if (reply_tree)
72 {
73 xcb_window_t *list;
74 int num;
75
76 num = xcb_query_tree_children_length(reply_tree);
77 list = xcb_query_tree_children(reply_tree);
78
79 s->children = calloc(1, sizeof(Shadow *) * num);
80 if (s->children)
81 {
82 s->children_num = num;
83 for (i = 0; i < num; i++)
84 {
85 s->children[i] = _ecore_x_window_tree_walk(list[i]);
86 if (s->children[i])
87 s->children[i]->parent = s;
88 }
89 /* compress list down */
90 j = 0;
91 for (i = 0; i < num; i++)
92 {
93 if (s->children[i])
94 {
95 s->children[j] = s->children[i];
96 j++;
97 }
98 }
99 if (j == 0)
100 {
101 free(s->children);
102 s->children = NULL;
103 s->children_num = 0;
104 }
105 else
106 {
107 s->children_num = j;
108 sl = realloc(s->children, sizeof(Shadow *) * j);
109 if (sl) s->children = sl;
110 }
111 }
112
113 free(reply_tree);
114 }
115
116 return s;
117}
118
119static void
120_ecore_x_window_tree_shadow_free1(Shadow *s)
121{
122 int i = 0;
123
124 if (!s) return;
125 if (s->children)
126 {
127 for (i = 0; i < s->children_num; i++)
128 {
129 if (s->children[i])
130 _ecore_x_window_tree_shadow_free1(s->children[i]);
131 }
132 free(s->children);
133 }
134
135 free(s);
136}
137
138static void
139_ecore_x_window_tree_shadow_free(void)
140{
141 int i = 0;
142
143 if (!shadow_base) return;
144
145 for (i = 0; i < shadow_num; i++)
146 {
147 if (!shadow_base[i]) continue;
148 _ecore_x_window_tree_shadow_free1(shadow_base[i]);
149 }
150 free(shadow_base);
151 shadow_base = NULL;
152 shadow_num = 0;
153}
154
155static void
156_ecore_x_window_tree_shadow_populate(void)
157{
158 Ecore_X_Window *roots = NULL;
159 int i = 0, num = 0;
160
161 if ((roots = ecore_x_window_root_list(&num)))
162 {
163 shadow_base = calloc(1, sizeof(Shadow *) * num);
164 if (shadow_base)
165 {
166 shadow_num = num;
167 for (i = 0; i < num; i++)
168 shadow_base[i] = _ecore_x_window_tree_walk(roots[i]);
169 }
170
171 free(roots);
172 }
173}
174
175/*
176 static void
177 _ecore_x_window_tree_shadow_start(void)
178 {
179 shadow_count++;
180 if (shadow_count > 1) return;
181 _ecore_x_window_tree_shadow_populate();
182 }
183
184 static void
185 _ecore_x_window_tree_shadow_stop(void)
186 {
187 shadow_count--;
188 if (shadow_count != 0) return;
189 _ecore_x_window_tree_shadow_free();
190 }
191 */
192
193Shadow *
194_ecore_x_window_shadow_tree_find_shadow(Shadow *s,
195 Ecore_X_Window win)
196{
197 Shadow *ss;
198 int i = 0;
199
200 if (s->win == win) return s;
201
202 if (s->children)
203 {
204 for (i = 0; i < s->children_num; i++)
205 {
206 if (!s->children[i]) continue;
207
208 if ((ss =
209 _ecore_x_window_shadow_tree_find_shadow(s->children[i], win)))
210 return ss;
211 }
212 }
213
214 return NULL;
215}
216
217Shadow *
218_ecore_x_window_shadow_tree_find(Ecore_X_Window base)
219{
220 Shadow *s;
221 int i = 0;
222
223 for (i = 0; i < shadow_num; i++)
224 {
225 if (!shadow_base[i]) continue;
226
227 if ((s =
228 _ecore_x_window_shadow_tree_find_shadow(shadow_base[i], base)))
229 return s;
230 }
231 return NULL;
232}
233
234static Ecore_X_Window
235_ecore_x_window_shadow_tree_at_xy_get_shadow(Shadow *s,
236 int bx,
237 int by,
238 int x,
239 int y,
240 Ecore_X_Window *skip,
241 int skip_num)
242{
243 Ecore_X_Window child;
244 Ecore_X_Rectangle *rects;
245 int i = 0, j = 0, wx = 0, wy = 0, num = 0;
246
247 wx = s->x + bx;
248 wy = s->y + by;
249 if (!((x >= wx) && (y >= wy) && (x < (wx + s->w)) && (y < (wy + s->h))))
250 return 0;
251
252 rects = ecore_x_window_shape_rectangles_get(s->win, &num);
253 if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0;
254 num = 0;
255 rects = ecore_x_window_shape_input_rectangles_get(s->win, &num);
256 if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0;
257
258 if (s->children)
259 {
260 int skipit = 0;
261
262 for (i = s->children_num - 1; i >= 0; --i)
263 {
264 if (!s->children[i]) continue;
265
266 skipit = 0;
267 if (skip)
268 {
269 for (j = 0; j < skip_num; j++)
270 {
271 if (s->children[i]->win == skip[j])
272 {
273 skipit = 1;
274 goto onward;
275 }
276 }
277 }
278onward:
279 if (!skipit)
280 {
281 if ((child =
282 _ecore_x_window_shadow_tree_at_xy_get_shadow(s->children[i], wx, wy, x, y, skip, skip_num)))
283 return child;
284 }
285 }
286 }
287
288 return s->win;
289}
290
291static Ecore_X_Window
292_ecore_x_window_shadow_tree_at_xy_get(Ecore_X_Window base,
293 int bx,
294 int by,
295 int x,
296 int y,
297 Ecore_X_Window *skip,
298 int skip_num)
299{
300 Shadow *s;
301
302 if (!shadow_base)
303 {
304 _ecore_x_window_tree_shadow_populate();
305 if (!shadow_base) return 0;
306 }
307
308 s = _ecore_x_window_shadow_tree_find(base);
309 if (!s) return 0;
310
311 return _ecore_x_window_shadow_tree_at_xy_get_shadow(s, bx, by, x, y, skip, skip_num);
312}
313
314static Eina_Bool
315_inside_rects(Shadow *s,
316 int x,
317 int y,
318 int bx,
319 int by,
320 Ecore_X_Rectangle *rects,
321 int num)
322{
323 Eina_Bool inside = EINA_FALSE;
324 int i = 0;
325
326 if (!rects) return EINA_FALSE;
327 for (i = 0; i < num; i++)
328 {
329 if ((x >= s->x + bx + rects[i].x) &&
330 (y >= s->y + by + rects[i].y) &&
331 (x < (int)(s->x + bx + rects[i].x + rects[i].width)) &&
332 (y < (int)(s->y + by + rects[i].y + rects[i].height)))
333 {
334 inside = EINA_TRUE;
335 break;
336 }
337 }
338 free(rects);
339 return inside;
340}
341
342/**
343 * Retrieves the top, visible window at the given location,
344 * but skips the windows in the list. This uses a shadow tree built from the
345 * window tree that is only updated the first time
346 * ecore_x_window_shadow_tree_at_xy_with_skip_get() is called, or the next time
347 * it is called after a ecore_x_window_shadow_tree_flush()
348 * @param base The base window to start searching from (normally root).
349 * @param x The given X position.
350 * @param y The given Y position.
351 * @return The window at that position.
352 * @ingroup Ecore_X_Window_Geometry_Group
353 */
354EAPI Ecore_X_Window
355ecore_x_window_shadow_tree_at_xy_with_skip_get(Ecore_X_Window base,
356 int x,
357 int y,
358 Ecore_X_Window *skip,
359 int skip_num)
360{
361 return _ecore_x_window_shadow_tree_at_xy_get(base, 0, 0, x, y, skip, skip_num);
362}
363
364/**
365 * Retrieves the parent window a given window has. This uses the shadow window
366 * tree.
367 * @param root The root window of @p win - if 0, this will be automatically determined with extra processing overhead
368 * @param win The window to get the parent window of
369 * @return The parent window of @p win
370 * @ingroup Ecore_X_Window_Geometry_Group
371 */
372EAPI Ecore_X_Window
373ecore_x_window_shadow_parent_get(Ecore_X_Window root __UNUSED__,
374 Ecore_X_Window win)
375{
376 Shadow *s;
377 int i = 0;
378
379 if (!shadow_base)
380 {
381 _ecore_x_window_tree_shadow_populate();
382 if (!shadow_base) return 0;
383 }
384
385 for (i = 0; i < shadow_num; i++)
386 {
387 if (!shadow_base[i]) continue;
388
389 s = _ecore_x_window_shadow_tree_find_shadow(shadow_base[i], win);
390 if (s)
391 {
392 if (!s->parent) return 0;
393 return s->parent->win;
394 }
395 }
396 return 0;
397}
398
399/**
400 * Flushes the window shadow tree so nothing is stored.
401 * @ingroup Ecore_X_Window_Geometry_Group
402 */
403EAPI void
404ecore_x_window_shadow_tree_flush(void)
405{
406 _ecore_x_window_tree_shadow_free();
407}
408
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c
deleted file mode 100644
index 6206a51..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c
+++ /dev/null
@@ -1,790 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_SHAPE
3# include <xcb/shape.h>
4#endif
5
6/**
7 * @defgroup Ecore_X_Window_Shape X Window Shape Functions
8 *
9 * These functions use the shape extension of the X server to change
10 * shape of given windows.
11 */
12
13/**
14 * Sets the input shape of the given window to that given by the pixmap @p mask.
15 * @param win The given window.
16 * @param mask A 1-bit depth pixmap that provides the new input shape of the
17 * window.
18 * @ingroup Ecore_X_Window_Shape
19 */
20EAPI void
21ecore_x_window_shape_input_mask_set(Ecore_X_Window win,
22 Ecore_X_Pixmap mask)
23{
24 LOGFN(__FILE__, __LINE__, __FUNCTION__);
25 CHECK_XCB_CONN;
26
27#ifdef ECORE_XCB_SHAPE
28 xcb_shape_mask(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT,
29 win, 0, 0, mask);
30// ecore_x_flush();
31#else
32 return;
33 win = 0;
34 mask = 0;
35#endif
36}
37
38/**
39 * Sets the shape of the given window to that given by the pixmap @p mask.
40 * @param win The given window.
41 * @param mask A 2-bit depth pixmap that provides the new shape of the
42 * window.
43 * @ingroup Ecore_X_Window_Shape
44 */
45EAPI void
46ecore_x_window_shape_mask_set(Ecore_X_Window win,
47 Ecore_X_Pixmap mask)
48{
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
50 CHECK_XCB_CONN;
51
52#ifdef ECORE_XCB_SHAPE
53 xcb_shape_mask(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING,
54 win, 0, 0, mask);
55// ecore_x_flush();
56#else
57 return;
58 win = 0;
59 mask = 0;
60#endif
61}
62
63EAPI void
64ecore_x_window_shape_window_set(Ecore_X_Window win,
65 Ecore_X_Window shape_win)
66{
67 LOGFN(__FILE__, __LINE__, __FUNCTION__);
68 CHECK_XCB_CONN;
69
70#ifdef ECORE_XCB_SHAPE
71 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING,
72 XCB_SHAPE_SK_BOUNDING, win, 0, 0, shape_win);
73// ecore_x_flush();
74#else
75 return;
76 win = 0;
77 shape_win = 0;
78#endif
79}
80
81EAPI void
82ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
83 Ecore_X_Window shape_win,
84 int x,
85 int y)
86{
87 LOGFN(__FILE__, __LINE__, __FUNCTION__);
88 CHECK_XCB_CONN;
89
90#ifdef ECORE_XCB_SHAPE
91 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING,
92 XCB_SHAPE_SK_BOUNDING, win, x, y, shape_win);
93// ecore_x_flush();
94#else
95 return;
96 win = 0;
97 shape_win = 0;
98 x = 0;
99 y = 0;
100#endif
101}
102
103EAPI void
104ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
105 int x,
106 int y,
107 int w,
108 int h)
109{
110#ifdef ECORE_XCB_SHAPE
111 xcb_rectangle_t rect;
112#endif
113
114 LOGFN(__FILE__, __LINE__, __FUNCTION__);
115 CHECK_XCB_CONN;
116
117#ifdef ECORE_XCB_SHAPE
118 rect.x = x;
119 rect.y = y;
120 rect.width = w;
121 rect.height = h;
122 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET,
123 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
124 win, 0, 0, 1, &rect);
125// ecore_x_flush();
126#else
127 return;
128 win = 0;
129 x = 0;
130 y = 0;
131 w = 0;
132 h = 0;
133#endif
134}
135
136EAPI void
137ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
138 Ecore_X_Rectangle *rects,
139 int num)
140{
141#ifdef ECORE_XCB_SHAPE
142 xcb_rectangle_t *rect = NULL;
143#endif
144
145 LOGFN(__FILE__, __LINE__, __FUNCTION__);
146 CHECK_XCB_CONN;
147
148 if (!rects) return;
149
150#ifdef ECORE_XCB_SHAPE
151 if (num > 0)
152 {
153 int i = 0;
154
155 if (!(rect = malloc(sizeof(xcb_rectangle_t) * num)))
156 return;
157
158 for (i = 0; i < num; i++)
159 {
160 rect[i].x = rects[i].x;
161 rect[i].y = rects[i].y;
162 rect[i].width = rects[i].width;
163 rect[i].height = rects[i].height;
164 }
165 }
166 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET,
167 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
168 win, 0, 0, num, (xcb_rectangle_t *)rect);
169
170 if (rect) free(rect);
171// ecore_x_flush();
172#else
173 return;
174 win = 0;
175 num = 0;
176 rects = NULL;
177#endif
178}
179
180EAPI void
181ecore_x_window_shape_window_add(Ecore_X_Window win,
182 Ecore_X_Window shape_win)
183{
184 LOGFN(__FILE__, __LINE__, __FUNCTION__);
185 CHECK_XCB_CONN;
186
187#ifdef ECORE_XCB_SHAPE
188 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
189 XCB_SHAPE_SK_BOUNDING, XCB_SHAPE_SK_BOUNDING,
190 win, 0, 0, shape_win);
191// ecore_x_flush();
192#else
193 return;
194 win = 0;
195 shape_win = 0;
196#endif
197}
198
199EAPI void
200ecore_x_window_shape_window_add_xy(Ecore_X_Window win,
201 Ecore_X_Window shape_win,
202 int x,
203 int y)
204{
205 LOGFN(__FILE__, __LINE__, __FUNCTION__);
206 CHECK_XCB_CONN;
207
208#ifdef ECORE_XCB_SHAPE
209 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
210 XCB_SHAPE_SK_BOUNDING, XCB_SHAPE_SK_BOUNDING,
211 win, x, y, shape_win);
212// ecore_x_flush();
213#else
214 return;
215 win = 0;
216 shape_win = 0;
217 x = 0;
218 y = 0;
219#endif
220}
221
222EAPI void
223ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
224 int x,
225 int y,
226 int w,
227 int h)
228{
229#ifdef ECORE_XCB_SHAPE
230 xcb_rectangle_t rect;
231#endif
232
233 LOGFN(__FILE__, __LINE__, __FUNCTION__);
234 CHECK_XCB_CONN;
235
236#ifdef ECORE_XCB_SHAPE
237 rect.x = x;
238 rect.y = y;
239 rect.width = w;
240 rect.height = h;
241 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
242 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
243 win, 0, 0, 1, &rect);
244// ecore_x_flush();
245#else
246 return;
247 win = 0;
248 x = 0;
249 y = 0;
250 w = 0;
251 h = 0;
252#endif
253}
254
255EAPI void
256ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win,
257 int x,
258 int y,
259 int w,
260 int h)
261{
262#ifdef ECORE_XCB_SHAPE
263 xcb_rectangle_t rect;
264#endif
265
266 LOGFN(__FILE__, __LINE__, __FUNCTION__);
267 CHECK_XCB_CONN;
268
269#ifdef ECORE_XCB_SHAPE
270 rect.x = x;
271 rect.y = y;
272 rect.width = w;
273 rect.height = h;
274 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SUBTRACT,
275 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
276 win, 0, 0, 1, &rect);
277// ecore_x_flush();
278#else
279 return;
280 win = 0;
281 x = 0;
282 y = 0;
283 w = 0;
284 h = 0;
285#endif
286}
287
288EAPI void
289ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
290 int x,
291 int y,
292 int w,
293 int h)
294{
295#ifdef ECORE_XCB_SHAPE
296 xcb_rectangle_t rect;
297#endif
298
299 LOGFN(__FILE__, __LINE__, __FUNCTION__);
300 CHECK_XCB_CONN;
301
302#ifdef ECORE_XCB_SHAPE
303 rect.x = x;
304 rect.y = y;
305 rect.width = w;
306 rect.height = h;
307 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_INTERSECT,
308 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
309 win, 0, 0, 1, &rect);
310// ecore_x_flush();
311#else
312 return;
313 win = 0;
314 x = 0;
315 y = 0;
316 w = 0;
317 h = 0;
318#endif
319}
320
321EAPI void
322ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
323 Ecore_X_Rectangle *rects,
324 int num)
325{
326#ifdef ECORE_XCB_SHAPE
327 xcb_rectangle_t *rect = NULL;
328#endif
329
330 LOGFN(__FILE__, __LINE__, __FUNCTION__);
331 CHECK_XCB_CONN;
332
333#ifdef ECORE_XCB_SHAPE
334 if (num > 0)
335 {
336 int i = 0;
337
338 if (!(rect = malloc(sizeof(xcb_rectangle_t) * num)))
339 return;
340
341 for (i = 0; i < num; i++)
342 {
343 rect[i].x = rects[i].x;
344 rect[i].y = rects[i].y;
345 rect[i].width = rects[i].width;
346 rect[i].height = rects[i].height;
347 }
348 }
349
350 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
351 XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
352 win, 0, 0, num, (xcb_rectangle_t *)&rect);
353
354 if (rect) free(rect);
355// ecore_x_flush();
356#else
357 return;
358 win = 0;
359 num = 0;
360 rects = NULL;
361#endif
362}
363
364EAPI Ecore_X_Rectangle *
365ecore_x_window_shape_rectangles_get(Ecore_X_Window win,
366 int *num_ret)
367{
368 Ecore_X_Rectangle *rects = NULL;
369#ifdef ECORE_XCB_SHAPE
370 xcb_shape_get_rectangles_cookie_t cookie;
371 xcb_shape_get_rectangles_reply_t *reply;
372 xcb_rectangle_t *r;
373 unsigned int i = 0;
374#endif
375
376 LOGFN(__FILE__, __LINE__, __FUNCTION__);
377 CHECK_XCB_CONN;
378
379 if (num_ret) *num_ret = 0;
380
381#ifdef ECORE_XCB_SHAPE
382 cookie =
383 xcb_shape_get_rectangles(_ecore_xcb_conn, win, XCB_SHAPE_SK_BOUNDING);
384 reply = xcb_shape_get_rectangles_reply(_ecore_xcb_conn, cookie, NULL);
385 if (!reply) return NULL;
386 if (num_ret) *num_ret = reply->rectangles_len;
387
388 if (reply->rectangles_len < 1)
389 {
390 free(reply);
391 if (num_ret) *num_ret = 0;
392 return NULL;
393 }
394
395 rects = malloc(sizeof(Ecore_X_Rectangle) * reply->rectangles_len);
396 if (!rects)
397 {
398 free(reply);
399 if (num_ret) *num_ret = 0;
400 return NULL;
401 }
402 r = xcb_shape_get_rectangles_rectangles(reply);
403 for (i = 0; i < reply->rectangles_len; i++)
404 {
405 rects[i].x = r[i].x;
406 rects[i].y = r[i].y;
407 rects[i].width = r[i].width;
408 rects[i].height = r[i].height;
409 }
410
411 free(reply);
412
413 return rects;
414#else
415 return rects;
416 win = 0;
417#endif
418}
419
420EAPI void
421ecore_x_window_shape_events_select(Ecore_X_Window win,
422 Eina_Bool on)
423{
424 LOGFN(__FILE__, __LINE__, __FUNCTION__);
425 CHECK_XCB_CONN;
426
427#ifdef ECORE_XCB_SHAPE
428 xcb_shape_select_input(_ecore_xcb_conn, win, on);
429// ecore_x_flush();
430#else
431 return;
432 win = 0;
433 on = 0;
434#endif
435}
436
437EAPI Ecore_X_Rectangle *
438ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win,
439 int *num_ret)
440{
441 Ecore_X_Rectangle *rects = NULL;
442#ifdef ECORE_XCB_SHAPE
443 xcb_shape_get_rectangles_cookie_t cookie;
444 xcb_shape_get_rectangles_reply_t *reply;
445 xcb_rectangle_t *r;
446 unsigned int i = 0;
447#endif
448
449 LOGFN(__FILE__, __LINE__, __FUNCTION__);
450 CHECK_XCB_CONN;
451
452 if (num_ret) *num_ret = 0;
453
454#ifdef ECORE_XCB_SHAPE
455 cookie =
456 xcb_shape_get_rectangles(_ecore_xcb_conn, win, XCB_SHAPE_SK_INPUT);
457 reply = xcb_shape_get_rectangles_reply(_ecore_xcb_conn, cookie, NULL);
458 if (!reply) return NULL;
459 if (num_ret) *num_ret = reply->rectangles_len;
460
461 if (reply->rectangles_len < 1)
462 {
463 free(reply);
464 if (num_ret) *num_ret = 0;
465 return NULL;
466 }
467
468 rects = malloc(sizeof(Ecore_X_Rectangle) * reply->rectangles_len);
469 if (!rects)
470 {
471 free(reply);
472 if (num_ret) *num_ret = 0;
473 return NULL;
474 }
475 r = xcb_shape_get_rectangles_rectangles(reply);
476 for (i = 0; i < reply->rectangles_len; i++)
477 {
478 rects[i].x = r[i].x;
479 rects[i].y = r[i].y;
480 rects[i].width = r[i].width;
481 rects[i].height = r[i].height;
482 }
483
484 free(reply);
485
486 return rects;
487#else
488 xcb_get_geometry_cookie_t cookie;
489 xcb_get_geometry_reply_t *reply;
490
491 if (!(rects = malloc(sizeof(Ecore_X_Rectangle))))
492 return NULL;
493
494 /* get geometry */
495 cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win);
496 reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL);
497 if (reply)
498 {
499 rects[0].x = reply->x;
500 rects[0].y = reply->y;
501 rects[0].width = reply->width;
502 rects[0].height = reply->height;
503 free(reply);
504 }
505 if (num_ret) *num_ret = 1;
506 return rects;
507#endif
508}
509
510EAPI void
511ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win,
512 Ecore_X_Rectangle *rects,
513 int num)
514{
515#ifdef ECORE_XCB_SHAPE
516 xcb_rectangle_t *rect = NULL;
517#endif
518
519 LOGFN(__FILE__, __LINE__, __FUNCTION__);
520 CHECK_XCB_CONN;
521
522 if (!rects) return;
523
524#ifdef ECORE_XCB_SHAPE
525 if (num > 0)
526 {
527 int i = 0;
528
529 if (!(rect = malloc(sizeof(xcb_rectangle_t) * num)))
530 return;
531
532 for (i = 0; i < num; i++)
533 {
534 rect[i].x = rects[i].x;
535 rect[i].y = rects[i].y;
536 rect[i].width = rects[i].width;
537 rect[i].height = rects[i].height;
538 }
539 }
540 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET,
541 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
542 win, 0, 0, num, (xcb_rectangle_t *)rect);
543
544 if (rect) free(rect);
545// ecore_x_flush();
546#else
547 return;
548 win = 0;
549 num = 0;
550 rects = NULL;
551#endif
552}
553
554EAPI void
555ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win,
556 int x,
557 int y,
558 int w,
559 int h)
560{
561#ifdef ECORE_XCB_SHAPE
562 xcb_rectangle_t rect;
563#endif
564
565 LOGFN(__FILE__, __LINE__, __FUNCTION__);
566 CHECK_XCB_CONN;
567
568#ifdef ECORE_XCB_SHAPE
569 rect.x = x;
570 rect.y = y;
571 rect.width = w;
572 rect.height = h;
573 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SUBTRACT,
574 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
575 win, 0, 0, 1, &rect);
576// ecore_x_flush();
577#else
578 return;
579 win = 0;
580 x = 0;
581 y = 0;
582 w = 0;
583 h = 0;
584#endif
585}
586
587EAPI void
588ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win,
589 int x,
590 int y,
591 int w,
592 int h)
593{
594#ifdef ECORE_XCB_SHAPE
595 xcb_rectangle_t rect;
596#endif
597
598 LOGFN(__FILE__, __LINE__, __FUNCTION__);
599 CHECK_XCB_CONN;
600
601#ifdef ECORE_XCB_SHAPE
602 rect.x = x;
603 rect.y = y;
604 rect.width = w;
605 rect.height = h;
606 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
607 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
608 win, 0, 0, 1, &rect);
609// ecore_x_flush();
610#else
611 return;
612 win = 0;
613 x = 0;
614 y = 0;
615 w = 0;
616 h = 0;
617#endif
618}
619
620EAPI void
621ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win,
622 int x,
623 int y,
624 int w,
625 int h)
626{
627#ifdef ECORE_XCB_SHAPE
628 xcb_rectangle_t rect;
629#endif
630
631 LOGFN(__FILE__, __LINE__, __FUNCTION__);
632 CHECK_XCB_CONN;
633
634#ifdef ECORE_XCB_SHAPE
635 rect.x = x;
636 rect.y = y;
637 rect.width = w;
638 rect.height = h;
639 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET,
640 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
641 win, 0, 0, 1, &rect);
642// ecore_x_flush();
643#else
644 return;
645 win = 0;
646 x = 0;
647 y = 0;
648 w = 0;
649 h = 0;
650#endif
651}
652
653EAPI void
654ecore_x_window_shape_input_window_set_xy(Ecore_X_Window win,
655 Ecore_X_Window shape_win,
656 int x,
657 int y)
658{
659 LOGFN(__FILE__, __LINE__, __FUNCTION__);
660 CHECK_XCB_CONN;
661
662#ifdef ECORE_XCB_SHAPE
663 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT,
664 XCB_SHAPE_SK_INPUT, win, x, y, shape_win);
665// ecore_x_flush();
666#else
667 return;
668 win = 0;
669 shape_win = 0;
670 x = 0;
671 y = 0;
672#endif
673}
674
675EAPI void
676ecore_x_window_shape_input_window_add_xy(Ecore_X_Window win,
677 Ecore_X_Window shape_win,
678 int x,
679 int y)
680{
681 LOGFN(__FILE__, __LINE__, __FUNCTION__);
682 CHECK_XCB_CONN;
683
684#ifdef ECORE_XCB_SHAPE
685 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, XCB_SHAPE_SK_INPUT,
686 XCB_SHAPE_SK_INPUT, win, x, y, shape_win);
687// ecore_x_flush();
688#else
689 return;
690 win = 0;
691 shape_win = 0;
692 x = 0;
693 y = 0;
694#endif
695}
696
697EAPI void
698ecore_x_window_shape_input_window_set(Ecore_X_Window win,
699 Ecore_X_Window shape_win)
700{
701 LOGFN(__FILE__, __LINE__, __FUNCTION__);
702 CHECK_XCB_CONN;
703
704#ifdef ECORE_XCB_SHAPE
705 xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT,
706 XCB_SHAPE_SK_INPUT, win, 0, 0, shape_win);
707// ecore_x_flush();
708#else
709 return;
710 win = 0;
711 shape_win = 0;
712#endif
713}
714
715EAPI void
716ecore_x_window_shape_input_rectangle_clip(Ecore_X_Window win,
717 int x,
718 int y,
719 int w,
720 int h)
721{
722#ifdef ECORE_XCB_SHAPE
723 xcb_rectangle_t rect;
724#endif
725
726 LOGFN(__FILE__, __LINE__, __FUNCTION__);
727 CHECK_XCB_CONN;
728
729#ifdef ECORE_XCB_SHAPE
730 rect.x = x;
731 rect.y = y;
732 rect.width = w;
733 rect.height = h;
734 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_INTERSECT,
735 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
736 win, 0, 0, 1, &rect);
737// ecore_x_flush();
738#else
739 return;
740 win = 0;
741 x = 0;
742 y = 0;
743 w = 0;
744 h = 0;
745#endif
746}
747
748EAPI void
749ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win,
750 Ecore_X_Rectangle *rects,
751 int num)
752{
753#ifdef ECORE_XCB_SHAPE
754 xcb_rectangle_t *rect = NULL;
755#endif
756
757 LOGFN(__FILE__, __LINE__, __FUNCTION__);
758 CHECK_XCB_CONN;
759
760#ifdef ECORE_XCB_SHAPE
761 if (num > 0)
762 {
763 int i = 0;
764
765 if (!(rect = malloc(sizeof(xcb_rectangle_t) * num)))
766 return;
767
768 for (i = 0; i < num; i++)
769 {
770 rect[i].x = rects[i].x;
771 rect[i].y = rects[i].y;
772 rect[i].width = rects[i].width;
773 rect[i].height = rects[i].height;
774 }
775 }
776
777 xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION,
778 XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED,
779 win, 0, 0, num, (xcb_rectangle_t *)&rect);
780
781 if (rect) free(rect);
782// ecore_x_flush();
783#else
784 return;
785 win = 0;
786 num = 0;
787 rects = NULL;
788#endif
789}
790
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xdefaults.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xdefaults.c
deleted file mode 100644
index e0e5610..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xdefaults.c
+++ /dev/null
@@ -1,116 +0,0 @@
1#include "ecore_xcb_private.h"
2#include <fnmatch.h>
3
4/* local function prototypes */
5static Eina_Bool _ecore_xcb_xdefaults_glob_match(const char *str,
6 const char *glob);
7
8/* local variables */
9static Eina_File *_ecore_xcb_xdefaults_file = NULL;
10static char *_ecore_xcb_xdefaults_data = NULL;
11
12void
13_ecore_xcb_xdefaults_init(void)
14{
15 char buff[PATH_MAX];
16
17 LOGFN(__FILE__, __LINE__, __FUNCTION__);
18
19 snprintf(buff, sizeof(buff), "%s/.Xdefaults", getenv("HOME"));
20 if ((_ecore_xcb_xdefaults_file = eina_file_open(buff, EINA_FALSE)))
21 {
22 eina_mmap_safety_enabled_set(EINA_TRUE);
23
24 _ecore_xcb_xdefaults_data =
25 eina_file_map_all(_ecore_xcb_xdefaults_file, EINA_FILE_SEQUENTIAL);
26 }
27}
28
29void
30_ecore_xcb_xdefaults_shutdown(void)
31{
32 LOGFN(__FILE__, __LINE__, __FUNCTION__);
33
34 if (!_ecore_xcb_xdefaults_file) return;
35 if (_ecore_xcb_xdefaults_data)
36 eina_file_map_free(_ecore_xcb_xdefaults_file, _ecore_xcb_xdefaults_data);
37 if (_ecore_xcb_xdefaults_file) eina_file_close(_ecore_xcb_xdefaults_file);
38}
39
40char *
41_ecore_xcb_xdefaults_string_get(const char *prog,
42 const char *param)
43{
44 char buff[1024], ret[1024];
45 char *str = NULL;
46 char **ea = NULL;
47 unsigned int count = 0, i = 0;
48
49 if ((!_ecore_xcb_xdefaults_data) || (!_ecore_xcb_xdefaults_file))
50 return NULL;
51
52 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
53
54 str = _ecore_xcb_xdefaults_data;
55 ea = eina_str_split_full(str, "\n", -1, &count);
56 for (i = 0; i < count; i++)
57 {
58 if (_ecore_xcb_xdefaults_glob_match(ea[i], buff))
59 sscanf(ea[i], "%*[^:]:%*[ ]%s", ret);
60 }
61 if ((ea) && (ea[0]))
62 {
63 free(ea[0]);
64 free(ea);
65 }
66
67 return strdup(ret);
68}
69
70int
71_ecore_xcb_xdefaults_int_get(const char *prog,
72 const char *param)
73{
74 char buff[1024];
75 char *str = NULL;
76 char **ea = NULL;
77 unsigned int count = 0, i = 0;
78 int ret = -1;
79
80 if ((!_ecore_xcb_xdefaults_data) || (!_ecore_xcb_xdefaults_file))
81 return 0;
82
83 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
84
85 str = _ecore_xcb_xdefaults_data;
86 ea = eina_str_split_full(str, "\n", -1, &count);
87 for (i = 0; i < count; i++)
88 {
89 if (_ecore_xcb_xdefaults_glob_match(ea[i], buff))
90 sscanf(ea[i], "%*[^:]:%*[ ]%d", &ret);
91 }
92 if ((ea) && (ea[0]))
93 {
94 free(ea[0]);
95 free(ea);
96 }
97
98 return ret;
99}
100
101/* local functions */
102static Eina_Bool
103_ecore_xcb_xdefaults_glob_match(const char *str,
104 const char *glob)
105{
106 if ((!str) || (!glob)) return EINA_FALSE;
107 if (glob[0] == 0)
108 {
109 if (str[0] == 0) return EINA_TRUE;
110 return EINA_FALSE;
111 }
112 if (!strcmp(glob, "*")) return EINA_TRUE;
113 if (!fnmatch(glob, str, 0)) return EINA_TRUE;
114 return EINA_FALSE;
115}
116
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c
deleted file mode 100644
index bbca2a5..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c
+++ /dev/null
@@ -1,750 +0,0 @@
1#include "ecore_xcb_private.h"
2# ifdef ECORE_XCB_XFIXES
3# include <xcb/xfixes.h>
4# endif
5
6/* local function prototypes */
7static xcb_rectangle_t *_ecore_xcb_rect_to_xcb(Ecore_X_Rectangle *rects,
8 int num);
9static Ecore_X_Rectangle *_ecore_xcb_rect_to_ecore(xcb_rectangle_t *rects,
10 int num);
11
12/* local variables */
13static Eina_Bool _xfixes_avail = EINA_FALSE;
14
15/* external variables */
16int _ecore_xcb_event_xfixes = -1;
17
18void
19_ecore_xcb_xfixes_init(void)
20{
21 LOGFN(__FILE__, __LINE__, __FUNCTION__);
22
23#ifdef ECORE_XCB_XFIXES
24 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_xfixes_id);
25#endif
26}
27
28void
29_ecore_xcb_xfixes_finalize(void)
30{
31#ifdef ECORE_XCB_XFIXES
32 const xcb_query_extension_reply_t *ext_reply;
33#endif
34
35 LOGFN(__FILE__, __LINE__, __FUNCTION__);
36
37#ifdef ECORE_XCB_XFIXES
38 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_xfixes_id);
39 if ((ext_reply) && (ext_reply->present))
40 {
41 xcb_xfixes_query_version_cookie_t cookie;
42 xcb_xfixes_query_version_reply_t *reply;
43
44 cookie =
45 xcb_xfixes_query_version_unchecked(_ecore_xcb_conn,
46 XCB_XFIXES_MAJOR_VERSION,
47 XCB_XFIXES_MINOR_VERSION);
48 reply = xcb_xfixes_query_version_reply(_ecore_xcb_conn, cookie, NULL);
49 if (reply)
50 {
51 /* NB: XFixes Extension >= 3 needed for shape stuff.
52 * for now, I am removing this check so that it matches the
53 * xlib code closer. If the extension version ends up being
54 * that important, then re-enable this */
55
56 /* if (reply->major_version >= 3) */
57 _xfixes_avail = EINA_TRUE;
58 free(reply);
59 }
60
61 if (_xfixes_avail)
62 _ecore_xcb_event_xfixes = ext_reply->first_event;
63 }
64#endif
65}
66
67EAPI Eina_Bool
68ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection)
69{
70#ifdef ECORE_XCB_XFIXES
71 Ecore_X_Window root = 0;
72 xcb_void_cookie_t cookie;
73 xcb_generic_error_t *err;
74 int mask = 0;
75#endif
76
77 CHECK_XCB_CONN;
78
79 if (!_xfixes_avail) return EINA_FALSE;
80
81#ifdef ECORE_XCB_XFIXES
82 root = ((xcb_screen_t *)_ecore_xcb_screen)->root;
83
84 mask = (XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER |
85 XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY |
86 XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE);
87
88 cookie =
89 xcb_xfixes_select_selection_input_checked(_ecore_xcb_conn, root,
90 selection, mask);
91 err = xcb_request_check(_ecore_xcb_conn, cookie);
92 if (err)
93 {
94 free(err);
95 return EINA_FALSE;
96 }
97
98 return EINA_TRUE;
99#endif
100 return EINA_FALSE;
101}
102
103Eina_Bool
104_ecore_xcb_xfixes_avail_get(void)
105{
106 return _xfixes_avail;
107}
108
109/**
110 * @defgroup Ecore_X_Fixes_Group X Fixes Extension Functions
111 *
112 * Functions related to the X Fixes extension.
113 */
114
115/**
116 * Create a region from rectangles.
117 * @param rects The rectangles used to initialize the region.
118 * @param num The number of rectangles.
119 * @return The newly created region.
120 *
121 * Create a region initialized to the specified list of rectangles
122 * @p rects. The rectangles may be specified in any order, their union
123 * becomes the region.
124 * @ingroup Ecore_X_Fixes_Group
125 */
126EAPI Ecore_X_Region
127ecore_x_region_new(Ecore_X_Rectangle *rects,
128 int num)
129{
130 Ecore_X_Region region = 0;
131#ifdef ECORE_XCB_XFIXES
132 xcb_rectangle_t *xrects;
133#endif
134
135 LOGFN(__FILE__, __LINE__, __FUNCTION__);
136 CHECK_XCB_CONN;
137
138 if (!_xfixes_avail) return 0;
139
140#ifdef ECORE_XCB_XFIXES
141 xrects = _ecore_xcb_rect_to_xcb(rects, num);
142 region = xcb_generate_id(_ecore_xcb_conn);
143 xcb_xfixes_create_region(_ecore_xcb_conn, region, num, xrects);
144 free(xrects);
145// ecore_x_flush();
146#endif
147
148 return region;
149}
150
151/**
152 * Create a region from a pixmap.
153 * @param bitmap The bitmap used to initialize the region.
154 * @return The newly created region.
155 *
156 * Creates a region initialized to the set of 'one' pixels in @p bitmap
157 * (which must be of depth 1, else Match error).
158 * @ingroup Ecore_X_Fixes_Group
159 */
160EAPI Ecore_X_Region
161ecore_x_region_new_from_bitmap(Ecore_X_Pixmap bitmap)
162{
163 Ecore_X_Region region = 0;
164
165 LOGFN(__FILE__, __LINE__, __FUNCTION__);
166 CHECK_XCB_CONN;
167
168 if (!_xfixes_avail) return 0;
169
170#ifdef ECORE_XCB_XFIXES
171 region = xcb_generate_id(_ecore_xcb_conn);
172 xcb_xfixes_create_region_from_bitmap(_ecore_xcb_conn, region, bitmap);
173// ecore_x_flush();
174#endif
175
176 return region;
177}
178
179/**
180 * Create a region from a window.
181 * @param win The window used to initialize the region.
182 * @param type The type of the region.
183 * @return The newly created region.
184 *
185 * Creates a region initialized to the specified @p window region. See
186 * the Shape extension for the definition of Bounding and Clip
187 * regions.
188 * @ingroup Ecore_X_Fixes_Group
189 */
190EAPI Ecore_X_Region
191ecore_x_region_new_from_window(Ecore_X_Window win,
192 Ecore_X_Region_Type type)
193{
194 Ecore_X_Region region = 0;
195
196 LOGFN(__FILE__, __LINE__, __FUNCTION__);
197 CHECK_XCB_CONN;
198
199 if (!_xfixes_avail) return 0;
200
201#ifdef ECORE_XCB_XFIXES
202 region = xcb_generate_id(_ecore_xcb_conn);
203 xcb_xfixes_create_region_from_window(_ecore_xcb_conn, region, win, type);
204// ecore_x_flush();
205#endif
206
207 return region;
208}
209
210/**
211 * Create a region from a graphic context.
212 * @param gc The graphic context used to initialize the region.
213 * @return The newly created region.
214 *
215 * Creates a region initialized from the clip list of @p gc.
216 * @ingroup Ecore_X_Fixes_Group
217 */
218EAPI Ecore_X_Region
219ecore_x_region_new_from_gc(Ecore_X_GC gc)
220{
221 Ecore_X_Region region = 0;
222
223 LOGFN(__FILE__, __LINE__, __FUNCTION__);
224 CHECK_XCB_CONN;
225
226 if (!_xfixes_avail) return 0;
227
228#ifdef ECORE_XCB_XFIXES
229 region = xcb_generate_id(_ecore_xcb_conn);
230 xcb_xfixes_create_region_from_gc(_ecore_xcb_conn, region, gc);
231// ecore_x_flush();
232#endif
233
234 return region;
235}
236
237/**
238 * Create a region from a picture.
239 * @param picture The picture used to initialize the region.
240 * @return The newly created region.
241 *
242 * Creates a region initialized from the clip list of @p picture.
243 * @ingroup Ecore_X_Fixes_Group
244 */
245EAPI Ecore_X_Region
246ecore_x_region_new_from_picture(Ecore_X_Picture picture)
247{
248 Ecore_X_Region region = 0;
249
250 LOGFN(__FILE__, __LINE__, __FUNCTION__);
251 CHECK_XCB_CONN;
252
253 if (!_xfixes_avail) return 0;
254
255#ifdef ECORE_XCB_XFIXES
256 region = xcb_generate_id(_ecore_xcb_conn);
257 xcb_xfixes_create_region_from_picture(_ecore_xcb_conn, region, picture);
258// ecore_x_flush();
259#endif
260
261 return region;
262}
263
264/**
265 * Destroy a region.
266 * @param region The region to destroy.
267 *
268 * Destroy the specified @p region.
269 * @ingroup Ecore_X_Fixes_Group
270 */
271EAPI void
272ecore_x_region_free(Ecore_X_Region region)
273{
274 LOGFN(__FILE__, __LINE__, __FUNCTION__);
275 CHECK_XCB_CONN;
276
277 if (!_xfixes_avail) return;
278
279#ifdef ECORE_XCB_XFIXES
280 xcb_xfixes_destroy_region(_ecore_xcb_conn, region);
281// ecore_x_flush();
282#endif
283}
284
285/**
286 * Set the content of a region.
287 * @param region The region to destroy.
288 * @param rects The rectangles used to set the region.
289 * @param num The number of rectangles.
290 *
291 * Replace the current contents of @p region with the region formed
292 * by the union of the rectangles @p rects.
293 * @ingroup Ecore_X_Fixes_Group
294 */
295EAPI void
296ecore_x_region_set(Ecore_X_Region region,
297 Ecore_X_Rectangle *rects,
298 int num)
299{
300#ifdef ECORE_XCB_XFIXES
301 xcb_rectangle_t *xrects;
302#endif
303
304 LOGFN(__FILE__, __LINE__, __FUNCTION__);
305 CHECK_XCB_CONN;
306
307 if (!_xfixes_avail) return;
308
309#ifdef ECORE_XCB_XFIXES
310 xrects = _ecore_xcb_rect_to_xcb(rects, num);
311 xcb_xfixes_set_region(_ecore_xcb_conn, region, num, xrects);
312 free(xrects);
313// ecore_x_flush();
314#endif
315}
316
317/**
318 * Copy the content of a region.
319 * @param dest The destination region.
320 * @param source The source region.
321 *
322 * Replace the contents of @p dest with the contents of @p source.
323 * @ingroup Ecore_X_Fixes_Group
324 */
325EAPI void
326ecore_x_region_copy(Ecore_X_Region dest,
327 Ecore_X_Region source)
328{
329 LOGFN(__FILE__, __LINE__, __FUNCTION__);
330 CHECK_XCB_CONN;
331
332 if (!_xfixes_avail) return;
333
334 // NB: Hmmmm...this may need converting to/fro xcb_rectangle_t
335#ifdef ECORE_XCB_XFIXES
336 xcb_xfixes_copy_region(_ecore_xcb_conn, source, dest);
337// ecore_x_flush();
338#endif
339}
340
341/**
342 * Make the union of two regions.
343 * @param dest The destination region.
344 * @param source1 The first source region.
345 * @param source2 The second source region.
346 *
347 * Replace the contents of @p dest with the union of @p source1 and
348 * @p source2.
349 * @ingroup Ecore_X_Fixes_Group
350 */
351EAPI void
352ecore_x_region_combine(Ecore_X_Region dest,
353 Ecore_X_Region source1,
354 Ecore_X_Region source2)
355{
356 LOGFN(__FILE__, __LINE__, __FUNCTION__);
357 CHECK_XCB_CONN;
358
359 if (!_xfixes_avail) return;
360
361#ifdef ECORE_XCB_XFIXES
362 xcb_xfixes_union_region(_ecore_xcb_conn, source1, source2, dest);
363// ecore_x_flush();
364#endif
365}
366
367/**
368 * Make the intersection of two regions.
369 * @param dest The destination region.
370 * @param source1 The first source region.
371 * @param source2 The second source region.
372 *
373 * Replace the contents of @p dest with the intersection of @p source1 and
374 * @p source2.
375 * @ingroup Ecore_X_Fixes_Group
376 */
377EAPI void
378ecore_x_region_intersect(Ecore_X_Region dest,
379 Ecore_X_Region source1,
380 Ecore_X_Region source2)
381{
382 LOGFN(__FILE__, __LINE__, __FUNCTION__);
383 CHECK_XCB_CONN;
384
385 if (!_xfixes_avail) return;
386
387#ifdef ECORE_XCB_XFIXES
388 xcb_xfixes_intersect_region(_ecore_xcb_conn, source1, source2, dest);
389// ecore_x_flush();
390#endif
391}
392
393/**
394 * Make the subtraction of two regions.
395 * @param dest The destination region.
396 * @param source1 The first source region.
397 * @param source2 The second source region.
398 *
399 * Replace the contents of @p dest with the subtraction of @p source1 by
400 * @p source2.
401 * @ingroup Ecore_X_Fixes_Group
402 */
403EAPI void
404ecore_x_region_subtract(Ecore_X_Region dest,
405 Ecore_X_Region source1,
406 Ecore_X_Region source2)
407{
408 LOGFN(__FILE__, __LINE__, __FUNCTION__);
409 CHECK_XCB_CONN;
410
411 if (!_xfixes_avail) return;
412
413#ifdef ECORE_XCB_XFIXES
414 xcb_xfixes_subtract_region(_ecore_xcb_conn, source1, source2, dest);
415// ecore_x_flush();
416#endif
417}
418
419/**
420 * Make the subtraction of regions by bounds.
421 * @param dest The destination region.
422 * @param bounds The bounds.
423 * @param source The source region.
424 *
425 * The @p source region is subtracted from the region specified by
426 * @p bounds. The result is placed in @p dest, replacing its
427 * contents.
428 * @ingroup Ecore_X_Fixes_Group
429 */
430EAPI void
431ecore_x_region_invert(Ecore_X_Region dest,
432 Ecore_X_Rectangle *bounds,
433 Ecore_X_Region source)
434{
435#ifdef ECORE_XCB_XFIXES
436 xcb_rectangle_t xrects;
437#endif
438
439 LOGFN(__FILE__, __LINE__, __FUNCTION__);
440 CHECK_XCB_CONN;
441
442 if (!_xfixes_avail) return;
443
444#ifdef ECORE_XCB_XFIXES
445 xrects.x = bounds->x;
446 xrects.y = bounds->y;
447 xrects.width = bounds->width;
448 xrects.height = bounds->height;
449
450 xcb_xfixes_invert_region(_ecore_xcb_conn, source, xrects, dest);
451// ecore_x_flush();
452#endif
453}
454
455/**
456 * Translate a region.
457 * @param region The region to translate.
458 * @param dx The horizontal translation.
459 * @param dy The vertical translation.
460 *
461 * The @p region is translated by @p dx and @p dy in place.
462 * @ingroup Ecore_X_Fixes_Group
463 */
464EAPI void
465ecore_x_region_translate(Ecore_X_Region region,
466 int dx,
467 int dy)
468{
469 LOGFN(__FILE__, __LINE__, __FUNCTION__);
470 CHECK_XCB_CONN;
471
472 if (!_xfixes_avail) return;
473
474#ifdef ECORE_XCB_XFIXES
475 xcb_xfixes_translate_region(_ecore_xcb_conn, region, dx, dy);
476// ecore_x_flush();
477#endif
478}
479
480/**
481 * Extent a region.
482 * @param dest The destination region.
483 * @param source The source region.
484 *
485 * The extents of the @p source region are placed in @p dest.
486 * @ingroup Ecore_X_Fixes_Group
487 */
488EAPI void
489ecore_x_region_extents(Ecore_X_Region dest,
490 Ecore_X_Region source)
491{
492 LOGFN(__FILE__, __LINE__, __FUNCTION__);
493 CHECK_XCB_CONN;
494
495 if (!_xfixes_avail) return;
496
497#ifdef ECORE_XCB_XFIXES
498 xcb_xfixes_region_extents(_ecore_xcb_conn, source, dest);
499// ecore_x_flush();
500#endif
501}
502
503/**
504 * Return the rectangles that compose a region.
505 * @param region The region (Unused).
506 * @param num The number of returned rectangles.
507 * @param bounds The returned bounds of the region.
508 * @return The returned rectangles.
509 *
510 * The @p region passed to ecore_xcb_region_fetch_prefetch() is
511 * returned as a list of rectagles in XY-banded order.
512 *
513 * To use this function, you must call before, and in order,
514 * ecore_xcb_region_fetch_prefetch(), which sends the XFixesFetchRegion request,
515 * then ecore_xcb_region_fetch_fetch(), which gets the reply.
516 * @ingroup Ecore_X_Fixes_Group
517 */
518EAPI Ecore_X_Rectangle *
519ecore_x_region_fetch(Ecore_X_Region region,
520 int *num,
521 Ecore_X_Rectangle *bounds)
522{
523 Ecore_X_Rectangle extents = { 0, 0, 0, 0 };
524 Ecore_X_Rectangle *rects = NULL;
525#ifdef ECORE_XCB_XFIXES
526 xcb_xfixes_fetch_region_cookie_t cookie;
527 xcb_xfixes_fetch_region_reply_t *reply;
528 xcb_rectangle_t *r;
529 int n = 0;
530#endif
531
532 LOGFN(__FILE__, __LINE__, __FUNCTION__);
533 CHECK_XCB_CONN;
534
535 if (num) *num = 0;
536 if (bounds) *bounds = extents;
537 if (!_xfixes_avail) return NULL;
538
539#ifdef ECORE_XCB_XFIXES
540 cookie = xcb_xfixes_fetch_region_unchecked(_ecore_xcb_conn, region);
541 reply = xcb_xfixes_fetch_region_reply(_ecore_xcb_conn, cookie, NULL);
542 if (!reply) return NULL;
543
544 r = xcb_xfixes_fetch_region_rectangles(reply);
545 n = xcb_xfixes_fetch_region_rectangles_length(reply);
546 rects = _ecore_xcb_rect_to_ecore(r, n);
547 if (num) *num = n;
548
549 /* rects = (Ecore_X_Rectangle *)malloc(n * sizeof(Ecore_X_Rectangle)); */
550 /* if (!rects) */
551 /* { */
552 /* free(reply); */
553 /* return NULL; */
554 /* } */
555
556 /* for (i = 0; i < n; i++) */
557 /* { */
558 /* rects[i].x = r[i].x; */
559 /* rects[i].y = r[i].y; */
560 /* rects[i].width = r[i].width; */
561 /* rects[i].height = r[i].height; */
562 /* } */
563
564 (*bounds).x = reply->extents.x;
565 (*bounds).y = reply->extents.y;
566 (*bounds).width = reply->extents.width;
567 (*bounds).height = reply->extents.height;
568
569 free(reply);
570#endif
571
572 return rects;
573}
574
575/**
576 * Expand a region.
577 * @param dest The destination region.
578 * @param source The source region.
579 * @param left The number of pixels to add on the left.
580 * @param right The number of pixels to add on the right.
581 * @param top The number of pixels to add at the top.
582 * @param bottom The number of pixels to add at the bottom.
583 *
584 * Put in @p dest the area specified by expanding each rectangle in
585 * the @p source region by the specified number of pixels to the
586 * @p left, @p right, @p top and @p bottom.
587 * @ingroup Ecore_X_Fixes_Group
588 */
589EAPI void
590ecore_x_region_expand(Ecore_X_Region dest,
591 Ecore_X_Region source,
592 unsigned int left,
593 unsigned int right,
594 unsigned int top,
595 unsigned int bottom)
596{
597 LOGFN(__FILE__, __LINE__, __FUNCTION__);
598 CHECK_XCB_CONN;
599
600 if (!_xfixes_avail) return;
601
602#ifdef ECORE_XCB_XFIXES
603 xcb_xfixes_expand_region(_ecore_xcb_conn, source, dest, left, right, top, bottom);
604// ecore_x_flush();
605#endif
606}
607
608/**
609 * Change clip-mask in a graphic context to the specified region.
610 * @param region The region to change.
611 * @param gc The clip-mask graphic context.
612 * @param x The horizontal translation.
613 * @param y The vertical translation.
614 *
615 * Changes clip-mask in @p gc to the specified @p region and
616 * sets the clip origin with the values of @p x_origin and @p y_origin.
617 * Output will be clippped to remain contained within the region. The
618 * clip origin is interpreted relative to the origin of whatever
619 * destination drawable is specified in a graphics request. The
620 * region is interpreted relative to the clip origin. Future changes
621 * to region have no effect on the gc clip-mask.
622 * @ingroup Ecore_X_Fixes_Group
623 */
624EAPI void
625ecore_x_region_gc_clip_set(Ecore_X_Region region,
626 Ecore_X_GC gc,
627 int x,
628 int y)
629{
630 LOGFN(__FILE__, __LINE__, __FUNCTION__);
631 CHECK_XCB_CONN;
632
633 if (!_xfixes_avail) return;
634
635#ifdef ECORE_XCB_XFIXES
636 xcb_xfixes_set_gc_clip_region(_ecore_xcb_conn, gc, region, x, y);
637// ecore_x_flush();
638#endif
639}
640
641/**
642 * Change the shape extension of a window.
643 * @param region The region.
644 * @param dest The window whose shape is changed.
645 * @param type The kind of shape.
646 * @param x The horizontal offset.
647 * @param y The vertical offset.
648 *
649 * Set the specified Shape extension region of @p window to @p region,
650 * offset by @p x_offset and @p y_offset. Future changes to region
651 * have no effect on the window shape.
652 * @ingroup Ecore_X_Fixes_Group
653 */
654EAPI void
655ecore_x_region_window_shape_set(Ecore_X_Region region,
656 Ecore_X_Window dest,
657 Ecore_X_Shape_Type type,
658 int x,
659 int y)
660{
661 LOGFN(__FILE__, __LINE__, __FUNCTION__);
662 CHECK_XCB_CONN;
663
664 if (!_xfixes_avail) return;
665
666#ifdef ECORE_XCB_XFIXES
667 xcb_xfixes_set_window_shape_region(_ecore_xcb_conn, dest, type, x, y, region);
668// ecore_x_flush();
669#endif
670}
671
672/**
673 * Change clip-mask in picture to the specified region.
674 * @param region The region.
675 * @param picture The picture.
676 * @param x The X coordinate of the origin.
677 * @param y The Y coordinate of the origin.
678 *
679 * Changes clip-mask in picture to the specified @p region
680 * and sets the clip origin. Input and output will be clipped to
681 * remain contained within the region. The clip origin is interpreted
682 * relative to the origin of the drawable associated with @p picture. The
683 * region is interpreted relative to the clip origin. Future changes
684 * to region have no effect on the picture clip-mask.
685 * @ingroup Ecore_X_Fixes_Group
686 */
687EAPI void
688ecore_x_region_picture_clip_set(Ecore_X_Region region,
689 Ecore_X_Picture picture,
690 int x,
691 int y)
692{
693 LOGFN(__FILE__, __LINE__, __FUNCTION__);
694 CHECK_XCB_CONN;
695
696 if (!_xfixes_avail) return;
697
698#ifdef ECORE_XCB_XFIXES
699 xcb_xfixes_set_picture_clip_region(_ecore_xcb_conn, picture, region, x, y);
700// ecore_x_flush();
701#endif
702}
703
704/* local function prototypes */
705static xcb_rectangle_t *
706_ecore_xcb_rect_to_xcb(Ecore_X_Rectangle *rects,
707 int num)
708{
709 xcb_rectangle_t *xrect;
710 int i = 0;
711
712 if (!num) return NULL;
713
714 xrect = malloc(sizeof(xcb_rectangle_t) * num);
715 if (!xrect) return NULL;
716
717 for (i = 0; i < num; i++)
718 {
719 xrect[i].x = rects[i].x;
720 xrect[i].y = rects[i].y;
721 xrect[i].width = rects[i].width;
722 xrect[i].height = rects[i].height;
723 }
724
725 return xrect;
726}
727
728static Ecore_X_Rectangle *
729_ecore_xcb_rect_to_ecore(xcb_rectangle_t *rects,
730 int num)
731{
732 Ecore_X_Rectangle *erect;
733 int i = 0;
734
735 if (!num) return NULL;
736
737 erect = malloc(sizeof(Ecore_X_Rectangle) * num);
738 if (!erect) return NULL;
739
740 for (i = 0; i < num; i++)
741 {
742 erect[i].x = rects[i].x;
743 erect[i].y = rects[i].y;
744 erect[i].width = rects[i].width;
745 erect[i].height = rects[i].height;
746 }
747
748 return erect;
749}
750
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xinerama.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xinerama.c
deleted file mode 100644
index 37a2339..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xinerama.c
+++ /dev/null
@@ -1,139 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_XINERAMA
3# include <xcb/xinerama.h>
4#endif
5
6/* local variables */
7static Eina_Bool _xinerama_avail = EINA_FALSE;
8static Eina_Bool _xinerama_active = EINA_FALSE;
9
10void
11_ecore_xcb_xinerama_init(void)
12{
13 LOGFN(__FILE__, __LINE__, __FUNCTION__);
14
15#ifdef ECORE_XCB_XINERAMA
16 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_xinerama_id);
17#endif
18}
19
20void
21_ecore_xcb_xinerama_finalize(void)
22{
23#ifdef ECORE_XCB_XINERAMA
24 const xcb_query_extension_reply_t *ext_reply;
25#endif
26
27 LOGFN(__FILE__, __LINE__, __FUNCTION__);
28
29#ifdef ECORE_XCB_XINERAMA
30 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_xinerama_id);
31 if ((ext_reply) && (ext_reply->present))
32 {
33 xcb_xinerama_query_version_cookie_t cookie;
34 xcb_xinerama_query_version_reply_t *reply;
35
36 cookie =
37 xcb_xinerama_query_version_unchecked(_ecore_xcb_conn,
38 XCB_XINERAMA_MAJOR_VERSION,
39 XCB_XINERAMA_MINOR_VERSION);
40 reply =
41 xcb_xinerama_query_version_reply(_ecore_xcb_conn, cookie, NULL);
42 if (reply)
43 {
44 _xinerama_avail = EINA_TRUE;
45 // NB: Do we need to compare version numbers here ?
46 free(reply);
47 }
48
49 if (_xinerama_avail)
50 {
51 xcb_xinerama_is_active_cookie_t acookie;
52 xcb_xinerama_is_active_reply_t *areply;
53
54 acookie = xcb_xinerama_is_active_unchecked(_ecore_xcb_conn);
55 areply =
56 xcb_xinerama_is_active_reply(_ecore_xcb_conn, acookie, NULL);
57 if (areply)
58 {
59 _xinerama_active = areply->state;
60 free(areply);
61 }
62 }
63 }
64#endif
65}
66
67EAPI int
68ecore_x_xinerama_screen_count_get(void)
69{
70 int count = 0;
71#ifdef ECORE_XCB_XINERAMA
72 xcb_xinerama_query_screens_cookie_t cookie;
73 xcb_xinerama_query_screens_reply_t *reply;
74#endif
75
76 LOGFN(__FILE__, __LINE__, __FUNCTION__);
77 CHECK_XCB_CONN;
78
79 if (!_xinerama_avail) return 0;
80
81#ifdef ECORE_XCB_XINERAMA
82 cookie = xcb_xinerama_query_screens_unchecked(_ecore_xcb_conn);
83 reply =
84 xcb_xinerama_query_screens_reply(_ecore_xcb_conn, cookie, NULL);
85 if (!reply) return 0;
86 count = reply->number;
87#endif
88
89 return count;
90}
91
92EAPI Eina_Bool
93ecore_x_xinerama_screen_geometry_get(int screen,
94 int *x,
95 int *y,
96 int *w,
97 int *h)
98{
99#ifdef ECORE_XCB_XINERAMA
100 xcb_xinerama_query_screens_cookie_t cookie;
101 xcb_xinerama_query_screens_reply_t *reply;
102 xcb_xinerama_screen_info_t *info;
103#endif
104
105 LOGFN(__FILE__, __LINE__, __FUNCTION__);
106 CHECK_XCB_CONN;
107
108 if (x) *x = 0;
109 if (y) *y = 0;
110 if (w) *w = ((xcb_screen_t *)_ecore_xcb_screen)->width_in_pixels;
111 if (h) *h = ((xcb_screen_t *)_ecore_xcb_screen)->height_in_pixels;
112
113 if (!_xinerama_avail) return EINA_FALSE;
114
115#ifdef ECORE_XCB_XINERAMA
116 cookie = xcb_xinerama_query_screens_unchecked(_ecore_xcb_conn);
117 reply =
118 xcb_xinerama_query_screens_reply(_ecore_xcb_conn, cookie, NULL);
119 if (!reply) return EINA_FALSE;
120
121 info = xcb_xinerama_query_screens_screen_info(reply);
122 if (!info)
123 {
124 free(reply);
125 return EINA_FALSE;
126 }
127
128 if (x) *x = info[screen].x_org;
129 if (y) *y = info[screen].y_org;
130 if (w) *w = info[screen].width;
131 if (h) *h = info[screen].height;
132
133 free(reply);
134 return EINA_TRUE;
135#endif
136
137 return EINA_FALSE;
138}
139
diff --git a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xtest.c b/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xtest.c
deleted file mode 100644
index b664dc9..0000000
--- a/libraries/ecore/src/lib/ecore_x/xcb/ecore_xcb_xtest.c
+++ /dev/null
@@ -1,215 +0,0 @@
1#include "ecore_xcb_private.h"
2#ifdef ECORE_XCB_XTEST
3# include <xcb/xtest.h>
4# include <X11/keysym.h>
5#endif
6
7/* local variables */
8static Eina_Bool _test_avail = EINA_FALSE;
9
10void
11_ecore_xcb_xtest_init(void)
12{
13 LOGFN(__FILE__, __LINE__, __FUNCTION__);
14
15#ifdef ECORE_XCB_XTEST
16 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_test_id);
17#endif
18}
19
20void
21_ecore_xcb_xtest_finalize(void)
22{
23#ifdef ECORE_XCB_XTEST
24 const xcb_query_extension_reply_t *ext_reply;
25#endif
26
27 LOGFN(__FILE__, __LINE__, __FUNCTION__);
28
29#ifdef ECORE_XCB_XTEST
30 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_test_id);
31 if ((ext_reply) && (ext_reply->present))
32 _test_avail = EINA_TRUE;
33#endif
34}
35
36EAPI Eina_Bool
37#ifdef ECORE_XCB_XTEST
38ecore_x_test_fake_key_down(const char *key)
39#else
40ecore_x_test_fake_key_down(const char *key __UNUSED__)
41#endif
42{
43#ifdef ECORE_XCB_XTEST
44 xcb_keycode_t keycode = 0;
45 xcb_void_cookie_t cookie;
46 xcb_generic_error_t *err;
47#endif
48
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
50 CHECK_XCB_CONN;
51
52 if (!_test_avail) return EINA_FALSE;
53
54#ifdef ECORE_XCB_XTEST
55 keycode = _ecore_xcb_keymap_string_to_keycode(key);
56 if (keycode == XCB_NO_SYMBOL) return EINA_FALSE;
57
58 cookie =
59 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
60 keycode, XCB_CURRENT_TIME,
61 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
62 err = xcb_request_check(_ecore_xcb_conn, cookie);
63 if (err)
64 {
65 free(err);
66 return EINA_FALSE;
67 }
68 return EINA_TRUE;
69#endif
70
71 return EINA_FALSE;
72}
73
74EAPI Eina_Bool
75#ifdef ECORE_XCB_XTEST
76ecore_x_test_fake_key_up(const char *key)
77#else
78ecore_x_test_fake_key_up(const char *key __UNUSED__)
79#endif
80{
81#ifdef ECORE_XCB_XTEST
82 xcb_keycode_t keycode = 0;
83 xcb_void_cookie_t cookie;
84 xcb_generic_error_t *err;
85#endif
86
87 LOGFN(__FILE__, __LINE__, __FUNCTION__);
88 CHECK_XCB_CONN;
89
90 if (!_test_avail) return EINA_FALSE;
91
92#ifdef ECORE_XCB_XTEST
93 keycode = _ecore_xcb_keymap_string_to_keycode(key);
94 if (keycode == XCB_NO_SYMBOL) return EINA_FALSE;
95
96 cookie =
97 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
98 keycode, XCB_CURRENT_TIME,
99 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
100 err = xcb_request_check(_ecore_xcb_conn, cookie);
101 if (err)
102 {
103 free(err);
104 return EINA_FALSE;
105 }
106 return EINA_TRUE;
107#endif
108
109 return EINA_FALSE;
110}
111
112EAPI Eina_Bool
113#ifdef ECORE_XCB_XTEST
114ecore_x_test_fake_key_press(const char *key)
115#else
116ecore_x_test_fake_key_press(const char *key __UNUSED__)
117#endif
118{
119#ifdef ECORE_XCB_XTEST
120 xcb_keycode_t keycode = 0;
121 xcb_keysym_t keysym = 0;
122 xcb_keycode_t shift_code = 0;
123 xcb_void_cookie_t cookie;
124 xcb_generic_error_t *err;
125 Eina_Bool shift = EINA_FALSE;
126#endif
127
128 LOGFN(__FILE__, __LINE__, __FUNCTION__);
129 CHECK_XCB_CONN;
130
131 if (!_test_avail) return EINA_FALSE;
132
133#ifdef ECORE_XCB_XTEST
134 keycode = _ecore_xcb_keymap_string_to_keycode(key);
135 keysym = _ecore_xcb_keymap_keycode_to_keysym(keycode, 0);
136 if (keysym == XCB_NO_SYMBOL)
137 {
138 keysym = _ecore_xcb_keymap_keycode_to_keysym(keycode, 1);
139 if (keysym != XCB_NO_SYMBOL)
140 shift = EINA_TRUE;
141 }
142
143 if (shift)
144 {
145 xcb_keycode_t *keycodes;
146 int i = 0;
147
148 keycodes = _ecore_xcb_keymap_keysym_to_keycode(XK_Shift_L);
149 while (keycodes[i] != XCB_NO_SYMBOL)
150 {
151 if (keycodes[i] != 0)
152 {
153 shift_code = keycodes[i];
154 break;
155 }
156 i++;
157 }
158 }
159
160 if (shift)
161 {
162 cookie =
163 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
164 shift_code, XCB_CURRENT_TIME,
165 ((xcb_screen_t *)_ecore_xcb_screen)->root,
166 0, 0, 0);
167 err = xcb_request_check(_ecore_xcb_conn, cookie);
168 if (err)
169 {
170 free(err);
171 return EINA_FALSE;
172 }
173 }
174
175 cookie =
176 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
177 keycode, XCB_CURRENT_TIME,
178 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
179 err = xcb_request_check(_ecore_xcb_conn, cookie);
180 if (err)
181 {
182 free(err);
183 return EINA_FALSE;
184 }
185 cookie =
186 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
187 keycode, XCB_CURRENT_TIME,
188 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
189 err = xcb_request_check(_ecore_xcb_conn, cookie);
190 if (err)
191 {
192 free(err);
193 return EINA_FALSE;
194 }
195
196 if (shift)
197 {
198 cookie =
199 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
200 shift_code, XCB_CURRENT_TIME,
201 ((xcb_screen_t *)_ecore_xcb_screen)->root,
202 0, 0, 0);
203 err = xcb_request_check(_ecore_xcb_conn, cookie);
204 if (err)
205 {
206 free(err);
207 return EINA_FALSE;
208 }
209 }
210
211 return EINA_TRUE;
212#endif
213
214 return EINA_FALSE;
215}
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/Makefile.am b/libraries/ecore/src/lib/ecore_x/xlib/Makefile.am
deleted file mode 100644
index 3c7364c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/Makefile.am
+++ /dev/null
@@ -1,94 +0,0 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4if BUILD_ECORE_X_XLIB
5
6AM_CPPFLAGS = \
7@Xcursor_cflags@ \
8@XKB_CFLAGS@ \
9@XDAMAGE_CFLAGS@ \
10@XCOMPOSITE_CFLAGS@ \
11@XGESTURE_CFLAGS@ \
12@XDPMS_CFLAGS@ \
13@XFIXES_CFLAGS@ \
14@XI2_CFLAGS@ \
15@XINERAMA_CFLAGS@ \
16@XPRINT_CFLAGS@ \
17@XRANDR_CFLAGS@ \
18@XRENDER_CFLAGS@ \
19@XSS_CFLAGS@ \
20@XTEST_CFLAGS@ \
21@x_cflags@ \
22-I$(top_srcdir)/src/lib/ecore \
23-I$(top_srcdir)/src/lib/ecore_x \
24-I$(top_srcdir)/src/lib/ecore_input \
25-I$(top_builddir)/src/lib/ecore \
26-I$(top_builddir)/src/lib/ecore_x \
27-I$(top_builddir)/src/lib/ecore_input \
28@EVAS_CFLAGS@ \
29@EINA_CFLAGS@
30
31noinst_LTLIBRARIES = libecore_x_xlib.la
32
33libecore_x_xlib_la_SOURCES = \
34ecore_x.c \
35ecore_x_dnd.c \
36ecore_x_sync.c \
37ecore_x_randr.c \
38ecore_x_randr_11.c \
39ecore_x_randr_12.c \
40ecore_x_randr_12_edid.c \
41ecore_x_randr_13.c \
42ecore_x_fixes.c \
43ecore_x_damage.c \
44ecore_x_composite.c \
45ecore_x_error.c \
46ecore_x_events.c \
47ecore_x_icccm.c \
48ecore_x_netwm.c \
49ecore_x_mwm.c \
50ecore_x_e.c \
51ecore_x_selection.c \
52ecore_x_window.c \
53ecore_x_window_prop.c \
54ecore_x_window_shape.c \
55ecore_x_pixmap.c \
56ecore_x_gc.c \
57ecore_x_xinerama.c \
58ecore_x_screensaver.c \
59ecore_x_dpms.c \
60ecore_x_drawable.c \
61ecore_x_cursor.c \
62ecore_x_test.c \
63ecore_x_atoms.c \
64ecore_x_region.c \
65ecore_x_image.c \
66ecore_x_xi2.c \
67ecore_x_vsync.c \
68ecore_x_randr.h \
69ecore_x_gesture.c
70
71libecore_x_xlib_la_LIBADD = \
72@Xcursor_libs@ \
73@XKB_LIBS@ \
74@XDAMAGE_LIBS@ \
75@XCOMPOSITE_LIBS@ \
76@XGESTURE_LIBS@ \
77@XDPMS_LIBS@ \
78@XFIXES_LIBS@ \
79@XI2_LIBS@ \
80@XINERAMA_LIBS@ \
81@XPRINT_LIBS@ \
82@XRANDR_LIBS@ \
83@XRENDER_LIBS@ \
84@XSS_LIBS@ \
85@XTEST_LIBS@ \
86@x_libs@ \
87$(top_builddir)/src/lib/ecore/libecore.la \
88$(top_builddir)/src/lib/ecore_input/libecore_input.la \
89@EINA_LIBS@ \
90@dlopen_libs@
91
92endif
93
94EXTRA_DIST = ecore_x_private.h
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/Makefile.in b/libraries/ecore/src/lib/ecore_x/xlib/Makefile.in
deleted file mode 100644
index cada69a..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/Makefile.in
+++ /dev/null
@@ -1,888 +0,0 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/lib/ecore_x/xlib
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/ac_attribute.m4 \
41 $(top_srcdir)/m4/ac_path_generic.m4 \
42 $(top_srcdir)/m4/check_x_extension.m4 \
43 $(top_srcdir)/m4/ecore_check_module.m4 \
44 $(top_srcdir)/m4/ecore_check_options.m4 \
45 $(top_srcdir)/m4/efl_compiler_flag.m4 \
46 $(top_srcdir)/m4/efl_doxygen.m4 \
47 $(top_srcdir)/m4/efl_examples.m4 \
48 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
49 $(top_srcdir)/m4/efl_threads.m4 $(top_srcdir)/m4/gettext.m4 \
50 $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
51 $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
52 $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
53 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
54 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
55 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
56 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
58 $(ACLOCAL_M4)
59mkinstalldirs = $(install_sh) -d
60CONFIG_HEADER = $(top_builddir)/config.h
61CONFIG_CLEAN_FILES =
62CONFIG_CLEAN_VPATH_FILES =
63LTLIBRARIES = $(noinst_LTLIBRARIES)
64@BUILD_ECORE_X_XLIB_TRUE@libecore_x_xlib_la_DEPENDENCIES = $(top_builddir)/src/lib/ecore/libecore.la \
65@BUILD_ECORE_X_XLIB_TRUE@ $(top_builddir)/src/lib/ecore_input/libecore_input.la
66am__libecore_x_xlib_la_SOURCES_DIST = ecore_x.c ecore_x_dnd.c \
67 ecore_x_sync.c ecore_x_randr.c ecore_x_randr_11.c \
68 ecore_x_randr_12.c ecore_x_randr_12_edid.c ecore_x_randr_13.c \
69 ecore_x_fixes.c ecore_x_damage.c ecore_x_composite.c \
70 ecore_x_error.c ecore_x_events.c ecore_x_icccm.c \
71 ecore_x_netwm.c ecore_x_mwm.c ecore_x_e.c ecore_x_selection.c \
72 ecore_x_window.c ecore_x_window_prop.c ecore_x_window_shape.c \
73 ecore_x_pixmap.c ecore_x_gc.c ecore_x_xinerama.c \
74 ecore_x_screensaver.c ecore_x_dpms.c ecore_x_drawable.c \
75 ecore_x_cursor.c ecore_x_test.c ecore_x_atoms.c \
76 ecore_x_region.c ecore_x_image.c ecore_x_xi2.c ecore_x_vsync.c \
77 ecore_x_randr.h ecore_x_gesture.c
78@BUILD_ECORE_X_XLIB_TRUE@am_libecore_x_xlib_la_OBJECTS = ecore_x.lo \
79@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_dnd.lo ecore_x_sync.lo \
80@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_randr.lo ecore_x_randr_11.lo \
81@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_randr_12.lo \
82@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_randr_12_edid.lo \
83@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_randr_13.lo ecore_x_fixes.lo \
84@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_damage.lo \
85@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_composite.lo ecore_x_error.lo \
86@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_events.lo ecore_x_icccm.lo \
87@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_netwm.lo ecore_x_mwm.lo \
88@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_e.lo ecore_x_selection.lo \
89@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_window.lo \
90@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_window_prop.lo \
91@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_window_shape.lo \
92@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_pixmap.lo ecore_x_gc.lo \
93@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_xinerama.lo \
94@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_screensaver.lo \
95@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_dpms.lo ecore_x_drawable.lo \
96@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_cursor.lo ecore_x_test.lo \
97@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_atoms.lo ecore_x_region.lo \
98@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_image.lo ecore_x_xi2.lo \
99@BUILD_ECORE_X_XLIB_TRUE@ ecore_x_vsync.lo ecore_x_gesture.lo
100libecore_x_xlib_la_OBJECTS = $(am_libecore_x_xlib_la_OBJECTS)
101AM_V_lt = $(am__v_lt_$(V))
102am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
103am__v_lt_0 = --silent
104@BUILD_ECORE_X_XLIB_TRUE@am_libecore_x_xlib_la_rpath =
105DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
106depcomp = $(SHELL) $(top_srcdir)/depcomp
107am__depfiles_maybe = depfiles
108am__mv = mv -f
109COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
110 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
111LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
112 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
113 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
114 $(AM_CFLAGS) $(CFLAGS)
115AM_V_CC = $(am__v_CC_$(V))
116am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
117am__v_CC_0 = @echo " CC " $@;
118AM_V_at = $(am__v_at_$(V))
119am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
120am__v_at_0 = @
121CCLD = $(CC)
122LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
123 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
124 $(AM_LDFLAGS) $(LDFLAGS) -o $@
125AM_V_CCLD = $(am__v_CCLD_$(V))
126am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
127am__v_CCLD_0 = @echo " CCLD " $@;
128AM_V_GEN = $(am__v_GEN_$(V))
129am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
130am__v_GEN_0 = @echo " GEN " $@;
131SOURCES = $(libecore_x_xlib_la_SOURCES)
132DIST_SOURCES = $(am__libecore_x_xlib_la_SOURCES_DIST)
133ETAGS = etags
134CTAGS = ctags
135DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
136ACLOCAL = @ACLOCAL@
137ALLOCA = @ALLOCA@
138AMTAR = @AMTAR@
139AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
140AR = @AR@
141AS = @AS@
142AUTOCONF = @AUTOCONF@
143AUTOHEADER = @AUTOHEADER@
144AUTOMAKE = @AUTOMAKE@
145AWK = @AWK@
146CARES_CFLAGS = @CARES_CFLAGS@
147CARES_LIBS = @CARES_LIBS@
148CC = @CC@
149CCDEPMODE = @CCDEPMODE@
150CFLAGS = @CFLAGS@
151CHECK_CFLAGS = @CHECK_CFLAGS@
152CHECK_LIBS = @CHECK_LIBS@
153CPP = @CPP@
154CPPFLAGS = @CPPFLAGS@
155CURL_CFLAGS = @CURL_CFLAGS@
156CURL_LIBS = @CURL_LIBS@
157CXX = @CXX@
158CXXCPP = @CXXCPP@
159CXXDEPMODE = @CXXDEPMODE@
160CXXFLAGS = @CXXFLAGS@
161CYGPATH_W = @CYGPATH_W@
162DEFS = @DEFS@
163DEPDIR = @DEPDIR@
164DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
165DIRECTFB_LIBS = @DIRECTFB_LIBS@
166DLLTOOL = @DLLTOOL@
167DSYMUTIL = @DSYMUTIL@
168DUMPBIN = @DUMPBIN@
169ECHO_C = @ECHO_C@
170ECHO_N = @ECHO_N@
171ECHO_T = @ECHO_T@
172ECORE_XCB_CFLAGS = @ECORE_XCB_CFLAGS@
173ECORE_XCB_LIBS = @ECORE_XCB_LIBS@
174EFL_ECORE_BUILD = @EFL_ECORE_BUILD@
175EFL_ECORE_CON_BUILD = @EFL_ECORE_CON_BUILD@
176EFL_ECORE_EVAS_BUILD = @EFL_ECORE_EVAS_BUILD@
177EFL_ECORE_FILE_BUILD = @EFL_ECORE_FILE_BUILD@
178EFL_ECORE_IMF_BUILD = @EFL_ECORE_IMF_BUILD@
179EFL_ECORE_IMF_EVAS_BUILD = @EFL_ECORE_IMF_EVAS_BUILD@
180EFL_ECORE_INPUT_BUILD = @EFL_ECORE_INPUT_BUILD@
181EFL_ECORE_INPUT_EVAS_BUILD = @EFL_ECORE_INPUT_EVAS_BUILD@
182EFL_ECORE_IPC_BUILD = @EFL_ECORE_IPC_BUILD@
183EFL_ECORE_PSL1GHT_BUILD = @EFL_ECORE_PSL1GHT_BUILD@
184EFL_ECORE_SDL_BUILD = @EFL_ECORE_SDL_BUILD@
185EFL_ECORE_WIN32_BUILD = @EFL_ECORE_WIN32_BUILD@
186EFL_ECORE_WINCE_BUILD = @EFL_ECORE_WINCE_BUILD@
187EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
188EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
189EGREP = @EGREP@
190EINA_CFLAGS = @EINA_CFLAGS@
191EINA_LIBS = @EINA_LIBS@
192ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
193ESCAPE_LIBS = @ESCAPE_LIBS@
194EVAS_CFLAGS = @EVAS_CFLAGS@
195EVAS_LIBS = @EVAS_LIBS@
196EVIL_CFLAGS = @EVIL_CFLAGS@
197EVIL_LIBS = @EVIL_LIBS@
198EXEEXT = @EXEEXT@
199EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
200EXOTIC_LIBS = @EXOTIC_LIBS@
201FGREP = @FGREP@
202GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
203GLIB_CFLAGS = @GLIB_CFLAGS@
204GLIB_LIBS = @GLIB_LIBS@
205GMSGFMT = @GMSGFMT@
206GMSGFMT_015 = @GMSGFMT_015@
207GREP = @GREP@
208INSTALL = @INSTALL@
209INSTALL_DATA = @INSTALL_DATA@
210INSTALL_PROGRAM = @INSTALL_PROGRAM@
211INSTALL_SCRIPT = @INSTALL_SCRIPT@
212INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
213INTLLIBS = @INTLLIBS@
214INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
215KEYSYMDEFS = @KEYSYMDEFS@
216LD = @LD@
217LDFLAGS = @LDFLAGS@
218LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
219LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
220LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
221LIBICONV = @LIBICONV@
222LIBINTL = @LIBINTL@
223LIBOBJS = @LIBOBJS@
224LIBS = @LIBS@
225LIBTOOL = @LIBTOOL@
226LIPO = @LIPO@
227LN_S = @LN_S@
228LTLIBICONV = @LTLIBICONV@
229LTLIBINTL = @LTLIBINTL@
230LTLIBOBJS = @LTLIBOBJS@
231MAKEINFO = @MAKEINFO@
232MKDIR_P = @MKDIR_P@
233MSGFMT = @MSGFMT@
234MSGFMT_015 = @MSGFMT_015@
235MSGMERGE = @MSGMERGE@
236NM = @NM@
237NMEDIT = @NMEDIT@
238OBJC = @OBJC@
239OBJCDEPMODE = @OBJCDEPMODE@
240OBJCFLAGS = @OBJCFLAGS@
241OBJDUMP = @OBJDUMP@
242OBJEXT = @OBJEXT@
243OTOOL = @OTOOL@
244OTOOL64 = @OTOOL64@
245PACKAGE = @PACKAGE@
246PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
247PACKAGE_NAME = @PACKAGE_NAME@
248PACKAGE_STRING = @PACKAGE_STRING@
249PACKAGE_TARNAME = @PACKAGE_TARNAME@
250PACKAGE_URL = @PACKAGE_URL@
251PACKAGE_VERSION = @PACKAGE_VERSION@
252PATH_SEPARATOR = @PATH_SEPARATOR@
253PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
254PIXMAN_LIBS = @PIXMAN_LIBS@
255PKG_CONFIG = @PKG_CONFIG@
256PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
257PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
258POSUB = @POSUB@
259RANLIB = @RANLIB@
260SCIM_CFLAGS = @SCIM_CFLAGS@
261SCIM_LIBS = @SCIM_LIBS@
262SDL_CFLAGS = @SDL_CFLAGS@
263SDL_CONFIG = @SDL_CONFIG@
264SDL_LIBS = @SDL_LIBS@
265SED = @SED@
266SET_MAKE = @SET_MAKE@
267SHELL = @SHELL@
268SHM_OPEN_LIBS = @SHM_OPEN_LIBS@
269SSL_CFLAGS = @SSL_CFLAGS@
270SSL_LIBS = @SSL_LIBS@
271STRIP = @STRIP@
272TLS2_CFLAGS = @TLS2_CFLAGS@
273TLS2_LIBS = @TLS2_LIBS@
274TLS_CFLAGS = @TLS_CFLAGS@
275TLS_LIBS = @TLS_LIBS@
276TSLIB_CFLAGS = @TSLIB_CFLAGS@
277TSLIB_LIBS = @TSLIB_LIBS@
278USE_NLS = @USE_NLS@
279VERSION = @VERSION@
280VMAJ = @VMAJ@
281WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
282WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
283WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
284WAYLAND_LIBS = @WAYLAND_LIBS@
285WIN32_CFLAGS = @WIN32_CFLAGS@
286WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
287WIN32_LIBS = @WIN32_LIBS@
288XCB_COMPOSITE_CFLAGS = @XCB_COMPOSITE_CFLAGS@
289XCB_COMPOSITE_LIBS = @XCB_COMPOSITE_LIBS@
290XCB_CURSOR_CFLAGS = @XCB_CURSOR_CFLAGS@
291XCB_CURSOR_LIBS = @XCB_CURSOR_LIBS@
292XCB_DAMAGE_CFLAGS = @XCB_DAMAGE_CFLAGS@
293XCB_DAMAGE_LIBS = @XCB_DAMAGE_LIBS@
294XCB_DPMS_CFLAGS = @XCB_DPMS_CFLAGS@
295XCB_DPMS_LIBS = @XCB_DPMS_LIBS@
296XCB_RANDR_CFLAGS = @XCB_RANDR_CFLAGS@
297XCB_RANDR_LIBS = @XCB_RANDR_LIBS@
298XCB_RENDER_CFLAGS = @XCB_RENDER_CFLAGS@
299XCB_RENDER_LIBS = @XCB_RENDER_LIBS@
300XCB_SCREENSAVER_CFLAGS = @XCB_SCREENSAVER_CFLAGS@
301XCB_SCREENSAVER_LIBS = @XCB_SCREENSAVER_LIBS@
302XCB_SHAPE_CFLAGS = @XCB_SHAPE_CFLAGS@
303XCB_SHAPE_LIBS = @XCB_SHAPE_LIBS@
304XCB_SYNC_CFLAGS = @XCB_SYNC_CFLAGS@
305XCB_SYNC_LIBS = @XCB_SYNC_LIBS@
306XCB_X11_CFLAGS = @XCB_X11_CFLAGS@
307XCB_X11_LIBS = @XCB_X11_LIBS@
308XCB_XFIXES_CFLAGS = @XCB_XFIXES_CFLAGS@
309XCB_XFIXES_LIBS = @XCB_XFIXES_LIBS@
310XCB_XGESTURE_CFLAGS = @XCB_XGESTURE_CFLAGS@
311XCB_XGESTURE_LIBS = @XCB_XGESTURE_LIBS@
312XCB_XINERAMA_CFLAGS = @XCB_XINERAMA_CFLAGS@
313XCB_XINERAMA_LIBS = @XCB_XINERAMA_LIBS@
314XCB_XINPUT_CFLAGS = @XCB_XINPUT_CFLAGS@
315XCB_XINPUT_LIBS = @XCB_XINPUT_LIBS@
316XCB_XPRINT_CFLAGS = @XCB_XPRINT_CFLAGS@
317XCB_XPRINT_LIBS = @XCB_XPRINT_LIBS@
318XCB_XTEST_CFLAGS = @XCB_XTEST_CFLAGS@
319XCB_XTEST_LIBS = @XCB_XTEST_LIBS@
320XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
321XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
322XDAMAGE_CFLAGS = @XDAMAGE_CFLAGS@
323XDAMAGE_LIBS = @XDAMAGE_LIBS@
324XDPMS_CFLAGS = @XDPMS_CFLAGS@
325XDPMS_LIBS = @XDPMS_LIBS@
326XFIXES_CFLAGS = @XFIXES_CFLAGS@
327XFIXES_LIBS = @XFIXES_LIBS@
328XGESTURE_CFLAGS = @XGESTURE_CFLAGS@
329XGESTURE_LIBS = @XGESTURE_LIBS@
330XGETTEXT = @XGETTEXT@
331XGETTEXT_015 = @XGETTEXT_015@
332XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
333XI2_CFLAGS = @XI2_CFLAGS@
334XI2_LIBS = @XI2_LIBS@
335XINERAMA_CFLAGS = @XINERAMA_CFLAGS@
336XINERAMA_LIBS = @XINERAMA_LIBS@
337XKB_CFLAGS = @XKB_CFLAGS@
338XKB_LIBS = @XKB_LIBS@
339XMKMF = @XMKMF@
340XPRINT_CFLAGS = @XPRINT_CFLAGS@
341XPRINT_LIBS = @XPRINT_LIBS@
342XRANDR_CFLAGS = @XRANDR_CFLAGS@
343XRANDR_LIBS = @XRANDR_LIBS@
344XRENDER_CFLAGS = @XRENDER_CFLAGS@
345XRENDER_LIBS = @XRENDER_LIBS@
346XSS_CFLAGS = @XSS_CFLAGS@
347XSS_LIBS = @XSS_LIBS@
348XTEST_CFLAGS = @XTEST_CFLAGS@
349XTEST_LIBS = @XTEST_LIBS@
350X_CFLAGS = @X_CFLAGS@
351X_EXTRA_LIBS = @X_EXTRA_LIBS@
352X_LIBS = @X_LIBS@
353X_PRE_LIBS = @X_PRE_LIBS@
354Xcursor_cflags = @Xcursor_cflags@
355Xcursor_libs = @Xcursor_libs@
356abs_builddir = @abs_builddir@
357abs_srcdir = @abs_srcdir@
358abs_top_builddir = @abs_top_builddir@
359abs_top_srcdir = @abs_top_srcdir@
360ac_ct_CC = @ac_ct_CC@
361ac_ct_CXX = @ac_ct_CXX@
362ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
363ac_ct_OBJC = @ac_ct_OBJC@
364am__include = @am__include@
365am__leading_dot = @am__leading_dot@
366am__quote = @am__quote@
367am__tar = @am__tar@
368am__untar = @am__untar@
369bindir = @bindir@
370build = @build@
371build_alias = @build_alias@
372build_cpu = @build_cpu@
373build_os = @build_os@
374build_vendor = @build_vendor@
375builddir = @builddir@
376cocoa_ldflags = @cocoa_ldflags@
377datadir = @datadir@
378datarootdir = @datarootdir@
379dlopen_libs = @dlopen_libs@
380docdir = @docdir@
381dvidir = @dvidir@
382ecore_cocoa_cflags = @ecore_cocoa_cflags@
383ecore_cocoa_libs = @ecore_cocoa_libs@
384ecore_con_cflags = @ecore_con_cflags@
385ecore_con_libs = @ecore_con_libs@
386ecore_directfb_cflags = @ecore_directfb_cflags@
387ecore_directfb_libs = @ecore_directfb_libs@
388ecore_evas_cflags = @ecore_evas_cflags@
389ecore_evas_libs = @ecore_evas_libs@
390ecore_fb_cflags = @ecore_fb_cflags@
391ecore_fb_libs = @ecore_fb_libs@
392ecore_file_cflags = @ecore_file_cflags@
393ecore_file_libs = @ecore_file_libs@
394ecore_imf_cflags = @ecore_imf_cflags@
395ecore_imf_evas_cflags = @ecore_imf_evas_cflags@
396ecore_imf_evas_libs = @ecore_imf_evas_libs@
397ecore_imf_libs = @ecore_imf_libs@
398ecore_imf_scim_cflags = @ecore_imf_scim_cflags@
399ecore_imf_scim_libs = @ecore_imf_scim_libs@
400ecore_imf_xim_cflags = @ecore_imf_xim_cflags@
401ecore_imf_xim_libs = @ecore_imf_xim_libs@
402ecore_input_cflags = @ecore_input_cflags@
403ecore_input_evas_cflags = @ecore_input_evas_cflags@
404ecore_input_evas_libs = @ecore_input_evas_libs@
405ecore_input_libs = @ecore_input_libs@
406ecore_ipc_cflags = @ecore_ipc_cflags@
407ecore_ipc_libs = @ecore_ipc_libs@
408ecore_psl1ght_cflags = @ecore_psl1ght_cflags@
409ecore_psl1ght_libs = @ecore_psl1ght_libs@
410ecore_sdl_cflags = @ecore_sdl_cflags@
411ecore_sdl_libs = @ecore_sdl_libs@
412ecore_wayland_cflags = @ecore_wayland_cflags@
413ecore_wayland_libs = @ecore_wayland_libs@
414ecore_win32_cflags = @ecore_win32_cflags@
415ecore_win32_libs = @ecore_win32_libs@
416ecore_wince_cflags = @ecore_wince_cflags@
417ecore_wince_libs = @ecore_wince_libs@
418ecore_x_cflags = @ecore_x_cflags@
419ecore_x_libs = @ecore_x_libs@
420ecore_x_libs_private = @ecore_x_libs_private@
421efl_doxygen = @efl_doxygen@
422efl_have_doxygen = @efl_have_doxygen@
423exec_prefix = @exec_prefix@
424have_ecore_x_xcb_define = @have_ecore_x_xcb_define@
425host = @host@
426host_alias = @host_alias@
427host_cpu = @host_cpu@
428host_os = @host_os@
429host_vendor = @host_vendor@
430htmldir = @htmldir@
431includedir = @includedir@
432infodir = @infodir@
433install_sh = @install_sh@
434libdir = @libdir@
435libexecdir = @libexecdir@
436localedir = @localedir@
437localstatedir = @localstatedir@
438lt_ECHO = @lt_ECHO@
439lt_enable_auto_import = @lt_enable_auto_import@
440mandir = @mandir@
441mkdir_p = @mkdir_p@
442oldincludedir = @oldincludedir@
443pdfdir = @pdfdir@
444pkgconfig_requires_private = @pkgconfig_requires_private@
445prefix = @prefix@
446program_transform_name = @program_transform_name@
447psdir = @psdir@
448release_info = @release_info@
449requirements_ecore = @requirements_ecore@
450requirements_ecore_cocoa = @requirements_ecore_cocoa@
451requirements_ecore_con = @requirements_ecore_con@
452requirements_ecore_directfb = @requirements_ecore_directfb@
453requirements_ecore_evas = @requirements_ecore_evas@
454requirements_ecore_fb = @requirements_ecore_fb@
455requirements_ecore_file = @requirements_ecore_file@
456requirements_ecore_imf = @requirements_ecore_imf@
457requirements_ecore_imf_evas = @requirements_ecore_imf_evas@
458requirements_ecore_imf_scim = @requirements_ecore_imf_scim@
459requirements_ecore_imf_xim = @requirements_ecore_imf_xim@
460requirements_ecore_input = @requirements_ecore_input@
461requirements_ecore_input_evas = @requirements_ecore_input_evas@
462requirements_ecore_ipc = @requirements_ecore_ipc@
463requirements_ecore_psl1ght = @requirements_ecore_psl1ght@
464requirements_ecore_sdl = @requirements_ecore_sdl@
465requirements_ecore_wayland = @requirements_ecore_wayland@
466requirements_ecore_win32 = @requirements_ecore_win32@
467requirements_ecore_wince = @requirements_ecore_wince@
468requirements_ecore_x = @requirements_ecore_x@
469rt_libs = @rt_libs@
470sbindir = @sbindir@
471sharedstatedir = @sharedstatedir@
472srcdir = @srcdir@
473sysconfdir = @sysconfdir@
474target_alias = @target_alias@
475top_build_prefix = @top_build_prefix@
476top_builddir = @top_builddir@
477top_srcdir = @top_srcdir@
478version_info = @version_info@
479x_cflags = @x_cflags@
480x_includes = @x_includes@
481x_libs = @x_libs@
482MAINTAINERCLEANFILES = Makefile.in
483@BUILD_ECORE_X_XLIB_TRUE@AM_CPPFLAGS = \
484@BUILD_ECORE_X_XLIB_TRUE@@Xcursor_cflags@ \
485@BUILD_ECORE_X_XLIB_TRUE@@XKB_CFLAGS@ \
486@BUILD_ECORE_X_XLIB_TRUE@@XDAMAGE_CFLAGS@ \
487@BUILD_ECORE_X_XLIB_TRUE@@XCOMPOSITE_CFLAGS@ \
488@BUILD_ECORE_X_XLIB_TRUE@@XGESTURE_CFLAGS@ \
489@BUILD_ECORE_X_XLIB_TRUE@@XDPMS_CFLAGS@ \
490@BUILD_ECORE_X_XLIB_TRUE@@XFIXES_CFLAGS@ \
491@BUILD_ECORE_X_XLIB_TRUE@@XI2_CFLAGS@ \
492@BUILD_ECORE_X_XLIB_TRUE@@XINERAMA_CFLAGS@ \
493@BUILD_ECORE_X_XLIB_TRUE@@XPRINT_CFLAGS@ \
494@BUILD_ECORE_X_XLIB_TRUE@@XRANDR_CFLAGS@ \
495@BUILD_ECORE_X_XLIB_TRUE@@XRENDER_CFLAGS@ \
496@BUILD_ECORE_X_XLIB_TRUE@@XSS_CFLAGS@ \
497@BUILD_ECORE_X_XLIB_TRUE@@XTEST_CFLAGS@ \
498@BUILD_ECORE_X_XLIB_TRUE@@x_cflags@ \
499@BUILD_ECORE_X_XLIB_TRUE@-I$(top_srcdir)/src/lib/ecore \
500@BUILD_ECORE_X_XLIB_TRUE@-I$(top_srcdir)/src/lib/ecore_x \
501@BUILD_ECORE_X_XLIB_TRUE@-I$(top_srcdir)/src/lib/ecore_input \
502@BUILD_ECORE_X_XLIB_TRUE@-I$(top_builddir)/src/lib/ecore \
503@BUILD_ECORE_X_XLIB_TRUE@-I$(top_builddir)/src/lib/ecore_x \
504@BUILD_ECORE_X_XLIB_TRUE@-I$(top_builddir)/src/lib/ecore_input \
505@BUILD_ECORE_X_XLIB_TRUE@@EVAS_CFLAGS@ \
506@BUILD_ECORE_X_XLIB_TRUE@@EINA_CFLAGS@
507
508@BUILD_ECORE_X_XLIB_TRUE@noinst_LTLIBRARIES = libecore_x_xlib.la
509@BUILD_ECORE_X_XLIB_TRUE@libecore_x_xlib_la_SOURCES = \
510@BUILD_ECORE_X_XLIB_TRUE@ecore_x.c \
511@BUILD_ECORE_X_XLIB_TRUE@ecore_x_dnd.c \
512@BUILD_ECORE_X_XLIB_TRUE@ecore_x_sync.c \
513@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr.c \
514@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr_11.c \
515@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr_12.c \
516@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr_12_edid.c \
517@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr_13.c \
518@BUILD_ECORE_X_XLIB_TRUE@ecore_x_fixes.c \
519@BUILD_ECORE_X_XLIB_TRUE@ecore_x_damage.c \
520@BUILD_ECORE_X_XLIB_TRUE@ecore_x_composite.c \
521@BUILD_ECORE_X_XLIB_TRUE@ecore_x_error.c \
522@BUILD_ECORE_X_XLIB_TRUE@ecore_x_events.c \
523@BUILD_ECORE_X_XLIB_TRUE@ecore_x_icccm.c \
524@BUILD_ECORE_X_XLIB_TRUE@ecore_x_netwm.c \
525@BUILD_ECORE_X_XLIB_TRUE@ecore_x_mwm.c \
526@BUILD_ECORE_X_XLIB_TRUE@ecore_x_e.c \
527@BUILD_ECORE_X_XLIB_TRUE@ecore_x_selection.c \
528@BUILD_ECORE_X_XLIB_TRUE@ecore_x_window.c \
529@BUILD_ECORE_X_XLIB_TRUE@ecore_x_window_prop.c \
530@BUILD_ECORE_X_XLIB_TRUE@ecore_x_window_shape.c \
531@BUILD_ECORE_X_XLIB_TRUE@ecore_x_pixmap.c \
532@BUILD_ECORE_X_XLIB_TRUE@ecore_x_gc.c \
533@BUILD_ECORE_X_XLIB_TRUE@ecore_x_xinerama.c \
534@BUILD_ECORE_X_XLIB_TRUE@ecore_x_screensaver.c \
535@BUILD_ECORE_X_XLIB_TRUE@ecore_x_dpms.c \
536@BUILD_ECORE_X_XLIB_TRUE@ecore_x_drawable.c \
537@BUILD_ECORE_X_XLIB_TRUE@ecore_x_cursor.c \
538@BUILD_ECORE_X_XLIB_TRUE@ecore_x_test.c \
539@BUILD_ECORE_X_XLIB_TRUE@ecore_x_atoms.c \
540@BUILD_ECORE_X_XLIB_TRUE@ecore_x_region.c \
541@BUILD_ECORE_X_XLIB_TRUE@ecore_x_image.c \
542@BUILD_ECORE_X_XLIB_TRUE@ecore_x_xi2.c \
543@BUILD_ECORE_X_XLIB_TRUE@ecore_x_vsync.c \
544@BUILD_ECORE_X_XLIB_TRUE@ecore_x_randr.h \
545@BUILD_ECORE_X_XLIB_TRUE@ecore_x_gesture.c
546
547@BUILD_ECORE_X_XLIB_TRUE@libecore_x_xlib_la_LIBADD = \
548@BUILD_ECORE_X_XLIB_TRUE@@Xcursor_libs@ \
549@BUILD_ECORE_X_XLIB_TRUE@@XKB_LIBS@ \
550@BUILD_ECORE_X_XLIB_TRUE@@XDAMAGE_LIBS@ \
551@BUILD_ECORE_X_XLIB_TRUE@@XCOMPOSITE_LIBS@ \
552@BUILD_ECORE_X_XLIB_TRUE@@XGESTURE_LIBS@ \
553@BUILD_ECORE_X_XLIB_TRUE@@XDPMS_LIBS@ \
554@BUILD_ECORE_X_XLIB_TRUE@@XFIXES_LIBS@ \
555@BUILD_ECORE_X_XLIB_TRUE@@XI2_LIBS@ \
556@BUILD_ECORE_X_XLIB_TRUE@@XINERAMA_LIBS@ \
557@BUILD_ECORE_X_XLIB_TRUE@@XPRINT_LIBS@ \
558@BUILD_ECORE_X_XLIB_TRUE@@XRANDR_LIBS@ \
559@BUILD_ECORE_X_XLIB_TRUE@@XRENDER_LIBS@ \
560@BUILD_ECORE_X_XLIB_TRUE@@XSS_LIBS@ \
561@BUILD_ECORE_X_XLIB_TRUE@@XTEST_LIBS@ \
562@BUILD_ECORE_X_XLIB_TRUE@@x_libs@ \
563@BUILD_ECORE_X_XLIB_TRUE@$(top_builddir)/src/lib/ecore/libecore.la \
564@BUILD_ECORE_X_XLIB_TRUE@$(top_builddir)/src/lib/ecore_input/libecore_input.la \
565@BUILD_ECORE_X_XLIB_TRUE@@EINA_LIBS@ \
566@BUILD_ECORE_X_XLIB_TRUE@@dlopen_libs@
567
568EXTRA_DIST = ecore_x_private.h
569all: all-am
570
571.SUFFIXES:
572.SUFFIXES: .c .lo .o .obj
573$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
574 @for dep in $?; do \
575 case '$(am__configure_deps)' in \
576 *$$dep*) \
577 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
578 && { if test -f $@; then exit 0; else break; fi; }; \
579 exit 1;; \
580 esac; \
581 done; \
582 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/ecore_x/xlib/Makefile'; \
583 $(am__cd) $(top_srcdir) && \
584 $(AUTOMAKE) --gnu src/lib/ecore_x/xlib/Makefile
585.PRECIOUS: Makefile
586Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
587 @case '$?' in \
588 *config.status*) \
589 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
590 *) \
591 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
592 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
593 esac;
594
595$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
596 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
597
598$(top_srcdir)/configure: $(am__configure_deps)
599 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
600$(ACLOCAL_M4): $(am__aclocal_m4_deps)
601 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
602$(am__aclocal_m4_deps):
603
604clean-noinstLTLIBRARIES:
605 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
606 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
607 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
608 test "$$dir" != "$$p" || dir=.; \
609 echo "rm -f \"$${dir}/so_locations\""; \
610 rm -f "$${dir}/so_locations"; \
611 done
612libecore_x_xlib.la: $(libecore_x_xlib_la_OBJECTS) $(libecore_x_xlib_la_DEPENDENCIES)
613 $(AM_V_CCLD)$(LINK) $(am_libecore_x_xlib_la_rpath) $(libecore_x_xlib_la_OBJECTS) $(libecore_x_xlib_la_LIBADD) $(LIBS)
614
615mostlyclean-compile:
616 -rm -f *.$(OBJEXT)
617
618distclean-compile:
619 -rm -f *.tab.c
620
621@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x.Plo@am__quote@
622@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_atoms.Plo@am__quote@
623@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_composite.Plo@am__quote@
624@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_cursor.Plo@am__quote@
625@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_damage.Plo@am__quote@
626@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_dnd.Plo@am__quote@
627@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_dpms.Plo@am__quote@
628@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_drawable.Plo@am__quote@
629@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_e.Plo@am__quote@
630@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_error.Plo@am__quote@
631@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_events.Plo@am__quote@
632@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_fixes.Plo@am__quote@
633@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_gc.Plo@am__quote@
634@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_gesture.Plo@am__quote@
635@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_icccm.Plo@am__quote@
636@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_image.Plo@am__quote@
637@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_mwm.Plo@am__quote@
638@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_netwm.Plo@am__quote@
639@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_pixmap.Plo@am__quote@
640@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_randr.Plo@am__quote@
641@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_randr_11.Plo@am__quote@
642@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_randr_12.Plo@am__quote@
643@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_randr_12_edid.Plo@am__quote@
644@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_randr_13.Plo@am__quote@
645@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_region.Plo@am__quote@
646@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_screensaver.Plo@am__quote@
647@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_selection.Plo@am__quote@
648@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_sync.Plo@am__quote@
649@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_test.Plo@am__quote@
650@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_vsync.Plo@am__quote@
651@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_window.Plo@am__quote@
652@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_window_prop.Plo@am__quote@
653@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_window_shape.Plo@am__quote@
654@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_xi2.Plo@am__quote@
655@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_x_xinerama.Plo@am__quote@
656
657.c.o:
658@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
659@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
660@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
661@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
662@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
663@am__fastdepCC_FALSE@ $(COMPILE) -c $<
664
665.c.obj:
666@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
667@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
668@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
669@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
670@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
671@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
672
673.c.lo:
674@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
675@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
676@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
677@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
678@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
679@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
680
681mostlyclean-libtool:
682 -rm -f *.lo
683
684clean-libtool:
685 -rm -rf .libs _libs
686
687ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
688 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
689 unique=`for i in $$list; do \
690 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
691 done | \
692 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
693 END { if (nonempty) { for (i in files) print i; }; }'`; \
694 mkid -fID $$unique
695tags: TAGS
696
697TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
698 $(TAGS_FILES) $(LISP)
699 set x; \
700 here=`pwd`; \
701 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
702 unique=`for i in $$list; do \
703 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
704 done | \
705 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
706 END { if (nonempty) { for (i in files) print i; }; }'`; \
707 shift; \
708 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
709 test -n "$$unique" || unique=$$empty_fix; \
710 if test $$# -gt 0; then \
711 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
712 "$$@" $$unique; \
713 else \
714 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
715 $$unique; \
716 fi; \
717 fi
718ctags: CTAGS
719CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
720 $(TAGS_FILES) $(LISP)
721 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
722 unique=`for i in $$list; do \
723 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
724 done | \
725 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
726 END { if (nonempty) { for (i in files) print i; }; }'`; \
727 test -z "$(CTAGS_ARGS)$$unique" \
728 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
729 $$unique
730
731GTAGS:
732 here=`$(am__cd) $(top_builddir) && pwd` \
733 && $(am__cd) $(top_srcdir) \
734 && gtags -i $(GTAGS_ARGS) "$$here"
735
736distclean-tags:
737 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
738
739distdir: $(DISTFILES)
740 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
741 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
742 list='$(DISTFILES)'; \
743 dist_files=`for file in $$list; do echo $$file; done | \
744 sed -e "s|^$$srcdirstrip/||;t" \
745 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
746 case $$dist_files in \
747 */*) $(MKDIR_P) `echo "$$dist_files" | \
748 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
749 sort -u` ;; \
750 esac; \
751 for file in $$dist_files; do \
752 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
753 if test -d $$d/$$file; then \
754 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
755 if test -d "$(distdir)/$$file"; then \
756 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
757 fi; \
758 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
759 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
760 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
761 fi; \
762 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
763 else \
764 test -f "$(distdir)/$$file" \
765 || cp -p $$d/$$file "$(distdir)/$$file" \
766 || exit 1; \
767 fi; \
768 done
769check-am: all-am
770check: check-am
771all-am: Makefile $(LTLIBRARIES)
772installdirs:
773install: install-am
774install-exec: install-exec-am
775install-data: install-data-am
776uninstall: uninstall-am
777
778install-am: all-am
779 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
780
781installcheck: installcheck-am
782install-strip:
783 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
784 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
785 `test -z '$(STRIP)' || \
786 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
787mostlyclean-generic:
788
789clean-generic:
790
791distclean-generic:
792 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
793 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
794
795maintainer-clean-generic:
796 @echo "This command is intended for maintainers to use"
797 @echo "it deletes files that may require special tools to rebuild."
798 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
799clean: clean-am
800
801clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
802 mostlyclean-am
803
804distclean: distclean-am
805 -rm -rf ./$(DEPDIR)
806 -rm -f Makefile
807distclean-am: clean-am distclean-compile distclean-generic \
808 distclean-tags
809
810dvi: dvi-am
811
812dvi-am:
813
814html: html-am
815
816html-am:
817
818info: info-am
819
820info-am:
821
822install-data-am:
823
824install-dvi: install-dvi-am
825
826install-dvi-am:
827
828install-exec-am:
829
830install-html: install-html-am
831
832install-html-am:
833
834install-info: install-info-am
835
836install-info-am:
837
838install-man:
839
840install-pdf: install-pdf-am
841
842install-pdf-am:
843
844install-ps: install-ps-am
845
846install-ps-am:
847
848installcheck-am:
849
850maintainer-clean: maintainer-clean-am
851 -rm -rf ./$(DEPDIR)
852 -rm -f Makefile
853maintainer-clean-am: distclean-am maintainer-clean-generic
854
855mostlyclean: mostlyclean-am
856
857mostlyclean-am: mostlyclean-compile mostlyclean-generic \
858 mostlyclean-libtool
859
860pdf: pdf-am
861
862pdf-am:
863
864ps: ps-am
865
866ps-am:
867
868uninstall-am:
869
870.MAKE: install-am install-strip
871
872.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
873 clean-libtool clean-noinstLTLIBRARIES ctags distclean \
874 distclean-compile distclean-generic distclean-libtool \
875 distclean-tags distdir dvi dvi-am html html-am info info-am \
876 install install-am install-data install-data-am install-dvi \
877 install-dvi-am install-exec install-exec-am install-html \
878 install-html-am install-info install-info-am install-man \
879 install-pdf install-pdf-am install-ps install-ps-am \
880 install-strip installcheck installcheck-am installdirs \
881 maintainer-clean maintainer-clean-generic mostlyclean \
882 mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
883 pdf pdf-am ps ps-am tags uninstall uninstall-am
884
885
886# Tell versions [3.59,3.63) of GNU make to not export all variables.
887# Otherwise a system limit (for SysV at least) may be exceeded.
888.NOEXPORT:
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x.c
deleted file mode 100644
index 6d275bc..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x.c
+++ /dev/null
@@ -1,2098 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <string.h>
7#include <unistd.h>
8
9//#define LOGRT 1
10
11#ifdef LOGRT
12#include <dlfcn.h>
13#endif /* ifdef LOGRT */
14
15#include "Ecore.h"
16#include "ecore_private.h"
17#include "ecore_x_private.h"
18#include "Ecore_X.h"
19#include "Ecore_X_Atoms.h"
20#include "Ecore_Input.h"
21
22static Eina_Bool _ecore_x_fd_handler(void *data,
23 Ecore_Fd_Handler *fd_handler);
24static Eina_Bool _ecore_x_fd_handler_buf(void *data,
25 Ecore_Fd_Handler *fd_handler);
26static int _ecore_x_key_mask_get(KeySym sym);
27static int _ecore_x_event_modifier(unsigned int state);
28
29static Ecore_Fd_Handler *_ecore_x_fd_handler_handle = NULL;
30
31static const int AnyXEvent = 0; /* 0 can be used as there are no event types
32 * with index 0 and 1 as they are used for
33 * errors
34 */
35
36static int _ecore_x_event_shape_id = 0;
37static int _ecore_x_event_screensaver_id = 0;
38static int _ecore_x_event_sync_id = 0;
39int _ecore_xlib_log_dom = -1;
40
41#ifdef ECORE_XRANDR
42static int _ecore_x_event_randr_id = 0;
43#endif /* ifdef ECORE_XRANDR */
44#ifdef ECORE_XFIXES
45static int _ecore_x_event_fixes_selection_id = 0;
46#endif /* ifdef ECORE_XFIXES */
47#ifdef ECORE_XDAMAGE
48static int _ecore_x_event_damage_id = 0;
49#endif /* ifdef ECORE_XDAMAGE */
50#ifdef ECORE_XGESTURE
51static int _ecore_x_event_gesture_id = 0;
52#endif /* ifdef ECORE_XGESTURE */
53static int _ecore_x_event_handlers_num = 0;
54static void (**_ecore_x_event_handlers) (XEvent * event) = NULL;
55
56static int _ecore_x_init_count = 0;
57static int _ecore_x_grab_count = 0;
58
59Display *_ecore_x_disp = NULL;
60double _ecore_x_double_click_time = 0.25;
61Time _ecore_x_event_last_time = 0;
62Window _ecore_x_event_last_win = 0;
63int _ecore_x_event_last_root_x = 0;
64int _ecore_x_event_last_root_y = 0;
65Eina_Bool _ecore_x_xcursor = EINA_FALSE;
66
67Ecore_X_Window _ecore_x_private_win = 0;
68
69Ecore_X_Atom _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
70
71EAPI int ECORE_X_EVENT_ANY = 0;
72EAPI int ECORE_X_EVENT_MOUSE_IN = 0;
73EAPI int ECORE_X_EVENT_MOUSE_OUT = 0;
74EAPI int ECORE_X_EVENT_WINDOW_FOCUS_IN = 0;
75EAPI int ECORE_X_EVENT_WINDOW_FOCUS_OUT = 0;
76EAPI int ECORE_X_EVENT_WINDOW_KEYMAP = 0;
77EAPI int ECORE_X_EVENT_WINDOW_DAMAGE = 0;
78EAPI int ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = 0;
79EAPI int ECORE_X_EVENT_WINDOW_CREATE = 0;
80EAPI int ECORE_X_EVENT_WINDOW_DESTROY = 0;
81EAPI int ECORE_X_EVENT_WINDOW_HIDE = 0;
82EAPI int ECORE_X_EVENT_WINDOW_SHOW = 0;
83EAPI int ECORE_X_EVENT_WINDOW_SHOW_REQUEST = 0;
84EAPI int ECORE_X_EVENT_WINDOW_REPARENT = 0;
85EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE = 0;
86EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = 0;
87EAPI int ECORE_X_EVENT_WINDOW_GRAVITY = 0;
88EAPI int ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = 0;
89EAPI int ECORE_X_EVENT_WINDOW_STACK = 0;
90EAPI int ECORE_X_EVENT_WINDOW_STACK_REQUEST = 0;
91EAPI int ECORE_X_EVENT_WINDOW_PROPERTY = 0;
92EAPI int ECORE_X_EVENT_WINDOW_COLORMAP = 0;
93EAPI int ECORE_X_EVENT_WINDOW_MAPPING = 0;
94EAPI int ECORE_X_EVENT_MAPPING_CHANGE = 0;
95EAPI int ECORE_X_EVENT_SELECTION_CLEAR = 0;
96EAPI int ECORE_X_EVENT_SELECTION_REQUEST = 0;
97EAPI int ECORE_X_EVENT_SELECTION_NOTIFY = 0;
98EAPI int ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = 0;
99EAPI int ECORE_X_EVENT_CLIENT_MESSAGE = 0;
100EAPI int ECORE_X_EVENT_WINDOW_SHAPE = 0;
101EAPI int ECORE_X_EVENT_SCREENSAVER_NOTIFY = 0;
102EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_FLICK;
103EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_PAN;
104EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION;
105EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_TAP;
106EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD;
107EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_HOLD;
108EAPI int ECORE_X_EVENT_GESTURE_NOTIFY_GROUP;
109EAPI int ECORE_X_EVENT_SYNC_COUNTER = 0;
110EAPI int ECORE_X_EVENT_SYNC_ALARM = 0;
111EAPI int ECORE_X_EVENT_SCREEN_CHANGE = 0;
112EAPI int ECORE_X_EVENT_DAMAGE_NOTIFY = 0;
113EAPI int ECORE_X_EVENT_RANDR_CRTC_CHANGE = 0;
114EAPI int ECORE_X_EVENT_RANDR_OUTPUT_CHANGE = 0;
115EAPI int ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY = 0;
116EAPI int ECORE_X_EVENT_WINDOW_DELETE_REQUEST = 0;
117EAPI int ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = 0;
118EAPI int ECORE_X_EVENT_WINDOW_STATE_REQUEST = 0;
119EAPI int ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = 0;
120EAPI int ECORE_X_EVENT_PING = 0;
121EAPI int ECORE_X_EVENT_DESKTOP_CHANGE = 0;
122
123EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = 0;
124EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = 0;
125EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = 0;
126
127EAPI int ECORE_X_EVENT_GENERIC = 0;
128
129int ECORE_X_MODIFIER_SHIFT = 0;
130int ECORE_X_MODIFIER_CTRL = 0;
131int ECORE_X_MODIFIER_ALT = 0;
132int ECORE_X_MODIFIER_WIN = 0;
133
134EAPI int ECORE_X_LOCK_SCROLL = 0;
135EAPI int ECORE_X_LOCK_NUM = 0;
136EAPI int ECORE_X_LOCK_CAPS = 0;
137EAPI int ECORE_X_LOCK_SHIFT = 0;
138
139#ifdef LOGRT
140static double t0 = 0.0;
141static Status (*_logrt_real_reply)(Display *disp,
142 void *rep,
143 int extra,
144 Bool discard) = NULL;
145static void
146_logrt_init(void)
147{
148 void *lib;
149
150 lib = dlopen("libX11.so", RTLD_GLOBAL | RTLD_LAZY);
151 if (!lib)
152 lib = dlopen("libX11.so.6", RTLD_GLOBAL | RTLD_LAZY);
153
154 if (!lib)
155 lib = dlopen("libX11.so.6.3", RTLD_GLOBAL | RTLD_LAZY);
156
157 if (!lib)
158 lib = dlopen("libX11.so.6.3.0", RTLD_GLOBAL | RTLD_LAZY);
159
160 _logrt_real_reply = dlsym(lib, "_XReply");
161 t0 = ecore_time_get();
162}
163
164Status
165_XReply(Display *disp,
166 void *rep,
167 int extra,
168 Bool discard)
169{
170 void *bt[128];
171 int i, n;
172 char **sym;
173
174 n = backtrace(bt, 128);
175 if (n > 0)
176 {
177 sym = backtrace_symbols(bt, n);
178 printf("ROUNDTRIP: %4.4f :", ecore_time_get() - t0);
179 if (sym)
180 {
181 for (i = n - 1; i > 0; i--)
182 {
183 char *fname = strchr(sym[i], '(');
184 if (fname)
185 {
186 char *tsym = alloca(strlen(fname) + 1);
187 char *end;
188 strcpy(tsym, fname + 1);
189 end = strchr(tsym, '+');
190 if (end)
191 {
192 *end = 0;
193 printf("%s", tsym);
194 }
195 else
196 printf("???");
197 }
198 else
199 printf("???");
200
201 if (i > 1)
202 printf(" > ");
203 }
204 printf("\n");
205 }
206 }
207
208 // fixme: logme
209 return _logrt_real_reply(disp, rep, extra, discard);
210}
211
212#endif /* ifdef LOGRT */
213
214void
215_ecore_x_modifiers_get(void)
216{
217 /* everything has these... unless its like a pda... :) */
218 ECORE_X_MODIFIER_SHIFT = _ecore_x_key_mask_get(XK_Shift_L);
219 ECORE_X_MODIFIER_CTRL = _ecore_x_key_mask_get(XK_Control_L);
220
221 /* apple's xdarwin has no alt!!!! */
222 ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Alt_L);
223 if (!ECORE_X_MODIFIER_ALT)
224 ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Meta_L);
225
226 if (!ECORE_X_MODIFIER_ALT)
227 ECORE_X_MODIFIER_ALT = _ecore_x_key_mask_get(XK_Super_L);
228
229 /* the windows key... a valid modifier :) */
230 ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Super_L);
231 if (!ECORE_X_MODIFIER_WIN)
232 ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Mode_switch);
233
234 if (!ECORE_X_MODIFIER_WIN)
235 ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Meta_L);
236
237 if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT)
238 ECORE_X_MODIFIER_WIN = 0;
239
240 if (ECORE_X_MODIFIER_ALT == ECORE_X_MODIFIER_CTRL)
241 ECORE_X_MODIFIER_ALT = 0;
242
243 ECORE_X_LOCK_SCROLL = _ecore_x_key_mask_get(XK_Scroll_Lock);
244 ECORE_X_LOCK_NUM = _ecore_x_key_mask_get(XK_Num_Lock);
245 ECORE_X_LOCK_CAPS = _ecore_x_key_mask_get(XK_Caps_Lock);
246 ECORE_X_LOCK_SHIFT = _ecore_x_key_mask_get(XK_Shift_Lock);
247}
248
249/**
250 * @defgroup Ecore_X_Init_Group X Library Init and Shutdown Functions
251 *
252 * Functions that start and shut down the Ecore X Library.
253 */
254
255/**
256 * Initialize the X display connection to the given display.
257 *
258 * @param name Display target name. If @c NULL, the default display is
259 * assumed.
260 * @return The number of times the library has been initialized without
261 * being shut down. 0 is returned if an error occurs.
262 * @ingroup Ecore_X_Init_Group
263 */
264EAPI int
265ecore_x_init(const char *name)
266{
267 int shape_base = 0;
268 int shape_err_base = 0;
269#ifdef ECORE_XSS
270 int screensaver_base = 0;
271 int screensaver_err_base = 0;
272#endif /* ifdef ECORE_XSS */
273 int sync_base = 0;
274 int sync_err_base = 0;
275#ifdef ECORE_XRANDR
276 int randr_base = 0;
277 int randr_err_base = 0;
278#endif /* ifdef ECORE_XRANDR */
279#ifdef ECORE_XFIXES
280 int fixes_base = 0;
281 int fixes_err_base = 0;
282#endif /* ifdef ECORE_XFIXES */
283#ifdef ECORE_XDAMAGE
284 int damage_base = 0;
285 int damage_err_base = 0;
286#endif /* ifdef ECORE_XDAMAGE */
287#ifdef ECORE_XGESTURE
288 int gesture_base = 0;
289 int gesture_err_base = 0;
290#endif /* ifdef ECORE_XGESTURE */
291
292 if (++_ecore_x_init_count != 1)
293 return _ecore_x_init_count;
294
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
296#ifdef LOGRT
297 _logrt_init();
298#endif /* ifdef LOGRT */
299
300 eina_init();
301 _ecore_xlib_log_dom = eina_log_domain_register
302 ("ecore_x", ECORE_XLIB_DEFAULT_LOG_COLOR);
303 if (_ecore_xlib_log_dom < 0)
304 {
305 EINA_LOG_ERR(
306 "Impossible to create a log domain for the Ecore Xlib module.");
307 return --_ecore_x_init_count;
308 }
309
310 if (!ecore_init())
311 goto shutdown_eina;
312 if (!ecore_event_init())
313 goto shutdown_ecore;
314
315#ifdef EVAS_FRAME_QUEUING
316 XInitThreads();
317#endif /* ifdef EVAS_FRAME_QUEUING */
318 _ecore_x_disp = XOpenDisplay((char *)name);
319 if (!_ecore_x_disp)
320 goto shutdown_ecore_event;
321
322 _ecore_x_error_handler_init();
323 _ecore_x_event_handlers_num = LASTEvent;
324
325#define ECORE_X_EVENT_HANDLERS_GROW(ext_base, ext_num_events) \
326 do { \
327 if (_ecore_x_event_handlers_num < (ext_base + ext_num_events)) { \
328 _ecore_x_event_handlers_num = (ext_base + ext_num_events); } \
329 } while (0)
330
331 if (XShapeQueryExtension(_ecore_x_disp, &shape_base, &shape_err_base))
332 _ecore_x_event_shape_id = shape_base;
333
334 ECORE_X_EVENT_HANDLERS_GROW(shape_base, ShapeNumberEvents);
335
336#ifdef ECORE_XSS
337 if (XScreenSaverQueryExtension(_ecore_x_disp, &screensaver_base,
338 &screensaver_err_base))
339 _ecore_x_event_screensaver_id = screensaver_base;
340
341 ECORE_X_EVENT_HANDLERS_GROW(screensaver_base, ScreenSaverNumberEvents);
342#endif /* ifdef ECORE_XSS */
343
344 if (XSyncQueryExtension(_ecore_x_disp, &sync_base, &sync_err_base))
345 {
346 int major, minor;
347
348 _ecore_x_event_sync_id = sync_base;
349 if (!XSyncInitialize(_ecore_x_disp, &major, &minor))
350 _ecore_x_event_sync_id = 0;
351 }
352
353 ECORE_X_EVENT_HANDLERS_GROW(sync_base, XSyncNumberEvents);
354
355#ifdef ECORE_XRANDR
356 if (XRRQueryExtension(_ecore_x_disp, &randr_base, &randr_err_base))
357 _ecore_x_event_randr_id = randr_base;
358
359 ECORE_X_EVENT_HANDLERS_GROW(randr_base, RRNumberEvents);
360#endif /* ifdef ECORE_XRANDR */
361
362#ifdef ECORE_XFIXES
363 if (XFixesQueryExtension(_ecore_x_disp, &fixes_base, &fixes_err_base))
364 _ecore_x_event_fixes_selection_id = fixes_base;
365
366 ECORE_X_EVENT_HANDLERS_GROW(fixes_base, XFixesNumberEvents);
367#endif /* ifdef ECORE_XFIXES */
368
369#ifdef ECORE_XDAMAGE
370 if (XDamageQueryExtension(_ecore_x_disp, &damage_base, &damage_err_base))
371 _ecore_x_event_damage_id = damage_base;
372
373 ECORE_X_EVENT_HANDLERS_GROW(damage_base, XDamageNumberEvents);
374#endif /* ifdef ECORE_XDAMAGE */
375
376#ifdef ECORE_XGESTURE
377 if (XGestureQueryExtension(_ecore_x_disp, &gesture_base, &gesture_err_base))
378 _ecore_x_event_gesture_id = gesture_base;
379
380 ECORE_X_EVENT_HANDLERS_GROW(gesture_base, GestureNumberEvents);
381#endif /* ifdef ECORE_XGESTURE */
382
383 _ecore_x_event_handlers = calloc(_ecore_x_event_handlers_num, sizeof(void *));
384 if (!_ecore_x_event_handlers)
385 goto close_display;
386
387#ifdef ECORE_XCURSOR
388 _ecore_x_xcursor = XcursorSupportsARGB(_ecore_x_disp) ? EINA_TRUE : EINA_FALSE;
389#endif /* ifdef ECORE_XCURSOR */
390 _ecore_x_event_handlers[AnyXEvent] = _ecore_x_event_handle_any_event;
391 _ecore_x_event_handlers[KeyPress] = _ecore_x_event_handle_key_press;
392 _ecore_x_event_handlers[KeyRelease] = _ecore_x_event_handle_key_release;
393 _ecore_x_event_handlers[ButtonPress] = _ecore_x_event_handle_button_press;
394 _ecore_x_event_handlers[ButtonRelease] =
395 _ecore_x_event_handle_button_release;
396 _ecore_x_event_handlers[MotionNotify] = _ecore_x_event_handle_motion_notify;
397 _ecore_x_event_handlers[EnterNotify] = _ecore_x_event_handle_enter_notify;
398 _ecore_x_event_handlers[LeaveNotify] = _ecore_x_event_handle_leave_notify;
399 _ecore_x_event_handlers[FocusIn] = _ecore_x_event_handle_focus_in;
400 _ecore_x_event_handlers[FocusOut] = _ecore_x_event_handle_focus_out;
401 _ecore_x_event_handlers[KeymapNotify] = _ecore_x_event_handle_keymap_notify;
402 _ecore_x_event_handlers[Expose] = _ecore_x_event_handle_expose;
403 _ecore_x_event_handlers[GraphicsExpose] =
404 _ecore_x_event_handle_graphics_expose;
405 _ecore_x_event_handlers[VisibilityNotify] =
406 _ecore_x_event_handle_visibility_notify;
407 _ecore_x_event_handlers[CreateNotify] = _ecore_x_event_handle_create_notify;
408 _ecore_x_event_handlers[DestroyNotify] =
409 _ecore_x_event_handle_destroy_notify;
410 _ecore_x_event_handlers[UnmapNotify] = _ecore_x_event_handle_unmap_notify;
411 _ecore_x_event_handlers[MapNotify] = _ecore_x_event_handle_map_notify;
412 _ecore_x_event_handlers[MapRequest] = _ecore_x_event_handle_map_request;
413 _ecore_x_event_handlers[ReparentNotify] =
414 _ecore_x_event_handle_reparent_notify;
415 _ecore_x_event_handlers[ConfigureNotify] =
416 _ecore_x_event_handle_configure_notify;
417 _ecore_x_event_handlers[ConfigureRequest] =
418 _ecore_x_event_handle_configure_request;
419 _ecore_x_event_handlers[GravityNotify] =
420 _ecore_x_event_handle_gravity_notify;
421 _ecore_x_event_handlers[ResizeRequest] =
422 _ecore_x_event_handle_resize_request;
423 _ecore_x_event_handlers[CirculateNotify] =
424 _ecore_x_event_handle_circulate_notify;
425 _ecore_x_event_handlers[CirculateRequest] =
426 _ecore_x_event_handle_circulate_request;
427 _ecore_x_event_handlers[PropertyNotify] =
428 _ecore_x_event_handle_property_notify;
429 _ecore_x_event_handlers[SelectionClear] =
430 _ecore_x_event_handle_selection_clear;
431 _ecore_x_event_handlers[SelectionRequest] =
432 _ecore_x_event_handle_selection_request;
433 _ecore_x_event_handlers[SelectionNotify] =
434 _ecore_x_event_handle_selection_notify;
435 _ecore_x_event_handlers[ColormapNotify] =
436 _ecore_x_event_handle_colormap_notify;
437 _ecore_x_event_handlers[ClientMessage] =
438 _ecore_x_event_handle_client_message;
439 _ecore_x_event_handlers[MappingNotify] =
440 _ecore_x_event_handle_mapping_notify;
441#ifdef GenericEvent
442 _ecore_x_event_handlers[GenericEvent] = _ecore_x_event_handle_generic_event;
443#endif /* ifdef GenericEvent */
444
445 if (_ecore_x_event_shape_id)
446 _ecore_x_event_handlers[_ecore_x_event_shape_id] =
447 _ecore_x_event_handle_shape_change;
448
449 if (_ecore_x_event_screensaver_id)
450 _ecore_x_event_handlers[_ecore_x_event_screensaver_id] =
451 _ecore_x_event_handle_screensaver_notify;
452
453 if (_ecore_x_event_sync_id)
454 {
455 _ecore_x_event_handlers[_ecore_x_event_sync_id + XSyncCounterNotify] =
456 _ecore_x_event_handle_sync_counter;
457 _ecore_x_event_handlers[_ecore_x_event_sync_id + XSyncAlarmNotify] =
458 _ecore_x_event_handle_sync_alarm;
459 }
460
461#ifdef ECORE_XRANDR
462 if (_ecore_x_event_randr_id)
463 {
464 _ecore_x_event_handlers[_ecore_x_event_randr_id +
465 RRScreenChangeNotify] =
466 _ecore_x_event_handle_randr_change;
467 _ecore_x_event_handlers[_ecore_x_event_randr_id +
468 RRNotify] = _ecore_x_event_handle_randr_notify;
469 }
470
471#endif /* ifdef ECORE_XRANDR */
472#ifdef ECORE_XFIXES
473 if (_ecore_x_event_fixes_selection_id)
474 _ecore_x_event_handlers[_ecore_x_event_fixes_selection_id] =
475 _ecore_x_event_handle_fixes_selection_notify;
476
477#endif /* ifdef ECORE_XFIXES */
478#ifdef ECORE_XDAMAGE
479 if (_ecore_x_event_damage_id)
480 _ecore_x_event_handlers[_ecore_x_event_damage_id] =
481 _ecore_x_event_handle_damage_notify;
482
483#endif /* ifdef ECORE_XDAMAGE */
484#ifdef ECORE_XKB
485 // set x autorepeat detection to on. that means instead of
486 // press-release-press-release-press-release
487 // you get
488 // press-press-press-press-press-release
489 do
490 {
491 Bool works = 0;
492 XkbSetDetectableAutoRepeat(_ecore_x_disp, 1, &works);
493 }
494 while (0);
495#endif /* ifdef ECORE_XKB */
496
497#ifdef ECORE_XGESTURE
498 if (_ecore_x_event_gesture_id)
499 {
500 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyFlick] =
501 _ecore_x_event_handle_gesture_notify_flick;
502 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyPan] =
503 _ecore_x_event_handle_gesture_notify_pan;
504 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyPinchRotation] =
505 _ecore_x_event_handle_gesture_notify_pinchrotation;
506 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyTap] =
507 _ecore_x_event_handle_gesture_notify_tap;
508 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyTapNHold] =
509 _ecore_x_event_handle_gesture_notify_tapnhold;
510 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyHold] =
511 _ecore_x_event_handle_gesture_notify_hold;
512 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyGroup] =
513 _ecore_x_event_handle_gesture_notify_group;
514 }
515
516#endif /* ifdef ECORE_XGESTURE */
517
518 if (!ECORE_X_EVENT_ANY)
519 {
520 ECORE_X_EVENT_ANY = ecore_event_type_new();
521 ECORE_X_EVENT_MOUSE_IN = ecore_event_type_new();
522 ECORE_X_EVENT_MOUSE_OUT = ecore_event_type_new();
523 ECORE_X_EVENT_WINDOW_FOCUS_IN = ecore_event_type_new();
524 ECORE_X_EVENT_WINDOW_FOCUS_OUT = ecore_event_type_new();
525 ECORE_X_EVENT_WINDOW_KEYMAP = ecore_event_type_new();
526 ECORE_X_EVENT_WINDOW_DAMAGE = ecore_event_type_new();
527 ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = ecore_event_type_new();
528 ECORE_X_EVENT_WINDOW_CREATE = ecore_event_type_new();
529 ECORE_X_EVENT_WINDOW_DESTROY = ecore_event_type_new();
530 ECORE_X_EVENT_WINDOW_HIDE = ecore_event_type_new();
531 ECORE_X_EVENT_WINDOW_SHOW = ecore_event_type_new();
532 ECORE_X_EVENT_WINDOW_SHOW_REQUEST = ecore_event_type_new();
533 ECORE_X_EVENT_WINDOW_REPARENT = ecore_event_type_new();
534 ECORE_X_EVENT_WINDOW_CONFIGURE = ecore_event_type_new();
535 ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = ecore_event_type_new();
536 ECORE_X_EVENT_WINDOW_GRAVITY = ecore_event_type_new();
537 ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = ecore_event_type_new();
538 ECORE_X_EVENT_WINDOW_STACK = ecore_event_type_new();
539 ECORE_X_EVENT_WINDOW_STACK_REQUEST = ecore_event_type_new();
540 ECORE_X_EVENT_WINDOW_PROPERTY = ecore_event_type_new();
541 ECORE_X_EVENT_WINDOW_COLORMAP = ecore_event_type_new();
542 ECORE_X_EVENT_WINDOW_MAPPING = ecore_event_type_new();
543 ECORE_X_EVENT_MAPPING_CHANGE = ecore_event_type_new();
544 ECORE_X_EVENT_SELECTION_CLEAR = ecore_event_type_new();
545 ECORE_X_EVENT_SELECTION_REQUEST = ecore_event_type_new();
546 ECORE_X_EVENT_SELECTION_NOTIFY = ecore_event_type_new();
547 ECORE_X_EVENT_CLIENT_MESSAGE = ecore_event_type_new();
548 ECORE_X_EVENT_WINDOW_SHAPE = ecore_event_type_new();
549 ECORE_X_EVENT_SCREENSAVER_NOTIFY = ecore_event_type_new();
550 ECORE_X_EVENT_GESTURE_NOTIFY_FLICK = ecore_event_type_new();
551 ECORE_X_EVENT_GESTURE_NOTIFY_PAN = ecore_event_type_new();
552 ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION = ecore_event_type_new();
553 ECORE_X_EVENT_GESTURE_NOTIFY_TAP = ecore_event_type_new();
554 ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD = ecore_event_type_new();
555 ECORE_X_EVENT_GESTURE_NOTIFY_HOLD = ecore_event_type_new();
556 ECORE_X_EVENT_GESTURE_NOTIFY_GROUP = ecore_event_type_new();
557 ECORE_X_EVENT_SYNC_COUNTER = ecore_event_type_new();
558 ECORE_X_EVENT_SYNC_ALARM = ecore_event_type_new();
559 ECORE_X_EVENT_SCREEN_CHANGE = ecore_event_type_new();
560 ECORE_X_EVENT_RANDR_CRTC_CHANGE = ecore_event_type_new();
561 ECORE_X_EVENT_RANDR_OUTPUT_CHANGE = ecore_event_type_new();
562 ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY = ecore_event_type_new();
563 ECORE_X_EVENT_DAMAGE_NOTIFY = ecore_event_type_new();
564
565 ECORE_X_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new();
566
567 ECORE_X_EVENT_DESKTOP_CHANGE = ecore_event_type_new();
568 ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = ecore_event_type_new();
569 ECORE_X_EVENT_WINDOW_STATE_REQUEST = ecore_event_type_new();
570 ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = ecore_event_type_new();
571 ECORE_X_EVENT_PING = ecore_event_type_new();
572
573 ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = ecore_event_type_new();
574 ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = ecore_event_type_new();
575 ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = ecore_event_type_new();
576
577 ECORE_X_EVENT_GENERIC = ecore_event_type_new();
578 }
579
580 _ecore_x_modifiers_get();
581
582 _ecore_x_fd_handler_handle =
583 ecore_main_fd_handler_add(ConnectionNumber(_ecore_x_disp),
584 ECORE_FD_READ,
585 _ecore_x_fd_handler, _ecore_x_disp,
586 _ecore_x_fd_handler_buf, _ecore_x_disp);
587 if (!_ecore_x_fd_handler_handle)
588 goto free_event_handlers;
589
590 _ecore_x_atoms_init();
591
592 /* Set up the ICCCM hints */
593 ecore_x_icccm_init();
594
595 /* Set up the _NET_... hints */
596 ecore_x_netwm_init();
597
598 /* old e hints init */
599 ecore_x_e_init();
600
601 /* This is just to be anal about naming conventions */
602
603 _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_DELETE_REQUEST] =
604 ECORE_X_ATOM_WM_DELETE_WINDOW;
605 _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_TAKE_FOCUS] =
606 ECORE_X_ATOM_WM_TAKE_FOCUS;
607 _ecore_x_atoms_wm_protocols[ECORE_X_NET_WM_PROTOCOL_PING] =
608 ECORE_X_ATOM_NET_WM_PING;
609 _ecore_x_atoms_wm_protocols[ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST] =
610 ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
611
612 _ecore_x_selection_data_init();
613 _ecore_x_dnd_init();
614 _ecore_x_fixes_init();
615 _ecore_x_damage_init();
616 _ecore_x_composite_init();
617 _ecore_x_dpms_init();
618 _ecore_x_randr_init();
619 _ecore_x_gesture_init();
620 _ecore_x_input_init();
621 _ecore_x_events_init();
622
623 _ecore_x_private_win = ecore_x_window_override_new(0, -77, -777, 123, 456);
624
625 return _ecore_x_init_count;
626
627free_event_handlers:
628 free(_ecore_x_event_handlers);
629 _ecore_x_event_handlers = NULL;
630close_display:
631 XCloseDisplay(_ecore_x_disp);
632 _ecore_x_fd_handler_handle = NULL;
633 _ecore_x_disp = NULL;
634shutdown_ecore_event:
635 ecore_event_shutdown();
636shutdown_ecore:
637 ecore_shutdown();
638shutdown_eina:
639 eina_log_domain_unregister(_ecore_xlib_log_dom);
640 _ecore_xlib_log_dom = -1;
641 eina_shutdown();
642
643 return --_ecore_x_init_count;
644}
645
646static int
647_ecore_x_shutdown(int close_display)
648{
649 if (--_ecore_x_init_count != 0)
650 return _ecore_x_init_count;
651
652 if (!_ecore_x_disp)
653 return _ecore_x_init_count;
654
655 LOGFN(__FILE__, __LINE__, __FUNCTION__);
656
657 ecore_main_fd_handler_del(_ecore_x_fd_handler_handle);
658 if (close_display)
659 XCloseDisplay(_ecore_x_disp);
660 else
661 {
662 close(ConnectionNumber(_ecore_x_disp));
663 // FIXME: may have to clean up x display internal here
664// getting segv here? hmmm. odd. disable
665// XFree(_ecore_x_disp);
666 }
667
668 free(_ecore_x_event_handlers);
669 _ecore_x_fd_handler_handle = NULL;
670 _ecore_x_disp = NULL;
671 _ecore_x_event_handlers = NULL;
672 _ecore_x_events_shutdown();
673 _ecore_x_input_shutdown();
674 _ecore_x_selection_shutdown();
675 _ecore_x_dnd_shutdown();
676 ecore_x_netwm_shutdown();
677
678 ecore_event_shutdown();
679 ecore_shutdown();
680
681 eina_log_domain_unregister(_ecore_xlib_log_dom);
682 _ecore_xlib_log_dom = -1;
683 eina_shutdown();
684
685 return _ecore_x_init_count;
686}
687
688/**
689 * Shuts down the Ecore X library.
690 *
691 * In shutting down the library, the X display connection is terminated
692 * and any event handlers for it are removed.
693 *
694 * @return The number of times the library has been initialized without
695 * being shut down.
696 * @ingroup Ecore_X_Init_Group
697 */
698EAPI int
699ecore_x_shutdown(void)
700{
701 return _ecore_x_shutdown(1);
702}
703
704/**
705 * Shuts down the Ecore X library.
706 *
707 * As ecore_x_shutdown, except do not close Display, only connection.
708 *
709 * @ingroup Ecore_X_Init_Group
710 */
711EAPI int
712ecore_x_disconnect(void)
713{
714 return _ecore_x_shutdown(0);
715}
716
717/**
718 * @defgroup Ecore_X_Display_Attr_Group X Display Attributes
719 *
720 * Functions that set and retrieve X display attributes.
721 */
722
723/**
724 * Retrieves the Ecore_X_Display handle used for the current X connection.
725 * @return The current X display.
726 * @ingroup Ecore_X_Display_Attr_Group
727 */
728EAPI Ecore_X_Display *
729ecore_x_display_get(void)
730{
731 return (Ecore_X_Display *)_ecore_x_disp;
732}
733
734/**
735 * Retrieves the X display file descriptor.
736 * @return The current X display file descriptor.
737 * @ingroup Ecore_X_Display_Attr_Group
738 */
739EAPI int
740ecore_x_fd_get(void)
741{
742 LOGFN(__FILE__, __LINE__, __FUNCTION__);
743 return ConnectionNumber(_ecore_x_disp);
744}
745
746/**
747 * Retrieves the Ecore_X_Screen handle used for the current X connection.
748 * @return The current default screen.
749 * @ingroup Ecore_X_Display_Attr_Group
750 */
751EAPI Ecore_X_Screen *
752ecore_x_default_screen_get(void)
753{
754 LOGFN(__FILE__, __LINE__, __FUNCTION__);
755 return (Ecore_X_Screen *)DefaultScreenOfDisplay(_ecore_x_disp);
756}
757
758/**
759 * Retrieves the size of an Ecore_X_Screen.
760 * @param screen the handle to the screen to query.
761 * @param w where to return the width. May be NULL. Returns 0 on errors.
762 * @param h where to return the height. May be NULL. Returns 0 on errors.
763 * @ingroup Ecore_X_Display_Attr_Group
764 * @see ecore_x_default_screen_get()
765 *
766 * @since 1.1
767 */
768EAPI void
769ecore_x_screen_size_get(const Ecore_X_Screen *screen,
770 int *w,
771 int *h)
772{
773 Screen *s = (Screen *)screen;
774 LOGFN(__FILE__, __LINE__, __FUNCTION__);
775 if (w) *w = 0;
776 if (h) *h = 0;
777 if (!s) return;
778 if (w) *w = s->width;
779 if (h) *h = s->height;
780}
781
782/**
783 * Retrieves the number of screens.
784 *
785 * @return The count of the number of screens.
786 * @ingroup Ecore_X_Display_Attr_Group
787 *
788 * @since 1.1
789 */
790EAPI int
791ecore_x_screen_count_get(void)
792{
793 LOGFN(__FILE__, __LINE__, __FUNCTION__);
794
795 return ScreenCount(_ecore_x_disp);
796}
797
798/**
799 * Retrieves the index number of the given screen.
800 *
801 * @return The index number of the screen.
802 * @ingroup Ecore_X_Display_Attr_Group
803 *
804 * @since 1.1
805 */
806EAPI int
807ecore_x_screen_index_get(const Ecore_X_Screen *screen)
808{
809 return XScreenNumberOfScreen((Screen *)screen);
810}
811
812/**
813 * Retrieves the screen based on index number.
814 *
815 * @return The Ecore_X_Screen at this index.
816 * @ingroup Ecore_X_Display_Attr_Group
817 *
818 * @since 1.1
819 */
820EAPI Ecore_X_Screen *
821ecore_x_screen_get(int idx)
822{
823 return XScreenOfDisplay(_ecore_x_disp, idx);
824}
825
826/**
827 * Sets the timeout for a double and triple clicks to be flagged.
828 *
829 * This sets the time between clicks before the double_click flag is
830 * set in a button down event. If 3 clicks occur within double this
831 * time, the triple_click flag is also set.
832 *
833 * @param t The time in seconds
834 * @ingroup Ecore_X_Display_Attr_Group
835 */
836EAPI void
837ecore_x_double_click_time_set(double t)
838{
839 if (t < 0.0)
840 t = 0.0;
841
842 _ecore_x_double_click_time = t;
843}
844
845/**
846 * Retrieves the double and triple click flag timeout.
847 *
848 * See @ref ecore_x_double_click_time_set for more information.
849 *
850 * @return The timeout for double clicks in seconds.
851 * @ingroup Ecore_X_Display_Attr_Group
852 */
853EAPI double
854ecore_x_double_click_time_get(void)
855{
856 return _ecore_x_double_click_time;
857}
858
859/**
860 * @defgroup Ecore_X_Flush_Group X Synchronization Functions
861 *
862 * Functions that ensure that all commands that have been issued by the
863 * Ecore X library have been sent to the server.
864 */
865
866/**
867 * Sends all X commands in the X Display buffer.
868 * @ingroup Ecore_X_Flush_Group
869 */
870EAPI void
871ecore_x_flush(void)
872{
873 LOGFN(__FILE__, __LINE__, __FUNCTION__);
874 XFlush(_ecore_x_disp);
875}
876
877/**
878 * Flushes the command buffer and waits until all requests have been
879 * processed by the server.
880 * @ingroup Ecore_X_Flush_Group
881 */
882EAPI void
883ecore_x_sync(void)
884{
885 LOGFN(__FILE__, __LINE__, __FUNCTION__);
886 XSync(_ecore_x_disp, False);
887}
888
889/**
890 * Kill all clients with subwindows under a given window.
891 *
892 * You can kill all clients connected to the X server by using
893 * @ref ecore_x_window_root_list to get a list of root windows, and
894 * then passing each root window to this function.
895 *
896 * @param root The window whose children will be killed.
897 */
898EAPI void
899ecore_x_killall(Ecore_X_Window root)
900{
901 unsigned int j;
902 Window root_r;
903 Window parent_r;
904 Window *children_r = NULL;
905 unsigned int num_children = 0;
906
907 LOGFN(__FILE__, __LINE__, __FUNCTION__);
908 XGrabServer(_ecore_x_disp);
909 /* Tranverse window tree starting from root, and drag each
910 * before the firing squad */
911 while (XQueryTree(_ecore_x_disp, root, &root_r, &parent_r,
912 &children_r, &num_children) && (num_children > 0))
913 {
914 for (j = 0; j < num_children; ++j)
915 {
916 XKillClient(_ecore_x_disp, children_r[j]);
917 }
918
919 XFree(children_r);
920 }
921 XUngrabServer(_ecore_x_disp);
922 XSync(_ecore_x_disp, False);
923}
924
925/**
926 * Kill a specific client
927 *
928 * You can kill a specific client owning window @p win
929 *
930 * @param win Window of the client to be killed
931 */
932EAPI void
933ecore_x_kill(Ecore_X_Window win)
934{
935 LOGFN(__FILE__, __LINE__, __FUNCTION__);
936 XKillClient(_ecore_x_disp, win);
937}
938
939/**
940 * Return the last event time
941 */
942EAPI Ecore_X_Time
943ecore_x_current_time_get(void)
944{
945 return _ecore_x_event_last_time;
946}
947
948/**
949 * Return the screen DPI
950 *
951 * This is a simplistic call to get DPI. It does not account for differing
952 * DPI in the x amd y axes nor does it accoutn for multihead or xinerama and
953 * xrander where different parts of the screen may have differen DPI etc.
954 *
955 * @return the general screen DPI (dots/pixels per inch).
956 */
957EAPI int
958ecore_x_dpi_get(void)
959{
960 Screen *s;
961
962 LOGFN(__FILE__, __LINE__, __FUNCTION__);
963 s = DefaultScreenOfDisplay(_ecore_x_disp);
964 if (s->mwidth <= 0)
965 return 75;
966
967 return (((s->width * 254) / s->mwidth) + 5) / 10;
968}
969
970/**
971 * Invoke the standard system beep to alert users
972 *
973 * @param percent The volume at which the bell rings. Must be in the range
974 * [-100,+100]. If percent >= 0, the final volume will be:
975 * base - [(base * percent) / 100] + percent
976 * Otherwise, it's calculated as:
977 * base + [(base * percent) / 100]
978 * where @c base is the bell's base volume as set by XChangeKeyboardControl(3).
979 *
980 * @returns EINA_TRUE on success, EINA_FALSE otherwise.
981 */
982EAPI Eina_Bool
983ecore_x_bell(int percent)
984{
985 int ret;
986
987 ret = XBell(_ecore_x_disp, percent);
988 if (ret == BadValue)
989 return EINA_FALSE;
990
991 return EINA_TRUE;
992}
993
994static Eina_Bool
995_ecore_x_fd_handler(void *data,
996 Ecore_Fd_Handler *fd_handler __UNUSED__)
997{
998 Display *d;
999
1000 d = data;
1001 while (XPending(d))
1002 {
1003 XEvent ev;
1004
1005 XNextEvent(d, &ev);
1006
1007#ifdef ENABLE_XIM
1008 /* Filter event for XIM */
1009 if (XFilterEvent(&ev, ev.xkey.window))
1010 continue;
1011
1012#endif /* ifdef ENABLE_XIM */
1013
1014 if ((ev.type >= 0) && (ev.type < _ecore_x_event_handlers_num))
1015 {
1016 if (_ecore_x_event_handlers[AnyXEvent])
1017 _ecore_x_event_handlers[AnyXEvent] (&ev);
1018
1019 if (_ecore_x_event_handlers[ev.type])
1020 _ecore_x_event_handlers[ev.type] (&ev);
1021 }
1022 }
1023 return ECORE_CALLBACK_RENEW;
1024}
1025
1026static Eina_Bool
1027_ecore_x_fd_handler_buf(void *data,
1028 Ecore_Fd_Handler *fd_handler __UNUSED__)
1029{
1030 Display *d;
1031
1032 d = data;
1033 if (XPending(d))
1034 return ECORE_CALLBACK_RENEW;
1035
1036 return ECORE_CALLBACK_CANCEL;
1037}
1038
1039static int
1040_ecore_x_key_mask_get(KeySym sym)
1041{
1042 XModifierKeymap *mod;
1043 KeySym sym2;
1044 int i, j;
1045 const int masks[8] =
1046 {
1047 ShiftMask, LockMask, ControlMask,
1048 Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
1049 };
1050
1051 mod = XGetModifierMapping(_ecore_x_disp);
1052 if ((mod) && (mod->max_keypermod > 0))
1053 for (i = 0; i < (8 * mod->max_keypermod); i++)
1054 {
1055 for (j = 0; j < 8; j++)
1056 {
1057 sym2 = XKeycodeToKeysym(_ecore_x_disp, mod->modifiermap[i], j);
1058 if (sym2 != 0)
1059 break;
1060 }
1061 if (sym2 == sym)
1062 {
1063 int mask;
1064
1065 mask = masks[i / mod->max_keypermod];
1066 if (mod->modifiermap)
1067 XFree(mod->modifiermap);
1068
1069 XFree(mod);
1070 return mask;
1071 }
1072 }
1073
1074 if (mod)
1075 {
1076 if (mod->modifiermap)
1077 XFree(mod->modifiermap);
1078
1079 XFree(mod);
1080 }
1081
1082 return 0;
1083}
1084
1085/*****************************************************************************/
1086/*****************************************************************************/
1087/*****************************************************************************/
1088/* FIXME: these funcs need categorising */
1089/*****************************************************************************/
1090
1091/**
1092 * Get a list of all the root windows on the server.
1093 *
1094 * @note The returned array will need to be freed after use.
1095 * @param num_ret Pointer to integer to put number of windows returned in.
1096 * @return An array of all the root windows. @c NULL is returned if memory
1097 * could not be allocated for the list, or if @p num_ret is @c NULL.
1098 */
1099EAPI Ecore_X_Window *
1100ecore_x_window_root_list(int *num_ret)
1101{
1102 int num, i;
1103 Ecore_X_Window *roots;
1104#ifdef ECORE_XPRINT
1105 int xp_base, xp_err_base;
1106#endif /* ifdef ECORE_XPRINT */
1107
1108 if (!num_ret)
1109 return NULL;
1110
1111 *num_ret = 0;
1112
1113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1114#ifdef ECORE_XPRINT
1115 num = ScreenCount(_ecore_x_disp);
1116 if (XpQueryExtension(_ecore_x_disp, &xp_base, &xp_err_base))
1117 {
1118 Screen **ps = NULL;
1119 int psnum = 0;
1120
1121 ps = XpQueryScreens(_ecore_x_disp, &psnum);
1122 if (ps)
1123 {
1124 int overlap, j;
1125
1126 overlap = 0;
1127 for (i = 0; i < num; i++)
1128 {
1129 for (j = 0; j < psnum; j++)
1130 {
1131 if (ScreenOfDisplay(_ecore_x_disp, i) == ps[j])
1132 overlap++;
1133 }
1134 }
1135 roots = malloc(MAX((num - overlap) * sizeof(Window), 1));
1136 if (roots)
1137 {
1138 int k;
1139
1140 k = 0;
1141 for (i = 0; i < num; i++)
1142 {
1143 int is_print;
1144
1145 is_print = 0;
1146 for (j = 0; j < psnum; j++)
1147 {
1148 if (ScreenOfDisplay(_ecore_x_disp, i) == ps[j])
1149 {
1150 is_print = 1;
1151 break;
1152 }
1153 }
1154 if (!is_print)
1155 {
1156 roots[k] = RootWindow(_ecore_x_disp, i);
1157 k++;
1158 }
1159 }
1160 *num_ret = k;
1161 }
1162
1163 XFree(ps);
1164 }
1165 else
1166 {
1167 roots = malloc(num * sizeof(Window));
1168 if (!roots)
1169 return NULL;
1170
1171 *num_ret = num;
1172 for (i = 0; i < num; i++)
1173 roots[i] = RootWindow(_ecore_x_disp, i);
1174 }
1175 }
1176 else
1177 {
1178 roots = malloc(num * sizeof(Window));
1179 if (!roots)
1180 return NULL;
1181
1182 *num_ret = num;
1183 for (i = 0; i < num; i++)
1184 roots[i] = RootWindow(_ecore_x_disp, i);
1185 }
1186
1187#else /* ifdef ECORE_XPRINT */
1188 num = ScreenCount(_ecore_x_disp);
1189 roots = malloc(num * sizeof(Window));
1190 if (!roots)
1191 return NULL;
1192
1193 *num_ret = num;
1194 for (i = 0; i < num; i++)
1195 roots[i] = RootWindow(_ecore_x_disp, i);
1196#endif /* ifdef ECORE_XPRINT */
1197 return roots;
1198}
1199
1200EAPI Ecore_X_Window
1201ecore_x_window_root_first_get(void)
1202{
1203 return RootWindow(_ecore_x_disp, 0);
1204/*
1205 int num;
1206 Ecore_X_Window root, *roots = NULL;
1207
1208 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1209 roots = ecore_x_window_root_list(&num);
1210 if (!(roots)) return 0;
1211
1212 if (num > 0)
1213 root = roots[0];
1214 else
1215 root = 0;
1216
1217 free(roots);
1218 return root;
1219 */
1220}
1221
1222static void _ecore_x_window_manage_error(void *data);
1223
1224static int _ecore_x_window_manage_failed = 0;
1225static void
1226_ecore_x_window_manage_error(void *data __UNUSED__)
1227{
1228 if ((ecore_x_error_request_get() == X_ChangeWindowAttributes) &&
1229 (ecore_x_error_code_get() == BadAccess))
1230 _ecore_x_window_manage_failed = 1;
1231}
1232
1233EAPI Eina_Bool
1234ecore_x_window_manage(Ecore_X_Window win)
1235{
1236 XWindowAttributes att;
1237
1238 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1239 if (XGetWindowAttributes(_ecore_x_disp, win, &att) != True)
1240 return EINA_FALSE;
1241
1242 ecore_x_sync();
1243 _ecore_x_window_manage_failed = 0;
1244 ecore_x_error_handler_set(_ecore_x_window_manage_error, NULL);
1245 XSelectInput(_ecore_x_disp, win,
1246 EnterWindowMask |
1247 LeaveWindowMask |
1248 PropertyChangeMask |
1249 ResizeRedirectMask |
1250 SubstructureRedirectMask |
1251 SubstructureNotifyMask |
1252 StructureNotifyMask |
1253 KeyPressMask |
1254 KeyReleaseMask |
1255 att.your_event_mask);
1256 ecore_x_sync();
1257 ecore_x_error_handler_set(NULL, NULL);
1258 if (_ecore_x_window_manage_failed)
1259 {
1260 _ecore_x_window_manage_failed = 0;
1261 return EINA_FALSE;
1262 }
1263
1264 return EINA_TRUE;
1265}
1266
1267EAPI void
1268ecore_x_window_container_manage(Ecore_X_Window win)
1269{
1270 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1271 XSelectInput(_ecore_x_disp, win,
1272 SubstructureRedirectMask |
1273 SubstructureNotifyMask);
1274}
1275
1276EAPI void
1277ecore_x_window_client_manage(Ecore_X_Window win)
1278{
1279 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1280 XSelectInput(_ecore_x_disp, win,
1281 PropertyChangeMask |
1282// ResizeRedirectMask |
1283 FocusChangeMask |
1284 ColormapChangeMask |
1285 VisibilityChangeMask |
1286 StructureNotifyMask |
1287 SubstructureNotifyMask
1288 );
1289 XShapeSelectInput(_ecore_x_disp, win, ShapeNotifyMask);
1290}
1291
1292EAPI void
1293ecore_x_window_sniff(Ecore_X_Window win)
1294{
1295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1296 XSelectInput(_ecore_x_disp, win,
1297 PropertyChangeMask |
1298 SubstructureNotifyMask);
1299}
1300
1301EAPI void
1302ecore_x_window_client_sniff(Ecore_X_Window win)
1303{
1304 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1305 XSelectInput(_ecore_x_disp, win,
1306 PropertyChangeMask |
1307 FocusChangeMask |
1308 ColormapChangeMask |
1309 VisibilityChangeMask |
1310 StructureNotifyMask |
1311 SubstructureNotifyMask);
1312 XShapeSelectInput(_ecore_x_disp, win, ShapeNotifyMask);
1313}
1314
1315EAPI Eina_Bool
1316ecore_x_window_attributes_get(Ecore_X_Window win,
1317 Ecore_X_Window_Attributes *att_ret)
1318{
1319 XWindowAttributes att;
1320
1321 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1322 if (!XGetWindowAttributes(_ecore_x_disp, win, &att))
1323 return EINA_FALSE;
1324
1325 memset(att_ret, 0, sizeof(Ecore_X_Window_Attributes));
1326 att_ret->root = att.root;
1327 att_ret->x = att.x;
1328 att_ret->y = att.y;
1329 att_ret->w = att.width;
1330 att_ret->h = att.height;
1331 att_ret->border = att.border_width;
1332 att_ret->depth = att.depth;
1333 if (att.map_state != IsUnmapped)
1334 att_ret->visible = 1;
1335
1336 if (att.map_state == IsViewable)
1337 att_ret->viewable = 1;
1338
1339 if (att.override_redirect)
1340 att_ret->override = 1;
1341
1342 if (att.class == InputOnly)
1343 att_ret->input_only = 1;
1344
1345 if (att.save_under)
1346 att_ret->save_under = 1;
1347
1348 att_ret->event_mask.mine = att.your_event_mask;
1349 att_ret->event_mask.all = att.all_event_masks;
1350 att_ret->event_mask.no_propagate = att.do_not_propagate_mask;
1351 att_ret->window_gravity = att.win_gravity;
1352 att_ret->pixel_gravity = att.bit_gravity;
1353 att_ret->colormap = att.colormap;
1354 att_ret->visual = att.visual;
1355 return EINA_TRUE;
1356}
1357
1358EAPI void
1359ecore_x_window_save_set_add(Ecore_X_Window win)
1360{
1361 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1362 XAddToSaveSet(_ecore_x_disp, win);
1363}
1364
1365EAPI void
1366ecore_x_window_save_set_del(Ecore_X_Window win)
1367{
1368 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1369 XRemoveFromSaveSet(_ecore_x_disp, win);
1370}
1371
1372EAPI Ecore_X_Window *
1373ecore_x_window_children_get(Ecore_X_Window win,
1374 int *num)
1375{
1376 Ecore_X_Window *windows = NULL;
1377 Window root_ret = 0, parent_ret = 0, *children_ret = NULL;
1378 unsigned int children_ret_num = 0;
1379
1380 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1381 if (!XQueryTree(_ecore_x_disp, win, &root_ret, &parent_ret, &children_ret,
1382 &children_ret_num))
1383 return NULL;
1384
1385 if (children_ret)
1386 {
1387 windows = malloc(children_ret_num * sizeof(Ecore_X_Window));
1388 if (windows)
1389 {
1390 unsigned int i;
1391
1392 for (i = 0; i < children_ret_num; i++)
1393 windows[i] = children_ret[i];
1394 *num = children_ret_num;
1395 }
1396
1397 XFree(children_ret);
1398 }
1399
1400 return windows;
1401}
1402
1403EAPI Eina_Bool
1404ecore_x_pointer_control_set(int accel_num,
1405 int accel_denom,
1406 int threshold)
1407{
1408 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1409 return XChangePointerControl(_ecore_x_disp, 1, 1,
1410 accel_num, accel_denom, threshold) ? EINA_TRUE : EINA_FALSE;
1411}
1412
1413EAPI Eina_Bool
1414ecore_x_pointer_control_get(int *accel_num,
1415 int *accel_denom,
1416 int *threshold)
1417{
1418 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1419 return XGetPointerControl(_ecore_x_disp,
1420 accel_num, accel_denom, threshold) ? EINA_TRUE : EINA_FALSE;
1421}
1422
1423EAPI Eina_Bool
1424ecore_x_pointer_mapping_set(unsigned char *map,
1425 int nmap)
1426{
1427 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1428 return XSetPointerMapping(_ecore_x_disp, map, nmap) ? EINA_TRUE : EINA_FALSE;
1429}
1430
1431EAPI Eina_Bool
1432ecore_x_pointer_mapping_get(unsigned char *map,
1433 int nmap)
1434{
1435 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1436 return XGetPointerMapping(_ecore_x_disp, map, nmap) ? EINA_TRUE : EINA_FALSE;
1437}
1438
1439EAPI Eina_Bool
1440ecore_x_pointer_grab(Ecore_X_Window win)
1441{
1442 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1443 if (XGrabPointer(_ecore_x_disp, win, False,
1444 ButtonPressMask | ButtonReleaseMask |
1445 EnterWindowMask | LeaveWindowMask | PointerMotionMask,
1446 GrabModeAsync, GrabModeAsync,
1447 None, None, CurrentTime) == GrabSuccess)
1448 return EINA_TRUE;
1449
1450 return EINA_FALSE;
1451}
1452
1453EAPI Eina_Bool
1454ecore_x_pointer_confine_grab(Ecore_X_Window win)
1455{
1456 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1457 if (XGrabPointer(_ecore_x_disp, win, False,
1458 ButtonPressMask | ButtonReleaseMask |
1459 EnterWindowMask | LeaveWindowMask | PointerMotionMask,
1460 GrabModeAsync, GrabModeAsync,
1461 win, None, CurrentTime) == GrabSuccess)
1462 return EINA_TRUE;
1463
1464 return EINA_FALSE;
1465}
1466
1467EAPI void
1468ecore_x_pointer_ungrab(void)
1469{
1470 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1471 XUngrabPointer(_ecore_x_disp, CurrentTime);
1472}
1473
1474EAPI Eina_Bool
1475ecore_x_pointer_warp(Ecore_X_Window win,
1476 int x,
1477 int y)
1478{
1479 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1480 return XWarpPointer(_ecore_x_disp, None, win, 0, 0, 0, 0, x, y) ? EINA_TRUE : EINA_FALSE;
1481}
1482
1483EAPI Eina_Bool
1484ecore_x_keyboard_grab(Ecore_X_Window win)
1485{
1486 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1487 if (XGrabKeyboard(_ecore_x_disp, win, False,
1488 GrabModeAsync, GrabModeAsync,
1489 CurrentTime) == GrabSuccess)
1490 return EINA_TRUE;
1491
1492 return EINA_FALSE;
1493}
1494
1495EAPI void
1496ecore_x_keyboard_ungrab(void)
1497{
1498 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1499 XUngrabKeyboard(_ecore_x_disp, CurrentTime);
1500}
1501
1502EAPI void
1503ecore_x_grab(void)
1504{
1505 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1506 _ecore_x_grab_count++;
1507 if (_ecore_x_grab_count == 1)
1508 XGrabServer(_ecore_x_disp);
1509}
1510
1511EAPI void
1512ecore_x_ungrab(void)
1513{
1514 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1515 _ecore_x_grab_count--;
1516 if (_ecore_x_grab_count < 0)
1517 _ecore_x_grab_count = 0;
1518
1519 if (_ecore_x_grab_count == 0)
1520 XUngrabServer(_ecore_x_disp);
1521}
1522
1523int _ecore_window_grabs_num = 0;
1524Window *_ecore_window_grabs = NULL;
1525Eina_Bool (*_ecore_window_grab_replay_func)(void *data,
1526 int event_type,
1527 void *event);
1528void *_ecore_window_grab_replay_data;
1529
1530EAPI void
1531ecore_x_passive_grab_replay_func_set(Eina_Bool (*func)(void *data,
1532 int event_type,
1533 void *event),
1534 void *data)
1535{
1536 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1537 _ecore_window_grab_replay_func = func;
1538 _ecore_window_grab_replay_data = data;
1539}
1540
1541EAPI void
1542ecore_x_window_button_grab(Ecore_X_Window win,
1543 int button,
1544 Ecore_X_Event_Mask event_mask,
1545 int mod,
1546 int any_mod)
1547{
1548 unsigned int b;
1549 unsigned int m;
1550 unsigned int locks[8];
1551 int i, ev;
1552 Window *t;
1553
1554 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1555 b = button;
1556 if (b == 0)
1557 b = AnyButton;
1558
1559 m = _ecore_x_event_modifier(mod);
1560 if (any_mod)
1561 m = AnyModifier;
1562
1563 locks[0] = 0;
1564 locks[1] = ECORE_X_LOCK_CAPS;
1565 locks[2] = ECORE_X_LOCK_NUM;
1566 locks[3] = ECORE_X_LOCK_SCROLL;
1567 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1568 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1569 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1570 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1571 ev = event_mask;
1572 for (i = 0; i < 8; i++)
1573 XGrabButton(_ecore_x_disp, b, m | locks[i],
1574 win, False, ev, GrabModeSync, GrabModeAsync, None, None);
1575 _ecore_window_grabs_num++;
1576 t = realloc(_ecore_window_grabs,
1577 _ecore_window_grabs_num * sizeof(Window));
1578 if (!t) return;
1579 _ecore_window_grabs = t;
1580 _ecore_window_grabs[_ecore_window_grabs_num - 1] = win;
1581}
1582
1583void
1584_ecore_x_sync_magic_send(int val,
1585 Ecore_X_Window swin)
1586{
1587 XEvent xev;
1588
1589 xev.xclient.type = ClientMessage;
1590 xev.xclient.serial = 0;
1591 xev.xclient.send_event = True;
1592 xev.xclient.display = _ecore_x_disp;
1593 xev.xclient.window = _ecore_x_private_win;
1594 xev.xclient.format = 32;
1595 xev.xclient.message_type = 27777;
1596 xev.xclient.data.l[0] = 0x7162534;
1597 xev.xclient.data.l[1] = 0x10000000 + val;
1598 xev.xclient.data.l[2] = swin;
1599 XSendEvent(_ecore_x_disp, _ecore_x_private_win, False, NoEventMask, &xev);
1600}
1601
1602void
1603_ecore_x_window_grab_remove(Ecore_X_Window win)
1604{
1605 int i, shuffle = 0;
1606 Window *t;
1607
1608 if (_ecore_window_grabs_num > 0)
1609 {
1610 for (i = 0; i < _ecore_window_grabs_num; i++)
1611 {
1612 if (shuffle)
1613 _ecore_window_grabs[i - 1] = _ecore_window_grabs[i];
1614
1615 if ((!shuffle) && (_ecore_window_grabs[i] == win))
1616 shuffle = 1;
1617 }
1618 if (shuffle)
1619 {
1620 _ecore_window_grabs_num--;
1621 if (_ecore_window_grabs_num <= 0)
1622 {
1623 free(_ecore_window_grabs);
1624 _ecore_window_grabs = NULL;
1625 return;
1626 }
1627 t = realloc(_ecore_window_grabs,
1628 _ecore_window_grabs_num *
1629 sizeof(Window));
1630 if (!t) return;
1631 _ecore_window_grabs = t;
1632 }
1633 }
1634}
1635
1636EAPI void
1637ecore_x_window_button_ungrab(Ecore_X_Window win,
1638 int button,
1639 int mod,
1640 int any_mod)
1641{
1642 unsigned int b;
1643 unsigned int m;
1644 unsigned int locks[8];
1645 int i;
1646
1647 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1648 b = button;
1649 if (b == 0)
1650 b = AnyButton;
1651
1652 m = _ecore_x_event_modifier(mod);
1653 if (any_mod)
1654 m = AnyModifier;
1655
1656 locks[0] = 0;
1657 locks[1] = ECORE_X_LOCK_CAPS;
1658 locks[2] = ECORE_X_LOCK_NUM;
1659 locks[3] = ECORE_X_LOCK_SCROLL;
1660 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1661 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1662 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1663 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1664 for (i = 0; i < 8; i++)
1665 XUngrabButton(_ecore_x_disp, b, m | locks[i], win);
1666 _ecore_x_sync_magic_send(1, win);
1667}
1668
1669int _ecore_key_grabs_num = 0;
1670Window *_ecore_key_grabs = NULL;
1671
1672EAPI void
1673ecore_x_window_key_grab(Ecore_X_Window win,
1674 const char *key,
1675 int mod,
1676 int any_mod)
1677{
1678 KeyCode keycode = 0;
1679 KeySym keysym;
1680 unsigned int m;
1681 unsigned int locks[8];
1682 int i;
1683 Window *t;
1684
1685 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1686 if (!strncmp(key, "Keycode-", 8))
1687 keycode = atoi(key + 8);
1688 else
1689 {
1690 keysym = XStringToKeysym(key);
1691 if (keysym == NoSymbol)
1692 return;
1693
1694 keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key));
1695 }
1696
1697 if (keycode == 0)
1698 return;
1699
1700 m = _ecore_x_event_modifier(mod);
1701 if (any_mod)
1702 m = AnyModifier;
1703
1704 locks[0] = 0;
1705 locks[1] = ECORE_X_LOCK_CAPS;
1706 locks[2] = ECORE_X_LOCK_NUM;
1707 locks[3] = ECORE_X_LOCK_SCROLL;
1708 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1709 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1710 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1711 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1712 for (i = 0; i < 8; i++)
1713 XGrabKey(_ecore_x_disp, keycode, m | locks[i],
1714 win, False, GrabModeSync, GrabModeAsync);
1715 _ecore_key_grabs_num++;
1716 t = realloc(_ecore_key_grabs,
1717 _ecore_key_grabs_num * sizeof(Window));
1718 if (!t) return;
1719 _ecore_key_grabs = t;
1720 _ecore_key_grabs[_ecore_key_grabs_num - 1] = win;
1721}
1722
1723void
1724_ecore_x_key_grab_remove(Ecore_X_Window win)
1725{
1726 int i, shuffle = 0;
1727 Window *t;
1728
1729 if (_ecore_key_grabs_num > 0)
1730 {
1731 for (i = 0; i < _ecore_key_grabs_num; i++)
1732 {
1733 if (shuffle)
1734 _ecore_key_grabs[i - 1] = _ecore_key_grabs[i];
1735
1736 if ((!shuffle) && (_ecore_key_grabs[i] == win))
1737 shuffle = 1;
1738 }
1739 if (shuffle)
1740 {
1741 _ecore_key_grabs_num--;
1742 if (_ecore_key_grabs_num <= 0)
1743 {
1744 free(_ecore_key_grabs);
1745 _ecore_key_grabs = NULL;
1746 return;
1747 }
1748 t = realloc(_ecore_key_grabs,
1749 _ecore_key_grabs_num * sizeof(Window));
1750 if (!t) return;
1751 _ecore_key_grabs = t;
1752 }
1753 }
1754}
1755
1756EAPI void
1757ecore_x_window_key_ungrab(Ecore_X_Window win,
1758 const char *key,
1759 int mod,
1760 int any_mod)
1761{
1762 KeyCode keycode = 0;
1763 KeySym keysym;
1764 unsigned int m;
1765 unsigned int locks[8];
1766 int i;
1767
1768 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1769 if (!strncmp(key, "Keycode-", 8))
1770 keycode = atoi(key + 8);
1771 else
1772 {
1773 keysym = XStringToKeysym(key);
1774 if (keysym == NoSymbol)
1775 return;
1776
1777 keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key));
1778 }
1779
1780 if (keycode == 0)
1781 return;
1782
1783 m = _ecore_x_event_modifier(mod);
1784 if (any_mod)
1785 m = AnyModifier;
1786
1787 locks[0] = 0;
1788 locks[1] = ECORE_X_LOCK_CAPS;
1789 locks[2] = ECORE_X_LOCK_NUM;
1790 locks[3] = ECORE_X_LOCK_SCROLL;
1791 locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
1792 locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
1793 locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1794 locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
1795 for (i = 0; i < 8; i++)
1796 XUngrabKey(_ecore_x_disp, keycode, m | locks[i], win);
1797 _ecore_x_sync_magic_send(2, win);
1798}
1799
1800/**
1801 * Send client message with given type and format 32.
1802 *
1803 * @param win The window the message is sent to.
1804 * @param type The client message type.
1805 * @param d0 The client message data item 1
1806 * @param d1 The client message data item 2
1807 * @param d2 The client message data item 3
1808 * @param d3 The client message data item 4
1809 * @param d4 The client message data item 5
1810 *
1811 * @return EINA_TRUE on success EINA_FALSE otherwise.
1812 */
1813EAPI Eina_Bool
1814ecore_x_client_message32_send(Ecore_X_Window win,
1815 Ecore_X_Atom type,
1816 Ecore_X_Event_Mask mask,
1817 long d0,
1818 long d1,
1819 long d2,
1820 long d3,
1821 long d4)
1822{
1823 XEvent xev;
1824
1825 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1826 xev.xclient.window = win;
1827 xev.xclient.type = ClientMessage;
1828 xev.xclient.message_type = type;
1829 xev.xclient.format = 32;
1830 xev.xclient.data.l[0] = d0;
1831 xev.xclient.data.l[1] = d1;
1832 xev.xclient.data.l[2] = d2;
1833 xev.xclient.data.l[3] = d3;
1834 xev.xclient.data.l[4] = d4;
1835
1836 return XSendEvent(_ecore_x_disp, win, False, mask, &xev) ? EINA_TRUE : EINA_FALSE;
1837}
1838
1839/**
1840 * Send client message with given type and format 8.
1841 *
1842 * @param win The window the message is sent to.
1843 * @param type The client message type.
1844 * @param data Data to be sent.
1845 * @param len Number of data bytes, max 20.
1846 *
1847 * @return EINA_TRUE on success EINA_FALSE otherwise.
1848 */
1849EAPI Eina_Bool
1850ecore_x_client_message8_send(Ecore_X_Window win,
1851 Ecore_X_Atom type,
1852 const void *data,
1853 int len)
1854{
1855 XEvent xev;
1856
1857 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1858 xev.xclient.window = win;
1859 xev.xclient.type = ClientMessage;
1860 xev.xclient.message_type = type;
1861 xev.xclient.format = 8;
1862 if (len > 20)
1863 len = 20;
1864
1865 memcpy(xev.xclient.data.b, data, len);
1866 memset(xev.xclient.data.b + len, 0, 20 - len);
1867
1868 return XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev) ? EINA_TRUE : EINA_FALSE;
1869}
1870
1871EAPI Eina_Bool
1872ecore_x_mouse_move_send(Ecore_X_Window win,
1873 int x,
1874 int y)
1875{
1876 XEvent xev;
1877 XWindowAttributes att;
1878 Window tw;
1879 int rx, ry;
1880
1881 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1882 XGetWindowAttributes(_ecore_x_disp, win, &att);
1883 XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
1884 xev.xmotion.type = MotionNotify;
1885 xev.xmotion.window = win;
1886 xev.xmotion.root = att.root;
1887 xev.xmotion.subwindow = win;
1888 xev.xmotion.time = _ecore_x_event_last_time;
1889 xev.xmotion.x = x;
1890 xev.xmotion.y = y;
1891 xev.xmotion.x_root = rx;
1892 xev.xmotion.y_root = ry;
1893 xev.xmotion.state = 0;
1894 xev.xmotion.is_hint = 0;
1895 xev.xmotion.same_screen = 1;
1896 return XSendEvent(_ecore_x_disp, win, True, PointerMotionMask, &xev) ? EINA_TRUE : EINA_FALSE;
1897}
1898
1899EAPI Eina_Bool
1900ecore_x_mouse_down_send(Ecore_X_Window win,
1901 int x,
1902 int y,
1903 int b)
1904{
1905 XEvent xev;
1906 XWindowAttributes att;
1907 Window tw;
1908 int rx, ry;
1909
1910 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1911 XGetWindowAttributes(_ecore_x_disp, win, &att);
1912 XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
1913 xev.xbutton.type = ButtonPress;
1914 xev.xbutton.window = win;
1915 xev.xbutton.root = att.root;
1916 xev.xbutton.subwindow = win;
1917 xev.xbutton.time = _ecore_x_event_last_time;
1918 xev.xbutton.x = x;
1919 xev.xbutton.y = y;
1920 xev.xbutton.x_root = rx;
1921 xev.xbutton.y_root = ry;
1922 xev.xbutton.state = 1 << b;
1923 xev.xbutton.button = b;
1924 xev.xbutton.same_screen = 1;
1925 return XSendEvent(_ecore_x_disp, win, True, ButtonPressMask, &xev) ? EINA_TRUE : EINA_FALSE;
1926}
1927
1928EAPI Eina_Bool
1929ecore_x_mouse_up_send(Ecore_X_Window win,
1930 int x,
1931 int y,
1932 int b)
1933{
1934 XEvent xev;
1935 XWindowAttributes att;
1936 Window tw;
1937 int rx, ry;
1938
1939 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1940 XGetWindowAttributes(_ecore_x_disp, win, &att);
1941 XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
1942 xev.xbutton.type = ButtonRelease;
1943 xev.xbutton.window = win;
1944 xev.xbutton.root = att.root;
1945 xev.xbutton.subwindow = win;
1946 xev.xbutton.time = _ecore_x_event_last_time;
1947 xev.xbutton.x = x;
1948 xev.xbutton.y = y;
1949 xev.xbutton.x_root = rx;
1950 xev.xbutton.y_root = ry;
1951 xev.xbutton.state = 0;
1952 xev.xbutton.button = b;
1953 xev.xbutton.same_screen = 1;
1954 return XSendEvent(_ecore_x_disp, win, True, ButtonReleaseMask, &xev) ? EINA_TRUE : EINA_FALSE;
1955}
1956
1957EAPI void
1958ecore_x_focus_reset(void)
1959{
1960 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1961 XSetInputFocus(_ecore_x_disp, PointerRoot, RevertToPointerRoot, CurrentTime);
1962}
1963
1964EAPI void
1965ecore_x_events_allow_all(void)
1966{
1967 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1968 XAllowEvents(_ecore_x_disp, AsyncBoth, CurrentTime);
1969}
1970
1971EAPI void
1972ecore_x_pointer_last_xy_get(int *x,
1973 int *y)
1974{
1975 if (x)
1976 *x = _ecore_x_event_last_root_x;
1977
1978 if (y)
1979 *y = _ecore_x_event_last_root_y;
1980}
1981
1982EAPI void
1983ecore_x_pointer_xy_get(Ecore_X_Window win,
1984 int *x,
1985 int *y)
1986{
1987 Window rwin, cwin;
1988 int rx, ry, wx, wy, ret;
1989 unsigned int mask;
1990
1991 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1992 ret = XQueryPointer(_ecore_x_disp, win, &rwin, &cwin,
1993 &rx, &ry, &wx, &wy, &mask);
1994 if (!ret)
1995 wx = wy = -1;
1996
1997 if (x) *x = wx;
1998 if (y) *y = wy;
1999}
2000
2001/**
2002 * Retrieve the Visual ID from a given Visual.
2003 *
2004 * @param visual The Visual to get the ID for.
2005 *
2006 * @return The visual id.
2007 * @since 1.1.0
2008 */
2009EAPI unsigned int
2010ecore_x_visual_id_get(Ecore_X_Visual visual)
2011{
2012 return XVisualIDFromVisual(visual);
2013}
2014
2015/**
2016 * Retrieve the default Visual.
2017 *
2018 * @param disp The Display to get the Default Visual from
2019 * @param screen The Screen.
2020 *
2021 * @return The default visual.
2022 * @since 1.1.0
2023 */
2024EAPI Ecore_X_Visual
2025ecore_x_default_visual_get(Ecore_X_Display *disp,
2026 Ecore_X_Screen *screen)
2027{
2028 return DefaultVisual(disp, ecore_x_screen_index_get(screen));
2029}
2030
2031/**
2032 * Retrieve the default Colormap.
2033 *
2034 * @param disp The Display to get the Default Colormap from
2035 * @param screen The Screen.
2036 *
2037 * @return The default colormap.
2038 * @since 1.1.0
2039 */
2040EAPI Ecore_X_Colormap
2041ecore_x_default_colormap_get(Ecore_X_Display *disp,
2042 Ecore_X_Screen *screen)
2043{
2044 return DefaultColormap(disp, ecore_x_screen_index_get(screen));
2045}
2046
2047/**
2048 * Retrieve the default depth.
2049 *
2050 * @param disp The Display to get the Default Depth from
2051 * @param screen The Screen.
2052 *
2053 * @return The default depth.
2054 * @since 1.1.0
2055 */
2056EAPI int
2057ecore_x_default_depth_get(Ecore_X_Display *disp,
2058 Ecore_X_Screen *screen)
2059{
2060 return DefaultDepth(disp, ecore_x_screen_index_get(screen));
2061}
2062
2063/*****************************************************************************/
2064/*****************************************************************************/
2065/*****************************************************************************/
2066
2067static int
2068_ecore_x_event_modifier(unsigned int state)
2069{
2070 int xmodifiers = 0;
2071
2072 if (state & ECORE_EVENT_MODIFIER_SHIFT)
2073 xmodifiers |= ECORE_X_MODIFIER_SHIFT;
2074
2075 if (state & ECORE_EVENT_MODIFIER_CTRL)
2076 xmodifiers |= ECORE_X_MODIFIER_CTRL;
2077
2078 if (state & ECORE_EVENT_MODIFIER_ALT)
2079 xmodifiers |= ECORE_X_MODIFIER_ALT;
2080
2081 if (state & ECORE_EVENT_MODIFIER_WIN)
2082 xmodifiers |= ECORE_X_MODIFIER_WIN;
2083
2084 if (state & ECORE_EVENT_LOCK_SCROLL)
2085 xmodifiers |= ECORE_X_LOCK_SCROLL;
2086
2087 if (state & ECORE_EVENT_LOCK_NUM)
2088 xmodifiers |= ECORE_X_LOCK_NUM;
2089
2090 if (state & ECORE_EVENT_LOCK_CAPS)
2091 xmodifiers |= ECORE_X_LOCK_CAPS;
2092
2093 if (state & ECORE_EVENT_LOCK_SHIFT)
2094 xmodifiers |= ECORE_X_LOCK_SHIFT;
2095
2096 return xmodifiers;
2097}
2098
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_atoms.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_atoms.c
deleted file mode 100644
index 7a8bffa..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_atoms.c
+++ /dev/null
@@ -1,367 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#ifdef HAVE_ALLOCA_H
6# include <alloca.h>
7#elif defined __GNUC__
8# define alloca __builtin_alloca
9#elif defined _AIX
10# define alloca __alloca
11#elif defined _MSC_VER
12# include <malloc.h>
13# define alloca _alloca
14#else /* ifdef HAVE_ALLOCA_H */
15# include <stddef.h>
16# ifdef __cplusplus
17extern "C"
18# endif /* ifdef __cplusplus */
19void *alloca(size_t);
20#endif /* ifdef HAVE_ALLOCA_H */
21
22#include <string.h>
23
24#include "Ecore.h"
25#include "ecore_x_private.h"
26#include "Ecore_X.h"
27#include "Ecore_X_Atoms.h"
28
29#include "ecore_x_atoms_decl.h"
30
31typedef struct
32{
33 const char *name;
34 Ecore_X_Atom *atom;
35} Atom_Item;
36
37void
38_ecore_x_atoms_init(void)
39{
40 const Atom_Item items[] =
41 {
42 { "ATOM", &ECORE_X_ATOM_ATOM },
43 { "CARDINAL", &ECORE_X_ATOM_CARDINAL },
44 { "COMPOUND_TEXT", &ECORE_X_ATOM_COMPOUND_TEXT },
45 { "FILE_NAME", &ECORE_X_ATOM_FILE_NAME },
46 { "STRING", &ECORE_X_ATOM_STRING },
47 { "TEXT", &ECORE_X_ATOM_TEXT },
48 { "UTF8_STRING", &ECORE_X_ATOM_UTF8_STRING },
49 { "WINDOW", &ECORE_X_ATOM_WINDOW },
50 { "PIXMAP", &ECORE_X_ATOM_PIXMAP },
51
52 { "JXSelectionWindowProperty", &ECORE_X_ATOM_SELECTION_PROP_XDND },
53 { "XdndSelection", &ECORE_X_ATOM_SELECTION_XDND },
54 { "XdndAware", &ECORE_X_ATOM_XDND_AWARE },
55 { "XdndEnter", &ECORE_X_ATOM_XDND_ENTER },
56 { "XdndTypeList", &ECORE_X_ATOM_XDND_TYPE_LIST },
57 { "XdndPosition", &ECORE_X_ATOM_XDND_POSITION },
58 { "XdndActionCopy", &ECORE_X_ATOM_XDND_ACTION_COPY },
59 { "XdndActionMove", &ECORE_X_ATOM_XDND_ACTION_MOVE },
60 { "XdndActionPrivate", &ECORE_X_ATOM_XDND_ACTION_PRIVATE },
61 { "XdndActionAsk", &ECORE_X_ATOM_XDND_ACTION_ASK },
62 { "XdndActionList", &ECORE_X_ATOM_XDND_ACTION_LIST },
63 { "XdndActionLink", &ECORE_X_ATOM_XDND_ACTION_LINK },
64 { "XdndActionDescription", &ECORE_X_ATOM_XDND_ACTION_DESCRIPTION },
65 { "XdndProxy", &ECORE_X_ATOM_XDND_PROXY },
66 { "XdndStatus", &ECORE_X_ATOM_XDND_STATUS },
67 { "XdndLeave", &ECORE_X_ATOM_XDND_LEAVE },
68 { "XdndDrop", &ECORE_X_ATOM_XDND_DROP },
69 { "XdndFinished", &ECORE_X_ATOM_XDND_FINISHED },
70
71 { "XdndActionCopy", &ECORE_X_DND_ACTION_COPY },
72 { "XdndActionMove", &ECORE_X_DND_ACTION_MOVE },
73 { "XdndActionLink", &ECORE_X_DND_ACTION_LINK },
74 { "XdndActionAsk", &ECORE_X_DND_ACTION_ASK },
75 { "XdndActionPrivate", &ECORE_X_DND_ACTION_PRIVATE },
76
77 { "_E_FRAME_SIZE", &ECORE_X_ATOM_E_FRAME_SIZE },
78
79 { "_WIN_LAYER", &ECORE_X_ATOM_WIN_LAYER },
80
81 { "WM_NAME", &ECORE_X_ATOM_WM_NAME },
82 { "WM_ICON_NAME", &ECORE_X_ATOM_WM_ICON_NAME },
83 { "WM_NORMAL_HINTS", &ECORE_X_ATOM_WM_NORMAL_HINTS },
84 { "WM_SIZE_HINTS", &ECORE_X_ATOM_WM_SIZE_HINTS },
85 { "WM_HINTS", &ECORE_X_ATOM_WM_HINTS },
86 { "WM_CLASS", &ECORE_X_ATOM_WM_CLASS },
87 { "WM_TRANSIENT_FOR", &ECORE_X_ATOM_WM_TRANSIENT_FOR },
88 { "WM_PROTOCOLS", &ECORE_X_ATOM_WM_PROTOCOLS },
89 { "WM_COLORMAP_WINDOWS", &ECORE_X_ATOM_WM_COLORMAP_WINDOWS },
90 { "WM_COMMAND", &ECORE_X_ATOM_WM_COMMAND },
91 { "WM_CLIENT_MACHINE", &ECORE_X_ATOM_WM_CLIENT_MACHINE },
92
93 { "WM_STATE", &ECORE_X_ATOM_WM_STATE },
94 { "WM_ICON_SIZE", &ECORE_X_ATOM_WM_ICON_SIZE },
95
96 { "WM_CHANGE_STATE", &ECORE_X_ATOM_WM_CHANGE_STATE },
97
98 { "WM_TAKE_FOCUS", &ECORE_X_ATOM_WM_TAKE_FOCUS },
99 { "WM_SAVE_YOURSELF", &ECORE_X_ATOM_WM_SAVE_YOURSELF },
100 { "WM_DELETE_WINDOW", &ECORE_X_ATOM_WM_DELETE_WINDOW },
101
102 { "WM_COLORMAP_NOTIFY", &ECORE_X_ATOM_WM_COLORMAP_NOTIFY },
103
104 { "SM_CLIENT_ID", &ECORE_X_ATOM_SM_CLIENT_ID },
105 { "WM_CLIENT_LEADER", &ECORE_X_ATOM_WM_CLIENT_LEADER },
106 { "WM_WINDOW_ROLE", &ECORE_X_ATOM_WM_WINDOW_ROLE },
107
108 { "_MOTIF_WM_HINTS", &ECORE_X_ATOM_MOTIF_WM_HINTS },
109
110 { "_NET_SUPPORTED", &ECORE_X_ATOM_NET_SUPPORTED },
111 { "_NET_CLIENT_LIST", &ECORE_X_ATOM_NET_CLIENT_LIST },
112 { "_NET_CLIENT_LIST_STACKING", &ECORE_X_ATOM_NET_CLIENT_LIST_STACKING },
113 { "_NET_NUMBER_OF_DESKTOPS", &ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS },
114 { "_NET_DESKTOP_GEOMETRY", &ECORE_X_ATOM_NET_DESKTOP_GEOMETRY },
115 { "_NET_DESKTOP_VIEWPORT", &ECORE_X_ATOM_NET_DESKTOP_VIEWPORT },
116 { "_NET_CURRENT_DESKTOP", &ECORE_X_ATOM_NET_CURRENT_DESKTOP },
117 { "_NET_DESKTOP_NAMES", &ECORE_X_ATOM_NET_DESKTOP_NAMES },
118 { "_NET_ACTIVE_WINDOW", &ECORE_X_ATOM_NET_ACTIVE_WINDOW },
119 { "_NET_WORKAREA", &ECORE_X_ATOM_NET_WORKAREA },
120 { "_NET_SUPPORTING_WM_CHECK", &ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK },
121 { "_NET_VIRTUAL_ROOTS", &ECORE_X_ATOM_NET_VIRTUAL_ROOTS },
122 { "_NET_DESKTOP_LAYOUT", &ECORE_X_ATOM_NET_DESKTOP_LAYOUT },
123 { "_NET_SHOWING_DESKTOP", &ECORE_X_ATOM_NET_SHOWING_DESKTOP },
124
125 { "_NET_CLOSE_WINDOW", &ECORE_X_ATOM_NET_CLOSE_WINDOW },
126 { "_NET_MOVERESIZE_WINDOW", &ECORE_X_ATOM_NET_MOVERESIZE_WINDOW },
127 { "_NET_WM_MOVERESIZE", &ECORE_X_ATOM_NET_WM_MOVERESIZE },
128 { "_NET_RESTACK_WINDOW", &ECORE_X_ATOM_NET_RESTACK_WINDOW },
129
130 { "_NET_REQUEST_FRAME_EXTENTS", &ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS },
131
132 { "_NET_WM_NAME", &ECORE_X_ATOM_NET_WM_NAME },
133 { "_NET_WM_VISIBLE_NAME", &ECORE_X_ATOM_NET_WM_VISIBLE_NAME },
134 { "_NET_WM_ICON_NAME", &ECORE_X_ATOM_NET_WM_ICON_NAME },
135 { "_NET_WM_VISIBLE_ICON_NAME", &ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME },
136 { "_NET_WM_DESKTOP", &ECORE_X_ATOM_NET_WM_DESKTOP },
137
138 { "_NET_WM_WINDOW_TYPE", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE },
139 { "_NET_WM_WINDOW_TYPE_DESKTOP", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP },
140 { "_NET_WM_WINDOW_TYPE_DOCK", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK },
141 { "_NET_WM_WINDOW_TYPE_TOOLBAR", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR },
142 { "_NET_WM_WINDOW_TYPE_MENU", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU },
143 { "_NET_WM_WINDOW_TYPE_UTILITY", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY },
144 { "_NET_WM_WINDOW_TYPE_SPLASH", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH },
145 { "_NET_WM_WINDOW_TYPE_DIALOG", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG },
146 { "_NET_WM_WINDOW_TYPE_NORMAL", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL },
147 { "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
148 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU },
149 { "_NET_WM_WINDOW_TYPE_POPUP_MENU",
150 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU },
151 { "_NET_WM_WINDOW_TYPE_TOOLTIP", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP },
152 { "_NET_WM_WINDOW_TYPE_NOTIFICATION",
153 &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION },
154 { "_NET_WM_WINDOW_TYPE_COMBO", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO },
155 { "_NET_WM_WINDOW_TYPE_DND", &ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND },
156
157 { "_NET_WM_STATE", &ECORE_X_ATOM_NET_WM_STATE },
158 { "_NET_WM_STATE_MODAL", &ECORE_X_ATOM_NET_WM_STATE_MODAL },
159 { "_NET_WM_STATE_STICKY", &ECORE_X_ATOM_NET_WM_STATE_STICKY },
160 { "_NET_WM_STATE_MAXIMIZED_VERT",
161 &ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT },
162 { "_NET_WM_STATE_MAXIMIZED_HORZ",
163 &ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ },
164 { "_NET_WM_STATE_SHADED", &ECORE_X_ATOM_NET_WM_STATE_SHADED },
165 { "_NET_WM_STATE_SKIP_TASKBAR", &ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR },
166 { "_NET_WM_STATE_SKIP_PAGER", &ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER },
167 { "_NET_WM_STATE_HIDDEN", &ECORE_X_ATOM_NET_WM_STATE_HIDDEN },
168 { "_NET_WM_STATE_FULLSCREEN", &ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN },
169 { "_NET_WM_STATE_ABOVE", &ECORE_X_ATOM_NET_WM_STATE_ABOVE },
170 { "_NET_WM_STATE_BELOW", &ECORE_X_ATOM_NET_WM_STATE_BELOW },
171 { "_NET_WM_STATE_DEMANDS_ATTENTION",
172 &ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION },
173
174 { "_NET_WM_ALLOWED_ACTIONS", &ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS },
175 { "_NET_WM_ACTION_MOVE", &ECORE_X_ATOM_NET_WM_ACTION_MOVE },
176 { "_NET_WM_ACTION_RESIZE", &ECORE_X_ATOM_NET_WM_ACTION_RESIZE },
177 { "_NET_WM_ACTION_MINIMIZE", &ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE },
178 { "_NET_WM_ACTION_SHADE", &ECORE_X_ATOM_NET_WM_ACTION_SHADE },
179 { "_NET_WM_ACTION_STICK", &ECORE_X_ATOM_NET_WM_ACTION_STICK },
180 { "_NET_WM_ACTION_MAXIMIZE_HORZ",
181 &ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ },
182 { "_NET_WM_ACTION_MAXIMIZE_VERT",
183 &ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT },
184 { "_NET_WM_ACTION_FULLSCREEN", &ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN },
185 { "_NET_WM_ACTION_CHANGE_DESKTOP",
186 &ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP },
187 { "_NET_WM_ACTION_CLOSE", &ECORE_X_ATOM_NET_WM_ACTION_CLOSE },
188 { "_NET_WM_ACTION_ABOVE", &ECORE_X_ATOM_NET_WM_ACTION_ABOVE },
189 { "_NET_WM_ACTION_BELOW", &ECORE_X_ATOM_NET_WM_ACTION_BELOW },
190
191 { "_NET_WM_STRUT", &ECORE_X_ATOM_NET_WM_STRUT },
192 { "_NET_WM_STRUT_PARTIAL", &ECORE_X_ATOM_NET_WM_STRUT_PARTIAL },
193 { "_NET_WM_ICON_GEOMETRY", &ECORE_X_ATOM_NET_WM_ICON_GEOMETRY },
194 { "_NET_WM_ICON", &ECORE_X_ATOM_NET_WM_ICON },
195 { "_NET_WM_PID", &ECORE_X_ATOM_NET_WM_PID },
196 { "_NET_WM_HANDLED_ICONS", &ECORE_X_ATOM_NET_WM_HANDLED_ICONS },
197 { "_NET_WM_USER_TIME", &ECORE_X_ATOM_NET_WM_USER_TIME },
198 { "_NET_STARTUP_ID", &ECORE_X_ATOM_NET_STARTUP_ID },
199 { "_NET_FRAME_EXTENTS", &ECORE_X_ATOM_NET_FRAME_EXTENTS },
200
201 { "_NET_WM_PING", &ECORE_X_ATOM_NET_WM_PING },
202 { "_NET_WM_SYNC_REQUEST", &ECORE_X_ATOM_NET_WM_SYNC_REQUEST },
203 { "_NET_WM_SYNC_REQUEST_COUNTER",
204 &ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER },
205
206 { "_NET_WM_WINDOW_OPACITY", &ECORE_X_ATOM_NET_WM_WINDOW_OPACITY },
207 { "_NET_WM_WINDOW_SHADOW", &ECORE_X_ATOM_NET_WM_WINDOW_SHADOW },
208 { "_NET_WM_WINDOW_SHADE", &ECORE_X_ATOM_NET_WM_WINDOW_SHADE },
209
210 { "TARGETS", &ECORE_X_ATOM_SELECTION_TARGETS },
211 { "CLIPBOARD", &ECORE_X_ATOM_SELECTION_CLIPBOARD },
212 { "PRIMARY", &ECORE_X_ATOM_SELECTION_PRIMARY },
213 { "SECONDARY", &ECORE_X_ATOM_SELECTION_SECONDARY },
214 { "_ECORE_SELECTION_PRIMARY", &ECORE_X_ATOM_SELECTION_PROP_PRIMARY },
215 { "_ECORE_SELECTION_SECONDARY", &ECORE_X_ATOM_SELECTION_PROP_SECONDARY },
216 { "_ECORE_SELECTION_CLIPBOARD", &ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD },
217
218 { "_E_VIRTUAL_KEYBOARD", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD },
219 { "_E_VIRTUAL_KEYBOARD_STATE", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE },
220 { "_E_VIRTUAL_KEYBOARD_ON", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON },
221 { "_E_VIRTUAL_KEYBOARD_OFF", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF },
222 { "_E_VIRTUAL_KEYBOARD_ALPHA", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA },
223 { "_E_VIRTUAL_KEYBOARD_NUMERIC", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC },
224 { "_E_VIRTUAL_KEYBOARD_PIN", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN },
225 { "_E_VIRTUAL_KEYBOARD_PHONE_NUMBER",
226 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER },
227 { "_E_VIRTUAL_KEYBOARD_HEX", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX },
228 { "_E_VIRTUAL_KEYBOARD_TERMINAL",
229 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL },
230 { "_E_VIRTUAL_KEYBOARD_PASSWORD",
231 &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD },
232 { "_E_VIRTUAL_KEYBOARD_IP", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP },
233 { "_E_VIRTUAL_KEYBOARD_HOST", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST },
234 { "_E_VIRTUAL_KEYBOARD_FILE", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE },
235 { "_E_VIRTUAL_KEYBOARD_URL", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL },
236 { "_E_VIRTUAL_KEYBOARD_KEYPAD", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD },
237 { "_E_VIRTUAL_KEYBOARD_J2ME", &ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME },
238
239 { "_E_ILLUME_ZONE", &ECORE_X_ATOM_E_ILLUME_ZONE },
240 { "_E_ILLUME_ZONE_LIST", &ECORE_X_ATOM_E_ILLUME_ZONE_LIST },
241 { "_E_ILLUME_CONFORMANT", &ECORE_X_ATOM_E_ILLUME_CONFORMANT },
242 { "_E_ILLUME_MODE", &ECORE_X_ATOM_E_ILLUME_MODE },
243 { "_E_ILLUME_MODE_SINGLE", &ECORE_X_ATOM_E_ILLUME_MODE_SINGLE },
244 { "_E_ILLUME_MODE_DUAL_TOP", &ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP },
245 { "_E_ILLUME_MODE_DUAL_LEFT", &ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT },
246 { "_E_ILLUME_FOCUS_BACK", &ECORE_X_ATOM_E_ILLUME_FOCUS_BACK },
247 { "_E_ILLUME_FOCUS_FORWARD", &ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD },
248 { "_E_ILLUME_FOCUS_HOME", &ECORE_X_ATOM_E_ILLUME_FOCUS_HOME },
249 { "_E_ILLUME_CLOSE", &ECORE_X_ATOM_E_ILLUME_CLOSE },
250 { "_E_ILLUME_HOME_NEW", &ECORE_X_ATOM_E_ILLUME_HOME_NEW },
251 { "_E_ILLUME_HOME_DEL", &ECORE_X_ATOM_E_ILLUME_HOME_DEL },
252 { "_E_ILLUME_DRAG", &ECORE_X_ATOM_E_ILLUME_DRAG },
253 { "_E_ILLUME_DRAG_LOCKED", &ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED },
254 { "_E_ILLUME_DRAG_START", &ECORE_X_ATOM_E_ILLUME_DRAG_START },
255 { "_E_ILLUME_DRAG_END", &ECORE_X_ATOM_E_ILLUME_DRAG_END },
256 { "_E_ILLUME_INDICATOR_GEOMETRY",
257 &ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY },
258 { "_E_ILLUME_SOFTKEY_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY },
259 { "_E_ILLUME_KEYBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY },
260 { "_E_ILLUME_QUICKPANEL", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL },
261 { "_E_ILLUME_QUICKPANEL_STATE", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE },
262 { "_E_ILLUME_QUICKPANEL_STATE_TOGGLE",
263 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE },
264 { "_E_ILLUME_QUICKPANEL_ON", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON },
265 { "_E_ILLUME_QUICKPANEL_OFF", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF },
266 { "_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR",
267 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR },
268 { "_E_ILLUME_QUICKPANEL_PRIORITY_MINOR",
269 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR },
270 { "_E_ILLUME_QUICKPANEL_ZONE", &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE },
271 { "_E_ILLUME_QUICKPANEL_POSITION_UPDATE",
272 &ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE },
273 { "_E_ILLUME_INDICATOR_STATE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE },
274 { "_E_ILLUME_INDICATOR_ON", &ECORE_X_ATOM_E_ILLUME_INDICATOR_ON },
275 { "_E_ILLUME_INDICATOR_OFF", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF },
276 { "_E_ILLUME_INDICATOR_OPACITY_MODE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE },
277 { "_E_ILLUME_INDICATOR_OPAQUE", &ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE },
278 { "_E_ILLUME_INDICATOR_TRANSLUCENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT },
279 { "_E_ILLUME_INDICATOR_TRANSPARENT", &ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT },
280 { "_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLES", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_AVAILABLE_ANGLE },
281 { "_E_ILLUME_ROTATE_WINDOW_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE },
282 { "_E_ILLUME_ROTATE_ROOT_ANGLE", &ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE },
283 { "_E_ILLUME_CLIPBOARD_STATE", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE },
284 { "_E_ILLUME_CLIPBOARD_ON", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON },
285 { "_E_ILLUME_CLIPBOARD_OFF", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF },
286 { "_E_ILLUME_CLIPBOARD_GEOMETRY", &ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY },
287 { "_E_COMP_SYNC_COUNTER", &ECORE_X_ATOM_E_COMP_SYNC_COUNTER },
288 { "_E_COMP_SYNC_DRAW_DONE", &ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE },
289 { "_E_COMP_SYNC_SUPPORTED", &ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED },
290 { "_E_COMP_SYNC_BEGIN", &ECORE_X_ATOM_E_COMP_SYNC_BEGIN },
291 { "_E_COMP_SYNC_END", &ECORE_X_ATOM_E_COMP_SYNC_END },
292 { "_E_COMP_SYNC_CANCEL", &ECORE_X_ATOM_E_COMP_SYNC_CANCEL },
293
294 { "_E_COMP_FLUSH", &ECORE_X_ATOM_E_COMP_FLUSH },
295 { "_E_COMP_DUMP", &ECORE_X_ATOM_E_COMP_DUMP },
296 { "_E_COMP_PIXMAP", &ECORE_X_ATOM_E_COMP_PIXMAP },
297 { "_E_VIDEO_PARENT", &ECORE_X_ATOM_E_VIDEO_PARENT },
298 { "_E_VIDEO_POSITION", &ECORE_X_ATOM_E_VIDEO_POSITION }
299 };
300 Atom *atoms;
301 char **names;
302 int i, num;
303
304 num = sizeof(items) / sizeof(Atom_Item);
305 atoms = alloca(num * sizeof(Atom));
306 names = alloca(num * sizeof(char *));
307 for (i = 0; i < num; i++)
308 names[i] = (char *)items[i].name;
309 XInternAtoms(_ecore_x_disp, names, num, False, atoms);
310 for (i = 0; i < num; i++)
311 *(items[i].atom) = atoms[i];
312}
313
314/**
315 * Retrieves the atom value associated with the given name.
316 * @param name The given name.
317 * @return Associated atom value.
318 */
319EAPI Ecore_X_Atom
320ecore_x_atom_get(const char *name)
321{
322 if (!_ecore_x_disp)
323 return 0;
324
325 LOGFN(__FILE__, __LINE__, __FUNCTION__);
326 return XInternAtom(_ecore_x_disp, name, False);
327}
328
329EAPI void
330ecore_x_atoms_get(const char **names,
331 int num,
332 Ecore_X_Atom *atoms)
333{
334 Atom *atoms_int;
335 int i;
336
337 if (!_ecore_x_disp)
338 return;
339
340 LOGFN(__FILE__, __LINE__, __FUNCTION__);
341 atoms_int = alloca(num * sizeof(Atom));
342 XInternAtoms(_ecore_x_disp, (char **)names, num, False, atoms_int);
343 for (i = 0; i < num; i++)
344 atoms[i] = atoms_int[i];
345}
346
347EAPI char *
348ecore_x_atom_name_get(Ecore_X_Atom atom)
349{
350 char *name;
351 char *xname;
352
353 if (!_ecore_x_disp)
354 return NULL;
355
356 LOGFN(__FILE__, __LINE__, __FUNCTION__);
357
358 xname = XGetAtomName(_ecore_x_disp, atom);
359 if (!xname)
360 return NULL;
361
362 name = strdup(xname);
363 XFree(xname);
364
365 return name;
366}
367
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_composite.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_composite.c
deleted file mode 100644
index b919db9..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_composite.c
+++ /dev/null
@@ -1,176 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6#include "Ecore_X.h"
7
8static Eina_Bool _composite_available = EINA_FALSE;
9
10void
11_ecore_x_composite_init(void)
12{
13 _composite_available = EINA_FALSE;
14
15#ifdef ECORE_XCOMPOSITE
16 int major, minor;
17
18 if (XCompositeQueryVersion(_ecore_x_disp, &major, &minor))
19 {
20# ifdef ECORE_XRENDER
21 if (XRenderQueryExtension(_ecore_x_disp, &major, &minor))
22 {
23# ifdef ECORE_XFIXES
24 if (XFixesQueryVersion(_ecore_x_disp, &major, &minor))
25 {
26 _composite_available = EINA_TRUE;
27 }
28# endif
29 }
30# endif
31 }
32#endif
33}
34
35EAPI Eina_Bool
36ecore_x_composite_query(void)
37{
38 LOGFN(__FILE__, __LINE__, __FUNCTION__);
39 return _composite_available;
40}
41
42EAPI void
43ecore_x_composite_redirect_window(Ecore_X_Window win,
44 Ecore_X_Composite_Update_Type type)
45{
46#ifdef ECORE_XCOMPOSITE
47 int update = CompositeRedirectAutomatic;
48
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
50 switch (type)
51 {
52 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
53 update = CompositeRedirectAutomatic;
54 break;
55
56 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
57 update = CompositeRedirectManual;
58 break;
59 }
60 XCompositeRedirectWindow(_ecore_x_disp, win, update);
61#endif /* ifdef ECORE_XCOMPOSITE */
62}
63
64EAPI void
65ecore_x_composite_redirect_subwindows(Ecore_X_Window win,
66 Ecore_X_Composite_Update_Type type)
67{
68#ifdef ECORE_XCOMPOSITE
69 int update = CompositeRedirectAutomatic;
70
71 LOGFN(__FILE__, __LINE__, __FUNCTION__);
72 switch (type)
73 {
74 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
75 update = CompositeRedirectAutomatic;
76 break;
77
78 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
79 update = CompositeRedirectManual;
80 break;
81 }
82 XCompositeRedirectSubwindows(_ecore_x_disp, win, update);
83#endif /* ifdef ECORE_XCOMPOSITE */
84}
85
86EAPI void
87ecore_x_composite_unredirect_window(Ecore_X_Window win,
88 Ecore_X_Composite_Update_Type type)
89{
90#ifdef ECORE_XCOMPOSITE
91 int update = CompositeRedirectAutomatic;
92
93 LOGFN(__FILE__, __LINE__, __FUNCTION__);
94 switch (type)
95 {
96 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
97 update = CompositeRedirectAutomatic;
98 break;
99
100 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
101 update = CompositeRedirectManual;
102 break;
103 }
104 XCompositeUnredirectWindow(_ecore_x_disp, win, update);
105#endif /* ifdef ECORE_XCOMPOSITE */
106}
107
108EAPI void
109ecore_x_composite_unredirect_subwindows(Ecore_X_Window win,
110 Ecore_X_Composite_Update_Type type)
111{
112#ifdef ECORE_XCOMPOSITE
113 int update = CompositeRedirectAutomatic;
114
115 LOGFN(__FILE__, __LINE__, __FUNCTION__);
116 switch (type)
117 {
118 case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
119 update = CompositeRedirectAutomatic;
120 break;
121
122 case ECORE_X_COMPOSITE_UPDATE_MANUAL:
123 update = CompositeRedirectManual;
124 break;
125 }
126 XCompositeUnredirectSubwindows(_ecore_x_disp, win, update);
127#endif /* ifdef ECORE_XCOMPOSITE */
128}
129
130EAPI Ecore_X_Pixmap
131ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
132{
133 Ecore_X_Pixmap pixmap = None;
134#ifdef ECORE_XCOMPOSITE
135 LOGFN(__FILE__, __LINE__, __FUNCTION__);
136 pixmap = XCompositeNameWindowPixmap(_ecore_x_disp, win);
137#endif /* ifdef ECORE_XCOMPOSITE */
138 return pixmap;
139}
140
141EAPI void
142ecore_x_composite_window_events_disable(Ecore_X_Window win)
143{
144#ifdef ECORE_XCOMPOSITE
145 ecore_x_window_shape_input_rectangle_set(win, -1, -1, 1, 1);
146#endif /* ifdef ECORE_XCOMPOSITE */
147}
148
149EAPI void
150ecore_x_composite_window_events_enable(Ecore_X_Window win)
151{
152#ifdef ECORE_XCOMPOSITE
153 ecore_x_window_shape_input_rectangle_set(win, 0, 0, 65535, 65535);
154#endif /* ifdef ECORE_XCOMPOSITE */
155}
156
157EAPI Ecore_X_Window
158ecore_x_composite_render_window_enable(Ecore_X_Window root)
159{
160 Ecore_X_Window win = 0;
161#ifdef ECORE_XCOMPOSITE
162 win = XCompositeGetOverlayWindow(_ecore_x_disp, root);
163 ecore_x_composite_window_events_disable(win);
164#endif /* ifdef ECORE_XCOMPOSITE */
165 return win;
166}
167
168EAPI void
169ecore_x_composite_render_window_disable(Ecore_X_Window root)
170{
171#ifdef ECORE_XCOMPOSITE
172 LOGFN(__FILE__, __LINE__, __FUNCTION__);
173 XCompositeReleaseOverlayWindow(_ecore_x_disp, root);
174#endif /* ifdef ECORE_XCOMPOSITE */
175}
176
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_cursor.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_cursor.c
deleted file mode 100644
index a968c56..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_cursor.c
+++ /dev/null
@@ -1,246 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#include "ecore_x_private.h"
8
9EAPI Eina_Bool
10ecore_x_cursor_color_supported_get(void)
11{
12 return _ecore_x_xcursor;
13}
14
15EAPI Ecore_X_Cursor
16ecore_x_cursor_new(Ecore_X_Window win,
17 int *pixels,
18 int w,
19 int h,
20 int hot_x,
21 int hot_y)
22{
23#ifdef ECORE_XCURSOR
24 LOGFN(__FILE__, __LINE__, __FUNCTION__);
25 if (_ecore_x_xcursor)
26 {
27 Cursor c;
28 XcursorImage *xci;
29
30 xci = XcursorImageCreate(w, h);
31 if (xci)
32 {
33 int i;
34
35 xci->xhot = hot_x;
36 xci->yhot = hot_y;
37 xci->delay = 0;
38 for (i = 0; i < (w * h); i++)
39 {
40// int r, g, b, a;
41//
42// a = (pixels[i] >> 24) & 0xff;
43// r = (((pixels[i] >> 16) & 0xff) * a) / 0xff;
44// g = (((pixels[i] >> 8 ) & 0xff) * a) / 0xff;
45// b = (((pixels[i] ) & 0xff) * a) / 0xff;
46 xci->pixels[i] = pixels[i];
47// (a << 24) | (r << 16) | (g << 8) | (b);
48 }
49 c = XcursorImageLoadCursor(_ecore_x_disp, xci);
50 XcursorImageDestroy(xci);
51 return c;
52 }
53 }
54 else
55#endif /* ifdef ECORE_XCURSOR */
56 {
57 XColor c1, c2;
58 Cursor c;
59 Pixmap pmap, mask;
60 GC gc;
61 XGCValues gcv;
62 XImage *xim;
63 unsigned int *pix;
64 int fr, fg, fb, br, bg, bb;
65 int brightest = 0;
66 int darkest = 255 * 3;
67 int x, y;
68 const int dither[2][2] =
69 {
70 {0, 2},
71 {3, 1}
72 };
73
74 pmap = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
75 mask = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
76 xim = XCreateImage(_ecore_x_disp,
77 DefaultVisual(_ecore_x_disp, 0),
78 1, ZPixmap, 0, NULL, w, h, 32, 0);
79 xim->data = malloc(xim->bytes_per_line * xim->height);
80
81 fr = 0x00; fg = 0x00; fb = 0x00;
82 br = 0xff; bg = 0xff; bb = 0xff;
83 pix = (unsigned int *)pixels;
84 for (y = 0; y < h; y++)
85 {
86 for (x = 0; x < w; x++)
87 {
88 int r, g, b, a;
89
90 a = (pix[0] >> 24) & 0xff;
91 r = (pix[0] >> 16) & 0xff;
92 g = (pix[0] >> 8) & 0xff;
93 b = (pix[0]) & 0xff;
94 if (a > 0)
95 {
96 if ((r + g + b) > brightest)
97 {
98 brightest = r + g + b;
99 br = r;
100 bg = g;
101 bb = b;
102 }
103
104 if ((r + g + b) < darkest)
105 {
106 darkest = r + g + b;
107 fr = r;
108 fg = g;
109 fb = b;
110 }
111 }
112
113 pix++;
114 }
115 }
116
117 pix = (unsigned int *)pixels;
118 for (y = 0; y < h; y++)
119 {
120 for (x = 0; x < w; x++)
121 {
122 int v;
123 int r, g, b;
124 int d1, d2;
125
126 r = (pix[0] >> 16) & 0xff;
127 g = (pix[0] >> 8) & 0xff;
128 b = (pix[0]) & 0xff;
129 d1 =
130 ((r - fr) * (r - fr)) +
131 ((g - fg) * (g - fg)) +
132 ((b - fb) * (b - fb));
133 d2 =
134 ((r - br) * (r - br)) +
135 ((g - bg) * (g - bg)) +
136 ((b - bb) * (b - bb));
137 if (d1 + d2)
138 {
139 v = (((d2 * 255) / (d1 + d2)) * 5) / 256;
140 if (v > dither[x & 0x1][y & 0x1])
141 v = 1;
142 else
143 v = 0;
144 }
145 else
146 v = 0;
147
148 XPutPixel(xim, x, y, v);
149 pix++;
150 }
151 }
152 gc = XCreateGC(_ecore_x_disp, pmap, 0, &gcv);
153 XPutImage(_ecore_x_disp, pmap, gc, xim, 0, 0, 0, 0, w, h);
154 XFreeGC(_ecore_x_disp, gc);
155
156 pix = (unsigned int *)pixels;
157 for (y = 0; y < h; y++)
158 {
159 for (x = 0; x < w; x++)
160 {
161 int v;
162
163 v = (((pix[0] >> 24) & 0xff) * 5) / 256;
164 if (v > dither[x & 0x1][y & 0x1])
165 v = 1;
166 else
167 v = 0;
168
169 XPutPixel(xim, x, y, v);
170 pix++;
171 }
172 }
173 gc = XCreateGC(_ecore_x_disp, mask, 0, &gcv);
174 XPutImage(_ecore_x_disp, mask, gc, xim, 0, 0, 0, 0, w, h);
175 XFreeGC(_ecore_x_disp, gc);
176
177 free(xim->data);
178 xim->data = NULL;
179 XDestroyImage(xim);
180
181 c1.pixel = 0;
182 c1.red = fr << 8 | fr;
183 c1.green = fg << 8 | fg;
184 c1.blue = fb << 8 | fb;
185 c1.flags = DoRed | DoGreen | DoBlue;
186
187 c2.pixel = 0;
188 c2.red = br << 8 | br;
189 c2.green = bg << 8 | bg;
190 c2.blue = bb << 8 | bb;
191 c2.flags = DoRed | DoGreen | DoBlue;
192
193 c = XCreatePixmapCursor(_ecore_x_disp,
194 pmap, mask,
195 &c1, &c2,
196 hot_x, hot_y);
197 XFreePixmap(_ecore_x_disp, pmap);
198 XFreePixmap(_ecore_x_disp, mask);
199 return c;
200 }
201
202 return 0;
203}
204
205EAPI void
206ecore_x_cursor_free(Ecore_X_Cursor c)
207{
208 LOGFN(__FILE__, __LINE__, __FUNCTION__);
209 XFreeCursor(_ecore_x_disp, c);
210}
211
212/*
213 * Returns the cursor for the given shape.
214 * Note that the return value must not be freed with
215 * ecore_x_cursor_free()!
216 */
217EAPI Ecore_X_Cursor
218ecore_x_cursor_shape_get(int shape)
219{
220 LOGFN(__FILE__, __LINE__, __FUNCTION__);
221 /* Shapes are defined in Ecore_X_Cursor.h */
222 return XCreateFontCursor(_ecore_x_disp, shape);
223}
224
225EAPI void
226ecore_x_cursor_size_set(int size)
227{
228#ifdef ECORE_XCURSOR
229 LOGFN(__FILE__, __LINE__, __FUNCTION__);
230 XcursorSetDefaultSize(_ecore_x_disp, size);
231#else /* ifdef ECORE_XCURSOR */
232 size = 0;
233#endif /* ifdef ECORE_XCURSOR */
234}
235
236EAPI int
237ecore_x_cursor_size_get(void)
238{
239#ifdef ECORE_XCURSOR
240 LOGFN(__FILE__, __LINE__, __FUNCTION__);
241 return XcursorGetDefaultSize(_ecore_x_disp);
242#else /* ifdef ECORE_XCURSOR */
243 return 0;
244#endif /* ifdef ECORE_XCURSOR */
245}
246
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_damage.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_damage.c
deleted file mode 100644
index b094f85..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_damage.c
+++ /dev/null
@@ -1,71 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6#include "Ecore_X.h"
7
8static Eina_Bool _damage_available = EINA_FALSE;
9#ifdef ECORE_XDAMAGE
10static int _damage_major, _damage_minor;
11#endif /* ifdef ECORE_XDAMAGE */
12
13void
14_ecore_x_damage_init(void)
15{
16#ifdef ECORE_XDAMAGE
17 _damage_major = 1;
18 _damage_minor = 0;
19
20 LOGFN(__FILE__, __LINE__, __FUNCTION__);
21 if (XDamageQueryVersion(_ecore_x_disp, &_damage_major, &_damage_minor))
22 _damage_available = EINA_TRUE;
23 else
24 _damage_available = EINA_FALSE;
25
26#else /* ifdef ECORE_XDAMAGE */
27 _damage_available = EINA_FALSE;
28#endif /* ifdef ECORE_XDAMAGE */
29}
30
31EAPI Eina_Bool
32ecore_x_damage_query(void)
33{
34 return _damage_available;
35}
36
37EAPI Ecore_X_Damage
38ecore_x_damage_new(Ecore_X_Drawable d,
39 Ecore_X_Damage_Report_Level level)
40{
41#ifdef ECORE_XDAMAGE
42 Ecore_X_Damage damage;
43
44 LOGFN(__FILE__, __LINE__, __FUNCTION__);
45 damage = XDamageCreate(_ecore_x_disp, d, level);
46 return damage;
47#else /* ifdef ECORE_XDAMAGE */
48 return 0;
49#endif /* ifdef ECORE_XDAMAGE */
50}
51
52EAPI void
53ecore_x_damage_free(Ecore_X_Damage damage)
54{
55#ifdef ECORE_XDAMAGE
56 LOGFN(__FILE__, __LINE__, __FUNCTION__);
57 XDamageDestroy(_ecore_x_disp, damage);
58#endif /* ifdef ECORE_XDAMAGE */
59}
60
61EAPI void
62ecore_x_damage_subtract(Ecore_X_Damage damage,
63 Ecore_X_Region repair,
64 Ecore_X_Region parts)
65{
66#ifdef ECORE_XDAMAGE
67 LOGFN(__FILE__, __LINE__, __FUNCTION__);
68 XDamageSubtract(_ecore_x_disp, damage, repair, parts);
69#endif /* ifdef ECORE_XDAMAGE */
70}
71
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dnd.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dnd.c
deleted file mode 100644
index 372470a..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dnd.c
+++ /dev/null
@@ -1,706 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Ecore.h"
9#include "ecore_x_private.h"
10#include "Ecore_X.h"
11#include "Ecore_X_Atoms.h"
12
13EAPI int ECORE_X_EVENT_XDND_ENTER = 0;
14EAPI int ECORE_X_EVENT_XDND_POSITION = 0;
15EAPI int ECORE_X_EVENT_XDND_STATUS = 0;
16EAPI int ECORE_X_EVENT_XDND_LEAVE = 0;
17EAPI int ECORE_X_EVENT_XDND_DROP = 0;
18EAPI int ECORE_X_EVENT_XDND_FINISHED = 0;
19
20static Ecore_X_DND_Source *_source = NULL;
21static Ecore_X_DND_Target *_target = NULL;
22static int _ecore_x_dnd_init_count = 0;
23
24typedef struct _Version_Cache_Item
25{
26 Ecore_X_Window win;
27 int ver;
28} Version_Cache_Item;
29static Version_Cache_Item *_version_cache = NULL;
30static int _version_cache_num = 0, _version_cache_alloc = 0;
31static void (*_posupdatecb)(void *,
32 Ecore_X_Xdnd_Position *);
33static void *_posupdatedata;
34
35void
36_ecore_x_dnd_init(void)
37{
38 if (!_ecore_x_dnd_init_count)
39 {
40 _source = calloc(1, sizeof(Ecore_X_DND_Source));
41 if (!_source) return;
42 _source->version = ECORE_X_DND_VERSION;
43 _source->win = None;
44 _source->dest = None;
45 _source->state = ECORE_X_DND_SOURCE_IDLE;
46 _source->prev.window = 0;
47
48 _target = calloc(1, sizeof(Ecore_X_DND_Target));
49 if (!_target)
50 {
51 free(_source);
52 _source = NULL;
53 return;
54 }
55 _target->win = None;
56 _target->source = None;
57 _target->state = ECORE_X_DND_TARGET_IDLE;
58
59 ECORE_X_EVENT_XDND_ENTER = ecore_event_type_new();
60 ECORE_X_EVENT_XDND_POSITION = ecore_event_type_new();
61 ECORE_X_EVENT_XDND_STATUS = ecore_event_type_new();
62 ECORE_X_EVENT_XDND_LEAVE = ecore_event_type_new();
63 ECORE_X_EVENT_XDND_DROP = ecore_event_type_new();
64 ECORE_X_EVENT_XDND_FINISHED = ecore_event_type_new();
65 }
66
67 _ecore_x_dnd_init_count++;
68}
69
70void
71_ecore_x_dnd_shutdown(void)
72{
73 _ecore_x_dnd_init_count--;
74 if (_ecore_x_dnd_init_count > 0)
75 return;
76
77 if (_source)
78 free(_source);
79
80 _source = NULL;
81
82 if (_target)
83 free(_target);
84
85 _target = NULL;
86
87 _ecore_x_dnd_init_count = 0;
88}
89
90static Eina_Bool
91_ecore_x_dnd_converter_copy(char *target __UNUSED__,
92 void *data,
93 int size,
94 void **data_ret,
95 int *size_ret,
96 Ecore_X_Atom *tprop __UNUSED__,
97 int *count __UNUSED__)
98{
99 XTextProperty text_prop;
100 char *mystr;
101 XICCEncodingStyle style = XTextStyle;
102
103 if (!data || !size)
104 return EINA_FALSE;
105
106 mystr = calloc(1, size + 1);
107 if (!mystr)
108 return EINA_FALSE;
109
110 memcpy(mystr, data, size);
111
112 if (XmbTextListToTextProperty(_ecore_x_disp, &mystr, 1, style,
113 &text_prop) == Success)
114 {
115 int bufsize = strlen((char *)text_prop.value) + 1;
116 *data_ret = malloc(bufsize);
117 if (!*data_ret)
118 {
119 free(mystr);
120 return EINA_FALSE;
121 }
122 memcpy(*data_ret, text_prop.value, bufsize);
123 *size_ret = bufsize;
124 XFree(text_prop.value);
125 free(mystr);
126 return EINA_TRUE;
127 }
128 else
129 {
130 free(mystr);
131 return EINA_FALSE;
132 }
133}
134
135EAPI void
136ecore_x_dnd_aware_set(Ecore_X_Window win,
137 Eina_Bool on)
138{
139 Ecore_X_Atom prop_data = ECORE_X_DND_VERSION;
140
141 LOGFN(__FILE__, __LINE__, __FUNCTION__);
142 if (on)
143 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_AWARE,
144 XA_ATOM, 32, &prop_data, 1);
145 else
146 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_AWARE);
147}
148
149EAPI int
150ecore_x_dnd_version_get(Ecore_X_Window win)
151{
152 unsigned char *prop_data;
153 int num;
154 Version_Cache_Item *t;
155
156 LOGFN(__FILE__, __LINE__, __FUNCTION__);
157 // this looks hacky - and it is, but we need a way of caching info about
158 // a window while dragging, because we literally query this every mouse
159 // move and going to and from x multiple times per move is EXPENSIVE
160 // and slows things down, puts lots of load on x etc.
161 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
162 if (_version_cache)
163 {
164 int i;
165
166 for (i = 0; i < _version_cache_num; i++)
167 {
168 if (_version_cache[i].win == win)
169 return _version_cache[i].ver;
170 }
171 }
172
173 if (ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_AWARE,
174 XA_ATOM, 32, &prop_data, &num))
175 {
176 int version = (int)*prop_data;
177 free(prop_data);
178 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
179 {
180 _version_cache_num++;
181 if (_version_cache_num > _version_cache_alloc)
182 _version_cache_alloc += 16;
183
184 t = realloc(_version_cache,
185 _version_cache_alloc *
186 sizeof(Version_Cache_Item));
187 if (!t) return 0;
188 _version_cache = t;
189 _version_cache[_version_cache_num - 1].win = win;
190 _version_cache[_version_cache_num - 1].ver = version;
191 }
192
193 return version;
194 }
195
196 if (_source->state == ECORE_X_DND_SOURCE_DRAGGING)
197 {
198 _version_cache_num++;
199 if (_version_cache_num > _version_cache_alloc)
200 _version_cache_alloc += 16;
201
202 t = realloc(_version_cache, _version_cache_alloc *
203 sizeof(Version_Cache_Item));
204 if (!t) return 0;
205 _version_cache = t;
206 _version_cache[_version_cache_num - 1].win = win;
207 _version_cache[_version_cache_num - 1].ver = 0;
208 }
209
210 return 0;
211}
212
213EAPI Eina_Bool
214ecore_x_dnd_type_isset(Ecore_X_Window win,
215 const char *type)
216{
217 int num, i, ret = EINA_FALSE;
218 unsigned char *data;
219 Ecore_X_Atom *atoms, atom;
220
221 LOGFN(__FILE__, __LINE__, __FUNCTION__);
222 if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
223 XA_ATOM, 32, &data, &num))
224 return ret;
225
226 atom = ecore_x_atom_get(type);
227 atoms = (Ecore_X_Atom *)data;
228
229 for (i = 0; i < num; ++i)
230 {
231 if (atom == atoms[i])
232 {
233 ret = EINA_TRUE;
234 break;
235 }
236 }
237
238 XFree(data);
239 return ret;
240}
241
242EAPI void
243ecore_x_dnd_type_set(Ecore_X_Window win,
244 const char *type,
245 Eina_Bool on)
246{
247 Ecore_X_Atom atom;
248 Ecore_X_Atom *oldset = NULL, *newset = NULL;
249 int i, j = 0, num = 0;
250 unsigned char *data = NULL;
251 unsigned char *old_data = NULL;
252
253 LOGFN(__FILE__, __LINE__, __FUNCTION__);
254 atom = ecore_x_atom_get(type);
255 ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
256 XA_ATOM, 32, &old_data, &num);
257 oldset = (Ecore_X_Atom *)old_data;
258
259 LOGFN(__FILE__, __LINE__, __FUNCTION__);
260 if (on)
261 {
262 if (ecore_x_dnd_type_isset(win, type))
263 {
264 XFree(old_data);
265 return;
266 }
267
268 newset = calloc(num + 1, sizeof(Ecore_X_Atom));
269 if (!newset)
270 return;
271
272 data = (unsigned char *)newset;
273
274 for (i = 0; i < num; i++)
275 newset[i + 1] = oldset[i];
276 /* prepend the new type */
277 newset[0] = atom;
278
279 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
280 XA_ATOM, 32, data, num + 1);
281 }
282 else
283 {
284 if (!ecore_x_dnd_type_isset(win, type))
285 {
286 XFree(old_data);
287 return;
288 }
289
290 newset = calloc(num - 1, sizeof(Ecore_X_Atom));
291 if (!newset)
292 {
293 XFree(old_data);
294 return;
295 }
296
297 data = (unsigned char *)newset;
298 for (i = 0; i < num; i++)
299 if (oldset[i] != atom)
300 newset[j++] = oldset[i];
301
302 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
303 XA_ATOM, 32, data, num - 1);
304 }
305
306 XFree(oldset);
307 free(newset);
308}
309
310EAPI void
311ecore_x_dnd_types_set(Ecore_X_Window win,
312 const char **types,
313 unsigned int num_types)
314{
315 Ecore_X_Atom *newset = NULL;
316 unsigned int i;
317 unsigned char *data = NULL;
318
319 LOGFN(__FILE__, __LINE__, __FUNCTION__);
320 if (!num_types)
321 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_TYPE_LIST);
322 else
323 {
324 newset = calloc(num_types, sizeof(Ecore_X_Atom));
325 if (!newset)
326 return;
327
328 data = (unsigned char *)newset;
329 for (i = 0; i < num_types; i++)
330 {
331 newset[i] = ecore_x_atom_get(types[i]);
332 ecore_x_selection_converter_atom_add(newset[i],
333 _ecore_x_dnd_converter_copy);
334 }
335 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_TYPE_LIST,
336 XA_ATOM, 32, data, num_types);
337 free(newset);
338 }
339}
340
341EAPI void
342ecore_x_dnd_actions_set(Ecore_X_Window win,
343 Ecore_X_Atom *actions,
344 unsigned int num_actions)
345{
346 unsigned int i;
347 unsigned char *data = NULL;
348
349 LOGFN(__FILE__, __LINE__, __FUNCTION__);
350 if (!num_actions)
351 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_ACTION_LIST);
352 else
353 {
354 data = (unsigned char *)actions;
355 for (i = 0; i < num_actions; i++)
356 {
357 ecore_x_selection_converter_atom_add(actions[i],
358 _ecore_x_dnd_converter_copy);
359 }
360 ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_ACTION_LIST,
361 XA_ATOM, 32, data, num_actions);
362 }
363}
364
365/**
366 * The DND position update cb is called Ecore_X sends a DND position to a
367 * client.
368 *
369 * It essentially mirrors some of the data sent in the position message.
370 * Generally this cb should be set just before position update is called.
371 * Please note well you need to look after your own data pointer if someone
372 * trashes you position update cb set.
373 *
374 * It is considered good form to clear this when the dnd event finishes.
375 *
376 * @param cb Callback to updated each time ecore_x sends a position update.
377 * @param data User data.
378 */
379EAPI void
380ecore_x_dnd_callback_pos_update_set(
381 void (*cb)(void *,
382 Ecore_X_Xdnd_Position *data),
383 const void *data)
384{
385 _posupdatecb = cb;
386 _posupdatedata = (void *)data; /* Discard the const early */
387}
388
389Ecore_X_DND_Source *
390_ecore_x_dnd_source_get(void)
391{
392 return _source;
393}
394
395Ecore_X_DND_Target *
396_ecore_x_dnd_target_get(void)
397{
398 return _target;
399}
400
401EAPI Eina_Bool
402ecore_x_dnd_begin(Ecore_X_Window source,
403 unsigned char *data,
404 int size)
405{
406 LOGFN(__FILE__, __LINE__, __FUNCTION__);
407 if (!ecore_x_dnd_version_get(source))
408 return EINA_FALSE;
409
410 /* Take ownership of XdndSelection */
411 if (!ecore_x_selection_xdnd_set(source, data, size))
412 return EINA_FALSE;
413
414 if (_version_cache)
415 {
416 free(_version_cache);
417 _version_cache = NULL;
418 _version_cache_num = 0;
419 _version_cache_alloc = 0;
420 }
421
422 ecore_x_window_shadow_tree_flush();
423
424 _source->win = source;
425 ecore_x_window_ignore_set(_source->win, 1);
426 _source->state = ECORE_X_DND_SOURCE_DRAGGING;
427 _source->time = _ecore_x_event_last_time;
428 _source->prev.window = 0;
429
430 /* Default Accepted Action: move */
431 _source->action = ECORE_X_ATOM_XDND_ACTION_MOVE;
432 _source->accepted_action = None;
433 _source->dest = None;
434
435 return EINA_TRUE;
436}
437
438EAPI Eina_Bool
439ecore_x_dnd_drop(void)
440{
441 XEvent xev;
442 int status = EINA_FALSE;
443
444 LOGFN(__FILE__, __LINE__, __FUNCTION__);
445 if (_source->dest)
446 {
447 xev.xany.type = ClientMessage;
448 xev.xany.display = _ecore_x_disp;
449 xev.xclient.format = 32;
450 xev.xclient.window = _source->dest;
451
452 if (_source->will_accept)
453 {
454 xev.xclient.message_type = ECORE_X_ATOM_XDND_DROP;
455 xev.xclient.data.l[0] = _source->win;
456 xev.xclient.data.l[1] = 0;
457 xev.xclient.data.l[2] = _source->time;
458 XSendEvent(_ecore_x_disp, _source->dest, False, 0, &xev);
459 _source->state = ECORE_X_DND_SOURCE_DROPPED;
460 status = EINA_TRUE;
461 }
462 else
463 {
464 xev.xclient.message_type = ECORE_X_ATOM_XDND_LEAVE;
465 xev.xclient.data.l[0] = _source->win;
466 xev.xclient.data.l[1] = 0;
467 XSendEvent(_ecore_x_disp, _source->dest, False, 0, &xev);
468 _source->state = ECORE_X_DND_SOURCE_IDLE;
469 }
470 }
471 else
472 {
473 /* Dropping on nothing */
474 ecore_x_selection_xdnd_clear();
475 _source->state = ECORE_X_DND_SOURCE_IDLE;
476 }
477
478 ecore_x_window_ignore_set(_source->win, 0);
479
480 _source->prev.window = 0;
481
482 return status;
483}
484
485EAPI void
486ecore_x_dnd_send_status(Eina_Bool will_accept,
487 Eina_Bool suppress,
488 Ecore_X_Rectangle rectangle,
489 Ecore_X_Atom action)
490{
491 XEvent xev;
492
493 if (_target->state == ECORE_X_DND_TARGET_IDLE)
494 return;
495
496 LOGFN(__FILE__, __LINE__, __FUNCTION__);
497 memset(&xev, 0, sizeof(XEvent));
498
499 _target->will_accept = will_accept;
500
501 xev.xclient.type = ClientMessage;
502 xev.xclient.display = _ecore_x_disp;
503 xev.xclient.message_type = ECORE_X_ATOM_XDND_STATUS;
504 xev.xclient.format = 32;
505 xev.xclient.window = _target->source;
506
507 xev.xclient.data.l[0] = _target->win;
508 xev.xclient.data.l[1] = 0;
509 if (will_accept)
510 xev.xclient.data.l[1] |= 0x1UL;
511
512 if (!suppress)
513 xev.xclient.data.l[1] |= 0x2UL;
514
515 /* Set rectangle information */
516 xev.xclient.data.l[2] = rectangle.x;
517 xev.xclient.data.l[2] <<= 16;
518 xev.xclient.data.l[2] |= rectangle.y;
519 xev.xclient.data.l[3] = rectangle.width;
520 xev.xclient.data.l[3] <<= 16;
521 xev.xclient.data.l[3] |= rectangle.height;
522
523 if (will_accept)
524 {
525 xev.xclient.data.l[4] = action;
526 _target->accepted_action = action;
527 }
528 else
529 {
530 xev.xclient.data.l[4] = None;
531 _target->accepted_action = action;
532 }
533
534 XSendEvent(_ecore_x_disp, _target->source, False, 0, &xev);
535}
536
537EAPI void
538ecore_x_dnd_send_finished(void)
539{
540 XEvent xev;
541
542 if (_target->state == ECORE_X_DND_TARGET_IDLE)
543 return;
544
545 LOGFN(__FILE__, __LINE__, __FUNCTION__);
546 xev.xany.type = ClientMessage;
547 xev.xany.display = _ecore_x_disp;
548 xev.xclient.message_type = ECORE_X_ATOM_XDND_FINISHED;
549 xev.xclient.format = 32;
550 xev.xclient.window = _target->source;
551
552 xev.xclient.data.l[0] = _target->win;
553 xev.xclient.data.l[1] = 0;
554 xev.xclient.data.l[2] = 0;
555 if (_target->will_accept)
556 {
557 xev.xclient.data.l[1] |= 0x1UL;
558 xev.xclient.data.l[2] = _target->accepted_action;
559 }
560
561 XSendEvent(_ecore_x_disp, _target->source, False, 0, &xev);
562
563 _target->state = ECORE_X_DND_TARGET_IDLE;
564}
565
566EAPI void
567ecore_x_dnd_source_action_set(Ecore_X_Atom action)
568{
569 _source->action = action;
570 if (_source->prev.window)
571 _ecore_x_dnd_drag(_source->prev.window, _source->prev.x, _source->prev.y);
572}
573
574EAPI Ecore_X_Atom
575ecore_x_dnd_source_action_get(void)
576{
577 return _source->action;
578}
579
580void
581_ecore_x_dnd_drag(Ecore_X_Window root,
582 int x,
583 int y)
584{
585 XEvent xev;
586 Ecore_X_Window win;
587 Ecore_X_Window *skip;
588 Ecore_X_Xdnd_Position pos;
589 int num;
590
591 if (_source->state != ECORE_X_DND_SOURCE_DRAGGING)
592 return;
593
594 /* Preinitialize XEvent struct */
595 memset(&xev, 0, sizeof(XEvent));
596 xev.xany.type = ClientMessage;
597 xev.xany.display = _ecore_x_disp;
598 xev.xclient.format = 32;
599
600 /* Attempt to find a DND-capable window under the cursor */
601 skip = ecore_x_window_ignore_list(&num);
602// WARNING - this function is HEAVY. it goes to and from x a LOT walking the
603// window tree - use the SHADOW version - makes a 1-off tree copy, then uses
604// that instead.
605// win = ecore_x_window_at_xy_with_skip_get(x, y, skip, num);
606 win = ecore_x_window_shadow_tree_at_xy_with_skip_get(root, x, y, skip, num);
607
608// NOTE: This now uses the shadow version to find parent windows
609// while ((win) && !(ecore_x_dnd_version_get(win)))
610// win = ecore_x_window_parent_get(win);
611 while ((win) && !(ecore_x_dnd_version_get(win)))
612 win = ecore_x_window_shadow_parent_get(root, win);
613
614 /* Send XdndLeave to current destination window if we have left it */
615 if ((_source->dest) && (win != _source->dest))
616 {
617 xev.xclient.window = _source->dest;
618 xev.xclient.message_type = ECORE_X_ATOM_XDND_LEAVE;
619 xev.xclient.data.l[0] = _source->win;
620 xev.xclient.data.l[1] = 0;
621
622 XSendEvent(_ecore_x_disp, _source->dest, False, 0, &xev);
623 _source->suppress = 0;
624 }
625
626 if (win)
627 {
628 int x1, x2, y1, y2;
629
630 _source->version = MIN(ECORE_X_DND_VERSION,
631 ecore_x_dnd_version_get(win));
632 if (win != _source->dest)
633 {
634 int i;
635 unsigned char *data;
636 Ecore_X_Atom *types;
637
638 ecore_x_window_prop_property_get(_source->win,
639 ECORE_X_ATOM_XDND_TYPE_LIST,
640 XA_ATOM,
641 32,
642 &data,
643 &num);
644 types = (Ecore_X_Atom *)data;
645
646 /* Entered new window, send XdndEnter */
647 xev.xclient.window = win;
648 xev.xclient.message_type = ECORE_X_ATOM_XDND_ENTER;
649 xev.xclient.data.l[0] = _source->win;
650 xev.xclient.data.l[1] = 0;
651 if (num > 3)
652 xev.xclient.data.l[1] |= 0x1UL;
653 else
654 xev.xclient.data.l[1] &= 0xfffffffeUL;
655
656 xev.xclient.data.l[1] |= ((unsigned long)_source->version) << 24;
657
658 for (i = 2; i < 5; i++)
659 xev.xclient.data.l[i] = 0;
660 for (i = 0; i < MIN(num, 3); ++i)
661 xev.xclient.data.l[i + 2] = types[i];
662 XFree(data);
663 XSendEvent(_ecore_x_disp, win, False, 0, &xev);
664 _source->await_status = 0;
665 _source->will_accept = 0;
666 }
667
668 /* Determine if we're still in the rectangle from the last status */
669 x1 = _source->rectangle.x;
670 x2 = _source->rectangle.x + _source->rectangle.width;
671 y1 = _source->rectangle.y;
672 y2 = _source->rectangle.y + _source->rectangle.height;
673
674 if ((!_source->await_status) ||
675 (!_source->suppress) ||
676 ((x < x1) || (x > x2) || (y < y1) || (y > y2)))
677 {
678 xev.xclient.window = win;
679 xev.xclient.message_type = ECORE_X_ATOM_XDND_POSITION;
680 xev.xclient.data.l[0] = _source->win;
681 xev.xclient.data.l[1] = 0; /* Reserved */
682 xev.xclient.data.l[2] = ((x << 16) & 0xffff0000) | (y & 0xffff);
683 xev.xclient.data.l[3] = _source->time; /* Version 1 */
684 xev.xclient.data.l[4] = _source->action; /* Version 2, Needs to be pre-set */
685 XSendEvent(_ecore_x_disp, win, False, 0, &xev);
686
687 _source->await_status = 1;
688 }
689 }
690
691 if (_posupdatecb)
692 {
693 pos.position.x = x;
694 pos.position.y = y;
695 pos.win = win;
696 pos.prev = _source->dest;
697 _posupdatecb(_posupdatedata, &pos);
698 }
699
700 _source->prev.x = x;
701 _source->prev.y = y;
702 _source->prev.window = root;
703 _source->dest = win;
704}
705
706/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dpms.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dpms.c
deleted file mode 100644
index 23349f4..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_dpms.c
+++ /dev/null
@@ -1,247 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6
7static Eina_Bool _dpms_available = EINA_FALSE;
8
9void
10_ecore_x_dpms_init(void)
11{
12#ifdef ECORE_XDPMS
13 int _dpms_major, _dpms_minor;
14
15 _dpms_major = 1;
16 _dpms_minor = 0;
17
18 if (DPMSGetVersion(_ecore_x_disp, &_dpms_major, &_dpms_minor))
19 _dpms_available = EINA_TRUE;
20 else
21 _dpms_available = EINA_FALSE;
22
23#else /* ifdef ECORE_XDPMS */
24 _dpms_available = EINA_FALSE;
25#endif /* ifdef ECORE_XDPMS */
26}
27
28/**
29 * @defgroup Ecore_X_DPMS_Group X DPMS Extension Functions
30 *
31 * Functions related to the X DPMS extension.
32 */
33
34/**
35 * Checks if the X DPMS extension is available on the server.
36 * @return @c 1 if the X DPMS extension is available, @c 0 otherwise.
37 * @ingroup Ecore_X_DPMS_Group
38 */
39EAPI Eina_Bool
40ecore_x_dpms_query(void)
41{
42 return _dpms_available;
43}
44
45/**
46 * Checks if the X server is capable of DPMS.
47 * @return @c 1 if the X server is capable of DPMS, @c 0 otherwise.
48 * @ingroup Ecore_X_DPMS_Group
49 */
50EAPI Eina_Bool
51ecore_x_dpms_capable_get(void)
52{
53#ifdef ECORE_XDPMS
54 LOGFN(__FILE__, __LINE__, __FUNCTION__);
55 return DPMSCapable(_ecore_x_disp) ? EINA_TRUE : EINA_FALSE;
56#else /* ifdef ECORE_XDPMS */
57 return EINA_FALSE;
58#endif /* ifdef ECORE_XDPMS */
59}
60
61/**
62 * Checks the DPMS state of the display.
63 * @return @c 1 if DPMS is enabled, @c 0 otherwise.
64 * @ingroup Ecore_X_DPMS_Group
65 */
66EAPI Eina_Bool
67ecore_x_dpms_enabled_get(void)
68{
69#ifdef ECORE_XDPMS
70 unsigned char state;
71 unsigned short power_lvl;
72
73 LOGFN(__FILE__, __LINE__, __FUNCTION__);
74 DPMSInfo(_ecore_x_disp, &power_lvl, &state);
75 return state ? EINA_TRUE : EINA_FALSE;
76#else /* ifdef ECORE_XDPMS */
77 return EINA_FALSE;
78#endif /* ifdef ECORE_XDPMS */
79}
80
81/**
82 * Sets the DPMS state of the display.
83 * @param enabled @c 0 to disable DPMS characteristics of the server, enable it otherwise.
84 * @ingroup Ecore_X_DPMS_Group
85 */
86EAPI void
87ecore_x_dpms_enabled_set(int enabled)
88{
89#ifdef ECORE_XDPMS
90 LOGFN(__FILE__, __LINE__, __FUNCTION__);
91 if (enabled)
92 DPMSEnable(_ecore_x_disp);
93 else
94 DPMSDisable(_ecore_x_disp);
95
96#endif /* ifdef ECORE_XDPMS */
97}
98
99/**
100 * Gets the timeouts. The values are in unit of seconds.
101 * @param standby Amount of time of inactivity before standby mode will be invoked.
102 * @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
103 * @param off Amount of time of inactivity before the monitor is shut off.
104 * @ingroup Ecore_X_DPMS_Group
105 */
106EAPI void
107ecore_x_dpms_timeouts_get(unsigned int *standby,
108 unsigned int *suspend,
109 unsigned int *off)
110{
111#ifdef ECORE_XDPMS
112 LOGFN(__FILE__, __LINE__, __FUNCTION__);
113 DPMSGetTimeouts(_ecore_x_disp, (unsigned short *)standby,
114 (unsigned short *)suspend, (unsigned short *)off);
115#endif /* ifdef ECORE_XDPMS */
116}
117
118/**
119 * Sets the timeouts. The values are in unit of seconds.
120 * @param standby Amount of time of inactivity before standby mode will be invoked.
121 * @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
122 * @param off Amount of time of inactivity before the monitor is shut off.
123 * @ingroup Ecore_X_DPMS_Group
124 */
125EAPI Eina_Bool
126ecore_x_dpms_timeouts_set(unsigned int standby,
127 unsigned int suspend,
128 unsigned int off)
129{
130#ifdef ECORE_XDPMS
131 LOGFN(__FILE__, __LINE__, __FUNCTION__);
132 return DPMSSetTimeouts(_ecore_x_disp, standby, suspend, off) ? EINA_TRUE : EINA_FALSE;
133#else /* ifdef ECORE_XDPMS */
134 return EINA_FALSE;
135#endif /* ifdef ECORE_XDPMS */
136}
137
138/**
139 * Returns the amount of time of inactivity before standby mode is invoked.
140 * @return The standby timeout value.
141 * @ingroup Ecore_X_DPMS_Group
142 */
143EAPI unsigned int
144ecore_x_dpms_timeout_standby_get(void)
145{
146#ifdef ECORE_XDPMS
147 unsigned short standby, suspend, off;
148
149 LOGFN(__FILE__, __LINE__, __FUNCTION__);
150 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
151 return standby;
152#else /* ifdef ECORE_XDPMS */
153 return 0;
154#endif /* ifdef ECORE_XDPMS */
155}
156
157/**
158 * Returns the amount of time of inactivity before the second level of
159 * power saving is invoked.
160 * @return The suspend timeout value.
161 * @ingroup Ecore_X_DPMS_Group
162 */
163EAPI unsigned int
164ecore_x_dpms_timeout_suspend_get(void)
165{
166#ifdef ECORE_XDPMS
167 unsigned short standby, suspend, off;
168
169 LOGFN(__FILE__, __LINE__, __FUNCTION__);
170 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
171 return suspend;
172#else /* ifdef ECORE_XDPMS */
173 return 0;
174#endif /* ifdef ECORE_XDPMS */
175}
176
177/**
178 * Returns the amount of time of inactivity before the third and final
179 * level of power saving is invoked.
180 * @return The off timeout value.
181 * @ingroup Ecore_X_DPMS_Group
182 */
183EAPI unsigned int
184ecore_x_dpms_timeout_off_get(void)
185{
186#ifdef ECORE_XDPMS
187 unsigned short standby, suspend, off;
188
189 LOGFN(__FILE__, __LINE__, __FUNCTION__);
190 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
191 return off;
192#else /* ifdef ECORE_XDPMS */
193 return 0;
194#endif /* ifdef ECORE_XDPMS */
195}
196
197/**
198 * Sets the standby timeout (in unit of seconds).
199 * @param new_timeout Amount of time of inactivity before standby mode will be invoked.
200 * @ingroup Ecore_X_DPMS_Group
201 */
202EAPI void
203ecore_x_dpms_timeout_standby_set(unsigned int new_timeout)
204{
205#ifdef ECORE_XDPMS
206 unsigned short standby, suspend, off;
207
208 LOGFN(__FILE__, __LINE__, __FUNCTION__);
209 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
210 DPMSSetTimeouts(_ecore_x_disp, new_timeout, suspend, off);
211#endif /* ifdef ECORE_XDPMS */
212}
213
214/**
215 * Sets the suspend timeout (in unit of seconds).
216 * @param new_timeout Amount of time of inactivity before the screen is placed into suspend mode.
217 * @ingroup Ecore_X_DPMS_Group
218 */
219EAPI void
220ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout)
221{
222#ifdef ECORE_XDPMS
223 unsigned short standby, suspend, off;
224
225 LOGFN(__FILE__, __LINE__, __FUNCTION__);
226 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
227 DPMSSetTimeouts(_ecore_x_disp, standby, new_timeout, off);
228#endif /* ifdef ECORE_XDPMS */
229}
230
231/**
232 * Sets the off timeout (in unit of seconds).
233 * @param new_timeout Amount of time of inactivity before the monitor is shut off.
234 * @ingroup Ecore_X_DPMS_Group
235 */
236EAPI void
237ecore_x_dpms_timeout_off_set(unsigned int new_timeout)
238{
239#ifdef ECORE_XDPMS
240 unsigned short standby, suspend, off;
241
242 LOGFN(__FILE__, __LINE__, __FUNCTION__);
243 DPMSGetTimeouts(_ecore_x_disp, &standby, &suspend, &off);
244 DPMSSetTimeouts(_ecore_x_disp, standby, suspend, new_timeout);
245#endif /* ifdef ECORE_XDPMS */
246}
247
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_drawable.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_drawable.c
deleted file mode 100644
index d1b4111..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_drawable.c
+++ /dev/null
@@ -1,118 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6
7/**
8 * @defgroup Ecore_X_Drawable_Group X Drawable Functions
9 *
10 * Functions that operate on drawables.
11 */
12
13/**
14 * Retrieves the geometry of the given drawable.
15 * @param d The given drawable.
16 * @param x Pointer to an integer into which the X position is to be stored.
17 * @param y Pointer to an integer into which the Y position is to be stored.
18 * @param w Pointer to an integer into which the width is to be stored.
19 * @param h Pointer to an integer into which the height is to be stored.
20 * @ingroup Ecore_X_Drawable_Group
21 */
22EAPI void
23ecore_x_drawable_geometry_get(Ecore_X_Drawable d,
24 int *x,
25 int *y,
26 int *w,
27 int *h)
28{
29 Window dummy_win;
30 int ret_x, ret_y;
31 unsigned int ret_w, ret_h, dummy_border, dummy_depth;
32
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34 if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &ret_x, &ret_y,
35 &ret_w, &ret_h, &dummy_border, &dummy_depth))
36 {
37 ret_x = 0;
38 ret_y = 0;
39 ret_w = 0;
40 ret_h = 0;
41 }
42
43 if (x)
44 *x = ret_x;
45
46 if (y)
47 *y = ret_y;
48
49 if (w)
50 *w = (int)ret_w;
51
52 if (h)
53 *h = (int)ret_h;
54}
55
56/**
57 * Retrieves the width of the border of the given drawable.
58 * @param d The given drawable.
59 * @return The border width of the given drawable.
60 * @ingroup Ecore_X_Drawable_Group
61 */
62EAPI int
63ecore_x_drawable_border_width_get(Ecore_X_Drawable d)
64{
65 Window dummy_win;
66 int dummy_x, dummy_y;
67 unsigned int dummy_w, dummy_h, border_ret, dummy_depth;
68
69 LOGFN(__FILE__, __LINE__, __FUNCTION__);
70 if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
71 &dummy_w, &dummy_h, &border_ret, &dummy_depth))
72 border_ret = 0;
73
74 return (int)border_ret;
75}
76
77/**
78 * Retrieves the depth of the given drawable.
79 * @param d The given drawable.
80 * @return The depth of the given drawable.
81 * @ingroup Ecore_X_Drawable_Group
82 */
83EAPI int
84ecore_x_drawable_depth_get(Ecore_X_Drawable d)
85{
86 Window dummy_win;
87 int dummy_x, dummy_y;
88 unsigned int dummy_w, dummy_h, dummy_border, depth_ret;
89
90 LOGFN(__FILE__, __LINE__, __FUNCTION__);
91 if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
92 &dummy_w, &dummy_h, &dummy_border, &depth_ret))
93 depth_ret = 0;
94
95 return (int)depth_ret;
96}
97
98/**
99 * Fill the specified rectangle on a drawable.
100 * @param d The given drawable.
101 * @param gc The graphic context that controls the fill rules.
102 * @param x The X coordinate of the top-left corner of the rectangle.
103 * @param y The Y coordinate of the top-left corner of the rectangle.
104 * @param width The width of the rectangle.
105 * @param height The height of the rectangle.
106 */
107EAPI void
108ecore_x_drawable_rectangle_fill(Ecore_X_Drawable d,
109 Ecore_X_GC gc,
110 int x,
111 int y,
112 int width,
113 int height)
114{
115 LOGFN(__FILE__, __LINE__, __FUNCTION__);
116 XFillRectangle(_ecore_x_disp, d, gc, x, y, width, height);
117}
118
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_e.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_e.c
deleted file mode 100644
index 4bd5218..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_e.c
+++ /dev/null
@@ -1,1293 +0,0 @@
1/*
2 * OLD E hints
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif /* ifdef HAVE_CONFIG_H */
8
9#include "Ecore.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14EAPI void
15ecore_x_e_init(void)
16{
17}
18
19EAPI void
20ecore_x_e_frame_size_set(Ecore_X_Window win,
21 int fl,
22 int fr,
23 int ft,
24 int fb)
25{
26 unsigned int frames[4];
27
28 LOGFN(__FILE__, __LINE__, __FUNCTION__);
29 frames[0] = fl;
30 frames[1] = fr;
31 frames[2] = ft;
32 frames[3] = fb;
33 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
34}
35
36EAPI void
37ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
38 unsigned int is_keyboard)
39{
40 LOGFN(__FILE__, __LINE__, __FUNCTION__);
41 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
42 &is_keyboard, 1);
43}
44
45EAPI Eina_Bool
46ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
47{
48 unsigned int val;
49
50 LOGFN(__FILE__, __LINE__, __FUNCTION__);
51 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
52 &val, 1))
53 return EINA_FALSE;
54
55 return val ? EINA_TRUE : EINA_FALSE;
56}
57
58static Ecore_X_Virtual_Keyboard_State
59_ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)
60{
61 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
62 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
63
64 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
65 return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
66
67 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
68 return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
69
70 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
71 return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
72
73 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
74 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
75
76 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
77 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
78
79 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
80 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
81
82 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
83 return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
84
85 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
86 return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
87
88 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
89 return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
90
91 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
92 return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
93
94 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
95 return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
96
97 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
98 return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
99
100 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
101 return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
102
103 if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
104 return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
105
106 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
107}
108
109static Ecore_X_Atom
110_ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
111{
112 switch (state)
113 {
114 case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
115 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
116
117 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
118 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
119
120 case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
121 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
122
123 case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
124 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
125
126 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
127 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
128
129 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
130 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
131
132 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
133 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
134
135 case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
136 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
137
138 case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
139 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
140
141 case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
142 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
143
144 case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
145 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
146
147 case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
148 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
149
150 case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
151 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
152
153 case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
154 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
155
156 case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
157 return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
158
159 default: break;
160 }
161 return 0;
162}
163
164EAPI void
165ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
166 Ecore_X_Virtual_Keyboard_State state)
167{
168 Ecore_X_Atom atom = 0;
169
170 LOGFN(__FILE__, __LINE__, __FUNCTION__);
171 atom = _ecore_x_e_vkbd_atom_get(state);
172 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
173 &atom, 1);
174}
175
176EAPI Ecore_X_Virtual_Keyboard_State
177ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
178{
179 Ecore_X_Atom atom;
180
181 LOGFN(__FILE__, __LINE__, __FUNCTION__);
182 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
183 &atom, 1))
184 return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
185
186 return _ecore_x_e_vkbd_state_get(atom);
187}
188
189EAPI void
190ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
191 Ecore_X_Virtual_Keyboard_State state)
192{
193 LOGFN(__FILE__, __LINE__, __FUNCTION__);
194 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
195 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
196 _ecore_x_e_vkbd_atom_get(state),
197 0, 0, 0, 0);
198}
199
200static Ecore_X_Atom
201_ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)
202{
203 switch (mode)
204 {
205 case ECORE_X_ILLUME_MODE_SINGLE:
206 return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
207
208 case ECORE_X_ILLUME_MODE_DUAL_TOP:
209 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
210
211 case ECORE_X_ILLUME_MODE_DUAL_LEFT:
212 return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
213
214 default:
215 break;
216 }
217 return ECORE_X_ILLUME_MODE_UNKNOWN;
218}
219
220static Ecore_X_Illume_Mode
221_ecore_x_e_illume_mode_get(Ecore_X_Atom atom)
222{
223 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
224 return ECORE_X_ILLUME_MODE_SINGLE;
225
226 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
227 return ECORE_X_ILLUME_MODE_DUAL_TOP;
228
229 if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
230 return ECORE_X_ILLUME_MODE_DUAL_LEFT;
231
232 return ECORE_X_ILLUME_MODE_UNKNOWN;
233}
234
235EAPI void
236ecore_x_e_illume_zone_set(Ecore_X_Window win,
237 Ecore_X_Window zone)
238{
239 LOGFN(__FILE__, __LINE__, __FUNCTION__);
240 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
241 &zone, 1);
242}
243
244EAPI Ecore_X_Window
245ecore_x_e_illume_zone_get(Ecore_X_Window win)
246{
247 Ecore_X_Window zone;
248
249 LOGFN(__FILE__, __LINE__, __FUNCTION__);
250 if (!ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
251 &zone, 1))
252 return 0;
253
254 return zone;
255}
256
257EAPI void
258ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
259 Ecore_X_Window *zones,
260 unsigned int n_zones)
261{
262 LOGFN(__FILE__, __LINE__, __FUNCTION__);
263 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
264 zones, n_zones);
265}
266
267EAPI void
268ecore_x_e_illume_conformant_set(Ecore_X_Window win,
269 unsigned int is_conformant)
270{
271 LOGFN(__FILE__, __LINE__, __FUNCTION__);
272 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
273 &is_conformant, 1);
274}
275
276EAPI Eina_Bool
277ecore_x_e_illume_conformant_get(Ecore_X_Window win)
278{
279 unsigned int val = 0;
280
281 LOGFN(__FILE__, __LINE__, __FUNCTION__);
282 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
283 &val, 1))
284 return EINA_FALSE;
285
286 return val ? EINA_TRUE : EINA_FALSE;
287}
288
289EAPI void
290ecore_x_e_illume_mode_set(Ecore_X_Window win,
291 Ecore_X_Illume_Mode mode)
292{
293 Ecore_X_Atom atom = 0;
294
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
296 atom = _ecore_x_e_illume_atom_get(mode);
297 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
298 &atom, 1);
299}
300
301EAPI Ecore_X_Illume_Mode
302ecore_x_e_illume_mode_get(Ecore_X_Window win)
303{
304 Ecore_X_Atom atom = 0;
305
306 LOGFN(__FILE__, __LINE__, __FUNCTION__);
307 if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
308 return ECORE_X_ILLUME_MODE_UNKNOWN;
309
310 return _ecore_x_e_illume_mode_get(atom);
311}
312
313EAPI void
314ecore_x_e_illume_mode_send(Ecore_X_Window win,
315 Ecore_X_Illume_Mode mode)
316{
317 LOGFN(__FILE__, __LINE__, __FUNCTION__);
318 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
319 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
320 _ecore_x_e_illume_atom_get(mode),
321 0, 0, 0, 0);
322}
323
324EAPI void
325ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
326{
327 LOGFN(__FILE__, __LINE__, __FUNCTION__);
328 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
329 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
330 1, 0, 0, 0, 0);
331}
332
333EAPI void
334ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
335{
336 LOGFN(__FILE__, __LINE__, __FUNCTION__);
337 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
338 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
339 1, 0, 0, 0, 0);
340}
341
342EAPI void
343ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
344{
345 LOGFN(__FILE__, __LINE__, __FUNCTION__);
346 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
347 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
348 1, 0, 0, 0, 0);
349}
350
351EAPI void
352ecore_x_e_illume_close_send(Ecore_X_Window win)
353{
354 LOGFN(__FILE__, __LINE__, __FUNCTION__);
355 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
356 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
357 1, 0, 0, 0, 0);
358}
359
360EAPI void
361ecore_x_e_illume_home_new_send(Ecore_X_Window win)
362{
363 LOGFN(__FILE__, __LINE__, __FUNCTION__);
364 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
365 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
366 1, 0, 0, 0, 0);
367}
368
369EAPI void
370ecore_x_e_illume_home_del_send(Ecore_X_Window win)
371{
372 LOGFN(__FILE__, __LINE__, __FUNCTION__);
373 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
374 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
375 1, 0, 0, 0, 0);
376}
377
378EAPI void
379ecore_x_e_illume_drag_set(Ecore_X_Window win,
380 unsigned int drag)
381{
382 LOGFN(__FILE__, __LINE__, __FUNCTION__);
383 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
384}
385
386EAPI Eina_Bool
387ecore_x_e_illume_drag_get(Ecore_X_Window win)
388{
389 unsigned int val = 0;
390
391 LOGFN(__FILE__, __LINE__, __FUNCTION__);
392 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG, &val, 1))
393 return EINA_FALSE;
394
395 return val ? EINA_TRUE : EINA_FALSE;
396}
397
398EAPI void
399ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
400 unsigned int is_locked)
401{
402 LOGFN(__FILE__, __LINE__, __FUNCTION__);
403 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
404 &is_locked, 1);
405}
406
407EAPI Eina_Bool
408ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
409{
410 unsigned int val = 0;
411
412 LOGFN(__FILE__, __LINE__, __FUNCTION__);
413 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
414 &val, 1))
415 return EINA_FALSE;
416
417 return val ? EINA_TRUE : EINA_FALSE;
418}
419
420EAPI void
421ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
422{
423 LOGFN(__FILE__, __LINE__, __FUNCTION__);
424 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
425 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
426 1, 0, 0, 0, 0);
427}
428
429EAPI void
430ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
431{
432 LOGFN(__FILE__, __LINE__, __FUNCTION__);
433 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
434 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
435 1, 0, 0, 0, 0);
436}
437
438EAPI void
439ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
440 int x,
441 int y,
442 int w,
443 int h)
444{
445 unsigned int geom[4];
446
447 LOGFN(__FILE__, __LINE__, __FUNCTION__);
448 geom[0] = x;
449 geom[1] = y;
450 geom[2] = w;
451 geom[3] = h;
452 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
453 geom, 4);
454}
455
456EAPI Eina_Bool
457ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
458 int *x,
459 int *y,
460 int *w,
461 int *h)
462{
463 int ret = 0;
464 unsigned int geom[4];
465
466 LOGFN(__FILE__, __LINE__, __FUNCTION__);
467 ret =
468 ecore_x_window_prop_card32_get(win,
469 ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
470 geom, 4);
471 if (ret != 4)
472 return EINA_FALSE;
473
474 if (x)
475 *x = geom[0];
476
477 if (y)
478 *y = geom[1];
479
480 if (w)
481 *w = geom[2];
482
483 if (h)
484 *h = geom[3];
485
486 return EINA_TRUE;
487}
488
489EAPI void
490ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
491 int x,
492 int y,
493 int w,
494 int h)
495{
496 unsigned int geom[4];
497
498 LOGFN(__FILE__, __LINE__, __FUNCTION__);
499 geom[0] = x;
500 geom[1] = y;
501 geom[2] = w;
502 geom[3] = h;
503 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
504 geom, 4);
505}
506
507EAPI Eina_Bool
508ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
509 int *x,
510 int *y,
511 int *w,
512 int *h)
513{
514 int ret = 0;
515 unsigned int geom[4];
516
517 LOGFN(__FILE__, __LINE__, __FUNCTION__);
518 ret =
519 ecore_x_window_prop_card32_get(win,
520 ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
521 geom, 4);
522 if (ret != 4)
523 return EINA_FALSE;
524
525 if (x)
526 *x = geom[0];
527
528 if (y)
529 *y = geom[1];
530
531 if (w)
532 *w = geom[2];
533
534 if (h)
535 *h = geom[3];
536
537 return EINA_TRUE;
538}
539
540EAPI void
541ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
542 int x,
543 int y,
544 int w,
545 int h)
546{
547 unsigned int geom[4];
548
549 LOGFN(__FILE__, __LINE__, __FUNCTION__);
550 geom[0] = x;
551 geom[1] = y;
552 geom[2] = w;
553 geom[3] = h;
554 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
555 geom, 4);
556}
557
558EAPI Eina_Bool
559ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
560 int *x,
561 int *y,
562 int *w,
563 int *h)
564{
565 int ret = 0;
566 unsigned int geom[4];
567
568 LOGFN(__FILE__, __LINE__, __FUNCTION__);
569 ret =
570 ecore_x_window_prop_card32_get(win,
571 ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
572 geom, 4);
573 if (ret != 4)
574 return EINA_FALSE;
575
576 if (x)
577 *x = geom[0];
578
579 if (y)
580 *y = geom[1];
581
582 if (w)
583 *w = geom[2];
584
585 if (h)
586 *h = geom[3];
587
588 return EINA_TRUE;
589}
590
591static Ecore_X_Atom
592_ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
593{
594 switch (state)
595 {
596 case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
597 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
598
599 case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
600 return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
601
602 default:
603 break;
604 }
605 return 0;
606}
607
608static Ecore_X_Illume_Quickpanel_State
609_ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)
610{
611 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
612 return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
613
614 if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
615 return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
616
617 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
618}
619
620EAPI void
621ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
622 unsigned int is_quickpanel)
623{
624 LOGFN(__FILE__, __LINE__, __FUNCTION__);
625 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
626 &is_quickpanel, 1);
627}
628
629EAPI Eina_Bool
630ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
631{
632 unsigned int val = 0;
633
634 LOGFN(__FILE__, __LINE__, __FUNCTION__);
635 if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
636 &val, 1))
637 return EINA_FALSE;
638
639 return val ? EINA_TRUE : EINA_FALSE;
640}
641
642EAPI void
643ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
644 Ecore_X_Illume_Quickpanel_State state)
645{
646 Ecore_X_Atom atom = 0;
647
648 LOGFN(__FILE__, __LINE__, __FUNCTION__);
649 atom = _ecore_x_e_quickpanel_atom_get(state);
650 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
651 &atom, 1);
652}
653
654EAPI Ecore_X_Illume_Quickpanel_State
655ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
656{
657 Ecore_X_Atom atom;
658
659 LOGFN(__FILE__, __LINE__, __FUNCTION__);
660 if (!ecore_x_window_prop_atom_get(win,
661 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
662 &atom, 1))
663 return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
664
665 return _ecore_x_e_quickpanel_state_get(atom);
666}
667
668EAPI void
669ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
670 Ecore_X_Illume_Quickpanel_State state)
671{
672 LOGFN(__FILE__, __LINE__, __FUNCTION__);
673 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
674 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
675 _ecore_x_e_quickpanel_atom_get(state),
676 0, 0, 0, 0);
677}
678
679EAPI void
680ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
681{
682 LOGFN(__FILE__, __LINE__, __FUNCTION__);
683 ecore_x_client_message32_send(win,
684 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
685 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
686 0, 0, 0, 0, 0);
687}
688
689EAPI void
690ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
691 unsigned int priority)
692{
693 LOGFN(__FILE__, __LINE__, __FUNCTION__);
694 ecore_x_window_prop_card32_set(win,
695 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
696 &priority, 1);
697}
698
699EAPI int
700ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
701{
702 unsigned int val = 0;
703
704 LOGFN(__FILE__, __LINE__, __FUNCTION__);
705 if (!ecore_x_window_prop_card32_get(win,
706 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
707 &val, 1))
708 return 0;
709
710 return val;
711}
712
713EAPI void
714ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
715 unsigned int priority)
716{
717 LOGFN(__FILE__, __LINE__, __FUNCTION__);
718 ecore_x_window_prop_card32_set(win,
719 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
720 &priority, 1);
721}
722
723EAPI int
724ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
725{
726 unsigned int val = 0;
727
728 LOGFN(__FILE__, __LINE__, __FUNCTION__);
729 if (!ecore_x_window_prop_card32_get(win,
730 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
731 &val, 1))
732 return 0;
733
734 return val;
735}
736
737EAPI void
738ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
739 unsigned int zone)
740{
741 LOGFN(__FILE__, __LINE__, __FUNCTION__);
742 ecore_x_window_prop_card32_set(win,
743 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
744 &zone, 1);
745}
746
747EAPI int
748ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
749{
750 unsigned int val = 0;
751
752 LOGFN(__FILE__, __LINE__, __FUNCTION__);
753 if (!ecore_x_window_prop_card32_get(win,
754 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
755 &val, 1))
756 return 0;
757
758 return val;
759}
760
761EAPI void
762ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
763{
764 LOGFN(__FILE__, __LINE__, __FUNCTION__);
765 ecore_x_client_message32_send(win,
766 ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
767 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
768 1, 0, 0, 0, 0);
769}
770
771static Ecore_X_Atom
772_ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)
773{
774 switch (state)
775 {
776 case ECORE_X_ILLUME_CLIPBOARD_STATE_ON:
777 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
778 case ECORE_X_ILLUME_CLIPBOARD_STATE_OFF:
779 return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
780 default:
781 break;
782 }
783 return 0;
784}
785
786static Ecore_X_Illume_Clipboard_State
787_ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)
788{
789 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON)
790 return ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
791
792 if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF)
793 return ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
794
795 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
796}
797
798EAPI void
799ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
800 Ecore_X_Illume_Clipboard_State state)
801{
802 Ecore_X_Atom atom = 0;
803
804 LOGFN(__FILE__, __LINE__, __FUNCTION__);
805 atom = _ecore_x_e_clipboard_atom_get(state);
806
807 ecore_x_window_prop_atom_set(win,
808 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
809 &atom, 1);
810}
811
812EAPI Ecore_X_Illume_Clipboard_State
813ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
814{
815 Ecore_X_Atom atom = 0;
816
817 LOGFN(__FILE__, __LINE__, __FUNCTION__);
818
819 if (!ecore_x_window_prop_atom_get(win,
820 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
821 &atom, 1))
822 return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
823 return _ecore_x_e_clipboard_state_get(atom);
824}
825
826EAPI void
827ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
828 int x, int y, int w, int h)
829{
830 unsigned int geom[4];
831
832 LOGFN(__FILE__, __LINE__, __FUNCTION__);
833 geom[0] = x;
834 geom[1] = y;
835 geom[2] = w;
836 geom[3] = h;
837 ecore_x_window_prop_card32_set(win,
838 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
839 geom, 4);
840}
841
842EAPI Eina_Bool
843ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
844 int *x, int *y, int *w, int *h)
845{
846 int ret = 0;
847 unsigned int geom[4];
848
849 LOGFN(__FILE__, __LINE__, __FUNCTION__);
850 ret =
851 ecore_x_window_prop_card32_get(win,
852 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
853 geom, 4);
854 if (ret != 4) return EINA_FALSE;
855
856 if (x) *x = geom[0];
857 if (y) *y = geom[1];
858 if (w) *w = geom[2];
859 if (h) *h = geom[3];
860
861 return EINA_TRUE;
862}
863
864EAPI void
865ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
866 Ecore_X_Sync_Counter counter)
867{
868 LOGFN(__FILE__, __LINE__, __FUNCTION__);
869 if (counter)
870 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
871 ECORE_X_ATOM_CARDINAL, &counter, 1);
872 else
873 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
874}
875
876EAPI Ecore_X_Sync_Counter
877ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
878{
879 int ret = 0;
880 Ecore_X_Sync_Counter counter = 0;
881
882 LOGFN(__FILE__, __LINE__, __FUNCTION__);
883 ret =
884 ecore_x_window_prop_xid_get(win,
885 ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
886 ECORE_X_ATOM_CARDINAL,
887 &counter, 1);
888 if (ret != 1)
889 return 0;
890
891 return counter;
892}
893
894EAPI void
895ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
896 Ecore_X_Window win)
897{
898 XEvent xev;
899
900 LOGFN(__FILE__, __LINE__, __FUNCTION__);
901 if (!root)
902 root = DefaultRootWindow(_ecore_x_disp);
903
904 xev.xclient.type = ClientMessage;
905 xev.xclient.display = _ecore_x_disp;
906 xev.xclient.window = win;
907 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
908 xev.xclient.format = 32;
909 xev.xclient.data.l[0] = win;
910 xev.xclient.data.l[1] = 0; // version
911 xev.xclient.data.l[2] = 0; // later
912 xev.xclient.data.l[3] = 0; // later
913 xev.xclient.data.l[4] = 0; // later
914
915 XSendEvent(_ecore_x_disp, root, False,
916 SubstructureRedirectMask | SubstructureNotifyMask,
917 &xev);
918}
919
920EAPI void
921ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
922 Ecore_X_Window win,
923 int w,
924 int h)
925{
926 XEvent xev;
927
928 LOGFN(__FILE__, __LINE__, __FUNCTION__);
929 if (!root)
930 root = DefaultRootWindow(_ecore_x_disp);
931
932 xev.xclient.type = ClientMessage;
933 xev.xclient.display = _ecore_x_disp;
934 xev.xclient.window = win;
935 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
936 xev.xclient.format = 32;
937 xev.xclient.data.l[0] = win;
938 xev.xclient.data.l[1] = 1; // version
939 xev.xclient.data.l[2] = w; // win width at draw time
940 xev.xclient.data.l[3] = h; // win height at draw time
941 xev.xclient.data.l[4] = 0; // later
942
943 XSendEvent(_ecore_x_disp, root, False,
944 SubstructureRedirectMask | SubstructureNotifyMask,
945 &xev);
946}
947
948EAPI void
949ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
950 Eina_Bool enabled)
951{
952 Ecore_X_Window win;
953
954 if (!root)
955 root = DefaultRootWindow(_ecore_x_disp);
956
957 LOGFN(__FILE__, __LINE__, __FUNCTION__);
958 if (enabled)
959 {
960 win = ecore_x_window_new(root, 1, 2, 3, 4);
961 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
962 ECORE_X_ATOM_WINDOW, &win, 1);
963 ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
964 ECORE_X_ATOM_WINDOW, &win, 1);
965 }
966 else
967 {
968 int ret;
969
970 ret =
971 ecore_x_window_prop_xid_get(root,
972 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
973 ECORE_X_ATOM_WINDOW,
974 &win, 1);
975 if ((ret == 1) && (win))
976 {
977 ecore_x_window_prop_property_del(
978 root,
979 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
980 ecore_x_window_free(win);
981 }
982 }
983}
984
985EAPI Eina_Bool
986ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
987{
988 Ecore_X_Window win, win2;
989 int ret;
990
991 LOGFN(__FILE__, __LINE__, __FUNCTION__);
992 if (!root)
993 root = DefaultRootWindow(_ecore_x_disp);
994
995 ret =
996 ecore_x_window_prop_xid_get(root,
997 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
998 ECORE_X_ATOM_WINDOW,
999 &win, 1);
1000 if ((ret == 1) && (win))
1001 {
1002 ret =
1003 ecore_x_window_prop_xid_get(win,
1004 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1005 ECORE_X_ATOM_WINDOW,
1006 &win2, 1);
1007 if ((ret == 1) && (win2 == win))
1008 return EINA_TRUE;
1009 }
1010
1011 return EINA_FALSE;
1012}
1013
1014EAPI void
1015ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
1016{
1017 XEvent xev;
1018
1019 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1020 xev.xclient.type = ClientMessage;
1021 xev.xclient.display = _ecore_x_disp;
1022 xev.xclient.window = win;
1023 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
1024 xev.xclient.format = 32;
1025 xev.xclient.data.l[0] = win;
1026 xev.xclient.data.l[1] = 0; // later
1027 xev.xclient.data.l[2] = 0; // later
1028 xev.xclient.data.l[3] = 0; // later
1029 xev.xclient.data.l[4] = 0; // later
1030
1031 XSendEvent(_ecore_x_disp, win, False,
1032 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1033 &xev);
1034}
1035
1036EAPI void
1037ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
1038{
1039 XEvent xev;
1040
1041 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1042 xev.xclient.type = ClientMessage;
1043 xev.xclient.display = _ecore_x_disp;
1044 xev.xclient.window = win;
1045 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
1046 xev.xclient.format = 32;
1047 xev.xclient.data.l[0] = win;
1048 xev.xclient.data.l[1] = 0; // later
1049 xev.xclient.data.l[2] = 0; // later
1050 xev.xclient.data.l[3] = 0; // later
1051 xev.xclient.data.l[4] = 0; // later
1052
1053 XSendEvent(_ecore_x_disp, win, False,
1054 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1055 &xev);
1056}
1057
1058EAPI void
1059ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
1060{
1061 XEvent xev;
1062
1063 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1064 xev.xclient.type = ClientMessage;
1065 xev.xclient.display = _ecore_x_disp;
1066 xev.xclient.window = win;
1067 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
1068 xev.xclient.format = 32;
1069 xev.xclient.data.l[0] = win;
1070 xev.xclient.data.l[1] = 0; // later
1071 xev.xclient.data.l[2] = 0; // later
1072 xev.xclient.data.l[3] = 0; // later
1073 xev.xclient.data.l[4] = 0; // later
1074
1075 XSendEvent(_ecore_x_disp, win, False,
1076 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1077 &xev);
1078}
1079
1080EAPI void
1081ecore_x_e_comp_flush_send(Ecore_X_Window win)
1082{
1083 XEvent xev;
1084
1085 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1086 xev.xclient.type = ClientMessage;
1087 xev.xclient.display = _ecore_x_disp;
1088 xev.xclient.window = win;
1089 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
1090 xev.xclient.format = 32;
1091 xev.xclient.data.l[0] = win;
1092 xev.xclient.data.l[1] = 0; // later
1093 xev.xclient.data.l[2] = 0; // later
1094 xev.xclient.data.l[3] = 0; // later
1095 xev.xclient.data.l[4] = 0; // later
1096
1097 XSendEvent(_ecore_x_disp, win, False,
1098 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1099 &xev);
1100}
1101
1102EAPI void
1103ecore_x_e_comp_dump_send(Ecore_X_Window win)
1104{
1105 XEvent xev;
1106
1107 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1108 xev.xclient.type = ClientMessage;
1109 xev.xclient.display = _ecore_x_disp;
1110 xev.xclient.window = win;
1111 xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1112 xev.xclient.format = 32;
1113 xev.xclient.data.l[0] = win;
1114 xev.xclient.data.l[1] = 0; // later
1115 xev.xclient.data.l[2] = 0; // later
1116 xev.xclient.data.l[3] = 0; // later
1117 xev.xclient.data.l[4] = 0; // later
1118
1119 XSendEvent(_ecore_x_disp, win, False,
1120 NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1121 &xev);
1122}
1123
1124EAPI void
1125ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
1126 Ecore_X_Pixmap pixmap)
1127{
1128 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1129 if (pixmap)
1130 ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
1131 ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1132 else
1133 ecore_x_window_prop_property_del(win, pixmap);
1134}
1135
1136EAPI Ecore_X_Pixmap
1137ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1138{
1139 int ret = 0;
1140 Ecore_X_Pixmap pixmap = 0;
1141
1142 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1143 ret =
1144 ecore_x_window_prop_xid_get(win,
1145 ECORE_X_ATOM_E_COMP_PIXMAP,
1146 ECORE_X_ATOM_PIXMAP,
1147 &pixmap, 1);
1148 if (ret != 1)
1149 return 0;
1150
1151 return pixmap;
1152}
1153
1154static Ecore_X_Atom
1155_ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1156{
1157 switch (state)
1158 {
1159 case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1160 return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1161
1162 case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1163 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1164
1165 default:
1166 break;
1167 }
1168 return 0;
1169}
1170
1171static Ecore_X_Illume_Indicator_State
1172_ecore_x_e_indicator_state_get(Ecore_X_Atom atom)
1173{
1174 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1175 return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1176
1177 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1178 return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1179
1180 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1181}
1182
1183EAPI void
1184ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
1185 Ecore_X_Illume_Indicator_State state)
1186{
1187 Ecore_X_Atom atom = 0;
1188
1189 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1190 atom = _ecore_x_e_indicator_atom_get(state);
1191 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1192 &atom, 1);
1193}
1194
1195EAPI Ecore_X_Illume_Indicator_State
1196ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1197{
1198 Ecore_X_Atom atom;
1199
1200 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1201 if (!ecore_x_window_prop_atom_get(win,
1202 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1203 &atom, 1))
1204 return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1205
1206 return _ecore_x_e_indicator_state_get(atom);
1207}
1208
1209EAPI void
1210ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
1211 Ecore_X_Illume_Indicator_State state)
1212{
1213 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1214 ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1215 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1216 _ecore_x_e_indicator_atom_get(state),
1217 0, 0, 0, 0);
1218}
1219
1220static Ecore_X_Atom
1221_ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1222{
1223 switch (mode)
1224 {
1225 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1226 return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1227
1228 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1229 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1230
1231 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1232 return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1233
1234 default:
1235 break;
1236 }
1237 return 0;
1238}
1239
1240static Ecore_X_Illume_Indicator_Opacity_Mode
1241_ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1242{
1243 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1244 return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1245
1246 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1247 return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1248
1249 if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1250 return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1251
1252 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1253}
1254
1255EAPI void
1256ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1257 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1258{
1259 Ecore_X_Atom atom = 0;
1260
1261 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1262 atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1263 ecore_x_window_prop_atom_set(win,
1264 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1265 &atom, 1);
1266}
1267
1268EAPI Ecore_X_Illume_Indicator_Opacity_Mode
1269ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1270{
1271 Ecore_X_Atom atom;
1272
1273 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1274 if (!ecore_x_window_prop_atom_get(win,
1275 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1276 &atom, 1))
1277 return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1278
1279 return _ecore_x_e_indicator_opacity_get(atom);
1280}
1281
1282EAPI void
1283ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1284 Ecore_X_Illume_Indicator_Opacity_Mode mode)
1285{
1286 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1287 ecore_x_client_message32_send(win,
1288 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1289 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1290 _ecore_x_e_indicator_opacity_atom_get(mode),
1291 0, 0, 0, 0);
1292}
1293
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c
deleted file mode 100644
index 11e9f20..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c
+++ /dev/null
@@ -1,125 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#include "Ecore.h"
8#include "ecore_private.h"
9#include "ecore_x_private.h"
10#include "Ecore_X.h"
11
12static int _ecore_x_error_handle(Display *d,
13 XErrorEvent *ev);
14static int _ecore_x_io_error_handle(Display *d);
15
16static void (*_error_func)(void *data) = NULL;
17static void *_error_data = NULL;
18static void (*_io_error_func)(void *data) = NULL;
19static void *_io_error_data = NULL;
20static int _error_request_code = 0;
21static int _error_code = 0;
22static Ecore_X_ID _error_resource_id = 0;
23
24/**
25 * Set the error handler.
26 * @param func The error handler function
27 * @param data The data to be passed to the handler function
28 *
29 * Set the X error handler function
30 */
31EAPI void
32ecore_x_error_handler_set(void (*func)(void *data),
33 const void *data)
34{
35 _error_func = func;
36 _error_data = (void *)data;
37}
38
39/**
40 * Set the I/O error handler.
41 * @param func The I/O error handler function
42 * @param data The data to be passed to the handler function
43 *
44 * Set the X I/O error handler function
45 */
46EAPI void
47ecore_x_io_error_handler_set(void (*func)(void *data),
48 const void *data)
49{
50 _io_error_func = func;
51 _io_error_data = (void *)data;
52}
53
54/**
55 * Get the request code that caused the error.
56 * @return The request code causing the X error
57 *
58 * Return the X request code that caused the last X error
59 */
60EAPI int
61ecore_x_error_request_get(void)
62{
63 return _error_request_code;
64}
65
66/**
67 * Get the error code from the error.
68 * @return The error code from the X error
69 *
70 * Return the error code from the last X error
71 */
72EAPI int
73ecore_x_error_code_get(void)
74{
75 return _error_code;
76}
77
78/**
79 * Get the resource id that caused the error.
80 * @return The resource id causing the X error
81 *
82 * Return the X resource id that caused the last X error
83 */
84EAPI Ecore_X_ID
85ecore_x_error_resource_id_get(void)
86{
87 return _error_resource_id;
88}
89
90void
91_ecore_x_error_handler_init(void)
92{
93 XSetErrorHandler((XErrorHandler)_ecore_x_error_handle);
94 XSetIOErrorHandler((XIOErrorHandler)_ecore_x_io_error_handle);
95}
96
97static int
98_ecore_x_error_handle(Display *d,
99 XErrorEvent *ev)
100{
101 if (d == _ecore_x_disp)
102 {
103 _error_request_code = ev->request_code;
104 _error_code = ev->error_code;
105 _error_resource_id = ev->resourceid;
106 if (_error_func)
107 _error_func(_error_data);
108 }
109 return 0;
110}
111
112static int
113_ecore_x_io_error_handle(Display *d)
114{
115 if (d == _ecore_x_disp)
116 {
117 if (_io_error_func)
118 _io_error_func(_io_error_data);
119 else
120 exit(-1);
121 }
122
123 return 0;
124}
125
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_events.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_events.c
deleted file mode 100644
index 0b06a79..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_events.c
+++ /dev/null
@@ -1,2487 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <stdio.h>
7#include <string.h>
8
9#include <langinfo.h>
10
11#include "Ecore.h"
12#include "ecore_private.h"
13#include "ecore_x_private.h"
14#include "Ecore_X.h"
15#include "Ecore_X_Atoms.h"
16
17/** OpenBSD does not define CODESET
18 * FIXME ??
19 */
20
21#ifndef CODESET
22#define CODESET "INVALID"
23#endif /* ifndef CODESET */
24
25typedef struct _Ecore_X_Mouse_Down_Info
26{
27 EINA_INLIST;
28 int dev;
29 Window last_win;
30 Window last_last_win;
31 Window last_event_win;
32 Window last_last_event_win;
33 Time last_time;
34 Time last_last_time;
35 Eina_Bool did_double : 1;
36 Eina_Bool did_triple : 1;
37} Ecore_X_Mouse_Down_Info;
38
39static int _ecore_x_last_event_mouse_move = 0;
40static Ecore_Event *_ecore_x_last_event_mouse_move_event = NULL;
41static Eina_Inlist *_ecore_x_mouse_down_info_list = NULL;
42
43static void
44_ecore_x_mouse_down_info_clear(void)
45{
46 Eina_Inlist *l = _ecore_x_mouse_down_info_list;
47 Ecore_X_Mouse_Down_Info *info = NULL;
48 while (l)
49 {
50 info = EINA_INLIST_CONTAINER_GET(l, Ecore_X_Mouse_Down_Info);
51 l = eina_inlist_remove(l, l);
52 free(info);
53 }
54 _ecore_x_mouse_down_info_list = NULL;
55}
56
57void
58_ecore_x_events_init(void)
59{
60 //Actually, Nothing to do.
61}
62
63void
64_ecore_x_events_shutdown(void)
65{
66 _ecore_x_mouse_down_info_clear();
67}
68
69static Ecore_X_Mouse_Down_Info *
70_ecore_x_mouse_down_info_get(int dev)
71{
72 Eina_Inlist *l = _ecore_x_mouse_down_info_list;
73 Ecore_X_Mouse_Down_Info *info = NULL;
74
75 //Return the exist info
76 EINA_INLIST_FOREACH(l, info)
77 if (info->dev == dev) return info;
78
79 //New Device. Add it.
80 info = calloc(1, sizeof(Ecore_X_Mouse_Down_Info));
81 if (!info) return NULL;
82
83 info->dev = dev;
84 l = eina_inlist_append(l, (Eina_Inlist *)info);
85 _ecore_x_mouse_down_info_list = l;
86 return info;
87}
88
89static void
90_ecore_x_event_free_mouse_move(void *data __UNUSED__,
91 void *ev)
92{
93 Ecore_Event_Mouse_Move *e;
94
95 e = ev;
96 if (_ecore_x_last_event_mouse_move)
97 {
98 _ecore_x_last_event_mouse_move_event = NULL;
99 _ecore_x_last_event_mouse_move = 0;
100 }
101
102 free(e);
103}
104
105EAPI void
106ecore_x_event_mask_set(Ecore_X_Window w,
107 Ecore_X_Event_Mask mask)
108{
109 XWindowAttributes attr;
110 XSetWindowAttributes s_attr;
111
112 LOGFN(__FILE__, __LINE__, __FUNCTION__);
113 if (!w)
114 w = DefaultRootWindow(_ecore_x_disp);
115
116 memset(&attr, 0, sizeof(XWindowAttributes));
117 XGetWindowAttributes(_ecore_x_disp, w, &attr);
118 s_attr.event_mask = mask | attr.your_event_mask;
119 XChangeWindowAttributes(_ecore_x_disp, w, CWEventMask, &s_attr);
120}
121
122EAPI void
123ecore_x_event_mask_unset(Ecore_X_Window w,
124 Ecore_X_Event_Mask mask)
125{
126 XWindowAttributes attr;
127 XSetWindowAttributes s_attr;
128
129 LOGFN(__FILE__, __LINE__, __FUNCTION__);
130 if (!w)
131 w = DefaultRootWindow(_ecore_x_disp);
132
133 memset(&attr, 0, sizeof(XWindowAttributes));
134 XGetWindowAttributes(_ecore_x_disp, w, &attr);
135 s_attr.event_mask = attr.your_event_mask & ~mask;
136 XChangeWindowAttributes(_ecore_x_disp, w, CWEventMask, &s_attr);
137}
138
139static void
140_ecore_x_event_free_xdnd_enter(void *data __UNUSED__,
141 void *ev)
142{
143 Ecore_X_Event_Xdnd_Enter *e;
144 int i;
145
146 e = ev;
147 for (i = 0; i < e->num_types; i++)
148 XFree(e->types[i]);
149 free(e->types);
150 free(e);
151}
152
153static void
154_ecore_x_event_free_selection_notify(void *data __UNUSED__,
155 void *ev)
156{
157 Ecore_X_Event_Selection_Notify *e;
158 Ecore_X_Selection_Data *sel;
159
160 e = ev;
161 sel = e->data;
162 if (sel->free)
163 sel->free(sel);
164
165 free(e->target);
166 free(e);
167}
168
169static unsigned int
170_ecore_x_event_modifiers(unsigned int state)
171{
172 unsigned int modifiers = 0;
173
174 if (state & ECORE_X_MODIFIER_SHIFT)
175 modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
176
177 if (state & ECORE_X_MODIFIER_CTRL)
178 modifiers |= ECORE_EVENT_MODIFIER_CTRL;
179
180 if (state & ECORE_X_MODIFIER_ALT)
181 modifiers |= ECORE_EVENT_MODIFIER_ALT;
182
183 if (state & ECORE_X_MODIFIER_WIN)
184 modifiers |= ECORE_EVENT_MODIFIER_WIN;
185
186 if (state & ECORE_X_LOCK_SCROLL)
187 modifiers |= ECORE_EVENT_LOCK_SCROLL;
188
189 if (state & ECORE_X_LOCK_NUM)
190 modifiers |= ECORE_EVENT_LOCK_NUM;
191
192 if (state & ECORE_X_LOCK_CAPS)
193 modifiers |= ECORE_EVENT_LOCK_CAPS;
194
195 if (state & ECORE_X_LOCK_SHIFT)
196 modifiers |= ECORE_EVENT_LOCK_SHIFT;
197
198 return modifiers;
199}
200
201void
202_ecore_mouse_move(unsigned int timestamp,
203 unsigned int xmodifiers,
204 int x,
205 int y,
206 int x_root,
207 int y_root,
208 unsigned int event_window,
209 unsigned int window,
210 unsigned int root_win,
211 int same_screen,
212 int dev,
213 double radx,
214 double rady,
215 double pressure,
216 double angle,
217 double mx,
218 double my,
219 double mrx,
220 double mry)
221{
222 Ecore_Event_Mouse_Move *e;
223 Ecore_Event *event;
224
225 e = malloc(sizeof(Ecore_Event_Mouse_Move));
226 if (!e)
227 return;
228
229 e->window = window;
230 e->root_window = root_win;
231 e->timestamp = timestamp;
232 e->same_screen = same_screen;
233 e->event_window = event_window;
234
235 e->modifiers = _ecore_x_event_modifiers(xmodifiers);
236 e->x = x;
237 e->y = y;
238 e->root.x = x_root;
239 e->root.y = y_root;
240
241 e->multi.device = dev;
242 e->multi.radius = (radx + rady) / 2;
243 e->multi.radius_x = radx;
244 e->multi.radius_y = rady;
245 e->multi.pressure = pressure;
246 e->multi.angle = angle;
247 e->multi.x = mx;
248 e->multi.y = my;
249 e->multi.root.x = mrx;
250 e->multi.root.y = mry;
251
252 event = ecore_event_add(ECORE_EVENT_MOUSE_MOVE,
253 e,
254 _ecore_x_event_free_mouse_move,
255 NULL);
256
257 _ecore_x_event_last_time = timestamp;
258 _ecore_x_event_last_win = window;
259 _ecore_x_event_last_root_x = x_root;
260 _ecore_x_event_last_root_y = y_root;
261
262 _ecore_x_last_event_mouse_move_event = event;
263}
264
265static void
266_ecore_key_press(int event,
267 XKeyEvent *xevent)
268{
269 Ecore_Event_Key *e;
270 char *compose = NULL;
271 char *tmp = NULL;
272 char *keyname;
273 char *key;
274 char keyname_buffer[256];
275 char compose_buffer[256];
276 KeySym sym;
277 XComposeStatus status;
278 int val;
279
280 _ecore_x_last_event_mouse_move = 0;
281 keyname = XKeysymToString(XKeycodeToKeysym(xevent->display,
282 xevent->keycode, 0));
283 if (!keyname)
284 {
285 snprintf(keyname_buffer,
286 sizeof(keyname_buffer),
287 "Keycode-%i",
288 xevent->keycode);
289 keyname = keyname_buffer;
290 }
291
292 sym = 0;
293 key = NULL;
294 compose = NULL;
295 val = XLookupString(xevent,
296 compose_buffer,
297 sizeof(compose_buffer),
298 &sym,
299 &status);
300 if (val > 0)
301 {
302 compose_buffer[val] = 0;
303 compose = eina_str_convert(nl_langinfo(CODESET), "UTF-8",
304 compose_buffer);
305 if (!compose)
306 ERR("Ecore_X cannot convert input key string '%s' to UTF-8. "
307 "Is Eina built with iconv support?", compose_buffer);
308 tmp = compose;
309 }
310
311 key = XKeysymToString(sym);
312 if (!key)
313 key = keyname;
314
315 e =
316 malloc(sizeof(Ecore_Event_Key) + strlen(key) + strlen(keyname) +
317 (compose ? strlen(compose) : 0) + 3);
318 if (!e)
319 goto on_error;
320
321 e->keyname = (char *)(e + 1);
322 e->key = e->keyname + strlen(keyname) + 1;
323 e->compose = (compose) ? e->key + strlen(key) + 1 : NULL;
324 e->string = e->compose;
325
326 strcpy((char *)e->keyname, keyname);
327 strcpy((char *)e->key, key);
328 if (compose)
329 strcpy((char *)e->compose, compose);
330
331 e->modifiers = _ecore_x_event_modifiers(xevent->state);
332
333 e->timestamp = xevent->time;
334 e->window = xevent->subwindow ? xevent->subwindow : xevent->window;
335 e->event_window = xevent->window;
336 e->same_screen = xevent->same_screen;
337 e->root_window = xevent->root;
338
339 ecore_event_add(event, e, NULL, NULL);
340
341 _ecore_x_event_last_time = e->timestamp;
342
343on_error:
344 if (tmp)
345 free(tmp);
346}
347
348Ecore_Event_Mouse_Button *
349_ecore_mouse_button(int event,
350 unsigned int timestamp,
351 unsigned int xmodifiers,
352 unsigned int buttons,
353 int x,
354 int y,
355 int x_root,
356 int y_root,
357 unsigned int event_window,
358 unsigned int window,
359 unsigned int root_win,
360 int same_screen,
361 int dev,
362 double radx,
363 double rady,
364 double pressure,
365 double angle,
366 double mx,
367 double my,
368 double mrx,
369 double mry)
370{
371 Ecore_Event_Mouse_Button *e;
372
373 e = malloc(sizeof(Ecore_Event_Mouse_Button));
374 if (!e)
375 return NULL;
376
377 e->window = window;
378 e->root_window = root_win;
379 e->timestamp = timestamp;
380 e->same_screen = same_screen;
381 e->event_window = event_window;
382
383 e->buttons = buttons;
384 e->modifiers = _ecore_x_event_modifiers(xmodifiers);
385 e->double_click = 0;
386 e->triple_click = 0;
387 e->x = x;
388 e->y = y;
389 e->root.x = x_root;
390 e->root.y = y_root;
391
392 Ecore_X_Mouse_Down_Info *down_info = _ecore_x_mouse_down_info_get(dev);
393
394 if (down_info)
395 {
396 if ((event == ECORE_EVENT_MOUSE_BUTTON_DOWN) &&
397 down_info->did_triple)
398 {
399 down_info->last_win = 0;
400 down_info->last_last_win = 0;
401 down_info->last_event_win = 0;
402 down_info->last_last_event_win = 0;
403 down_info->last_time = 0;
404 down_info->last_last_time = 0;
405 }
406 if (event_window == window)
407 {
408 if (event == ECORE_EVENT_MOUSE_BUTTON_DOWN)
409 {
410 //Check Double Clicked
411 if (((int)(timestamp - down_info->last_time) <=
412 (int)(1000 * _ecore_x_double_click_time)) &&
413 (window == down_info->last_win) &&
414 (event_window == down_info->last_event_win))
415 {
416 e->double_click = 1;
417 down_info->did_double = EINA_TRUE;
418 }
419 else
420 {
421 down_info->did_double = EINA_FALSE;
422 down_info->did_triple = EINA_FALSE;
423 }
424
425 //Check Triple Clicked
426 if (((int)(timestamp - down_info->last_last_time) <=
427 (int)(2 * 1000 * _ecore_x_double_click_time)) &&
428 (window == down_info->last_win) &&
429 (window == down_info->last_last_win) &&
430 (event_window == down_info->last_event_win) &&
431 (event_window == down_info->last_last_event_win)
432 )
433 {
434 e->triple_click = 1;
435 down_info->did_triple = EINA_TRUE;
436 }
437 else
438 {
439 down_info->did_triple = EINA_FALSE;
440 }
441 }
442 else
443 {
444 if (down_info->did_double)
445 e->double_click = 1;
446 if (down_info->did_triple)
447 e->triple_click = 1;
448 }
449 }
450 }
451
452 /* NB: Block commented out as _ecore_x_mouse_up_count appears to have
453 * no use. The variable is also commented out above. This code block is
454 * the only place that this variable is used, and appears to serve no
455 * purpose. - dh
456 if (event == ECORE_EVENT_MOUSE_BUTTON_DOWN
457 && !e->double_click
458 && !e->triple_click)
459 _ecore_x_mouse_up_count = 0;
460 */
461
462 e->multi.device = dev;
463 e->multi.radius = (radx + rady) / 2;
464 e->multi.radius_x = radx;
465 e->multi.radius_y = rady;
466 e->multi.pressure = pressure;
467 e->multi.angle = angle;
468 e->multi.x = mx;
469 e->multi.y = my;
470 e->multi.root.x = mrx;
471 e->multi.root.y = mry;
472
473 _ecore_x_event_last_time = e->timestamp;
474 _ecore_x_event_last_win = e->window;
475 _ecore_x_event_last_root_x = x_root;
476 _ecore_x_event_last_root_y = y_root;
477
478 ecore_event_add(event, e, NULL, NULL);
479
480 if ((down_info) &&
481 (event == ECORE_EVENT_MOUSE_BUTTON_DOWN) &&
482 (window == event_window) &&
483 (!down_info->did_triple))
484 {
485 down_info->last_last_win = down_info->last_win;
486 down_info->last_win = window;
487 down_info->last_last_event_win = down_info->last_event_win;
488 down_info->last_event_win = event_window;
489 down_info->last_last_time = down_info->last_time;
490 down_info->last_time = timestamp;
491 }
492
493 return e;
494}
495
496void
497_ecore_x_event_handle_any_event(XEvent *xevent)
498{
499 XEvent *ev = malloc(sizeof(XEvent));
500 if (!ev) return;
501 memcpy(ev, xevent, sizeof(XEvent));
502 ecore_event_add(ECORE_X_EVENT_ANY, ev, NULL, NULL);
503}
504
505void
506_ecore_x_event_handle_key_press(XEvent *xevent)
507{
508 _ecore_key_press(ECORE_EVENT_KEY_DOWN, (XKeyEvent *)xevent);
509}
510
511void
512_ecore_x_event_handle_key_release(XEvent *xevent)
513{
514 _ecore_key_press(ECORE_EVENT_KEY_UP, (XKeyEvent *)xevent);
515}
516
517void
518_ecore_x_event_handle_button_press(XEvent *xevent)
519{
520 int i;
521
522 _ecore_x_last_event_mouse_move = 0;
523 if ((xevent->xbutton.button > 3) && (xevent->xbutton.button < 8))
524 {
525 Ecore_Event_Mouse_Wheel *e;
526
527 e = malloc(sizeof(Ecore_Event_Mouse_Wheel));
528 if (!e)
529 return;
530
531 e->timestamp = xevent->xbutton.time;
532 e->modifiers = _ecore_x_event_modifiers(xevent->xbutton.state);
533 switch (xevent->xbutton.button)
534 {
535 case 4: e->direction = 0; e->z = -1; break;
536
537 case 5: e->direction = 0; e->z = 1; break;
538
539 case 6: e->direction = 1; e->z = -1; break;
540
541 case 7: e->direction = 1; e->z = 1; break;
542
543 default: e->direction = 0; e->z = 0; break;
544 }
545
546 e->x = xevent->xbutton.x;
547 e->y = xevent->xbutton.y;
548 e->root.x = xevent->xbutton.x_root;
549 e->root.y = xevent->xbutton.y_root;
550
551 if (xevent->xbutton.subwindow)
552 e->window = xevent->xbutton.subwindow;
553 else
554 e->window = xevent->xbutton.window;
555
556 e->event_window = xevent->xbutton.window;
557 e->same_screen = xevent->xbutton.same_screen;
558 e->root_window = xevent->xbutton.root;
559
560 _ecore_x_event_last_time = e->timestamp;
561 _ecore_x_event_last_win = e->window;
562 _ecore_x_event_last_root_x = xevent->xbutton.x_root;
563 _ecore_x_event_last_root_y = xevent->xbutton.y_root;
564 ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, e, NULL, NULL);
565
566 for (i = 0; i < _ecore_window_grabs_num; i++)
567 {
568 if ((_ecore_window_grabs[i] == xevent->xbutton.window) ||
569 (_ecore_window_grabs[i] == xevent->xbutton.subwindow))
570 {
571 Eina_Bool replay = EINA_FALSE;
572
573 if (_ecore_window_grab_replay_func)
574 replay = _ecore_window_grab_replay_func(
575 _ecore_window_grab_replay_data,
576 ECORE_EVENT_MOUSE_WHEEL,
577 e);
578
579 if (replay)
580 XAllowEvents(xevent->xbutton.display,
581 ReplayPointer, xevent->xbutton.time);
582 else
583 XAllowEvents(xevent->xbutton.display,
584 AsyncPointer, xevent->xbutton.time);
585
586 break;
587 }
588 }
589 }
590 else
591 {
592 {
593 _ecore_mouse_move(xevent->xbutton.time, xevent->xbutton.state,
594 xevent->xbutton.x, xevent->xbutton.y,
595 xevent->xbutton.x_root, xevent->xbutton.y_root,
596 xevent->xbutton.window,
597 (xevent->xbutton.subwindow ? xevent->xbutton.
598 subwindow : xevent->xbutton.window),
599 xevent->xbutton.root,
600 xevent->xbutton.same_screen,
601 0, 1, 1,
602 1.0, // pressure
603 0.0, // angle
604 xevent->xbutton.x, xevent->xbutton.y,
605 xevent->xbutton.x_root, xevent->xbutton.y_root);
606 }
607 {
608 Ecore_Event_Mouse_Button *e;
609 int event_window;
610 int window;
611
612 window =
613 (xevent->xbutton.subwindow ? xevent->xbutton.subwindow : xevent->
614 xbutton.window);
615 event_window = xevent->xbutton.window;
616
617 e = _ecore_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN,
618 xevent->xbutton.time,
619 xevent->xbutton.state,
620 xevent->xbutton.button,
621 xevent->xbutton.x,
622 xevent->xbutton.y,
623 xevent->xbutton.x_root,
624 xevent->xbutton.y_root,
625 event_window,
626 window,
627 xevent->xbutton.root,
628 xevent->xbutton.same_screen,
629 0,
630 1,
631 1,
632 1.0,
633// pressure
634 0.0,
635// angle
636 xevent->xbutton.x,
637 xevent->xbutton.y,
638 xevent->xbutton.x_root,
639 xevent->xbutton.y_root);
640 if (e)
641 for (i = 0; i < _ecore_window_grabs_num; i++)
642 {
643 if ((_ecore_window_grabs[i] == xevent->xbutton.window) ||
644 (_ecore_window_grabs[i] == xevent->xbutton.subwindow))
645 {
646 Eina_Bool replay = EINA_FALSE;
647
648 if (_ecore_window_grab_replay_func)
649 replay = _ecore_window_grab_replay_func(
650 _ecore_window_grab_replay_data,
651 ECORE_EVENT_MOUSE_BUTTON_DOWN,
652 e);
653
654 if (replay)
655 XAllowEvents(xevent->xbutton.display,
656 ReplayPointer, xevent->xbutton.time);
657 else
658 XAllowEvents(xevent->xbutton.display,
659 AsyncPointer, xevent->xbutton.time);
660
661 break;
662 }
663 }
664 }
665 }
666}
667
668void
669_ecore_x_event_handle_button_release(XEvent *xevent)
670{
671 _ecore_x_last_event_mouse_move = 0;
672 /* filter out wheel buttons */
673 if ((xevent->xbutton.button <= 3) || (xevent->xbutton.button > 7))
674 {
675 _ecore_mouse_move(xevent->xbutton.time, xevent->xbutton.state,
676 xevent->xbutton.x, xevent->xbutton.y,
677 xevent->xbutton.x_root, xevent->xbutton.y_root,
678 xevent->xbutton.window,
679 (xevent->xbutton.subwindow ? xevent->xbutton.
680 subwindow : xevent->xbutton.window),
681 xevent->xbutton.root,
682 xevent->xbutton.same_screen,
683 0, 1, 1,
684 1.0, // pressure
685 0.0, // angle
686 xevent->xbutton.x, xevent->xbutton.y,
687 xevent->xbutton.x_root, xevent->xbutton.y_root);
688
689 _ecore_mouse_button(ECORE_EVENT_MOUSE_BUTTON_UP,
690 xevent->xbutton.time, xevent->xbutton.state,
691 xevent->xbutton.button,
692 xevent->xbutton.x, xevent->xbutton.y,
693 xevent->xbutton.x_root, xevent->xbutton.y_root,
694 xevent->xbutton.window,
695 (xevent->xbutton.subwindow ? xevent->xbutton.
696 subwindow : xevent->xbutton.window),
697 xevent->xbutton.root,
698 xevent->xbutton.same_screen,
699 0, 1, 1,
700 1.0, // pressure
701 0.0, // angle
702 xevent->xbutton.x, xevent->xbutton.y,
703 xevent->xbutton.x_root, xevent->xbutton.y_root);
704 }
705}
706
707void
708_ecore_x_event_handle_motion_notify(XEvent *xevent)
709{
710/*
711 if (_ecore_x_last_event_mouse_move)
712 {
713 ecore_event_del(_ecore_x_last_event_mouse_move_event);
714 _ecore_x_last_event_mouse_move = 0;
715 _ecore_x_last_event_mouse_move_event = NULL;
716 }
717 */
718 _ecore_mouse_move(xevent->xmotion.time, xevent->xmotion.state,
719 xevent->xmotion.x, xevent->xmotion.y,
720 xevent->xmotion.x_root, xevent->xmotion.y_root,
721 xevent->xmotion.window,
722 (xevent->xmotion.subwindow ? xevent->xmotion.subwindow :
723 xevent->xmotion.window),
724 xevent->xmotion.root,
725 xevent->xmotion.same_screen,
726 0, 1, 1,
727 1.0, // pressure
728 0.0, // angle
729 xevent->xmotion.x, xevent->xmotion.y,
730 xevent->xmotion.x_root, xevent->xmotion.y_root);
731
732 _ecore_x_last_event_mouse_move = 1;
733
734 /* Xdnd handling */
735 _ecore_x_dnd_drag(xevent->xmotion.root,
736 xevent->xmotion.x_root,
737 xevent->xmotion.y_root);
738}
739
740void
741_ecore_x_event_handle_enter_notify(XEvent *xevent)
742{
743 _ecore_x_last_event_mouse_move = 0;
744 {
745 _ecore_mouse_move(xevent->xcrossing.time, xevent->xcrossing.state,
746 xevent->xcrossing.x, xevent->xcrossing.y,
747 xevent->xcrossing.x_root, xevent->xcrossing.y_root,
748 xevent->xcrossing.window,
749 (xevent->xcrossing.subwindow ? xevent->xcrossing.
750 subwindow : xevent->xcrossing.window),
751 xevent->xcrossing.root,
752 xevent->xcrossing.same_screen,
753 0, 1, 1,
754 1.0, // pressure
755 0.0, // angle
756 xevent->xcrossing.x, xevent->xcrossing.y,
757 xevent->xcrossing.x_root, xevent->xcrossing.y_root);
758 }
759 {
760 Ecore_X_Event_Mouse_In *e;
761
762 e = calloc(1, sizeof(Ecore_X_Event_Mouse_In));
763 if (!e)
764 return;
765
766 e->modifiers = _ecore_x_event_modifiers(xevent->xcrossing.state);
767 e->x = xevent->xcrossing.x;
768 e->y = xevent->xcrossing.y;
769 e->root.x = xevent->xcrossing.x_root;
770 e->root.y = xevent->xcrossing.y_root;
771 if (xevent->xcrossing.subwindow)
772 e->win = xevent->xcrossing.subwindow;
773 else
774 e->win = xevent->xcrossing.window;
775
776 e->same_screen = xevent->xcrossing.same_screen;
777 e->root_win = xevent->xcrossing.root;
778 e->event_win = xevent->xcrossing.window;
779
780 if (xevent->xcrossing.mode == NotifyNormal)
781 e->mode = ECORE_X_EVENT_MODE_NORMAL;
782 else if (xevent->xcrossing.mode == NotifyGrab)
783 e->mode = ECORE_X_EVENT_MODE_GRAB;
784 else if (xevent->xcrossing.mode == NotifyUngrab)
785 e->mode = ECORE_X_EVENT_MODE_UNGRAB;
786
787 if (xevent->xcrossing.detail == NotifyAncestor)
788 e->detail = ECORE_X_EVENT_DETAIL_ANCESTOR;
789 else if (xevent->xcrossing.detail == NotifyVirtual)
790 e->detail = ECORE_X_EVENT_DETAIL_VIRTUAL;
791 else if (xevent->xcrossing.detail == NotifyInferior)
792 e->detail = ECORE_X_EVENT_DETAIL_INFERIOR;
793 else if (xevent->xcrossing.detail == NotifyNonlinear)
794 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR;
795 else if (xevent->xcrossing.detail == NotifyNonlinearVirtual)
796 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL;
797
798 e->time = xevent->xcrossing.time;
799 _ecore_x_event_last_time = e->time;
800 ecore_event_add(ECORE_X_EVENT_MOUSE_IN, e, NULL, NULL);
801 }
802}
803
804void
805_ecore_x_event_handle_leave_notify(XEvent *xevent)
806{
807 _ecore_x_last_event_mouse_move = 0;
808 {
809 _ecore_mouse_move(xevent->xcrossing.time, xevent->xcrossing.state,
810 xevent->xcrossing.x, xevent->xcrossing.y,
811 xevent->xcrossing.x_root, xevent->xcrossing.y_root,
812 xevent->xcrossing.window,
813 (xevent->xcrossing.subwindow ? xevent->xcrossing.
814 subwindow : xevent->xcrossing.window),
815 xevent->xcrossing.root,
816 xevent->xcrossing.same_screen,
817 0, 1, 1,
818 1.0, // pressure
819 0.0, // angle
820 xevent->xcrossing.x, xevent->xcrossing.y,
821 xevent->xcrossing.x_root, xevent->xcrossing.y_root);
822 }
823 {
824 Ecore_X_Event_Mouse_Out *e;
825
826 e = calloc(1, sizeof(Ecore_X_Event_Mouse_Out));
827 if (!e)
828 return;
829
830 e->modifiers = _ecore_x_event_modifiers(xevent->xcrossing.state);
831 e->x = xevent->xcrossing.x;
832 e->y = xevent->xcrossing.y;
833 e->root.x = xevent->xcrossing.x_root;
834 e->root.y = xevent->xcrossing.y_root;
835 if (xevent->xcrossing.subwindow)
836 e->win = xevent->xcrossing.subwindow;
837 else
838 e->win = xevent->xcrossing.window;
839
840 e->same_screen = xevent->xcrossing.same_screen;
841 e->root_win = xevent->xcrossing.root;
842 e->event_win = xevent->xcrossing.window;
843
844 if (xevent->xcrossing.mode == NotifyNormal)
845 e->mode = ECORE_X_EVENT_MODE_NORMAL;
846 else if (xevent->xcrossing.mode == NotifyGrab)
847 e->mode = ECORE_X_EVENT_MODE_GRAB;
848 else if (xevent->xcrossing.mode == NotifyUngrab)
849 e->mode = ECORE_X_EVENT_MODE_UNGRAB;
850
851 if (xevent->xcrossing.detail == NotifyAncestor)
852 e->detail = ECORE_X_EVENT_DETAIL_ANCESTOR;
853 else if (xevent->xcrossing.detail == NotifyVirtual)
854 e->detail = ECORE_X_EVENT_DETAIL_VIRTUAL;
855 else if (xevent->xcrossing.detail == NotifyInferior)
856 e->detail = ECORE_X_EVENT_DETAIL_INFERIOR;
857 else if (xevent->xcrossing.detail == NotifyNonlinear)
858 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR;
859 else if (xevent->xcrossing.detail == NotifyNonlinearVirtual)
860 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL;
861
862 e->time = xevent->xcrossing.time;
863 _ecore_x_event_last_time = e->time;
864 _ecore_x_event_last_win = e->win;
865 _ecore_x_event_last_root_x = e->root.x;
866 _ecore_x_event_last_root_y = e->root.y;
867 ecore_event_add(ECORE_X_EVENT_MOUSE_OUT, e, NULL, NULL);
868 }
869}
870
871void
872_ecore_x_event_handle_focus_in(XEvent *xevent)
873{
874 Ecore_X_Event_Window_Focus_In *e;
875
876 _ecore_x_last_event_mouse_move = 0;
877
878 e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_In));
879 if (!e)
880 return;
881
882 e->win = xevent->xfocus.window;
883
884 if (xevent->xfocus.mode == NotifyNormal)
885 e->mode = ECORE_X_EVENT_MODE_NORMAL;
886 else if (xevent->xfocus.mode == NotifyWhileGrabbed)
887 e->mode = ECORE_X_EVENT_MODE_WHILE_GRABBED;
888 else if (xevent->xfocus.mode == NotifyGrab)
889 e->mode = ECORE_X_EVENT_MODE_GRAB;
890 else if (xevent->xfocus.mode == NotifyUngrab)
891 e->mode = ECORE_X_EVENT_MODE_UNGRAB;
892
893 if (xevent->xfocus.detail == NotifyAncestor)
894 e->detail = ECORE_X_EVENT_DETAIL_ANCESTOR;
895 else if (xevent->xfocus.detail == NotifyVirtual)
896 e->detail = ECORE_X_EVENT_DETAIL_VIRTUAL;
897 else if (xevent->xfocus.detail == NotifyInferior)
898 e->detail = ECORE_X_EVENT_DETAIL_INFERIOR;
899 else if (xevent->xfocus.detail == NotifyNonlinear)
900 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR;
901 else if (xevent->xfocus.detail == NotifyNonlinearVirtual)
902 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL;
903 else if (xevent->xfocus.detail == NotifyPointer)
904 e->detail = ECORE_X_EVENT_DETAIL_POINTER;
905 else if (xevent->xfocus.detail == NotifyPointerRoot)
906 e->detail = ECORE_X_EVENT_DETAIL_POINTER_ROOT;
907 else if (xevent->xfocus.detail == NotifyDetailNone)
908 e->detail = ECORE_X_EVENT_DETAIL_DETAIL_NONE;
909
910 e->time = _ecore_x_event_last_time;
911 _ecore_x_event_last_time = e->time;
912 ecore_event_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, e, NULL, NULL);
913}
914
915void
916_ecore_x_event_handle_focus_out(XEvent *xevent)
917{
918 Ecore_X_Event_Window_Focus_Out *e;
919
920 _ecore_x_last_event_mouse_move = 0;
921
922 e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_Out));
923 if (!e)
924 return;
925
926 e->win = xevent->xfocus.window;
927
928 if (xevent->xfocus.mode == NotifyNormal)
929 e->mode = ECORE_X_EVENT_MODE_NORMAL;
930 else if (xevent->xfocus.mode == NotifyWhileGrabbed)
931 e->mode = ECORE_X_EVENT_MODE_WHILE_GRABBED;
932 else if (xevent->xfocus.mode == NotifyGrab)
933 e->mode = ECORE_X_EVENT_MODE_GRAB;
934 else if (xevent->xfocus.mode == NotifyUngrab)
935 e->mode = ECORE_X_EVENT_MODE_UNGRAB;
936
937 if (xevent->xfocus.detail == NotifyAncestor)
938 e->detail = ECORE_X_EVENT_DETAIL_ANCESTOR;
939 else if (xevent->xfocus.detail == NotifyVirtual)
940 e->detail = ECORE_X_EVENT_DETAIL_VIRTUAL;
941 else if (xevent->xfocus.detail == NotifyInferior)
942 e->detail = ECORE_X_EVENT_DETAIL_INFERIOR;
943 else if (xevent->xfocus.detail == NotifyNonlinear)
944 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR;
945 else if (xevent->xfocus.detail == NotifyNonlinearVirtual)
946 e->detail = ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL;
947 else if (xevent->xfocus.detail == NotifyPointer)
948 e->detail = ECORE_X_EVENT_DETAIL_POINTER;
949 else if (xevent->xfocus.detail == NotifyPointerRoot)
950 e->detail = ECORE_X_EVENT_DETAIL_POINTER_ROOT;
951 else if (xevent->xfocus.detail == NotifyDetailNone)
952 e->detail = ECORE_X_EVENT_DETAIL_DETAIL_NONE;
953
954 e->time = _ecore_x_event_last_time;
955 _ecore_x_event_last_time = e->time;
956 ecore_event_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, e, NULL, NULL);
957}
958
959void
960_ecore_x_event_handle_keymap_notify(XEvent *xevent __UNUSED__)
961{
962 _ecore_x_last_event_mouse_move = 0;
963 /* FIXME: handle this event type */
964}
965
966void
967_ecore_x_event_handle_expose(XEvent *xevent)
968{
969 Ecore_X_Event_Window_Damage *e;
970
971 _ecore_x_last_event_mouse_move = 0;
972 e = calloc(1, sizeof(Ecore_X_Event_Window_Damage));
973 if (!e)
974 return;
975
976 e->win = xevent->xexpose.window;
977 e->time = _ecore_x_event_last_time;
978 e->x = xevent->xexpose.x;
979 e->y = xevent->xexpose.y;
980 e->w = xevent->xexpose.width;
981 e->h = xevent->xexpose.height;
982 e->count = xevent->xexpose.count;
983 ecore_event_add(ECORE_X_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
984}
985
986void
987_ecore_x_event_handle_graphics_expose(XEvent *xevent)
988{
989 Ecore_X_Event_Window_Damage *e;
990
991 _ecore_x_last_event_mouse_move = 0;
992 e = calloc(1, sizeof(Ecore_X_Event_Window_Damage));
993 if (!e)
994 return;
995
996 e->win = xevent->xgraphicsexpose.drawable;
997 e->time = _ecore_x_event_last_time;
998 e->x = xevent->xgraphicsexpose.x;
999 e->y = xevent->xgraphicsexpose.y;
1000 e->w = xevent->xgraphicsexpose.width;
1001 e->h = xevent->xgraphicsexpose.height;
1002 e->count = xevent->xgraphicsexpose.count;
1003 ecore_event_add(ECORE_X_EVENT_WINDOW_DAMAGE, e, NULL, NULL);
1004}
1005
1006void
1007_ecore_x_event_handle_visibility_notify(XEvent *xevent)
1008{
1009 _ecore_x_last_event_mouse_move = 0;
1010// if (xevent->xvisibility.state != VisibilityPartiallyObscured)
1011 {
1012 Ecore_X_Event_Window_Visibility_Change *e;
1013
1014 e = calloc(1, sizeof(Ecore_X_Event_Window_Visibility_Change));
1015 if (!e)
1016 return;
1017
1018 e->win = xevent->xvisibility.window;
1019 e->time = _ecore_x_event_last_time;
1020 if (xevent->xvisibility.state == VisibilityFullyObscured)
1021 e->fully_obscured = 1;
1022 else
1023 e->fully_obscured = 0;
1024
1025 ecore_event_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, e, NULL, NULL);
1026 }
1027}
1028
1029void
1030_ecore_x_event_handle_create_notify(XEvent *xevent)
1031{
1032 Ecore_X_Event_Window_Create *e;
1033
1034 _ecore_x_last_event_mouse_move = 0;
1035 e = calloc(1, sizeof(Ecore_X_Event_Window_Create));
1036 if (!e)
1037 return;
1038
1039 e->win = xevent->xcreatewindow.window;
1040 e->parent = xevent->xcreatewindow.parent;
1041 if (xevent->xcreatewindow.override_redirect)
1042 e->override = 1;
1043 else
1044 e->override = 0;
1045
1046 e->x = xevent->xcreatewindow.x;
1047 e->y = xevent->xcreatewindow.y;
1048 e->w = xevent->xcreatewindow.width;
1049 e->h = xevent->xcreatewindow.height;
1050 e->border = xevent->xcreatewindow.border_width;
1051 e->time = _ecore_x_event_last_time;
1052 ecore_event_add(ECORE_X_EVENT_WINDOW_CREATE, e, NULL, NULL);
1053}
1054
1055void
1056_ecore_x_event_handle_destroy_notify(XEvent *xevent)
1057{
1058 Ecore_X_Event_Window_Destroy *e;
1059
1060 _ecore_x_last_event_mouse_move = 0;
1061 e = calloc(1, sizeof(Ecore_X_Event_Window_Destroy));
1062 if (!e)
1063 return;
1064
1065 e->win = xevent->xdestroywindow.window;
1066 e->event_win = xevent->xdestroywindow.event;
1067 e->time = _ecore_x_event_last_time;
1068 if (e->win == _ecore_x_event_last_win)
1069 _ecore_x_event_last_win = 0;
1070
1071 ecore_event_add(ECORE_X_EVENT_WINDOW_DESTROY, e, NULL, NULL);
1072}
1073
1074void
1075_ecore_x_event_handle_unmap_notify(XEvent *xevent)
1076{
1077 Ecore_X_Event_Window_Hide *e;
1078
1079 _ecore_x_last_event_mouse_move = 0;
1080 e = calloc(1, sizeof(Ecore_X_Event_Window_Hide));
1081 if (!e)
1082 return;
1083
1084 e->win = xevent->xunmap.window;
1085 e->event_win = xevent->xunmap.event;
1086 e->time = _ecore_x_event_last_time;
1087 ecore_event_add(ECORE_X_EVENT_WINDOW_HIDE, e, NULL, NULL);
1088}
1089
1090void
1091_ecore_x_event_handle_map_notify(XEvent *xevent)
1092{
1093 Ecore_X_Event_Window_Show *e;
1094
1095 _ecore_x_last_event_mouse_move = 0;
1096 e = calloc(1, sizeof(Ecore_X_Event_Window_Show));
1097 if (!e)
1098 return;
1099
1100 e->win = xevent->xmap.window;
1101 e->event_win = xevent->xmap.event;
1102 e->time = _ecore_x_event_last_time;
1103 ecore_event_add(ECORE_X_EVENT_WINDOW_SHOW, e, NULL, NULL);
1104}
1105
1106void
1107_ecore_x_event_handle_map_request(XEvent *xevent)
1108{
1109 Ecore_X_Event_Window_Show_Request *e;
1110
1111 _ecore_x_last_event_mouse_move = 0;
1112 e = calloc(1, sizeof(Ecore_X_Event_Window_Show_Request));
1113 if (!e)
1114 return;
1115
1116 e->win = xevent->xmaprequest.window;
1117 e->time = _ecore_x_event_last_time;
1118 e->parent = xevent->xmaprequest.parent;
1119 ecore_event_add(ECORE_X_EVENT_WINDOW_SHOW_REQUEST, e, NULL, NULL);
1120}
1121
1122void
1123_ecore_x_event_handle_reparent_notify(XEvent *xevent)
1124{
1125 Ecore_X_Event_Window_Reparent *e;
1126
1127 _ecore_x_last_event_mouse_move = 0;
1128 e = calloc(1, sizeof(Ecore_X_Event_Window_Reparent));
1129 if (!e)
1130 return;
1131
1132 e->win = xevent->xreparent.window;
1133 e->event_win = xevent->xreparent.event;
1134 e->parent = xevent->xreparent.parent;
1135 e->time = _ecore_x_event_last_time;
1136 ecore_event_add(ECORE_X_EVENT_WINDOW_REPARENT, e, NULL, NULL);
1137}
1138
1139void
1140_ecore_x_event_handle_configure_notify(XEvent *xevent)
1141{
1142 Ecore_X_Event_Window_Configure *e;
1143
1144 _ecore_x_last_event_mouse_move = 0;
1145 e = calloc(1, sizeof(Ecore_X_Event_Window_Configure));
1146 if (!e)
1147 return;
1148
1149 e->win = xevent->xconfigure.window;
1150 e->event_win = xevent->xconfigure.event;
1151 e->abovewin = xevent->xconfigure.above;
1152 e->x = xevent->xconfigure.x;
1153 e->y = xevent->xconfigure.y;
1154 e->w = xevent->xconfigure.width;
1155 e->h = xevent->xconfigure.height;
1156 e->border = xevent->xconfigure.border_width;
1157 e->override = xevent->xconfigure.override_redirect;
1158 e->from_wm = xevent->xconfigure.send_event;
1159 e->time = _ecore_x_event_last_time;
1160 ecore_event_add(ECORE_X_EVENT_WINDOW_CONFIGURE, e, NULL, NULL);
1161}
1162
1163void
1164_ecore_x_event_handle_configure_request(XEvent *xevent)
1165{
1166 Ecore_X_Event_Window_Configure_Request *e;
1167
1168 _ecore_x_last_event_mouse_move = 0;
1169 e = calloc(1, sizeof(Ecore_X_Event_Window_Configure_Request));
1170 if (!e)
1171 return;
1172
1173 e->win = xevent->xconfigurerequest.window;
1174 e->parent_win = xevent->xconfigurerequest.parent;
1175 e->abovewin = xevent->xconfigurerequest.above;
1176 e->x = xevent->xconfigurerequest.x;
1177 e->y = xevent->xconfigurerequest.y;
1178 e->w = xevent->xconfigurerequest.width;
1179 e->h = xevent->xconfigurerequest.height;
1180 e->border = xevent->xconfigurerequest.border_width;
1181 e->value_mask = xevent->xconfigurerequest.value_mask;
1182 e->time = _ecore_x_event_last_time;
1183
1184 if (xevent->xconfigurerequest.detail == Above)
1185 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1186 else if (xevent->xconfigurerequest.detail == Below)
1187 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1188 else if (xevent->xconfigurerequest.detail == TopIf)
1189 e->detail = ECORE_X_WINDOW_STACK_TOP_IF;
1190 else if (xevent->xconfigurerequest.detail == BottomIf)
1191 e->detail = ECORE_X_WINDOW_STACK_BOTTOM_IF;
1192 else if (xevent->xconfigurerequest.detail == Opposite)
1193 e->detail = ECORE_X_WINDOW_STACK_OPPOSITE;
1194
1195 ecore_event_add(ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST, e, NULL, NULL);
1196}
1197
1198void
1199_ecore_x_event_handle_gravity_notify(XEvent *xevent __UNUSED__)
1200{
1201 _ecore_x_last_event_mouse_move = 0;
1202 /* FIXME: handle this event type */
1203}
1204
1205void
1206_ecore_x_event_handle_resize_request(XEvent *xevent)
1207{
1208 Ecore_X_Event_Window_Resize_Request *e;
1209
1210 _ecore_x_last_event_mouse_move = 0;
1211 e = calloc(1, sizeof(Ecore_X_Event_Window_Resize_Request));
1212 if (!e)
1213 return;
1214
1215 e->win = xevent->xresizerequest.window;
1216 e->w = xevent->xresizerequest.width;
1217 e->h = xevent->xresizerequest.height;
1218 e->time = _ecore_x_event_last_time;
1219 ecore_event_add(ECORE_X_EVENT_WINDOW_RESIZE_REQUEST, e, NULL, NULL);
1220}
1221
1222void
1223_ecore_x_event_handle_circulate_notify(XEvent *xevent)
1224{
1225 Ecore_X_Event_Window_Stack *e;
1226
1227 _ecore_x_last_event_mouse_move = 0;
1228 e = calloc(1, sizeof(Ecore_X_Event_Window_Stack));
1229 if (!e)
1230 return;
1231
1232 e->win = xevent->xcirculate.window;
1233 e->event_win = xevent->xcirculate.event;
1234 if (xevent->xcirculate.place == PlaceOnTop)
1235 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1236 else
1237 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1238
1239 e->time = _ecore_x_event_last_time;
1240 ecore_event_add(ECORE_X_EVENT_WINDOW_STACK, e, NULL, NULL);
1241}
1242
1243void
1244_ecore_x_event_handle_circulate_request(XEvent *xevent)
1245{
1246 Ecore_X_Event_Window_Stack_Request *e;
1247
1248 _ecore_x_last_event_mouse_move = 0;
1249 e = calloc(1, sizeof(Ecore_X_Event_Window_Stack_Request));
1250 if (!e)
1251 return;
1252
1253 e->win = xevent->xcirculaterequest.window;
1254 e->parent = xevent->xcirculaterequest.parent;
1255 if (xevent->xcirculaterequest.place == PlaceOnTop)
1256 e->detail = ECORE_X_WINDOW_STACK_ABOVE;
1257 else
1258 e->detail = ECORE_X_WINDOW_STACK_BELOW;
1259
1260 e->time = _ecore_x_event_last_time;
1261 ecore_event_add(ECORE_X_EVENT_WINDOW_STACK_REQUEST, e, NULL, NULL);
1262}
1263
1264void
1265_ecore_x_event_handle_property_notify(XEvent *xevent)
1266{
1267 _ecore_x_last_event_mouse_move = 0;
1268 {
1269 Ecore_X_Event_Window_Property *e;
1270
1271 e = calloc(1, sizeof(Ecore_X_Event_Window_Property));
1272 if (!e)
1273 return;
1274
1275 e->win = xevent->xproperty.window;
1276 e->atom = xevent->xproperty.atom;
1277 e->time = xevent->xproperty.time;
1278 _ecore_x_event_last_time = e->time;
1279 ecore_event_add(ECORE_X_EVENT_WINDOW_PROPERTY, e, NULL, NULL);
1280 }
1281}
1282
1283void
1284_ecore_x_event_handle_selection_clear(XEvent *xevent)
1285{
1286// Ecore_X_Selection_Intern *d;
1287 Ecore_X_Event_Selection_Clear *e;
1288 Ecore_X_Atom sel;
1289
1290 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1291 _ecore_x_last_event_mouse_move = 0;
1292/* errr..... why? paranoia.
1293 d = _ecore_x_selection_get(xevent->xselectionclear.selection);
1294 if (d && (xevent->xselectionclear.time > d->time))
1295 {
1296 _ecore_x_selection_set(None, NULL, 0,
1297 xevent->xselectionclear.selection);
1298 }
1299 */
1300/* Generate event for app cleanup */
1301 e = malloc(sizeof(Ecore_X_Event_Selection_Clear));
1302 e->win = xevent->xselectionclear.window;
1303 e->time = xevent->xselectionclear.time;
1304 e->atom = sel = xevent->xselectionclear.selection;
1305 if (sel == ECORE_X_ATOM_SELECTION_PRIMARY)
1306 e->selection = ECORE_X_SELECTION_PRIMARY;
1307 else if (sel == ECORE_X_ATOM_SELECTION_SECONDARY)
1308 e->selection = ECORE_X_SELECTION_SECONDARY;
1309 else if (sel == ECORE_X_ATOM_SELECTION_CLIPBOARD)
1310 e->selection = ECORE_X_SELECTION_CLIPBOARD;
1311 else
1312 e->selection = ECORE_X_SELECTION_OTHER;
1313
1314 ecore_event_add(ECORE_X_EVENT_SELECTION_CLEAR, e, NULL, NULL);
1315}
1316
1317void
1318_ecore_x_event_handle_selection_request(XEvent *xevent)
1319{
1320 Ecore_X_Event_Selection_Request *e;
1321 Ecore_X_Selection_Intern *sd;
1322 void *data = NULL;
1323 int len;
1324 int typesize;
1325
1326 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1327 _ecore_x_last_event_mouse_move = 0;
1328 /*
1329 * Generate a selection request event.
1330 */
1331 e = malloc(sizeof(Ecore_X_Event_Selection_Request));
1332 e->owner = xevent->xselectionrequest.owner;
1333 e->requestor = xevent->xselectionrequest.requestor;
1334 e->time = xevent->xselectionrequest.time;
1335 e->selection = xevent->xselectionrequest.selection;
1336 e->target = xevent->xselectionrequest.target;
1337 e->property = xevent->xselectionrequest.property;
1338 ecore_event_add(ECORE_X_EVENT_SELECTION_REQUEST, e, NULL, NULL);
1339
1340 if ((sd = _ecore_x_selection_get(xevent->xselectionrequest.selection)) &&
1341 (sd->win == xevent->xselectionrequest.owner))
1342 {
1343 Ecore_X_Selection_Intern *si;
1344
1345 si = _ecore_x_selection_get(xevent->xselectionrequest.selection);
1346 if (si->data)
1347 {
1348 Ecore_X_Atom property = None;
1349 Ecore_X_Atom type;
1350
1351 /* Set up defaults for strings first */
1352 type = xevent->xselectionrequest.target;
1353 typesize = 8;
1354 len = sd->length;
1355
1356 if (!ecore_x_selection_convert(xevent->xselectionrequest.selection,
1357 xevent->xselectionrequest.target,
1358 &data, &len, &type, &typesize))
1359 /* Refuse selection, conversion to requested target failed */
1360 property = None;
1361 else if (data)
1362 {
1363 /* FIXME: This does not properly handle large data transfers */
1364 ecore_x_window_prop_property_set(
1365 xevent->xselectionrequest.requestor,
1366 xevent->xselectionrequest.
1367 property,
1368 type,
1369 typesize,
1370 data,
1371 len);
1372 property = xevent->xselectionrequest.property;
1373 free(data);
1374 }
1375
1376 ecore_x_selection_notify_send(xevent->xselectionrequest.requestor,
1377 xevent->xselectionrequest.selection,
1378 xevent->xselectionrequest.target,
1379 property,
1380 xevent->xselectionrequest.time);
1381 }
1382 }
1383}
1384
1385void
1386_ecore_x_event_handle_selection_notify(XEvent *xevent)
1387{
1388 Ecore_X_Event_Selection_Notify *e;
1389 unsigned char *data = NULL;
1390 Ecore_X_Atom selection;
1391 int num_ret, format;
1392
1393 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1394 _ecore_x_last_event_mouse_move = 0;
1395 selection = xevent->xselection.selection;
1396
1397 if (xevent->xselection.target == ECORE_X_ATOM_SELECTION_TARGETS)
1398 {
1399 format = ecore_x_window_prop_property_get(xevent->xselection.requestor,
1400 xevent->xselection.property,
1401 XA_ATOM, 32, &data, &num_ret);
1402 if (!format)
1403 return;
1404 }
1405 else
1406 {
1407 format = ecore_x_window_prop_property_get(xevent->xselection.requestor,
1408 xevent->xselection.property,
1409 AnyPropertyType, 8, &data,
1410 &num_ret);
1411 if (!format)
1412 return;
1413 }
1414
1415 e = calloc(1, sizeof(Ecore_X_Event_Selection_Notify));
1416 if (!e)
1417 return;
1418
1419 e->win = xevent->xselection.requestor;
1420 e->time = xevent->xselection.time;
1421 e->atom = selection;
1422 e->target = _ecore_x_selection_target_get(xevent->xselection.target);
1423
1424 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
1425 e->selection = ECORE_X_SELECTION_PRIMARY;
1426 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
1427 e->selection = ECORE_X_SELECTION_SECONDARY;
1428 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
1429 e->selection = ECORE_X_SELECTION_XDND;
1430 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
1431 e->selection = ECORE_X_SELECTION_CLIPBOARD;
1432 else
1433 e->selection = ECORE_X_SELECTION_OTHER;
1434
1435 e->data = _ecore_x_selection_parse(e->target, data, num_ret, format);
1436
1437 ecore_event_add(ECORE_X_EVENT_SELECTION_NOTIFY, e,
1438 _ecore_x_event_free_selection_notify, NULL);
1439}
1440
1441void
1442_ecore_x_event_handle_colormap_notify(XEvent *xevent)
1443{
1444 Ecore_X_Event_Window_Colormap *e;
1445
1446 _ecore_x_last_event_mouse_move = 0;
1447 e = calloc(1, sizeof(Ecore_X_Event_Window_Colormap));
1448 if (!e)
1449 return;
1450
1451 e->win = xevent->xcolormap.window;
1452 e->cmap = xevent->xcolormap.colormap;
1453 e->time = _ecore_x_event_last_time;
1454 if (xevent->xcolormap.state == ColormapInstalled)
1455 e->installed = EINA_TRUE;
1456 else
1457 e->installed = EINA_FALSE;
1458
1459 ecore_event_add(ECORE_X_EVENT_WINDOW_COLORMAP, e, NULL, NULL);
1460}
1461
1462void
1463_ecore_x_event_handle_client_message(XEvent *xevent)
1464{
1465 _ecore_x_last_event_mouse_move = 0;
1466 /* Special client message event handling here. need to put LOTS of if */
1467 /* checks here and generate synthetic events per special message known */
1468 /* otherwise generate generic client message event. this would handle*/
1469 /* netwm, ICCCM, gnomewm, old kde and mwm hint client message protocols */
1470 if ((xevent->xclient.message_type == ECORE_X_ATOM_WM_PROTOCOLS) &&
1471 (xevent->xclient.format == 32) &&
1472 (xevent->xclient.data.l[0] == (long)ECORE_X_ATOM_WM_DELETE_WINDOW))
1473 {
1474 Ecore_X_Event_Window_Delete_Request *e;
1475
1476 e = calloc(1, sizeof(Ecore_X_Event_Window_Delete_Request));
1477 if (!e)
1478 return;
1479
1480 e->win = xevent->xclient.window;
1481 e->time = _ecore_x_event_last_time;
1482 ecore_event_add(ECORE_X_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
1483 }
1484 else if ((xevent->xclient.message_type == ECORE_X_ATOM_NET_WM_MOVERESIZE) &&
1485 (xevent->xclient.format == 32) &&
1486/* Ignore move and resize with keyboard */
1487 (xevent->xclient.data.l[2] < 9))
1488 {
1489 Ecore_X_Event_Window_Move_Resize_Request *e;
1490
1491 e = calloc(1, sizeof(Ecore_X_Event_Window_Move_Resize_Request));
1492 if (!e)
1493 return;
1494
1495 e->win = xevent->xclient.window;
1496 e->x = xevent->xclient.data.l[0];
1497 e->y = xevent->xclient.data.l[1];
1498 e->direction = xevent->xclient.data.l[2];
1499 e->button = xevent->xclient.data.l[3];
1500 e->source = xevent->xclient.data.l[4];
1501 ecore_event_add(ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST, e, NULL, NULL);
1502 }
1503 /* Xdnd Client Message Handling Begin */
1504 /* Message Type: XdndEnter target */
1505 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_ENTER)
1506 {
1507 Ecore_X_Event_Xdnd_Enter *e;
1508 Ecore_X_DND_Target *target;
1509
1510 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Enter));
1511 if (!e) return;
1512
1513 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1514
1515 target = _ecore_x_dnd_target_get();
1516 target->state = ECORE_X_DND_TARGET_ENTERED;
1517 target->source = xevent->xclient.data.l[0];
1518 target->win = xevent->xclient.window;
1519 target->version = (int)(xevent->xclient.data.l[1] >> 24);
1520 if (target->version > ECORE_X_DND_VERSION)
1521 {
1522 WRN("DND: Requested version %d, we only support up to %d",
1523 target->version, ECORE_X_DND_VERSION);
1524 free(e);
1525 return;
1526 }
1527
1528 if (xevent->xclient.data.l[1] & 0x1UL)
1529 {
1530 /* source supports more than 3 types, fetch property */
1531 unsigned char *data;
1532 Ecore_X_Atom *types;
1533 int i, num_ret;
1534
1535 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1536 if (!(ecore_x_window_prop_property_get(target->source,
1537 ECORE_X_ATOM_XDND_TYPE_LIST,
1538 XA_ATOM,
1539 32, &data, &num_ret)))
1540 {
1541 WRN(
1542 "DND: Could not fetch data type list from source window, aborting.");
1543 free(e);
1544 return;
1545 }
1546
1547 types = (Ecore_X_Atom *)data;
1548 e->types = calloc(num_ret, sizeof(char *));
1549 if (e->types)
1550 {
1551 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1552 for (i = 0; i < num_ret; i++)
1553 e->types[i] = XGetAtomName(_ecore_x_disp, types[i]);
1554 }
1555
1556 e->num_types = num_ret;
1557 }
1558 else
1559 {
1560 int i = 0;
1561
1562 e->types = calloc(3, sizeof(char *));
1563 if (e->types)
1564 {
1565 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1566 while ((i < 3) && (xevent->xclient.data.l[i + 2]))
1567 {
1568 e->types[i] = XGetAtomName(_ecore_x_disp,
1569 xevent->xclient.data.l[i + 2]);
1570 i++;
1571 }
1572 }
1573
1574 e->num_types = i;
1575 }
1576
1577 e->win = target->win;
1578 e->source = target->source;
1579 ecore_event_add(ECORE_X_EVENT_XDND_ENTER, e,
1580 _ecore_x_event_free_xdnd_enter, NULL);
1581 }
1582 /* Message Type: XdndPosition target */
1583 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_POSITION)
1584 {
1585 Ecore_X_Event_Xdnd_Position *e;
1586 Ecore_X_DND_Target *target;
1587
1588 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1589
1590 target = _ecore_x_dnd_target_get();
1591 if ((target->source != (Ecore_X_Window)xevent->xclient.data.l[0]) ||
1592 (target->win != xevent->xclient.window))
1593 return;
1594
1595 target->pos.x = xevent->xclient.data.l[2] >> 16;
1596 target->pos.y = xevent->xclient.data.l[2] & 0xFFFFUL;
1597 target->action = xevent->xclient.data.l[4]; /* Version 2 */
1598
1599 target->time = (target->version >= 1) ?
1600 (Time)xevent->xclient.data.l[3] : CurrentTime;
1601
1602 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Position));
1603 if (!e) return;
1604
1605 e->win = target->win;
1606 e->source = target->source;
1607 e->position.x = target->pos.x;
1608 e->position.y = target->pos.y;
1609 e->action = target->action;
1610 ecore_event_add(ECORE_X_EVENT_XDND_POSITION, e, NULL, NULL);
1611 }
1612 /* Message Type: XdndStatus source */
1613 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_STATUS)
1614 {
1615 Ecore_X_Event_Xdnd_Status *e;
1616 Ecore_X_DND_Source *source;
1617
1618 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1619
1620 source = _ecore_x_dnd_source_get();
1621 /* Make sure source/target match */
1622 if ((source->win != xevent->xclient.window) ||
1623 (source->dest != (Window)xevent->xclient.data.l[0]))
1624 return;
1625
1626 source->await_status = 0;
1627
1628 source->will_accept = xevent->xclient.data.l[1] & 0x1UL;
1629 source->suppress = (xevent->xclient.data.l[1] & 0x2UL) ? 0 : 1;
1630
1631 source->rectangle.x = xevent->xclient.data.l[2] >> 16;
1632 source->rectangle.y = xevent->xclient.data.l[2] & 0xFFFFUL;
1633 source->rectangle.width = xevent->xclient.data.l[3] >> 16;
1634 source->rectangle.height = xevent->xclient.data.l[3] & 0xFFFFUL;
1635
1636 source->accepted_action = xevent->xclient.data.l[4];
1637
1638 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Status));
1639 if (!e) return;
1640
1641 e->win = source->win;
1642 e->target = source->dest;
1643 e->will_accept = source->will_accept;
1644 e->rectangle.x = source->rectangle.x;
1645 e->rectangle.y = source->rectangle.y;
1646 e->rectangle.width = source->rectangle.width;
1647 e->rectangle.height = source->rectangle.height;
1648 e->action = source->accepted_action;
1649
1650 ecore_event_add(ECORE_X_EVENT_XDND_STATUS, e, NULL, NULL);
1651 }
1652 /* Message Type: XdndLeave target */
1653 /* Pretend the whole thing never happened, sort of */
1654 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_LEAVE)
1655 {
1656 Ecore_X_Event_Xdnd_Leave *e;
1657 Ecore_X_DND_Target *target;
1658
1659 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1660
1661 target = _ecore_x_dnd_target_get();
1662 if ((target->source != (Ecore_X_Window)xevent->xclient.data.l[0]) ||
1663 (target->win != xevent->xclient.window))
1664 return;
1665
1666 target->state = ECORE_X_DND_TARGET_IDLE;
1667
1668 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Leave));
1669 if (!e) return;
1670
1671 e->win = xevent->xclient.window;
1672 e->source = (Window)xevent->xclient.data.l[0];
1673 ecore_event_add(ECORE_X_EVENT_XDND_LEAVE, e, NULL, NULL);
1674 }
1675 /* Message Type: XdndDrop target */
1676 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_DROP)
1677 {
1678 Ecore_X_Event_Xdnd_Drop *e;
1679 Ecore_X_DND_Target *target;
1680
1681 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1682
1683 target = _ecore_x_dnd_target_get();
1684 /* Match source/target */
1685 if ((target->source != (Window)xevent->xclient.data.l[0]) ||
1686 (target->win != xevent->xclient.window))
1687 return;
1688
1689 target->time = (target->version >= 1) ?
1690 (Time)xevent->xclient.data.l[2] : _ecore_x_event_last_time;
1691
1692 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Drop));
1693 if (!e) return;
1694
1695 e->win = target->win;
1696 e->source = target->source;
1697 e->action = target->action;
1698 e->position.x = target->pos.x;
1699 e->position.y = target->pos.y;
1700 ecore_event_add(ECORE_X_EVENT_XDND_DROP, e, NULL, NULL);
1701 }
1702 /* Message Type: XdndFinished source */
1703 else if (xevent->xclient.message_type == ECORE_X_ATOM_XDND_FINISHED)
1704 {
1705 Ecore_X_Event_Xdnd_Finished *e;
1706 Ecore_X_DND_Source *source;
1707 Eina_Bool completed = EINA_TRUE;
1708
1709 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1710
1711 source = _ecore_x_dnd_source_get();
1712 /* Match source/target */
1713 if ((source->win != xevent->xclient.window) ||
1714 (source->dest != (Window)xevent->xclient.data.l[0]))
1715 return;
1716
1717 if ((source->version < 5) || (xevent->xclient.data.l[1] & 0x1UL))
1718 {
1719 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1720 /* Target successfully performed drop action */
1721 ecore_x_selection_xdnd_clear();
1722 source->state = ECORE_X_DND_SOURCE_IDLE;
1723 }
1724 else if (source->version >= 5)
1725 {
1726 completed = EINA_FALSE;
1727 source->state = ECORE_X_DND_SOURCE_CONVERTING;
1728
1729 /* FIXME: Probably need to add a timer to switch back to idle
1730 * and discard the selection data */
1731 }
1732
1733 e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Finished));
1734 if (!e) return;
1735
1736 e->win = source->win;
1737 e->target = source->dest;
1738 e->completed = completed;
1739 if (source->version >= 5)
1740 {
1741 source->accepted_action = xevent->xclient.data.l[2];
1742 e->action = source->accepted_action;
1743 }
1744 else
1745 {
1746 source->accepted_action = 0;
1747 e->action = source->action;
1748 }
1749
1750 ecore_event_add(ECORE_X_EVENT_XDND_FINISHED, e, NULL, NULL);
1751 }
1752 else if (xevent->xclient.message_type == ECORE_X_ATOM_NET_WM_STATE)
1753 {
1754 Ecore_X_Event_Window_State_Request *e;
1755
1756 e = calloc(1, sizeof(Ecore_X_Event_Window_State_Request));
1757 if (!e) return;
1758
1759 e->win = xevent->xclient.window;
1760 if (xevent->xclient.data.l[0] == 0)
1761 e->action = ECORE_X_WINDOW_STATE_ACTION_REMOVE;
1762 else if (xevent->xclient.data.l[0] == 1)
1763 e->action = ECORE_X_WINDOW_STATE_ACTION_ADD;
1764 else if (xevent->xclient.data.l[0] == 2)
1765 e->action = ECORE_X_WINDOW_STATE_ACTION_TOGGLE;
1766 else
1767 {
1768 free(e);
1769 return;
1770 }
1771
1772 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1773 e->state[0] = _ecore_x_netwm_state_get(xevent->xclient.data.l[1]);
1774 if (e->state[0] == ECORE_X_WINDOW_STATE_UNKNOWN)
1775 {
1776// char *name;
1777 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1778
1779// name = XGetAtomName(_ecore_x_disp, xevent->xclient.data.l[1]);
1780// if (name) ERR("Unknown state: %s", name);
1781// XFree(name);
1782 }
1783 e->state[1] = _ecore_x_netwm_state_get(xevent->xclient.data.l[2]);
1784 if (e->state[1] == ECORE_X_WINDOW_STATE_UNKNOWN)
1785 {
1786// char *name;
1787 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1788
1789// name = XGetAtomName(_ecore_x_disp, xevent->xclient.data.l[2]);
1790// if (name) ERR("Unknown state: %s", name);
1791// XFree(name);
1792 }
1793
1794 e->source = xevent->xclient.data.l[3];
1795
1796 ecore_event_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, e, NULL, NULL);
1797 }
1798 else if ((xevent->xclient.message_type == ECORE_X_ATOM_WM_CHANGE_STATE)
1799 && (xevent->xclient.format == 32)
1800 && (xevent->xclient.data.l[0] == IconicState))
1801 {
1802 Ecore_X_Event_Window_State_Request *e;
1803
1804 e = calloc(1, sizeof(Ecore_X_Event_Window_State_Request));
1805 if (!e)
1806 return;
1807
1808 e->win = xevent->xclient.window;
1809 e->action = ECORE_X_WINDOW_STATE_ACTION_ADD;
1810 e->state[0] = ECORE_X_WINDOW_STATE_ICONIFIED;
1811
1812 ecore_event_add(ECORE_X_EVENT_WINDOW_STATE_REQUEST, e, NULL, NULL);
1813 }
1814 else if ((xevent->xclient.message_type == ECORE_X_ATOM_NET_WM_DESKTOP)
1815 && (xevent->xclient.format == 32))
1816 {
1817 Ecore_X_Event_Desktop_Change *e;
1818
1819 e = calloc(1, sizeof(Ecore_X_Event_Desktop_Change));
1820 if (!e)
1821 return;
1822
1823 e->win = xevent->xclient.window;
1824 e->desk = xevent->xclient.data.l[0];
1825 e->source = xevent->xclient.data.l[1];
1826
1827 ecore_event_add(ECORE_X_EVENT_DESKTOP_CHANGE, e, NULL, NULL);
1828 }
1829 else if ((xevent->xclient.message_type ==
1830 ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS))
1831 {
1832 Ecore_X_Event_Frame_Extents_Request *e;
1833
1834 e = calloc(1, sizeof(Ecore_X_Event_Frame_Extents_Request));
1835 if (!e)
1836 return;
1837
1838 e->win = xevent->xclient.window;
1839
1840 ecore_event_add(ECORE_X_EVENT_FRAME_EXTENTS_REQUEST, e, NULL, NULL);
1841 }
1842 else if ((xevent->xclient.message_type == ECORE_X_ATOM_WM_PROTOCOLS)
1843 && ((Ecore_X_Atom)xevent->xclient.data.l[0] ==
1844 ECORE_X_ATOM_NET_WM_PING)
1845 && (xevent->xclient.format == 32))
1846 {
1847 Ecore_X_Event_Ping *e;
1848 Ecore_X_Window root = 0;
1849
1850 e = calloc(1, sizeof(Ecore_X_Event_Ping));
1851 if (!e)
1852 return;
1853
1854 e->win = xevent->xclient.window;
1855 e->time = xevent->xclient.data.l[1];
1856 e->event_win = xevent->xclient.data.l[2];
1857
1858 /* send a reply anyway - we are alive... eventloop at least */
1859 ecore_event_add(ECORE_X_EVENT_PING, e, NULL, NULL);
1860 if (ScreenCount(_ecore_x_disp) > 1)
1861 {
1862 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1863 root = ecore_x_window_root_get(e->win);
1864 }
1865 else
1866 root = DefaultRootWindow(_ecore_x_disp);
1867
1868 if (xevent->xclient.window != root)
1869 {
1870 xevent->xclient.window = root;
1871 XSendEvent(_ecore_x_disp, root, False,
1872 SubstructureRedirectMask | SubstructureNotifyMask,
1873 xevent);
1874 }
1875 }
1876 else if ((xevent->xclient.message_type ==
1877 ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN) &&
1878 (xevent->xclient.format == 8))
1879 _ecore_x_netwm_startup_info_begin(xevent->xclient.window,
1880 xevent->xclient.data.b);
1881 else if ((xevent->xclient.message_type == ECORE_X_ATOM_NET_STARTUP_INFO) &&
1882 (xevent->xclient.format == 8))
1883 _ecore_x_netwm_startup_info(xevent->xclient.window,
1884 xevent->xclient.data.b);
1885 else if ((xevent->xclient.message_type == 27777)
1886 && (xevent->xclient.data.l[0] == 0x7162534)
1887 && (xevent->xclient.format == 32)
1888 && (xevent->xclient.window == _ecore_x_private_win))
1889 {
1890 /* a grab sync marker */
1891 if (xevent->xclient.data.l[1] == 0x10000001)
1892 _ecore_x_window_grab_remove(xevent->xclient.data.l[2]);
1893 else if (xevent->xclient.data.l[1] == 0x10000002)
1894 _ecore_x_key_grab_remove(xevent->xclient.data.l[2]);
1895 }
1896 else
1897 {
1898 Ecore_X_Event_Client_Message *e;
1899 int i;
1900
1901 e = calloc(1, sizeof(Ecore_X_Event_Client_Message));
1902 if (!e)
1903 return;
1904
1905 e->win = xevent->xclient.window;
1906 e->message_type = xevent->xclient.message_type;
1907 e->format = xevent->xclient.format;
1908 for (i = 0; i < 5; i++)
1909 e->data.l[i] = xevent->xclient.data.l[i];
1910
1911 ecore_event_add(ECORE_X_EVENT_CLIENT_MESSAGE, e, NULL, NULL);
1912 }
1913}
1914
1915void
1916_ecore_x_event_handle_mapping_notify(XEvent *xevent)
1917{
1918 Ecore_X_Event_Mapping_Change *e;
1919
1920 _ecore_x_last_event_mouse_move = 0;
1921 XRefreshKeyboardMapping((XMappingEvent *)xevent);
1922 _ecore_x_modifiers_get();
1923 e = calloc(1, sizeof(Ecore_X_Event_Mapping_Change));
1924 if (!e) return;
1925 switch (xevent->xmapping.request)
1926 {
1927 case MappingModifier:
1928 e->type = ECORE_X_MAPPING_MODIFIER;
1929 break;
1930
1931 case MappingKeyboard:
1932 e->type = ECORE_X_MAPPING_KEYBOARD;
1933 break;
1934
1935 case MappingPointer:
1936 default:
1937 e->type = ECORE_X_MAPPING_MOUSE;
1938 break;
1939 }
1940 e->keycode = xevent->xmapping.first_keycode;
1941 e->num = xevent->xmapping.count;
1942 ecore_event_add(ECORE_X_EVENT_MAPPING_CHANGE, e, NULL, NULL);
1943}
1944
1945void
1946_ecore_x_event_handle_shape_change(XEvent *xevent)
1947{
1948 XShapeEvent *shape_event;
1949 Ecore_X_Event_Window_Shape *e;
1950
1951 _ecore_x_last_event_mouse_move = 0;
1952 shape_event = (XShapeEvent *)xevent;
1953 e = calloc(1, sizeof(Ecore_X_Event_Window_Shape));
1954 if (!e)
1955 return;
1956
1957 e->win = shape_event->window;
1958 e->time = shape_event->time;
1959 switch (shape_event->kind)
1960 {
1961 case ShapeBounding:
1962 e->type = ECORE_X_SHAPE_BOUNDING;
1963 break;
1964
1965 case ShapeClip:
1966 e->type = ECORE_X_SHAPE_CLIP;
1967 break;
1968
1969 case ShapeInput:
1970 e->type = ECORE_X_SHAPE_INPUT;
1971 break;
1972
1973 default:
1974 break;
1975 }
1976 e->x = shape_event->x;
1977 e->y = shape_event->y;
1978 e->w = shape_event->width;
1979 e->h = shape_event->height;
1980 e->shaped = shape_event->shaped;
1981 ecore_event_add(ECORE_X_EVENT_WINDOW_SHAPE, e, NULL, NULL);
1982}
1983
1984void
1985_ecore_x_event_handle_screensaver_notify(XEvent *xevent)
1986{
1987#ifdef ECORE_XSS
1988 XScreenSaverNotifyEvent *screensaver_event;
1989 Ecore_X_Event_Screensaver_Notify *e;
1990
1991 _ecore_x_last_event_mouse_move = 0;
1992 screensaver_event = (XScreenSaverNotifyEvent *)xevent;
1993 e = calloc(1, sizeof(Ecore_X_Event_Screensaver_Notify));
1994 if (!e)
1995 return;
1996
1997 e->win = screensaver_event->window;
1998 if (screensaver_event->state == ScreenSaverOn)
1999 e->on = EINA_TRUE;
2000 else
2001 e->on = EINA_FALSE;
2002
2003 e->time = screensaver_event->time;
2004 ecore_event_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, e, NULL, NULL);
2005#else /* ifdef ECORE_XSS */
2006 xevent = NULL;
2007#endif /* ifdef ECORE_XSS */
2008}
2009
2010void
2011_ecore_x_event_handle_sync_counter(XEvent *xevent)
2012{
2013 XSyncCounterNotifyEvent *sync_counter_event;
2014 Ecore_X_Event_Sync_Counter *e;
2015
2016 _ecore_x_last_event_mouse_move = 0;
2017 sync_counter_event = (XSyncCounterNotifyEvent *)xevent;
2018 e = calloc(1, sizeof(Ecore_X_Event_Sync_Counter));
2019 if (!e)
2020 return;
2021
2022 e->time = sync_counter_event->time;
2023 ecore_event_add(ECORE_X_EVENT_SYNC_COUNTER, e, NULL, NULL);
2024}
2025
2026void
2027_ecore_x_event_handle_sync_alarm(XEvent *xevent)
2028{
2029 XSyncAlarmNotifyEvent *sync_alarm_event;
2030 Ecore_X_Event_Sync_Alarm *e;
2031
2032 _ecore_x_last_event_mouse_move = 0;
2033 sync_alarm_event = (XSyncAlarmNotifyEvent *)xevent;
2034
2035 e = calloc(1, sizeof(Ecore_X_Event_Sync_Alarm));
2036 if (!e)
2037 return;
2038
2039 e->time = sync_alarm_event->time;
2040 e->alarm = sync_alarm_event->alarm;
2041 ecore_event_add(ECORE_X_EVENT_SYNC_ALARM, e, NULL, NULL);
2042}
2043
2044#ifdef ECORE_XRANDR
2045void
2046_ecore_x_event_handle_randr_change(XEvent *xevent)
2047{
2048 XRRScreenChangeNotifyEvent *randr_event;
2049 Ecore_X_Event_Screen_Change *e;
2050
2051 _ecore_x_last_event_mouse_move = 0;
2052 randr_event = (XRRScreenChangeNotifyEvent *)xevent;
2053 if (!XRRUpdateConfiguration(xevent))
2054 ERR("Can't update RR config!");
2055
2056 e = calloc(1, sizeof(Ecore_X_Event_Screen_Change));
2057 if (!e)
2058 return;
2059
2060 e->win = randr_event->window;
2061 e->root = randr_event->root;
2062 e->size.width = randr_event->width;
2063 e->size.height = randr_event->height;
2064 e->time = randr_event->timestamp;
2065 e->config_time = randr_event->config_timestamp;
2066 e->size.width_mm = randr_event->mwidth;
2067 e->size.height_mm = randr_event->mheight;
2068 e->orientation = randr_event->rotation;
2069 e->subpixel_order = randr_event->subpixel_order;
2070 ecore_event_add(ECORE_X_EVENT_SCREEN_CHANGE, e, NULL, NULL);
2071}
2072
2073static void
2074_ecore_x_event_handle_randr_notify_crtc_change(const XRRNotifyEvent *xevent)
2075{
2076 const XRRCrtcChangeNotifyEvent *randr_event;
2077 Ecore_X_Event_Randr_Crtc_Change *e;
2078
2079 randr_event = (const XRRCrtcChangeNotifyEvent *)xevent;
2080
2081 e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change));
2082 if (!e)
2083 return;
2084
2085 e->win = randr_event->window;
2086 e->crtc = randr_event->crtc;
2087 e->mode = randr_event->mode;
2088 e->orientation = randr_event->rotation;
2089 e->geo.x = randr_event->x;
2090 e->geo.y = randr_event->y;
2091 e->geo.w = randr_event->width;
2092 e->geo.h = randr_event->height;
2093 ecore_event_add(ECORE_X_EVENT_RANDR_CRTC_CHANGE, e, NULL, NULL);
2094}
2095
2096static void
2097_ecore_x_event_handle_randr_notify_output_change(const XRRNotifyEvent *xevent)
2098{
2099 const XRROutputChangeNotifyEvent *randr_event;
2100 Ecore_X_Event_Randr_Output_Change *e;
2101
2102 randr_event = (const XRROutputChangeNotifyEvent *)xevent;
2103
2104 e = calloc(1, sizeof(Ecore_X_Event_Randr_Output_Change));
2105 if (!e)
2106 return;
2107
2108 e->win = randr_event->window;
2109 e->output = randr_event->output;
2110 e->crtc = randr_event->crtc;
2111 e->mode = randr_event->mode;
2112 e->orientation = randr_event->rotation;
2113 e->connection = randr_event->connection;
2114 e->subpixel_order = randr_event->subpixel_order;
2115 ecore_event_add(ECORE_X_EVENT_RANDR_OUTPUT_CHANGE, e, NULL, NULL);
2116}
2117
2118static void
2119_ecore_x_event_handle_randr_notify_output_property(const XRRNotifyEvent *xevent)
2120{
2121 const XRROutputPropertyNotifyEvent *randr_event;
2122 Ecore_X_Event_Randr_Output_Property_Notify *e;
2123
2124 randr_event = (const XRROutputPropertyNotifyEvent *)xevent;
2125
2126 e = calloc(1, sizeof(Ecore_X_Event_Randr_Output_Property_Notify));
2127 if (!e)
2128 return;
2129
2130 e->win = randr_event->window;
2131 e->output = randr_event->output;
2132 e->property = randr_event->property;
2133 e->time = randr_event->timestamp;
2134 if (randr_event->state == PropertyNewValue)
2135 e->state = ECORE_X_RANDR_PROPERTY_CHANGE_ADD;
2136 else
2137 e->state = ECORE_X_RANDR_PROPERTY_CHANGE_DEL;
2138 ecore_event_add(ECORE_X_EVENT_RANDR_OUTPUT_PROPERTY_NOTIFY, e, NULL, NULL);
2139}
2140
2141void
2142_ecore_x_event_handle_randr_notify(XEvent *xevent)
2143{
2144 const XRRNotifyEvent *randr_event;
2145
2146 _ecore_x_last_event_mouse_move = 0;
2147 randr_event = (const XRRNotifyEvent *)xevent;
2148 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2149 switch (randr_event->subtype)
2150 {
2151 case RRNotify_CrtcChange:
2152 _ecore_x_event_handle_randr_notify_crtc_change(randr_event);
2153 break;
2154
2155 case RRNotify_OutputChange:
2156 _ecore_x_event_handle_randr_notify_output_change(randr_event);
2157 break;
2158
2159 case RRNotify_OutputProperty:
2160 _ecore_x_event_handle_randr_notify_output_property(randr_event);
2161 break;
2162
2163 default:
2164 ERR("Unknown XRandR RRNotify subtype: %d.",
2165 randr_event->subtype);
2166 break;
2167 }
2168}
2169
2170#endif /* ifdef ECORE_XRANDR */
2171
2172#ifdef ECORE_XFIXES
2173void
2174_ecore_x_event_handle_fixes_selection_notify(XEvent *event)
2175{
2176 XFixesSelectionNotifyEvent *notify_event =
2177 (XFixesSelectionNotifyEvent *)event;
2178 Ecore_X_Event_Fixes_Selection_Notify *e;
2179 Ecore_X_Atom sel;
2180
2181 _ecore_x_last_event_mouse_move = 0;
2182 /* Nothing here yet */
2183
2184 e = calloc(1, sizeof(*e));
2185 if (!e)
2186 return;
2187
2188 e->win = notify_event->window;
2189 e->owner = notify_event->owner;
2190 e->time = notify_event->timestamp;
2191 e->selection_time = notify_event->selection_timestamp;
2192 e->atom = sel = notify_event->selection;
2193 if (sel == ECORE_X_ATOM_SELECTION_PRIMARY)
2194 e->selection = ECORE_X_SELECTION_PRIMARY;
2195 else if (sel == ECORE_X_ATOM_SELECTION_SECONDARY)
2196 e->selection = ECORE_X_SELECTION_SECONDARY;
2197 else if (sel == ECORE_X_ATOM_SELECTION_CLIPBOARD)
2198 e->selection = ECORE_X_SELECTION_CLIPBOARD;
2199 else
2200 e->selection = ECORE_X_SELECTION_OTHER;
2201 e->reason = notify_event->subtype;
2202
2203 ecore_event_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY, e, NULL, NULL);
2204}
2205
2206#endif /* ifdef ECORE_XFIXES */
2207
2208#ifdef ECORE_XDAMAGE
2209void
2210_ecore_x_event_handle_damage_notify(XEvent *event)
2211{
2212 XDamageNotifyEvent *damage_event;
2213 Ecore_X_Event_Damage *e;
2214
2215 _ecore_x_last_event_mouse_move = 0;
2216 damage_event = (XDamageNotifyEvent *)event;
2217
2218 e = calloc(1, sizeof(Ecore_X_Event_Damage));
2219 if (!e)
2220 return;
2221
2222 e->level = damage_event->level;
2223 e->drawable = damage_event->drawable;
2224 e->damage = damage_event->damage;
2225 e->more = damage_event->more;
2226 e->time = damage_event->timestamp;
2227 e->area.x = damage_event->area.x;
2228 e->area.y = damage_event->area.y;
2229 e->area.width = damage_event->area.width;
2230 e->area.height = damage_event->area.height;
2231 e->geometry.x = damage_event->geometry.x;
2232 e->geometry.y = damage_event->geometry.y;
2233 e->geometry.width = damage_event->geometry.width;
2234 e->geometry.height = damage_event->geometry.height;
2235
2236 ecore_event_add(ECORE_X_EVENT_DAMAGE_NOTIFY, e, NULL, NULL);
2237}
2238
2239#endif /* ifdef ECORE_XDAMAGE */
2240
2241static void
2242_ecore_x_event_free_generic_event(void *data,
2243 void *ev)
2244{
2245#ifdef ECORE_XI2
2246 Ecore_X_Event_Generic *e = (Ecore_X_Event_Generic *)ev;
2247
2248 if (data)
2249 {
2250 if (e->data)
2251 XFreeEventData(_ecore_x_disp, (XGenericEventCookie *)data);
2252 free(data);
2253 }
2254 free(e);
2255#else
2256 return;
2257 data = NULL; ev = NULL;
2258#endif /* ifdef ECORE_XI2 */
2259}
2260
2261void
2262_ecore_x_event_handle_generic_event(XEvent *event)
2263{
2264#ifdef ECORE_XI2
2265 XGenericEvent *generic_event;
2266 Ecore_X_Event_Generic *e;
2267 XGenericEventCookie *data;
2268
2269 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2270 generic_event = (XGenericEvent *)event;
2271
2272 e = calloc(1, sizeof(Ecore_X_Event_Generic));
2273 if (!e)
2274 return;
2275
2276 if (XGetEventData(_ecore_x_disp, &(event->xcookie)))
2277 {
2278 e->cookie = event->xcookie.cookie;
2279 e->data = event->xcookie.data;
2280 }
2281 else
2282 {
2283 e->cookie = 0;
2284 e->data = NULL;
2285 }
2286
2287 e->extension = generic_event->extension;
2288 e->evtype = generic_event->evtype;
2289
2290 if (e->extension == _ecore_x_xi2_opcode)
2291 _ecore_x_input_handler(event);
2292
2293 data = malloc(sizeof(XGenericEventCookie));
2294 if (data) memcpy(data, &(event->xcookie), sizeof(XGenericEventCookie));
2295 ecore_event_add(ECORE_X_EVENT_GENERIC,
2296 e,
2297 _ecore_x_event_free_generic_event,
2298 data);
2299#else
2300 return;
2301 event = NULL;
2302#endif /* ifdef ECORE_XI2 */
2303}
2304
2305#ifdef ECORE_XGESTURE
2306void
2307_ecore_x_event_handle_gesture_notify_flick(XEvent *xevent)
2308{
2309 XGestureNotifyFlickEvent *xfe;
2310 Ecore_X_Event_Gesture_Notify_Flick *e;
2311
2312 _ecore_x_last_event_mouse_move = 0;
2313 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2314
2315 xfe = (XGestureNotifyFlickEvent *)xevent;
2316 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Flick));
2317 if (!e)
2318 return;
2319
2320 e->win = xfe->window;
2321 e->time = xfe->time;
2322 e->subtype = xfe->kind;
2323 e->num_fingers = xfe->num_finger;
2324 e->distance = xfe->distance;
2325 e->duration = xfe->duration;
2326 e->direction = xfe->direction;
2327 e->angle = XFixedToDouble(xfe->angle);
2328
2329 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_FLICK, e, NULL, NULL);
2330}
2331
2332void
2333_ecore_x_event_handle_gesture_notify_pan(XEvent *xevent)
2334{
2335 XGestureNotifyPanEvent *xpe;
2336 Ecore_X_Event_Gesture_Notify_Pan *e;
2337
2338 _ecore_x_last_event_mouse_move = 0;
2339 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2340
2341 xpe = (XGestureNotifyPanEvent *)xevent;
2342 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Pan));
2343 if (!e)
2344 return;
2345
2346 e->win = xpe->window;
2347 e->time = xpe->time;
2348 e->subtype = xpe->kind;
2349 e->num_fingers = xpe->num_finger;
2350 e->dx = xpe->dx;
2351 e->dy = xpe->dy;
2352 e->distance = xpe->distance;
2353 e->duration = xpe->duration;
2354 e->direction = xpe->direction;
2355
2356 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PAN, e, NULL, NULL);
2357}
2358
2359void
2360_ecore_x_event_handle_gesture_notify_pinchrotation(XEvent *xevent)
2361{
2362 XGestureNotifyPinchRotationEvent *xpre;
2363 Ecore_X_Event_Gesture_Notify_PinchRotation *e;
2364
2365 _ecore_x_last_event_mouse_move = 0;
2366 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2367
2368 xpre = (XGestureNotifyPinchRotationEvent *)xevent;
2369 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_PinchRotation));
2370 if (!e)
2371 return;
2372
2373 e->win = xpre->window;
2374 e->time = xpre->time;
2375 e->subtype = xpre->kind;
2376 e->num_fingers = xpre->num_finger;
2377 e->distance = xpre->distance;
2378 e->cx = xpre->cx;
2379 e->cy = xpre->cy;
2380 e->zoom = XFixedToDouble(xpre->zoom);
2381 e->angle = XFixedToDouble(xpre->angle);
2382
2383 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION, e, NULL, NULL);
2384}
2385
2386void
2387_ecore_x_event_handle_gesture_notify_tap(XEvent *xevent)
2388{
2389 XGestureNotifyTapEvent *xte;
2390 Ecore_X_Event_Gesture_Notify_Tap *e;
2391
2392 _ecore_x_last_event_mouse_move = 0;
2393 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2394
2395 xte = (XGestureNotifyTapEvent *)xevent;
2396 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Tap));
2397 if (!e)
2398 return;
2399
2400 e->win = xte->window;
2401 e->time = xte->time;
2402 e->subtype = xte->kind;
2403 e->num_fingers = xte->num_finger;
2404 e->cx = xte->cx;
2405 e->cy = xte->cy;
2406 e->tap_repeat = xte->tap_repeat;
2407 e->interval = xte->interval;
2408
2409 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAP, e, NULL, NULL);
2410}
2411
2412void
2413_ecore_x_event_handle_gesture_notify_tapnhold(XEvent *xevent)
2414{
2415 XGestureNotifyTapNHoldEvent *xthe;
2416 Ecore_X_Event_Gesture_Notify_TapNHold *e;
2417
2418 _ecore_x_last_event_mouse_move = 0;
2419 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2420
2421 xthe = (XGestureNotifyTapNHoldEvent *)xevent;
2422 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_TapNHold));
2423 if (!e)
2424 return;
2425
2426 e->win = xthe->window;
2427 e->time = xthe->time;
2428 e->subtype = xthe->kind;
2429 e->num_fingers = xthe->num_finger;
2430 e->cx = xthe->cx;
2431 e->cy = xthe->cy;
2432 e->interval = xthe->interval;
2433 e->hold_time = xthe->holdtime;
2434
2435 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD, e, NULL, NULL);
2436}
2437
2438void
2439_ecore_x_event_handle_gesture_notify_hold(XEvent *xevent)
2440{
2441 XGestureNotifyHoldEvent *xhe;
2442 Ecore_X_Event_Gesture_Notify_Hold *e;
2443
2444 _ecore_x_last_event_mouse_move = 0;
2445 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2446
2447 xhe = (XGestureNotifyHoldEvent *)xevent;
2448 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Hold));
2449 if (!e)
2450 return;
2451
2452 e->win = xhe->window;
2453 e->time = xhe->time;
2454 e->subtype = xhe->kind;
2455 e->num_fingers = xhe->num_finger;
2456 e->cx = xhe->cx;
2457 e->cy = xhe->cy;
2458 e->hold_time = xhe->holdtime;
2459
2460 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_HOLD, e, NULL, NULL);
2461}
2462
2463void
2464_ecore_x_event_handle_gesture_notify_group(XEvent *xevent)
2465{
2466 XGestureNotifyGroupEvent *xge;
2467 Ecore_X_Event_Gesture_Notify_Group *e;
2468
2469 _ecore_x_last_event_mouse_move = 0;
2470 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2471
2472 xge = (XGestureNotifyGroupEvent *)xevent;
2473 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Group));
2474 if (!e)
2475 return;
2476
2477 e->win = xge->window;
2478 e->time = xge->time;
2479 e->subtype = xge->kind;
2480 e->num_groups = xge->num_group;
2481 e->group_id = xge->groupid;
2482
2483 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_GROUP, e, NULL, NULL);
2484}
2485
2486#endif /* ifdef ECORE_XGESTURE */
2487
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_fixes.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_fixes.c
deleted file mode 100644
index da0a6c3..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_fixes.c
+++ /dev/null
@@ -1,365 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#include "ecore_x_private.h"
8#include "Ecore_X.h"
9
10static int _fixes_available;
11#ifdef ECORE_XFIXES
12static int _fixes_major, _fixes_minor;
13#endif /* ifdef ECORE_XFIXES */
14
15void
16_ecore_x_fixes_init(void)
17{
18#ifdef ECORE_XFIXES
19 _fixes_major = 3;
20 _fixes_minor = 0;
21
22 LOGFN(__FILE__, __LINE__, __FUNCTION__);
23 if (XFixesQueryVersion(_ecore_x_disp, &_fixes_major, &_fixes_minor))
24 {
25 _fixes_available = 1;
26
27 ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = ecore_event_type_new();
28 }
29 else
30 _fixes_available = 0;
31
32#else /* ifdef ECORE_XFIXES */
33 _fixes_available = 0;
34#endif /* ifdef ECORE_XFIXES */
35}
36
37#ifdef ECORE_XFIXES
38/* I don't know what to call this function. */
39static XRectangle *
40_ecore_x_rectangle_ecore_to_x(Ecore_X_Rectangle *rects,
41 int num)
42{
43 XRectangle *xrect;
44 int i;
45
46 if (num == 0)
47 return NULL;
48
49 xrect = malloc(sizeof(XRectangle) * num);
50 if (!xrect)
51 return NULL;
52
53 for (i = 0; i < num; i++)
54 {
55 xrect[i].x = rects[i].x;
56 xrect[i].y = rects[i].y;
57 xrect[i].width = rects[i].width;
58 xrect[i].height = rects[i].height;
59 }
60 return xrect;
61}
62
63static Ecore_X_Rectangle *
64_ecore_x_rectangle_x_to_ecore(XRectangle *xrect,
65 int num)
66{
67 Ecore_X_Rectangle *rects;
68 int i;
69
70 if (num == 0)
71 return NULL;
72
73 rects = malloc(sizeof(Ecore_X_Rectangle) * num);
74 if (!rects)
75 return NULL;
76
77 for (i = 0; i < num; i++)
78 {
79 rects[i].x = xrect[i].x;
80 rects[i].y = xrect[i].y;
81 rects[i].width = xrect[i].width;
82 rects[i].height = xrect[i].height;
83 }
84 return rects;
85}
86
87#endif /* ifdef ECORE_XFIXES */
88
89EAPI Eina_Bool
90ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection)
91{
92#ifdef ECORE_XFIXES
93 if (_fixes_available)
94 {
95 XFixesSelectSelectionInput (_ecore_x_disp,
96 DefaultRootWindow(_ecore_x_disp),
97 selection,
98 XFixesSetSelectionOwnerNotifyMask |
99 XFixesSelectionWindowDestroyNotifyMask |
100 XFixesSelectionClientCloseNotifyMask);
101 return EINA_TRUE;
102 }
103#endif
104 return EINA_FALSE;
105}
106
107EAPI Ecore_X_Region
108ecore_x_region_new(Ecore_X_Rectangle *rects,
109 int num)
110{
111#ifdef ECORE_XFIXES
112 Ecore_X_Region region;
113 XRectangle *xrect;
114
115 LOGFN(__FILE__, __LINE__, __FUNCTION__);
116 xrect = _ecore_x_rectangle_ecore_to_x(rects, num);
117 region = XFixesCreateRegion(_ecore_x_disp, xrect, num);
118 free(xrect);
119 return region;
120#else /* ifdef ECORE_XFIXES */
121 return 0;
122#endif /* ifdef ECORE_XFIXES */
123}
124
125EAPI Ecore_X_Region
126ecore_x_region_new_from_bitmap(Ecore_X_Pixmap bitmap)
127{
128#ifdef ECORE_XFIXES
129 Ecore_X_Region region;
130
131 LOGFN(__FILE__, __LINE__, __FUNCTION__);
132 region = XFixesCreateRegionFromBitmap(_ecore_x_disp, bitmap);
133 return region;
134#else /* ifdef ECORE_XFIXES */
135 return 0;
136#endif /* ifdef ECORE_XFIXES */
137}
138
139EAPI Ecore_X_Region
140ecore_x_region_new_from_window(Ecore_X_Window win,
141 Ecore_X_Region_Type type)
142{
143#ifdef ECORE_XFIXES
144 Ecore_X_Region region;
145
146 LOGFN(__FILE__, __LINE__, __FUNCTION__);
147 region = XFixesCreateRegionFromWindow(_ecore_x_disp, win, type);
148 return region;
149#else /* ifdef ECORE_XFIXES */
150 return 0;
151#endif /* ifdef ECORE_XFIXES */
152}
153
154EAPI Ecore_X_Region
155ecore_x_region_new_from_gc(Ecore_X_GC gc)
156{
157#ifdef ECORE_XFIXES
158 Ecore_X_Region region;
159
160 LOGFN(__FILE__, __LINE__, __FUNCTION__);
161 region = XFixesCreateRegionFromGC(_ecore_x_disp, gc);
162 return region;
163#else /* ifdef ECORE_XFIXES */
164 return 0;
165#endif /* ifdef ECORE_XFIXES */
166}
167
168EAPI Ecore_X_Region
169ecore_x_region_new_from_picture(Ecore_X_Picture picture)
170{
171#ifdef ECORE_XFIXES
172 Ecore_X_Region region;
173
174 LOGFN(__FILE__, __LINE__, __FUNCTION__);
175 region = XFixesCreateRegionFromPicture(_ecore_x_disp, picture);
176 return region;
177#else /* ifdef ECORE_XFIXES */
178 return 0;
179#endif /* ifdef ECORE_XFIXES */
180}
181
182EAPI void
183ecore_x_region_free(Ecore_X_Region region)
184{
185#ifdef ECORE_XFIXES
186 LOGFN(__FILE__, __LINE__, __FUNCTION__);
187 XFixesDestroyRegion(_ecore_x_disp, region);
188#endif /* ifdef ECORE_XFIXES */
189}
190
191EAPI void
192ecore_x_region_set(Ecore_X_Region region,
193 Ecore_X_Rectangle *rects,
194 int num)
195{
196#ifdef ECORE_XFIXES
197 XRectangle *xrect = _ecore_x_rectangle_ecore_to_x(rects, num);
198 LOGFN(__FILE__, __LINE__, __FUNCTION__);
199 XFixesSetRegion(_ecore_x_disp, region, xrect, num);
200#endif /* ifdef ECORE_XFIXES */
201}
202
203EAPI void
204ecore_x_region_copy(Ecore_X_Region dest,
205 Ecore_X_Region source)
206{
207#ifdef ECORE_XFIXES
208 LOGFN(__FILE__, __LINE__, __FUNCTION__);
209 XFixesCopyRegion(_ecore_x_disp, dest, source);
210#endif /* ifdef ECORE_XFIXES */
211}
212
213EAPI void
214ecore_x_region_combine(Ecore_X_Region dest,
215 Ecore_X_Region source1,
216 Ecore_X_Region source2)
217{
218#ifdef ECORE_XFIXES
219 LOGFN(__FILE__, __LINE__, __FUNCTION__);
220 XFixesUnionRegion(_ecore_x_disp, dest, source1, source2);
221#endif /* ifdef ECORE_XFIXES */
222}
223
224EAPI void
225ecore_x_region_intersect(Ecore_X_Region dest,
226 Ecore_X_Region source1,
227 Ecore_X_Region source2)
228{
229#ifdef ECORE_XFIXES
230 LOGFN(__FILE__, __LINE__, __FUNCTION__);
231 XFixesIntersectRegion(_ecore_x_disp, dest, source1, source2);
232#endif /* ifdef ECORE_XFIXES */
233}
234
235EAPI void
236ecore_x_region_subtract(Ecore_X_Region dest,
237 Ecore_X_Region source1,
238 Ecore_X_Region source2)
239{
240#ifdef ECORE_XFIXES
241 LOGFN(__FILE__, __LINE__, __FUNCTION__);
242 XFixesSubtractRegion(_ecore_x_disp, dest, source1, source2);
243#endif /* ifdef ECORE_XFIXES */
244}
245
246EAPI void
247ecore_x_region_invert(Ecore_X_Region dest,
248 Ecore_X_Rectangle *bounds,
249 Ecore_X_Region source)
250{
251#ifdef ECORE_XFIXES
252 XRectangle *xbound;
253 int num = 0;
254
255 LOGFN(__FILE__, __LINE__, __FUNCTION__);
256 while (bounds + num)
257 num++;
258 xbound = _ecore_x_rectangle_ecore_to_x(bounds, num);
259
260 XFixesInvertRegion(_ecore_x_disp, dest, xbound, source);
261#endif /* ifdef ECORE_XFIXES */
262}
263
264EAPI void
265ecore_x_region_translate(Ecore_X_Region region,
266 int dx,
267 int dy)
268{
269#ifdef ECORE_XFIXES
270 LOGFN(__FILE__, __LINE__, __FUNCTION__);
271 XFixesTranslateRegion(_ecore_x_disp, region, dx, dy);
272#endif /* ifdef ECORE_XFIXES */
273}
274
275EAPI void
276ecore_x_region_extents(Ecore_X_Region dest,
277 Ecore_X_Region source)
278{
279#ifdef ECORE_XFIXES
280 LOGFN(__FILE__, __LINE__, __FUNCTION__);
281 XFixesRegionExtents(_ecore_x_disp, dest, source);
282#endif /* ifdef ECORE_XFIXES */
283}
284
285EAPI Ecore_X_Rectangle *
286ecore_x_region_fetch(Ecore_X_Region region,
287 int *num,
288 Ecore_X_Rectangle *bounds){
289#ifdef ECORE_XFIXES
290 Ecore_X_Rectangle *rects;
291 XRectangle *xrect, xbound;
292
293 LOGFN(__FILE__, __LINE__, __FUNCTION__);
294 xrect = XFixesFetchRegionAndBounds(_ecore_x_disp, region, num, &xbound);
295 rects = _ecore_x_rectangle_x_to_ecore(xrect, *num);
296 (*bounds).x = xbound.x;
297 (*bounds).y = xbound.y;
298 (*bounds).width = xbound.width;
299 (*bounds).height = xbound.height;
300 return rects;
301#else /* ifdef ECORE_XFIXES */
302 return NULL;
303#endif /* ifdef ECORE_XFIXES */
304}
305
306EAPI void
307ecore_x_region_expand(Ecore_X_Region dest,
308 Ecore_X_Region source,
309 unsigned int left,
310 unsigned int right,
311 unsigned int top,
312 unsigned int bottom)
313{
314#ifdef ECORE_XFIXES
315 LOGFN(__FILE__, __LINE__, __FUNCTION__);
316 XFixesExpandRegion(_ecore_x_disp, dest, source, left, right, top, bottom);
317#endif /* ifdef ECORE_XFIXES */
318}
319
320EAPI void
321ecore_x_region_gc_clip_set(Ecore_X_Region region,
322 Ecore_X_GC gc,
323 int x_origin,
324 int y_origin)
325{
326#ifdef ECORE_XFIXES
327 LOGFN(__FILE__, __LINE__, __FUNCTION__);
328 XFixesSetGCClipRegion(_ecore_x_disp, gc, x_origin, y_origin, region);
329#endif /* ifdef ECORE_XFIXES */
330}
331
332EAPI void
333ecore_x_region_window_shape_set(Ecore_X_Region region,
334 Ecore_X_Window win,
335 Ecore_X_Shape_Type type,
336 int x_offset,
337 int y_offset)
338{
339#ifdef ECORE_XFIXES
340 LOGFN(__FILE__, __LINE__, __FUNCTION__);
341 XFixesSetWindowShapeRegion(_ecore_x_disp,
342 win,
343 type,
344 x_offset,
345 y_offset,
346 region);
347#endif /* ifdef ECORE_XFIXES */
348}
349
350EAPI void
351ecore_x_region_picture_clip_set(Ecore_X_Region region,
352 Ecore_X_Picture picture,
353 int x_origin,
354 int y_origin)
355{
356#ifdef ECORE_XFIXES
357 LOGFN(__FILE__, __LINE__, __FUNCTION__);
358 XFixesSetPictureClipRegion(_ecore_x_disp,
359 picture,
360 x_origin,
361 y_origin,
362 region);
363#endif /* ifdef ECORE_XFIXES */
364}
365
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gc.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gc.c
deleted file mode 100644
index 5396366..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gc.c
+++ /dev/null
@@ -1,171 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <string.h>
6
7#include "Ecore.h"
8#include "ecore_x_private.h"
9#include "Ecore_X.h"
10
11/**
12 * Creates a new default graphics context associated with the given
13 * drawable.
14 * @param draw Drawable to create graphics context with. If @c 0 is
15 * given instead, the default root window is used.
16 * @param value_mask Bitmask values.
17 * @param value_list List of values. The order of values must be the
18 * same than the corresponding bitmaks.
19 * @return The new default graphics context.
20 */
21EAPI Ecore_X_GC
22ecore_x_gc_new(Ecore_X_Drawable draw,
23 Ecore_X_GC_Value_Mask value_mask,
24 const unsigned int *value_list)
25{
26 XGCValues gcv;
27 int mask;
28 int idx;
29 int i;
30
31 LOGFN(__FILE__, __LINE__, __FUNCTION__);
32 if (!draw)
33 draw = DefaultRootWindow(_ecore_x_disp);
34
35 memset(&gcv, 0, sizeof (gcv));
36
37 for (i = 0, idx = 0, mask = 1; i <= 22; i++, mask <<= 1)
38 {
39 switch (mask & value_mask)
40 {
41 case ECORE_X_GC_VALUE_MASK_FUNCTION:
42 gcv.function = value_list[idx];
43 idx++;
44 break;
45
46 case ECORE_X_GC_VALUE_MASK_PLANE_MASK:
47 gcv.plane_mask = value_list[idx];
48 idx++;
49 break;
50
51 case ECORE_X_GC_VALUE_MASK_FOREGROUND:
52 gcv.foreground = value_list[idx];
53 idx++;
54 break;
55
56 case ECORE_X_GC_VALUE_MASK_BACKGROUND:
57 gcv.background = value_list[idx];
58 idx++;
59 break;
60
61 case ECORE_X_GC_VALUE_MASK_LINE_WIDTH:
62 gcv.line_width = value_list[idx];
63 idx++;
64 break;
65
66 case ECORE_X_GC_VALUE_MASK_LINE_STYLE:
67 gcv.line_style = value_list[idx];
68 idx++;
69 break;
70
71 case ECORE_X_GC_VALUE_MASK_CAP_STYLE:
72 gcv.cap_style = value_list[idx];
73 idx++;
74 break;
75
76 case ECORE_X_GC_VALUE_MASK_JOIN_STYLE:
77 gcv.join_style = value_list[idx];
78 idx++;
79 break;
80
81 case ECORE_X_GC_VALUE_MASK_FILL_STYLE:
82 gcv.fill_style = value_list[idx];
83 idx++;
84 break;
85
86 case ECORE_X_GC_VALUE_MASK_FILL_RULE:
87 gcv.fill_rule = value_list[idx];
88 idx++;
89 break;
90
91 case ECORE_X_GC_VALUE_MASK_TILE:
92 gcv.tile = value_list[idx];
93 idx++;
94 break;
95
96 case ECORE_X_GC_VALUE_MASK_STIPPLE:
97 gcv.stipple = value_list[idx];
98 idx++;
99 break;
100
101 case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X:
102 gcv.ts_x_origin = value_list[idx];
103 idx++;
104 break;
105
106 case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y:
107 gcv.ts_y_origin = value_list[idx];
108 idx++;
109 break;
110
111 case ECORE_X_GC_VALUE_MASK_FONT:
112 gcv.font = value_list[idx];
113 idx++;
114 break;
115
116 case ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE:
117 gcv.subwindow_mode = value_list[idx];
118 idx++;
119 break;
120
121 case ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES:
122 gcv.graphics_exposures = value_list[idx];
123 idx++;
124 break;
125
126 case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X:
127 gcv.clip_x_origin = value_list[idx];
128 idx++;
129 break;
130
131 case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y:
132 gcv.clip_y_origin = value_list[idx];
133 idx++;
134 break;
135
136 case ECORE_X_GC_VALUE_MASK_CLIP_MASK:
137 gcv.clip_mask = value_list[idx];
138 idx++;
139 break;
140
141 case ECORE_X_GC_VALUE_MASK_DASH_OFFSET:
142 gcv.dash_offset = value_list[idx];
143 idx++;
144 break;
145
146 case ECORE_X_GC_VALUE_MASK_DASH_LIST:
147 gcv.dashes = value_list[idx];
148 idx++;
149 break;
150
151 case ECORE_X_GC_VALUE_MASK_ARC_MODE:
152 gcv.arc_mode = value_list[idx];
153 idx++;
154 break;
155 }
156 }
157
158 return XCreateGC(_ecore_x_disp, draw, value_mask, &gcv);
159}
160
161/**
162 * Deletes and frees the given graphics context.
163 * @param gc The given graphics context.
164 */
165EAPI void
166ecore_x_gc_free(Ecore_X_GC gc)
167{
168 LOGFN(__FILE__, __LINE__, __FUNCTION__);
169 XFreeGC(_ecore_x_disp, gc);
170}
171
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gesture.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gesture.c
deleted file mode 100644
index e89421b..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_gesture.c
+++ /dev/null
@@ -1,136 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6
7static Eina_Bool _gesture_available = EINA_FALSE;
8
9#ifdef ECORE_XGESTURE
10static int _gesture_major, _gesture_minor, _gesture_patch;
11int _gesture_version;
12#endif /* ifdef ECORE_XGESTURE */
13
14void
15_ecore_x_gesture_init(void)
16{
17#ifdef ECORE_XGESTURE
18 _gesture_major = 0;
19 _gesture_minor = 0;
20 _gesture_patch = 0;
21 _gesture_version = 0;
22
23 if (XGestureQueryVersion(_ecore_x_disp, &_gesture_major, &_gesture_minor, &_gesture_patch))
24 {
25 _gesture_version = (_gesture_major << 16) | _gesture_minor;
26 _gesture_available = EINA_TRUE;
27 }
28 else
29 _gesture_available = EINA_FALSE;
30#else /* ifdef ECORE_XGESTURE */
31 _gesture_available = EINA_FALSE;
32#endif /* ifdef ECORE_XGESTURE */
33}
34
35/*
36 * @brief query whether gesture is available or not
37 * @return EINA_TRUE, if extension is available, else EINA_FALSE
38 */
39EAPI Eina_Bool
40ecore_x_gesture_supported(void)
41{
42 return _gesture_available;
43}
44
45EAPI Eina_Bool
46ecore_x_gesture_events_select(Ecore_X_Window win,
47 Ecore_X_Gesture_Event_Mask mask)
48{
49#ifdef ECORE_XGESTURE
50 if (!_gesture_available)
51 return EINA_FALSE;
52
53 LOGFN(__FILE__, __LINE__, __FUNCTION__);
54 XGestureSelectEvents(_ecore_x_disp, win, mask);
55
56 return EINA_TRUE;
57#else /* ifdef ECORE_XGESTURE */
58 return EINA_FALSE;
59 win = 0;
60 mask = 0;
61#endif /* ifdef ECORE_XGESTURE */
62}
63
64EAPI Ecore_X_Gesture_Event_Mask
65ecore_x_gesture_events_selected_get(Ecore_X_Window win)
66{
67#ifdef ECORE_XGESTURE
68 Ecore_X_Gesture_Event_Mask mask;
69
70 if (!_gesture_available)
71 return ECORE_X_GESTURE_EVENT_MASK_NONE;
72
73 LOGFN(__FILE__, __LINE__, __FUNCTION__);
74 if (GestureSuccess != XGestureGetSelectedEvents(_ecore_x_disp, win, &mask))
75 {
76 mask = ECORE_X_GESTURE_EVENT_MASK_NONE;
77 return mask;
78 }
79
80 return mask;
81#else /* ifdef ECORE_XGESTURE */
82 return ECORE_X_GESTURE_EVENT_MASK_NONE;
83 win = 0;
84#endif /* ifdef ECORE_XGESTURE */
85}
86
87EAPI Eina_Bool
88ecore_x_gesture_event_grab(Ecore_X_Window win,
89 Ecore_X_Gesture_Event_Type type,
90 int num_fingers)
91{
92#ifdef ECORE_XGESTURE
93 if (!_gesture_available)
94 return EINA_FALSE;
95
96 LOGFN(__FILE__, __LINE__, __FUNCTION__);
97 if (GestureGrabSuccess != XGestureGrabEvent(_ecore_x_disp, win, type, num_fingers, CurrentTime))
98 {
99 return EINA_FALSE;
100 }
101
102 return EINA_TRUE;
103#else /* ifdef ECORE_XGESTURE */
104 return EINA_FALSE;
105 win = 0;
106 type = 0;
107 num_fingers = 0;
108#endif /* ifdef ECORE_XGESTURE */
109}
110
111EAPI Eina_Bool
112ecore_x_gesture_event_ungrab(Ecore_X_Window win,
113 Ecore_X_Gesture_Event_Type type,
114 int num_fingers)
115{
116#ifdef ECORE_XGESTURE
117 Ecore_X_Gesture_Event_Mask mask;
118
119 if (!_gesture_available)
120 return EINA_FALSE;
121
122 LOGFN(__FILE__, __LINE__, __FUNCTION__);
123 if (GestureUngrabSuccess != XGestureUngrabEvent(_ecore_x_disp, win, type, num_fingers, CurrentTime))
124 {
125 return EINA_FALSE;
126 }
127
128 return EINA_TRUE;
129#else /* ifdef ECORE_XGESTURE */
130 return EINA_FALSE;
131 win = 0;
132 type = 0;
133 num_fingers = 0;
134#endif /* ifdef ECORE_XGESTURE */
135}
136
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_icccm.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_icccm.c
deleted file mode 100644
index 8d6ea1f..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_icccm.c
+++ /dev/null
@@ -1,1214 +0,0 @@
1/*
2 * Various ICCCM related functions.
3 *
4 * This is ALL the code involving anything ICCCM related. for both WM and
5 * client.
6 */
7
8#ifdef HAVE_CONFIG_H
9# include <config.h>
10#endif /* ifdef HAVE_CONFIG_H */
11
12#include <stdlib.h>
13#include <string.h>
14
15#include "Ecore.h"
16#include "ecore_x_private.h"
17#include "Ecore_X.h"
18#include "Ecore_X_Atoms.h"
19
20EAPI void
21ecore_x_icccm_init(void)
22{
23 LOGFN(__FILE__, __LINE__, __FUNCTION__);
24}
25
26EAPI void
27ecore_x_icccm_state_set(Ecore_X_Window win,
28 Ecore_X_Window_State_Hint state)
29{
30 unsigned long c[2];
31
32 LOGFN(__FILE__, __LINE__, __FUNCTION__);
33 if (state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
34 c[0] = WithdrawnState;
35 else if (state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
36 c[0] = NormalState;
37 else if (state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
38 c[0] = IconicState;
39
40 c[1] = None;
41 XChangeProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_STATE,
42 ECORE_X_ATOM_WM_STATE, 32, PropModeReplace,
43 (unsigned char *)c, 2);
44}
45
46EAPI Ecore_X_Window_State_Hint
47ecore_x_icccm_state_get(Ecore_X_Window win)
48{
49 unsigned char *prop_ret = NULL;
50 Atom type_ret;
51 unsigned long bytes_after, num_ret;
52 int format_ret;
53 Ecore_X_Window_State_Hint hint;
54
55 LOGFN(__FILE__, __LINE__, __FUNCTION__);
56 hint = ECORE_X_WINDOW_STATE_HINT_NONE;
57 XGetWindowProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_STATE,
58 0, 0x7fffffff, False, ECORE_X_ATOM_WM_STATE,
59 &type_ret, &format_ret, &num_ret, &bytes_after,
60 &prop_ret);
61 if ((prop_ret) && (num_ret == 2))
62 {
63 if (prop_ret[0] == WithdrawnState)
64 hint = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
65 else if (prop_ret[0] == NormalState)
66 hint = ECORE_X_WINDOW_STATE_HINT_NORMAL;
67 else if (prop_ret[0] == IconicState)
68 hint = ECORE_X_WINDOW_STATE_HINT_ICONIC;
69 }
70
71 if (prop_ret)
72 XFree(prop_ret);
73
74 return hint;
75}
76
77EAPI void
78ecore_x_icccm_delete_window_send(Ecore_X_Window win,
79 Ecore_X_Time t)
80{
81 LOGFN(__FILE__, __LINE__, __FUNCTION__);
82 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
83 ECORE_X_EVENT_MASK_NONE,
84 ECORE_X_ATOM_WM_DELETE_WINDOW,
85 t, 0, 0, 0);
86}
87
88EAPI void
89ecore_x_icccm_take_focus_send(Ecore_X_Window win,
90 Ecore_X_Time t)
91{
92 LOGFN(__FILE__, __LINE__, __FUNCTION__);
93 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
94 ECORE_X_EVENT_MASK_NONE,
95 ECORE_X_ATOM_WM_TAKE_FOCUS,
96 t, 0, 0, 0);
97}
98
99EAPI void
100ecore_x_icccm_save_yourself_send(Ecore_X_Window win,
101 Ecore_X_Time t)
102{
103 LOGFN(__FILE__, __LINE__, __FUNCTION__);
104 ecore_x_client_message32_send(win, ECORE_X_ATOM_WM_PROTOCOLS,
105 ECORE_X_EVENT_MASK_NONE,
106 ECORE_X_ATOM_WM_SAVE_YOURSELF,
107 t, 0, 0, 0);
108}
109
110EAPI void
111ecore_x_icccm_move_resize_send(Ecore_X_Window win,
112 int x,
113 int y,
114 int w,
115 int h)
116{
117 XEvent ev;
118
119 LOGFN(__FILE__, __LINE__, __FUNCTION__);
120 ev.type = ConfigureNotify;
121 ev.xconfigure.display = _ecore_x_disp;
122 ev.xconfigure.event = win;
123 ev.xconfigure.window = win;
124 ev.xconfigure.x = x;
125 ev.xconfigure.y = y;
126 ev.xconfigure.width = w;
127 ev.xconfigure.height = h;
128 ev.xconfigure.border_width = 0;
129 ev.xconfigure.above = None;
130 ev.xconfigure.override_redirect = False;
131 XSendEvent(_ecore_x_disp, win, False, StructureNotifyMask, &ev);
132}
133
134EAPI void
135ecore_x_icccm_hints_set(Ecore_X_Window win,
136 Eina_Bool accepts_focus,
137 Ecore_X_Window_State_Hint initial_state,
138 Ecore_X_Pixmap icon_pixmap,
139 Ecore_X_Pixmap icon_mask,
140 Ecore_X_Window icon_window,
141 Ecore_X_Window window_group,
142 Eina_Bool is_urgent)
143{
144 XWMHints *hints;
145
146 hints = XAllocWMHints();
147 if (!hints)
148 return;
149
150 LOGFN(__FILE__, __LINE__, __FUNCTION__);
151 hints->flags = InputHint | StateHint;
152 hints->input = accepts_focus;
153 if (initial_state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
154 hints->initial_state = WithdrawnState;
155 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
156 hints->initial_state = NormalState;
157 else if (initial_state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
158 hints->initial_state = IconicState;
159
160 if (icon_pixmap != 0)
161 {
162 hints->icon_pixmap = icon_pixmap;
163 hints->flags |= IconPixmapHint;
164 }
165
166 if (icon_mask != 0)
167 {
168 hints->icon_mask = icon_mask;
169 hints->flags |= IconMaskHint;
170 }
171
172 if (icon_window != 0)
173 {
174 hints->icon_window = icon_window;
175 hints->flags |= IconWindowHint;
176 }
177
178 if (window_group != 0)
179 {
180 hints->window_group = window_group;
181 hints->flags |= WindowGroupHint;
182 }
183
184 if (is_urgent)
185 hints->flags |= XUrgencyHint;
186
187 XSetWMHints(_ecore_x_disp, win, hints);
188 XFree(hints);
189}
190
191EAPI Eina_Bool
192ecore_x_icccm_hints_get(Ecore_X_Window win,
193 Eina_Bool *accepts_focus,
194 Ecore_X_Window_State_Hint *initial_state,
195 Ecore_X_Pixmap *icon_pixmap,
196 Ecore_X_Pixmap *icon_mask,
197 Ecore_X_Window *icon_window,
198 Ecore_X_Window *window_group,
199 Eina_Bool *is_urgent)
200{
201 XWMHints *hints;
202
203 LOGFN(__FILE__, __LINE__, __FUNCTION__);
204 if (accepts_focus)
205 *accepts_focus = EINA_TRUE;
206
207 if (initial_state)
208 *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
209
210 if (icon_pixmap)
211 *icon_pixmap = 0;
212
213 if (icon_mask)
214 *icon_mask = 0;
215
216 if (icon_window)
217 *icon_window = 0;
218
219 if (window_group)
220 *window_group = 0;
221
222 if (is_urgent)
223 *is_urgent = EINA_FALSE;
224
225 hints = XGetWMHints(_ecore_x_disp, win);
226 if (hints)
227 {
228 if ((hints->flags & InputHint) && (accepts_focus))
229 {
230 if (hints->input)
231 *accepts_focus = EINA_TRUE;
232 else
233 *accepts_focus = EINA_FALSE;
234 }
235
236 if ((hints->flags & StateHint) && (initial_state))
237 {
238 if (hints->initial_state == WithdrawnState)
239 *initial_state = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
240 else if (hints->initial_state == NormalState)
241 *initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
242 else if (hints->initial_state == IconicState)
243 *initial_state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
244 }
245
246 if ((hints->flags & IconPixmapHint) && (icon_pixmap))
247 *icon_pixmap = hints->icon_pixmap;
248
249 if ((hints->flags & IconMaskHint) && (icon_mask))
250 *icon_mask = hints->icon_mask;
251
252 if ((hints->flags & IconWindowHint) && (icon_window))
253 *icon_window = hints->icon_window;
254
255 if ((hints->flags & WindowGroupHint) && (window_group))
256 *window_group = hints->window_group;
257
258 if ((hints->flags & XUrgencyHint) && (is_urgent))
259 *is_urgent = EINA_TRUE;
260
261 XFree(hints);
262 return EINA_TRUE;
263 }
264
265 return EINA_FALSE;
266}
267
268EAPI void
269ecore_x_icccm_size_pos_hints_set(Ecore_X_Window win,
270 Eina_Bool request_pos,
271 Ecore_X_Gravity gravity,
272 int min_w,
273 int min_h,
274 int max_w,
275 int max_h,
276 int base_w,
277 int base_h,
278 int step_x,
279 int step_y,
280 double min_aspect,
281 double max_aspect)
282{
283 XSizeHints hint;
284 long mask;
285
286 LOGFN(__FILE__, __LINE__, __FUNCTION__);
287 if (!XGetWMNormalHints(_ecore_x_disp, win, &hint, &mask))
288 memset(&hint, 0, sizeof(XSizeHints));
289
290 hint.flags = 0;
291 if (request_pos)
292 hint.flags |= USPosition;
293
294 if (gravity != ECORE_X_GRAVITY_NW)
295 {
296 hint.flags |= PWinGravity;
297 hint.win_gravity = gravity;
298 }
299
300 if ((min_w > 0) || (min_h > 0))
301 {
302 hint.flags |= PMinSize;
303 hint.min_width = min_w;
304 hint.min_height = min_h;
305 }
306
307 if ((max_w > 0) || (max_h > 0))
308 {
309 hint.flags |= PMaxSize;
310 hint.max_width = max_w;
311 hint.max_height = max_h;
312 }
313
314 if ((base_w > 0) || (base_h > 0))
315 {
316 hint.flags |= PBaseSize;
317 hint.base_width = base_w;
318 hint.base_height = base_h;
319 }
320
321 if ((step_x > 1) || (step_y > 1))
322 {
323 hint.flags |= PResizeInc;
324 hint.width_inc = step_x;
325 hint.height_inc = step_y;
326 }
327
328 if ((min_aspect > 0.0) || (max_aspect > 0.0))
329 {
330 hint.flags |= PAspect;
331 hint.min_aspect.x = min_aspect * 10000;
332 hint.min_aspect.y = 10000;
333 hint.max_aspect.x = max_aspect * 10000;
334 hint.max_aspect.y = 10000;
335 }
336
337 XSetWMNormalHints(_ecore_x_disp, win, &hint);
338}
339
340EAPI Eina_Bool
341ecore_x_icccm_size_pos_hints_get(Ecore_X_Window win,
342 Eina_Bool *request_pos,
343 Ecore_X_Gravity *gravity,
344 int *min_w,
345 int *min_h,
346 int *max_w,
347 int *max_h,
348 int *base_w,
349 int *base_h,
350 int *step_x,
351 int *step_y,
352 double *min_aspect,
353 double *max_aspect)
354{
355 XSizeHints hint;
356 long mask;
357
358 int minw = 0, minh = 0;
359 int maxw = 32767, maxh = 32767;
360 int basew = -1, baseh = -1;
361 int stepx = -1, stepy = -1;
362 double mina = 0.0, maxa = 0.0;
363
364 LOGFN(__FILE__, __LINE__, __FUNCTION__);
365 if (!XGetWMNormalHints(_ecore_x_disp, win, &hint, &mask))
366 return EINA_FALSE;
367
368 if ((hint.flags & USPosition) || ((hint.flags & PPosition)))
369 {
370 if (request_pos)
371 *request_pos = EINA_TRUE;
372 }
373 else if (request_pos)
374 *request_pos = EINA_FALSE;
375
376 if (hint.flags & PWinGravity)
377 {
378 if (gravity)
379 *gravity = hint.win_gravity;
380 }
381 else if (gravity)
382 *gravity = ECORE_X_GRAVITY_NW;
383
384 if (hint.flags & PMinSize)
385 {
386 minw = hint.min_width;
387 minh = hint.min_height;
388 }
389
390 if (hint.flags & PMaxSize)
391 {
392 maxw = hint.max_width;
393 maxh = hint.max_height;
394 if (maxw < minw)
395 maxw = minw;
396
397 if (maxh < minh)
398 maxh = minh;
399 }
400
401 if (hint.flags & PBaseSize)
402 {
403 basew = hint.base_width;
404 baseh = hint.base_height;
405 if (basew > minw)
406 minw = basew;
407
408 if (baseh > minh)
409 minh = baseh;
410 }
411
412 if (hint.flags & PResizeInc)
413 {
414 stepx = hint.width_inc;
415 stepy = hint.height_inc;
416 if (stepx < 1)
417 stepx = 1;
418
419 if (stepy < 1)
420 stepy = 1;
421 }
422
423 if (hint.flags & PAspect)
424 {
425 if (hint.min_aspect.y > 0)
426 mina = ((double)hint.min_aspect.x) / ((double)hint.min_aspect.y);
427
428 if (hint.max_aspect.y > 0)
429 maxa = ((double)hint.max_aspect.x) / ((double)hint.max_aspect.y);
430 }
431
432 if (min_w)
433 *min_w = minw;
434
435 if (min_h)
436 *min_h = minh;
437
438 if (max_w)
439 *max_w = maxw;
440
441 if (max_h)
442 *max_h = maxh;
443
444 if (base_w)
445 *base_w = basew;
446
447 if (base_h)
448 *base_h = baseh;
449
450 if (step_x)
451 *step_x = stepx;
452
453 if (step_y)
454 *step_y = stepy;
455
456 if (min_aspect)
457 *min_aspect = mina;
458
459 if (max_aspect)
460 *max_aspect = maxa;
461
462 return EINA_TRUE;
463}
464
465EAPI void
466ecore_x_icccm_title_set(Ecore_X_Window win,
467 const char *t)
468{
469 char *list[1];
470 XTextProperty xprop;
471 int ret;
472
473 if (!t)
474 return;
475
476 LOGFN(__FILE__, __LINE__, __FUNCTION__);
477 xprop.value = NULL;
478#ifdef X_HAVE_UTF8_STRING
479 list[0] = strdup(t);
480 ret =
481 Xutf8TextListToTextProperty(_ecore_x_disp, list, 1, XUTF8StringStyle,
482 &xprop);
483#else /* ifdef X_HAVE_UTF8_STRING */
484 list[0] = strdup(t);
485 ret =
486 XmbTextListToTextProperty(_ecore_x_disp, list, 1, XStdICCTextStyle,
487 &xprop);
488#endif /* ifdef X_HAVE_UTF8_STRING */
489 if (ret >= Success)
490 {
491 XSetWMName(_ecore_x_disp, win, &xprop);
492 if (xprop.value)
493 XFree(xprop.value);
494 }
495 else if (XStringListToTextProperty(list, 1, &xprop) >= Success)
496 {
497 XSetWMName(_ecore_x_disp, win, &xprop);
498 if (xprop.value)
499 XFree(xprop.value);
500 }
501
502 free(list[0]);
503}
504
505EAPI char *
506ecore_x_icccm_title_get(Ecore_X_Window win)
507{
508 XTextProperty xprop;
509
510 LOGFN(__FILE__, __LINE__, __FUNCTION__);
511 xprop.value = NULL;
512 if (XGetWMName(_ecore_x_disp, win, &xprop) >= Success)
513 {
514 if (xprop.value)
515 {
516 char **list = NULL;
517 char *t = NULL;
518 int num = 0;
519 int ret;
520
521 if (xprop.encoding == ECORE_X_ATOM_UTF8_STRING)
522 t = strdup((char *)xprop.value);
523 else
524 {
525 /* convert to utf8 */
526#ifdef X_HAVE_UTF8_STRING
527 ret = Xutf8TextPropertyToTextList(_ecore_x_disp, &xprop,
528 &list, &num);
529#else /* ifdef X_HAVE_UTF8_STRING */
530 ret = XmbTextPropertyToTextList(_ecore_x_disp, &xprop,
531 &list, &num);
532#endif /* ifdef X_HAVE_UTF8_STRING */
533
534 if ((ret == XLocaleNotSupported) ||
535 (ret == XNoMemory) || (ret == XConverterNotFound))
536 t = strdup((char *)xprop.value);
537 else if ((ret >= Success) && (num > 0))
538 t = strdup(list[0]);
539
540 if (list)
541 XFreeStringList(list);
542 }
543
544 if (xprop.value)
545 XFree(xprop.value);
546
547 return t;
548 }
549 }
550
551 return NULL;
552}
553
554/**
555 * Set protocol atoms explicitly
556 * @param win The Window
557 * @param protos An array of protocol atoms
558 * @param num the number of members of the array
559 */
560EAPI void
561ecore_x_icccm_protocol_atoms_set(Ecore_X_Window win,
562 Ecore_X_Atom *protos,
563 int num)
564{
565 LOGFN(__FILE__, __LINE__, __FUNCTION__);
566 if (num > 0)
567 XSetWMProtocols(_ecore_x_disp, win, (Atom *)(protos), num);
568 else
569 XDeleteProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_PROTOCOLS);
570}
571
572/**
573 * Set or unset a wm protocol property.
574 * @param win The Window
575 * @param protocol The protocol to enable/disable
576 * @param on On/Off
577 */
578EAPI void
579ecore_x_icccm_protocol_set(Ecore_X_Window win,
580 Ecore_X_WM_Protocol protocol,
581 Eina_Bool on)
582{
583 Atom *protos = NULL;
584 Atom proto;
585 int protos_count = 0;
586 int already_set = 0;
587 int i;
588
589 /* Check for invalid values */
590 if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
591 return;
592
593 LOGFN(__FILE__, __LINE__, __FUNCTION__);
594 proto = _ecore_x_atoms_wm_protocols[protocol];
595
596 if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
597 {
598 protos = NULL;
599 protos_count = 0;
600 }
601
602 for (i = 0; i < protos_count; i++)
603 {
604 if (protos[i] == proto)
605 {
606 already_set = 1;
607 break;
608 }
609 }
610
611 if (on)
612 {
613 Atom *new_protos = NULL;
614
615 if (already_set)
616 goto leave;
617
618 new_protos = malloc((protos_count + 1) * sizeof(Atom));
619 if (!new_protos)
620 goto leave;
621
622 for (i = 0; i < protos_count; i++)
623 new_protos[i] = protos[i];
624 new_protos[protos_count] = proto;
625 XSetWMProtocols(_ecore_x_disp, win, new_protos, protos_count + 1);
626 free(new_protos);
627 }
628 else
629 {
630 if (!already_set)
631 goto leave;
632
633 for (i = 0; i < protos_count; i++)
634 {
635 if (protos[i] == proto)
636 {
637 int j;
638
639 for (j = i + 1; j < protos_count; j++)
640 protos[j - 1] = protos[j];
641 if (protos_count > 1)
642 XSetWMProtocols(_ecore_x_disp, win, protos,
643 protos_count - 1);
644 else
645 XDeleteProperty(_ecore_x_disp, win,
646 ECORE_X_ATOM_WM_PROTOCOLS);
647
648 goto leave;
649 }
650 }
651 }
652
653leave:
654 if (protos)
655 XFree(protos);
656}
657
658/**
659 * Determines whether a protocol is set for a window.
660 * @param win The Window
661 * @param protocol The protocol to query
662 * @return 1 if the protocol is set, else 0.
663 */
664EAPI Eina_Bool
665ecore_x_icccm_protocol_isset(Ecore_X_Window win,
666 Ecore_X_WM_Protocol protocol)
667{
668 Atom proto, *protos = NULL;
669 int i, protos_count = 0;
670 Eina_Bool ret = EINA_FALSE;
671
672 /* check for invalid values */
673 if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
674 return EINA_FALSE;
675
676 LOGFN(__FILE__, __LINE__, __FUNCTION__);
677 proto = _ecore_x_atoms_wm_protocols[protocol];
678
679 if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
680 return EINA_FALSE;
681
682 for (i = 0; i < protos_count; i++)
683 if (protos[i] == proto)
684 {
685 ret = EINA_TRUE;
686 break;
687 }
688
689 if (protos)
690 XFree(protos);
691
692 return ret;
693}
694
695/**
696 * Set a window name & class.
697 * @param win The window
698 * @param n The name string
699 * @param c The class string
700 *
701 * Set a window name * class
702 */
703EAPI void
704ecore_x_icccm_name_class_set(Ecore_X_Window win,
705 const char *n,
706 const char *c)
707{
708 XClassHint *xch;
709
710 xch = XAllocClassHint();
711 if (!xch)
712 return;
713
714 LOGFN(__FILE__, __LINE__, __FUNCTION__);
715 xch->res_name = (char *)n;
716 xch->res_class = (char *)c;
717 XSetClassHint(_ecore_x_disp, win, xch);
718 XFree(xch);
719}
720
721/**
722 * Get a window name & class.
723 * @param win The window
724 * @param n The name string
725 * @param c The class string
726 *
727 * Get a window name * class
728 */
729EAPI void
730ecore_x_icccm_name_class_get(Ecore_X_Window win,
731 char **n,
732 char **c)
733{
734 XClassHint xch;
735
736 LOGFN(__FILE__, __LINE__, __FUNCTION__);
737 if (n)
738 *n = NULL;
739
740 if (c)
741 *c = NULL;
742
743 xch.res_name = NULL;
744 xch.res_class = NULL;
745 if (XGetClassHint(_ecore_x_disp, win, &xch))
746 {
747 if (n)
748 if (xch.res_name)
749 *n = strdup(xch.res_name);
750
751 if (c)
752 if (xch.res_class)
753 *c = strdup(xch.res_class);
754
755 XFree(xch.res_name);
756 XFree(xch.res_class);
757 }
758}
759
760/**
761 * Get a window client machine string.
762 * @param win The window
763 * @return The windows client machine string
764 *
765 * Return the client machine of a window. String must be free'd when done with.
766 */
767EAPI char *
768ecore_x_icccm_client_machine_get(Ecore_X_Window win)
769{
770 char *name;
771
772 LOGFN(__FILE__, __LINE__, __FUNCTION__);
773 name = ecore_x_window_prop_string_get(win, ECORE_X_ATOM_WM_CLIENT_MACHINE);
774 return name;
775}
776
777/**
778 * Sets the WM_COMMAND property for @a win.
779 *
780 * @param win The window.
781 * @param argc Number of arguments.
782 * @param argv Arguments.
783 */
784EAPI void
785ecore_x_icccm_command_set(Ecore_X_Window win,
786 int argc,
787 char **argv)
788{
789 LOGFN(__FILE__, __LINE__, __FUNCTION__);
790 XSetCommand(_ecore_x_disp, win, argv, argc);
791}
792
793/**
794 * Get the WM_COMMAND property for @a win.
795 *
796 * Return the command of a window. String must be free'd when done with.
797 *
798 * @param win The window.
799 * @param argc Number of arguments.
800 * @param argv Arguments.
801 */
802EAPI void
803ecore_x_icccm_command_get(Ecore_X_Window win,
804 int *argc,
805 char ***argv)
806{
807 int i, c;
808 char **v;
809
810 if (argc)
811 *argc = 0;
812
813 if (argv)
814 *argv = NULL;
815
816 LOGFN(__FILE__, __LINE__, __FUNCTION__);
817 if (!XGetCommand(_ecore_x_disp, win, &v, &c))
818 return;
819
820 if (c < 1)
821 {
822 if (v)
823 XFreeStringList(v);
824
825 return;
826 }
827
828 if (argc)
829 *argc = c;
830
831 if (argv)
832 {
833 (*argv) = malloc(c * sizeof(char *));
834 if (!*argv)
835 {
836 XFreeStringList(v);
837 if (argc)
838 *argc = 0;
839
840 return;
841 }
842
843 for (i = 0; i < c; i++)
844 {
845 if (v[i])
846 (*argv)[i] = strdup(v[i]);
847 else
848 (*argv)[i] = strdup("");
849 }
850 }
851
852 XFreeStringList(v);
853}
854
855/**
856 * Set a window icon name.
857 * @param win The window
858 * @param t The icon name string
859 *
860 * Set a window icon name
861 */
862EAPI void
863ecore_x_icccm_icon_name_set(Ecore_X_Window win,
864 const char *t)
865{
866 char *list[1];
867 XTextProperty xprop;
868 int ret;
869
870 LOGFN(__FILE__, __LINE__, __FUNCTION__);
871 xprop.value = NULL;
872#ifdef X_HAVE_UTF8_STRING
873 list[0] = strdup(t);
874 ret = Xutf8TextListToTextProperty(_ecore_x_disp, list, 1,
875 XUTF8StringStyle, &xprop);
876#else /* ifdef X_HAVE_UTF8_STRING */
877 list[0] = strdup(t);
878 ret = XmbTextListToTextProperty(_ecore_x_disp, list, 1,
879 XStdICCTextStyle, &xprop);
880#endif /* ifdef X_HAVE_UTF8_STRING */
881 if (ret >= Success)
882 {
883 XSetWMIconName(_ecore_x_disp, win, &xprop);
884 if (xprop.value)
885 XFree(xprop.value);
886 }
887 else if (XStringListToTextProperty(list, 1, &xprop) >= Success)
888 {
889 XSetWMIconName(_ecore_x_disp, win, &xprop);
890 if (xprop.value)
891 XFree(xprop.value);
892 }
893
894 free(list[0]);
895}
896
897/**
898 * Get a window icon name.
899 * @param win The window
900 * @return The windows icon name string
901 *
902 * Return the icon name of a window. String must be free'd when done with.
903 */
904EAPI char *
905ecore_x_icccm_icon_name_get(Ecore_X_Window win)
906{
907 XTextProperty xprop;
908
909 LOGFN(__FILE__, __LINE__, __FUNCTION__);
910 xprop.value = NULL;
911 if (XGetWMIconName(_ecore_x_disp, win, &xprop) >= Success)
912 {
913 if (xprop.value)
914 {
915 char **list = NULL;
916 char *t = NULL;
917 int num = 0;
918 int ret;
919
920 if (xprop.encoding == ECORE_X_ATOM_UTF8_STRING)
921 t = strdup((char *)xprop.value);
922 else
923 {
924 /* convert to utf8 */
925#ifdef X_HAVE_UTF8_STRING
926 ret = Xutf8TextPropertyToTextList(_ecore_x_disp, &xprop,
927 &list, &num);
928#else /* ifdef X_HAVE_UTF8_STRING */
929 ret = XmbTextPropertyToTextList(_ecore_x_disp, &xprop,
930 &list, &num);
931#endif /* ifdef X_HAVE_UTF8_STRING */
932
933 if ((ret == XLocaleNotSupported) ||
934 (ret == XNoMemory) || (ret == XConverterNotFound))
935 t = strdup((char *)xprop.value);
936 else if (ret >= Success)
937 {
938 if ((num >= 1) && (list))
939 t = strdup(list[0]);
940
941 if (list)
942 XFreeStringList(list);
943 }
944 }
945
946 if (xprop.value)
947 XFree(xprop.value);
948
949 return t;
950 }
951 }
952
953 return NULL;
954}
955
956/**
957 * Add a subwindow to the list of windows that need a different colormap installed.
958 * @param win The toplevel window
959 * @param subwin The subwindow to be added to the colormap windows list
960 */
961EAPI void
962ecore_x_icccm_colormap_window_set(Ecore_X_Window win,
963 Ecore_X_Window subwin)
964{
965 int num = 0, i;
966 unsigned char *old_data = NULL;
967 unsigned char *data = NULL;
968 Window *oldset = NULL;
969 Window *newset = NULL;
970
971 LOGFN(__FILE__, __LINE__, __FUNCTION__);
972 if (!ecore_x_window_prop_property_get(win,
973 ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
974 XA_WINDOW, 32, &old_data, &num))
975 {
976 newset = calloc(1, sizeof(Window));
977 if (!newset)
978 return;
979
980 newset[0] = subwin;
981 num = 1;
982 data = (unsigned char *)newset;
983 }
984 else
985 {
986 newset = calloc(num + 1, sizeof(Window));
987 oldset = (Window *)old_data;
988 if (!newset)
989 return;
990
991 for (i = 0; i < num; ++i)
992 {
993 if (oldset[i] == subwin)
994 {
995 if (old_data)
996 XFree(old_data);
997
998 old_data = NULL;
999 free(newset);
1000 return;
1001 }
1002
1003 newset[i] = oldset[i];
1004 }
1005
1006 newset[num++] = subwin;
1007 if (old_data)
1008 XFree(old_data);
1009
1010 data = (unsigned char *)newset;
1011 }
1012
1013 ecore_x_window_prop_property_set(win,
1014 ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1015 XA_WINDOW, 32, data, num);
1016 free(newset);
1017}
1018
1019/**
1020 * Remove a window from the list of colormap windows.
1021 * @param win The toplevel window
1022 * @param subwin The window to be removed from the colormap window list.
1023 */
1024EAPI void
1025ecore_x_icccm_colormap_window_unset(Ecore_X_Window win,
1026 Ecore_X_Window subwin)
1027{
1028 int num = 0, i, j, k = 0;
1029 unsigned char *old_data = NULL;
1030 unsigned char *data = NULL;
1031 Window *oldset = NULL;
1032 Window *newset = NULL;
1033
1034 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1035 if (!ecore_x_window_prop_property_get(win,
1036 ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1037 XA_WINDOW, 32, &old_data, &num))
1038 return;
1039
1040 oldset = (Window *)old_data;
1041 for (i = 0; i < num; i++)
1042 {
1043 if (oldset[i] == subwin)
1044 {
1045 if (num == 1)
1046 {
1047 XDeleteProperty(_ecore_x_disp,
1048 win, ECORE_X_ATOM_WM_COLORMAP_WINDOWS);
1049 if (old_data)
1050 XFree(old_data);
1051
1052 old_data = NULL;
1053 return;
1054 }
1055 else
1056 {
1057 newset = calloc(num - 1, sizeof(Window));
1058 data = (unsigned char *)newset;
1059 for (j = 0; j < num; ++j)
1060 if (oldset[j] != subwin)
1061 newset[k++] = oldset[j];
1062
1063 ecore_x_window_prop_property_set(
1064 win,
1065 ECORE_X_ATOM_WM_COLORMAP_WINDOWS,
1066 XA_WINDOW,
1067 32,
1068 data,
1069 k);
1070 if (old_data)
1071 XFree(old_data);
1072
1073 old_data = NULL;
1074 free(newset);
1075 return;
1076 }
1077 }
1078 }
1079
1080 if (old_data)
1081 XFree(old_data);
1082}
1083
1084/**
1085 * Specify that a window is transient for another top-level window and should be handled accordingly.
1086 * @param win the transient window
1087 * @param forwin the toplevel window
1088 */
1089EAPI void
1090ecore_x_icccm_transient_for_set(Ecore_X_Window win,
1091 Ecore_X_Window forwin)
1092{
1093 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1094 XSetTransientForHint(_ecore_x_disp, win, forwin);
1095}
1096
1097/**
1098 * Remove the transient_for setting from a window.
1099 * @param win The window
1100 */
1101EAPI void
1102ecore_x_icccm_transient_for_unset(Ecore_X_Window win)
1103{
1104 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1105 XDeleteProperty(_ecore_x_disp, win, ECORE_X_ATOM_WM_TRANSIENT_FOR);
1106}
1107
1108/**
1109 * Get the window this window is transient for, if any.
1110 * @param win The window to check
1111 * @return The window ID of the top-level window, or 0 if the property does not exist.
1112 */
1113EAPI Ecore_X_Window
1114ecore_x_icccm_transient_for_get(Ecore_X_Window win)
1115{
1116 Window forwin;
1117
1118 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1119 if (XGetTransientForHint(_ecore_x_disp, win, &forwin))
1120 return (Ecore_X_Window)forwin;
1121 else
1122 return 0;
1123}
1124
1125/**
1126 * Set the window role hint.
1127 * @param win The window
1128 * @param role The role string
1129 */
1130EAPI void
1131ecore_x_icccm_window_role_set(Ecore_X_Window win,
1132 const char *role)
1133{
1134 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1135 ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_WINDOW_ROLE,
1136 (char *)role);
1137}
1138
1139/**
1140 * Get the window role.
1141 * @param win The window
1142 * @return The window's role string.
1143 */
1144EAPI char *
1145ecore_x_icccm_window_role_get(Ecore_X_Window win)
1146{
1147 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1148 return ecore_x_window_prop_string_get(win, ECORE_X_ATOM_WM_WINDOW_ROLE);
1149}
1150
1151/**
1152 * Set the window's client leader.
1153 * @param win The window
1154 * @param l The client leader window
1155 *
1156 * All non-transient top-level windows created by an app other than
1157 * the main window must have this property set to the app's main window.
1158 */
1159EAPI void
1160ecore_x_icccm_client_leader_set(Ecore_X_Window win,
1161 Ecore_X_Window l)
1162{
1163 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1164 ecore_x_window_prop_window_set(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
1165 &l, 1);
1166}
1167
1168/**
1169 * Get the window's client leader.
1170 * @param win The window
1171 * @return The window's client leader window, or 0 if unset */
1172EAPI Ecore_X_Window
1173ecore_x_icccm_client_leader_get(Ecore_X_Window win)
1174{
1175 Ecore_X_Window l;
1176
1177 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1178 if (ecore_x_window_prop_window_get(win, ECORE_X_ATOM_WM_CLIENT_LEADER,
1179 &l, 1) > 0)
1180 return l;
1181
1182 return 0;
1183}
1184
1185EAPI void
1186ecore_x_icccm_iconic_request_send(Ecore_X_Window win,
1187 Ecore_X_Window root)
1188{
1189 XEvent xev;
1190
1191 if (!win)
1192 return;
1193
1194 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1195 if (!root)
1196 root = DefaultRootWindow(_ecore_x_disp);
1197
1198 xev.xclient.type = ClientMessage;
1199 xev.xclient.serial = 0;
1200 xev.xclient.send_event = True;
1201 xev.xclient.display = _ecore_x_disp;
1202 xev.xclient.window = win;
1203 xev.xclient.format = 32;
1204 xev.xclient.message_type = ECORE_X_ATOM_WM_CHANGE_STATE;
1205 xev.xclient.data.l[0] = IconicState;
1206
1207 XSendEvent(_ecore_x_disp, root, False,
1208 SubstructureNotifyMask | SubstructureRedirectMask, &xev);
1209}
1210
1211/* FIXME: there are older E hints, gnome hints and mwm hints and new netwm */
1212/* hints. each should go in their own file/section so we know which */
1213/* is which. also older kde hints too. we should try support as much */
1214/* as makese sense to support */
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_image.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_image.c
deleted file mode 100644
index b8e720c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_image.c
+++ /dev/null
@@ -1,600 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7#include <sys/ipc.h>
8#include <sys/shm.h>
9
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12
13#include <X11/extensions/XShm.h>
14#include <X11/Xutil.h>
15
16static int _ecore_x_image_shm_can = -1;
17static int _ecore_x_image_err = 0;
18
19static int
20_ecore_x_image_error_handler(Display *d __UNUSED__,
21 XErrorEvent *ev __UNUSED__)
22{
23 _ecore_x_image_err = 1;
24 return 0;
25}
26
27static void
28_ecore_x_image_shm_check(void)
29{
30 XErrorHandler ph;
31 XShmSegmentInfo shminfo;
32 XImage *xim;
33
34 if (_ecore_x_image_shm_can != -1)
35 return;
36
37 XSync(_ecore_x_disp, False);
38 _ecore_x_image_err = 0;
39
40 xim = XShmCreateImage(_ecore_x_disp,
41 DefaultVisual(_ecore_x_disp,
42 DefaultScreen(_ecore_x_disp)),
43 DefaultDepth(_ecore_x_disp,
44 DefaultScreen(_ecore_x_disp)),
45 ZPixmap, NULL,
46 &shminfo, 1, 1);
47 if (!xim)
48 {
49 _ecore_x_image_shm_can = 0;
50 return;
51 }
52
53 shminfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line * xim->height,
54 IPC_CREAT | 0666);
55 if (shminfo.shmid == -1)
56 {
57 XDestroyImage(xim);
58 _ecore_x_image_shm_can = 0;
59 return;
60 }
61
62 shminfo.readOnly = False;
63 shminfo.shmaddr = shmat(shminfo.shmid, 0, 0);
64 xim->data = shminfo.shmaddr;
65
66 if (xim->data == (char *)-1)
67 {
68 XDestroyImage(xim);
69 _ecore_x_image_shm_can = 0;
70 return;
71 }
72
73 ph = XSetErrorHandler((XErrorHandler)_ecore_x_image_error_handler);
74 XShmAttach(_ecore_x_disp, &shminfo);
75 XShmGetImage(_ecore_x_disp, DefaultRootWindow(_ecore_x_disp),
76 xim, 0, 0, 0xffffffff);
77 XSync(_ecore_x_disp, False);
78 XSetErrorHandler((XErrorHandler)ph);
79 if (_ecore_x_image_err)
80 {
81 XShmDetach(_ecore_x_disp, &shminfo);
82 XDestroyImage(xim);
83 shmdt(shminfo.shmaddr);
84 shmctl(shminfo.shmid, IPC_RMID, 0);
85 _ecore_x_image_shm_can = 0;
86 return;
87 }
88
89 XShmDetach(_ecore_x_disp, &shminfo);
90 XDestroyImage(xim);
91 shmdt(shminfo.shmaddr);
92 shmctl(shminfo.shmid, IPC_RMID, 0);
93
94 _ecore_x_image_shm_can = 1;
95}
96
97struct _Ecore_X_Image
98{
99 XShmSegmentInfo shminfo;
100 Ecore_X_Visual vis;
101 XImage *xim;
102 int depth;
103 int w, h;
104 int bpl, bpp, rows;
105 unsigned char *data;
106 Eina_Bool shm : 1;
107};
108
109EAPI Ecore_X_Image *
110ecore_x_image_new(int w,
111 int h,
112 Ecore_X_Visual vis,
113 int depth)
114{
115 Ecore_X_Image *im;
116
117 im = calloc(1, sizeof(Ecore_X_Image));
118 if (!im)
119 return NULL;
120
121 LOGFN(__FILE__, __LINE__, __FUNCTION__);
122 im->w = w;
123 im->h = h;
124 im->vis = vis;
125 im->depth = depth;
126 _ecore_x_image_shm_check();
127 im->shm = _ecore_x_image_shm_can;
128 return im;
129}
130
131EAPI void
132ecore_x_image_free(Ecore_X_Image *im)
133{
134 LOGFN(__FILE__, __LINE__, __FUNCTION__);
135 if (im->shm)
136 {
137 if (im->xim)
138 {
139 XShmDetach(_ecore_x_disp, &(im->shminfo));
140 XDestroyImage(im->xim);
141 shmdt(im->shminfo.shmaddr);
142 shmctl(im->shminfo.shmid, IPC_RMID, 0);
143 }
144 }
145 else if (im->xim)
146 {
147 free(im->xim->data);
148 im->xim->data = NULL;
149 XDestroyImage(im->xim);
150 }
151
152 free(im);
153}
154
155static void
156_ecore_x_image_shm_create(Ecore_X_Image *im)
157{
158 im->xim = XShmCreateImage(_ecore_x_disp, im->vis, im->depth,
159 ZPixmap, NULL, &(im->shminfo),
160 im->w, im->h);
161 if (!im->xim)
162 return;
163
164 im->shminfo.shmid = shmget(IPC_PRIVATE,
165 im->xim->bytes_per_line * im->xim->height,
166 IPC_CREAT | 0666);
167 if (im->shminfo.shmid == -1)
168 {
169 XDestroyImage(im->xim);
170 return;
171 }
172
173 im->shminfo.readOnly = False;
174 im->shminfo.shmaddr = shmat(im->shminfo.shmid, 0, 0);
175 im->xim->data = im->shminfo.shmaddr;
176 if ((im->xim->data == (char *)-1) ||
177 (!im->xim->data))
178 {
179 shmdt(im->shminfo.shmaddr);
180 shmctl(im->shminfo.shmid, IPC_RMID, 0);
181 XDestroyImage(im->xim);
182 return;
183 }
184
185 XShmAttach(_ecore_x_disp, &im->shminfo);
186
187 im->data = (unsigned char *)im->xim->data;
188
189 im->bpl = im->xim->bytes_per_line;
190 im->rows = im->xim->height;
191 if (im->xim->bits_per_pixel <= 8)
192 im->bpp = 1;
193 else if (im->xim->bits_per_pixel <= 16)
194 im->bpp = 2;
195 else
196 im->bpp = 4;
197}
198
199EAPI Eina_Bool
200ecore_x_image_get(Ecore_X_Image *im,
201 Ecore_X_Drawable draw,
202 int x,
203 int y,
204 int sx,
205 int sy,
206 int w,
207 int h)
208{
209 Eina_Bool ret = EINA_TRUE;
210 XErrorHandler ph;
211
212 LOGFN(__FILE__, __LINE__, __FUNCTION__);
213 if (im->shm)
214 {
215 if (!im->xim)
216 _ecore_x_image_shm_create(im);
217
218 if (!im->xim)
219 return 0;
220
221 _ecore_x_image_err = 0;
222 // optimised path
223 ph = XSetErrorHandler((XErrorHandler)_ecore_x_image_error_handler);
224 if ((sx == 0) && (w == im->w))
225 {
226 im->xim->data = (char *)
227 im->data + (im->xim->bytes_per_line * sy) + (sx * im->bpp);
228 im->xim->width = w;
229 im->xim->height = h;
230 XGrabServer(_ecore_x_disp);
231 if (!XShmGetImage(_ecore_x_disp, draw, im->xim, x, y, 0xffffffff))
232 ret = EINA_FALSE;
233 XUngrabServer(_ecore_x_disp);
234 ecore_x_sync();
235 }
236 // unavoidable thanks to mit-shm get api - tmp shm buf + copy into it
237 else
238 {
239 Ecore_X_Image *tim;
240 unsigned char *spixels, *sp, *pixels, *p;
241 int bpp, bpl, rows, sbpp, sbpl, srows;
242 int r;
243
244 tim = ecore_x_image_new(w, h, im->vis, im->depth);
245 if (tim)
246 {
247 ret = ecore_x_image_get(tim, draw, x, y, 0, 0, w, h);
248 if (ret)
249 {
250 spixels = ecore_x_image_data_get(tim,
251 &sbpl,
252 &srows,
253 &sbpp);
254 pixels = ecore_x_image_data_get(im, &bpl, &rows, &bpp);
255 if ((pixels) && (spixels))
256 {
257 p = pixels + (sy * bpl) + (sx * bpp);
258 sp = spixels;
259 for (r = srows; r > 0; r--)
260 {
261 memcpy(p, sp, sbpl);
262 p += bpl;
263 sp += sbpl;
264 }
265 }
266 }
267
268 ecore_x_image_free(tim);
269 }
270 }
271
272 XSetErrorHandler((XErrorHandler)ph);
273 if (_ecore_x_image_err)
274 ret = EINA_FALSE;
275 }
276 else
277 {
278 printf("currently unimplemented ecore_x_image_get without shm\n");
279 ret = EINA_FALSE;
280 }
281
282 return ret;
283}
284
285EAPI void
286ecore_x_image_put(Ecore_X_Image *im,
287 Ecore_X_Drawable draw,
288 Ecore_X_GC gc,
289 int x,
290 int y,
291 int sx,
292 int sy,
293 int w,
294 int h)
295{
296 Ecore_X_GC tgc = 0;
297
298 LOGFN(__FILE__, __LINE__, __FUNCTION__);
299 if (!gc)
300 {
301 XGCValues gcv;
302 memset(&gcv, 0, sizeof(gcv));
303 gcv.subwindow_mode = IncludeInferiors;
304 tgc = XCreateGC(_ecore_x_disp, draw, GCSubwindowMode, &gcv);
305 gc = tgc;
306 }
307 if (!im->xim) _ecore_x_image_shm_create(im);
308 if (im->xim)
309 XShmPutImage(_ecore_x_disp, draw, gc, im->xim, sx, sy, x, y, w, h, False);
310 if (tgc) ecore_x_gc_free(tgc);
311}
312
313EAPI void *
314ecore_x_image_data_get(Ecore_X_Image *im,
315 int *bpl,
316 int *rows,
317 int *bpp)
318{
319 LOGFN(__FILE__, __LINE__, __FUNCTION__);
320 if (!im->xim) _ecore_x_image_shm_create(im);
321 if (!im->xim) return NULL;
322 if (bpl) *bpl = im->bpl;
323 if (rows) *rows = im->rows;
324 if (bpp) *bpp = im->bpp;
325 return im->data;
326}
327
328EAPI Eina_Bool
329ecore_x_image_is_argb32_get(Ecore_X_Image *im)
330{
331 Visual *vis = im->vis;
332 if (!im->xim) _ecore_x_image_shm_create(im);
333 if (((vis->class == TrueColor) ||
334 (vis->class == DirectColor)) &&
335 (im->depth >= 24) &&
336 (vis->red_mask == 0xff0000) &&
337 (vis->green_mask == 0x00ff00) &&
338 (vis->blue_mask == 0x0000ff))
339 {
340#ifdef WORDS_BIGENDIAN
341 if (im->xim->bitmap_bit_order == LSBFirst) return EINA_TRUE;
342#else
343 if (im->xim->bitmap_bit_order == MSBFirst) return EINA_TRUE;
344#endif
345 }
346 return EINA_FALSE;
347}
348
349EAPI Eina_Bool
350ecore_x_image_to_argb_convert(void *src,
351 int sbpp,
352 int sbpl,
353 Ecore_X_Colormap c,
354 Ecore_X_Visual v,
355 int x,
356 int y,
357 int w,
358 int h,
359 unsigned int *dst,
360 int dbpl,
361 int dx,
362 int dy)
363{
364 Visual *vis = v;
365 XColor *cols = NULL;
366 int n = 0, nret = 0, i, row;
367 unsigned int pal[256], r, g, b;
368 enum
369 {
370 rgbnone = 0,
371 rgb565,
372 bgr565,
373 rgbx555,
374 argbx888,
375 abgrx888,
376 rgba888x,
377 bgra888x,
378 argbx666
379 };
380 int mode = 0;
381
382 sbpp *= 8;
383
384 n = vis->map_entries;
385 if ((n <= 256) &&
386 ((vis->class == PseudoColor) ||
387 (vis->class == StaticColor) ||
388 (vis->class == GrayScale) ||
389 (vis->class == StaticGray)))
390 {
391 if (!c)
392 c = DefaultColormap(_ecore_x_disp,
393 DefaultScreen(_ecore_x_disp));
394 cols = alloca(n * sizeof(XColor));
395 for (i = 0; i < n; i++)
396 {
397 cols[i].pixel = i;
398 cols[i].flags = DoRed | DoGreen | DoBlue;
399 cols[i].red = 0;
400 cols[i].green = 0;
401 cols[i].blue = 0;
402 }
403 XQueryColors(_ecore_x_disp, c, cols, n);
404 for (i = 0; i < n; i++)
405 {
406 pal[i] = 0xff000000 |
407 ((cols[i].red >> 8) << 16) |
408 ((cols[i].green >> 8) << 8) |
409 ((cols[i].blue >> 8));
410 }
411 nret = n;
412 }
413 else if ((vis->class == TrueColor) ||
414 (vis->class == DirectColor))
415 {
416 if ((vis->red_mask == 0x00ff0000) &&
417 (vis->green_mask == 0x0000ff00) &&
418 (vis->blue_mask == 0x000000ff))
419 mode = argbx888;
420 else if ((vis->red_mask == 0x000000ff) &&
421 (vis->green_mask == 0x0000ff00) &&
422 (vis->blue_mask == 0x00ff0000))
423 mode = abgrx888;
424 else if ((vis->red_mask == 0xff000000) &&
425 (vis->green_mask == 0x00ff0000) &&
426 (vis->blue_mask == 0x0000ff00))
427 mode = rgba888x;
428 else if ((vis->red_mask == 0x0000ff00) &&
429 (vis->green_mask == 0x00ff0000) &&
430 (vis->blue_mask == 0xff000000))
431 mode = bgra888x;
432 else if ((vis->red_mask == 0x0003f000) &&
433 (vis->green_mask == 0x00000fc0) &&
434 (vis->blue_mask == 0x0000003f))
435 mode = argbx666;
436 else if ((vis->red_mask == 0x0000f800) &&
437 (vis->green_mask == 0x000007e0) &&
438 (vis->blue_mask == 0x0000001f))
439 mode = rgb565;
440 else if ((vis->red_mask == 0x0000001f) &&
441 (vis->green_mask == 0x000007e0) &&
442 (vis->blue_mask == 0x0000f800))
443 mode = bgr565;
444 else if ((vis->red_mask == 0x00007c00) &&
445 (vis->green_mask == 0x000003e0) &&
446 (vis->blue_mask == 0x0000001f))
447 mode = rgbx555;
448 else
449 return EINA_FALSE;
450 }
451 for (row = 0; row < h; row++)
452 {
453 unsigned char *s8;
454 unsigned short *s16;
455 unsigned int *s32;
456 unsigned int *dp, *de;
457
458 dp = ((unsigned int *)(((unsigned char *)dst) +
459 ((dy + row) * dbpl))) + dx;
460 de = dp + w;
461 switch (sbpp)
462 {
463 case 8:
464 s8 = ((unsigned char *)(((unsigned char *)src) + ((y + row) * sbpl))) + x;
465 if (nret > 0)
466 {
467 while (dp < de)
468 {
469 *dp = pal[*s8];
470 s8++; dp++;
471 }
472 }
473 else
474 return EINA_FALSE;
475 break;
476
477 case 16:
478 s16 = ((unsigned short *)(((unsigned char *)src) + ((y + row) * sbpl))) + x;
479 switch (mode)
480 {
481 case rgb565:
482 while (dp < de)
483 {
484 r = (*s16 & 0xf800) << 8;
485 g = (*s16 & 0x07e0) << 5;
486 b = (*s16 & 0x001f) << 3;
487 r |= (r >> 5) & 0xff0000;
488 g |= (g >> 6) & 0x00ff00;
489 b |= (b >> 5);
490 *dp = 0xff000000 | r | g | b;
491 s16++; dp++;
492 }
493 break;
494
495 case bgr565:
496 while (dp < de)
497 {
498 r = (*s16 & 0x001f) << 19;
499 g = (*s16 & 0x07e0) << 5;
500 b = (*s16 & 0xf800) >> 8;
501 r |= (r >> 5) & 0xff0000;
502 g |= (g >> 6) & 0x00ff00;
503 b |= (b >> 5);
504 *dp = 0xff000000 | r | g | b;
505 s16++; dp++;
506 }
507 break;
508
509 case rgbx555:
510 while (dp < de)
511 {
512 r = (*s16 & 0x7c00) << 9;
513 g = (*s16 & 0x03e0) << 6;
514 b = (*s16 & 0x001f) << 3;
515 r |= (r >> 5) & 0xff0000;
516 g |= (g >> 5) & 0x00ff00;
517 b |= (b >> 5);
518 *dp = 0xff000000 | r | g | b;
519 s16++; dp++;
520 }
521 break;
522
523 default:
524 return EINA_FALSE;
525 break;
526 }
527 break;
528
529 case 24:
530 case 32:
531 s32 = ((unsigned int *)(((unsigned char *)src) + ((y + row) * sbpl))) + x;
532 switch (mode)
533 {
534 case argbx888:
535 while (dp < de)
536 {
537 *dp = 0xff000000 | *s32;
538 s32++; dp++;
539 }
540 break;
541
542 case abgrx888:
543 while (dp < de)
544 {
545 r = *s32 & 0x000000ff;
546 g = *s32 & 0x0000ff00;
547 b = *s32 & 0x00ff0000;
548 *dp = 0xff000000 | (r << 16) | (g) | (b >> 16);
549 s32++; dp++;
550 }
551 break;
552
553 case rgba888x:
554 while (dp < de)
555 {
556 *dp = 0xff000000 | (*s32 >> 8);
557 s32++; dp++;
558 }
559 break;
560
561 case bgra888x:
562 while (dp < de)
563 {
564 r = *s32 & 0x0000ff00;
565 g = *s32 & 0x00ff0000;
566 b = *s32 & 0xff000000;
567 *dp = 0xff000000 | (r << 8) | (g >> 8) | (b >> 24);
568 s32++; dp++;
569 }
570 break;
571
572 case argbx666:
573 while (dp < de)
574 {
575 r = (*s32 & 0x3f000) << 6;
576 g = (*s32 & 0x00fc0) << 4;
577 b = (*s32 & 0x0003f) << 2;
578 r |= (r >> 6) & 0xff0000;
579 g |= (g >> 6) & 0x00ff00;
580 b |= (b >> 6);
581 *dp = 0xff000000 | r | g | b;
582 s32++; dp++;
583 }
584 break;
585
586 default:
587 return EINA_FALSE;
588 break;
589 }
590 break;
591 break;
592
593 default:
594 return EINA_FALSE;
595 break;
596 }
597 }
598 return EINA_TRUE;
599}
600
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_mwm.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_mwm.c
deleted file mode 100644
index 7812cc2..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_mwm.c
+++ /dev/null
@@ -1,106 +0,0 @@
1/*
2 * Various MWM related functions.
3 *
4 * This is ALL the code involving anything MWM related. for both WM and
5 * client.
6 */
7
8#ifdef HAVE_CONFIG_H
9# include <config.h>
10#endif /* ifdef HAVE_CONFIG_H */
11
12#include <stdlib.h>
13
14#include "Ecore.h"
15#include "ecore_x_private.h"
16#include "Ecore_X.h"
17#include "Ecore_X_Atoms.h"
18
19#define ECORE_X_MWM_HINTS_FUNCTIONS (1 << 0)
20#define ECORE_X_MWM_HINTS_DECORATIONS (1 << 1)
21#define ECORE_X_MWM_HINTS_INPUT_MODE (1 << 2)
22#define ECORE_X_MWM_HINTS_STATUS (1 << 3)
23
24typedef struct _mwmhints
25{
26 CARD32 flags;
27 CARD32 functions;
28 CARD32 decorations;
29 INT32 inputmode;
30 CARD32 status;
31}
32MWMHints;
33
34EAPI Eina_Bool
35ecore_x_mwm_hints_get(Ecore_X_Window win,
36 Ecore_X_MWM_Hint_Func *fhint,
37 Ecore_X_MWM_Hint_Decor *dhint,
38 Ecore_X_MWM_Hint_Input *ihint)
39{
40 unsigned char *p = NULL;
41 MWMHints *mwmhints = NULL;
42 int num;
43 Eina_Bool ret;
44
45 LOGFN(__FILE__, __LINE__, __FUNCTION__);
46 ret = EINA_FALSE;
47 if (!ecore_x_window_prop_property_get(win,
48 ECORE_X_ATOM_MOTIF_WM_HINTS,
49 ECORE_X_ATOM_MOTIF_WM_HINTS,
50 32, &p, &num))
51 return EINA_FALSE;
52
53 mwmhints = (MWMHints *)p;
54 if (mwmhints)
55 {
56 if (num >= 4)
57 {
58 if (dhint)
59 {
60 if (mwmhints->flags & ECORE_X_MWM_HINTS_DECORATIONS)
61 *dhint = mwmhints->decorations;
62 else
63 *dhint = ECORE_X_MWM_HINT_DECOR_ALL;
64 }
65
66 if (fhint)
67 {
68 if (mwmhints->flags & ECORE_X_MWM_HINTS_FUNCTIONS)
69 *fhint = mwmhints->functions;
70 else
71 *fhint = ECORE_X_MWM_HINT_FUNC_ALL;
72 }
73
74 if (ihint)
75 {
76 if (mwmhints->flags & ECORE_X_MWM_HINTS_INPUT_MODE)
77 *ihint = mwmhints->inputmode;
78 else
79 *ihint = ECORE_X_MWM_HINT_INPUT_MODELESS;
80 }
81
82 ret = EINA_TRUE;
83 }
84
85 free(mwmhints);
86 }
87
88 return ret;
89}
90
91EAPI void
92ecore_x_mwm_borderless_set(Ecore_X_Window win,
93 Eina_Bool borderless)
94{
95 unsigned int data[5] = {0, 0, 0, 0, 0};
96
97 data[0] = 2; /* just set the decorations hint! */
98 data[2] = !borderless;
99
100 LOGFN(__FILE__, __LINE__, __FUNCTION__);
101 ecore_x_window_prop_property_set(win,
102 ECORE_X_ATOM_MOTIF_WM_HINTS,
103 ECORE_X_ATOM_MOTIF_WM_HINTS,
104 32, (void *)data, 5);
105}
106
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c
deleted file mode 100644
index 3076c3c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c
+++ /dev/null
@@ -1,2056 +0,0 @@
1/*
2 * _NET_WM... aka Extended Window Manager Hint (EWMH) functions.
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif
8
9#include <stdlib.h>
10#include <stdio.h>
11#include <string.h>
12
13#include "Ecore.h"
14#include "ecore_x_private.h"
15#include "Ecore_X.h"
16
17typedef struct _Ecore_X_Startup_Info Ecore_X_Startup_Info;
18
19struct _Ecore_X_Startup_Info
20{
21 Ecore_X_Window win;
22
23 int init;
24
25 int buffer_size;
26 char *buffer;
27
28 int length;
29
30 /* These are the sequence info fields */
31 char *id;
32 char *name;
33 int screen;
34 char *bin;
35 char *icon;
36 int desktop;
37 int timestamp;
38 char *description;
39 char *wmclass;
40 int silent;
41};
42
43static void _ecore_x_window_prop_string_utf8_set(Ecore_X_Window win,
44 Ecore_X_Atom atom,
45 const char *str);
46static char *_ecore_x_window_prop_string_utf8_get(Ecore_X_Window win,
47 Ecore_X_Atom atom);
48#if 0 /* Unused */
49static int _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info);
50static int _ecore_x_netwm_startup_info_parse(Ecore_X_Startup_Info *info,
51 char *data);
52#endif /* if 0 */
53static void _ecore_x_netwm_startup_info_free(void *data);
54
55/*
56 * Convenience macros
57 */
58#define _ATOM_SET_UTF8_STRING_LIST(win, atom, string, cnt) \
59 XChangeProperty(_ecore_x_disp, \
60 win, \
61 atom, \
62 ECORE_X_ATOM_UTF8_STRING, \
63 8, \
64 PropModeReplace, \
65 (unsigned char *)string, \
66 cnt)
67
68/*
69 * Local variables
70 */
71
72static Eina_Hash *startup_info = NULL;
73
74EAPI void
75ecore_x_netwm_init(void)
76{
77 LOGFN(__FILE__, __LINE__, __FUNCTION__);
78 startup_info = eina_hash_string_superfast_new(
79 _ecore_x_netwm_startup_info_free);
80}
81
82EAPI void
83ecore_x_netwm_shutdown(void)
84{
85 LOGFN(__FILE__, __LINE__, __FUNCTION__);
86 if (startup_info)
87 eina_hash_free(startup_info);
88
89 startup_info = NULL;
90}
91
92/*
93 * WM identification
94 */
95EAPI void
96ecore_x_netwm_wm_identify(Ecore_X_Window root,
97 Ecore_X_Window check,
98 const char *wm_name)
99{
100 LOGFN(__FILE__, __LINE__, __FUNCTION__);
101 ecore_x_window_prop_window_set(root,
102 ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
103 &check,
104 1);
105 ecore_x_window_prop_window_set(check,
106 ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
107 &check,
108 1);
109 _ecore_x_window_prop_string_utf8_set(check,
110 ECORE_X_ATOM_NET_WM_NAME,
111 wm_name);
112 /* This one isn't mandatory */
113 _ecore_x_window_prop_string_utf8_set(root,
114 ECORE_X_ATOM_NET_WM_NAME,
115 wm_name);
116}
117
118/*
119 * Set supported atoms
120 */
121EAPI void
122ecore_x_netwm_supported_set(Ecore_X_Window root,
123 Ecore_X_Atom *supported,
124 int num)
125{
126 LOGFN(__FILE__, __LINE__, __FUNCTION__);
127 ecore_x_window_prop_atom_set(root,
128 ECORE_X_ATOM_NET_SUPPORTED,
129 supported,
130 num);
131}
132
133EAPI Eina_Bool
134ecore_x_netwm_supported_get(Ecore_X_Window root,
135 Ecore_X_Atom **supported,
136 int *num)
137{
138 int num_ret;
139
140 if (num)
141 *num = 0;
142
143 if (supported)
144 *supported = NULL;
145
146 LOGFN(__FILE__, __LINE__, __FUNCTION__);
147 num_ret = ecore_x_window_prop_atom_list_get(root, ECORE_X_ATOM_NET_SUPPORTED,
148 supported);
149 if (num_ret <= 0)
150 return EINA_FALSE;
151
152 if (num)
153 *num = num_ret;
154
155 return EINA_TRUE;
156}
157
158/*
159 * Desktop configuration and status
160 */
161EAPI void
162ecore_x_netwm_desk_count_set(Ecore_X_Window root,
163 unsigned int n_desks)
164{
165 LOGFN(__FILE__, __LINE__, __FUNCTION__);
166 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS,
167 &n_desks, 1);
168}
169
170EAPI void
171ecore_x_netwm_desk_roots_set(Ecore_X_Window root,
172 Ecore_X_Window *vroots,
173 unsigned int n_desks)
174{
175 LOGFN(__FILE__, __LINE__, __FUNCTION__);
176 ecore_x_window_prop_window_set(root,
177 ECORE_X_ATOM_NET_VIRTUAL_ROOTS,
178 vroots,
179 n_desks);
180}
181
182EAPI void
183ecore_x_netwm_desk_names_set(Ecore_X_Window root,
184 const char **names,
185 unsigned int n_desks)
186{
187 char ss[32], *buf, *t;
188 const char *s;
189 unsigned int i;
190 int l, len;
191
192 LOGFN(__FILE__, __LINE__, __FUNCTION__);
193 buf = NULL;
194 len = 0;
195
196 for (i = 0; i < n_desks; i++)
197 {
198 s = (names) ? names[i] : NULL;
199 if (!s)
200 {
201 /* Default to "Desk-<number>" */
202 sprintf(ss, "Desk-%d", i);
203 s = ss;
204 }
205
206 l = strlen(s) + 1;
207 t = realloc(buf, len + l);
208 if (t)
209 {
210 buf = t;
211 memcpy(buf + len, s, l);
212 }
213 len += l;
214 }
215
216 _ATOM_SET_UTF8_STRING_LIST(root, ECORE_X_ATOM_NET_DESKTOP_NAMES, buf, len);
217
218 free(buf);
219}
220
221EAPI void
222ecore_x_netwm_desk_size_set(Ecore_X_Window root,
223 unsigned int width,
224 unsigned int height)
225{
226 unsigned int size[2];
227
228 LOGFN(__FILE__, __LINE__, __FUNCTION__);
229 size[0] = width;
230 size[1] = height;
231 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_GEOMETRY, size,
232 2);
233}
234
235EAPI void
236ecore_x_netwm_desk_viewports_set(Ecore_X_Window root,
237 unsigned int *origins,
238 unsigned int n_desks)
239{
240 LOGFN(__FILE__, __LINE__, __FUNCTION__);
241 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_VIEWPORT,
242 origins, 2 * n_desks);
243}
244
245EAPI void
246ecore_x_netwm_desk_layout_set(Ecore_X_Window root,
247 int orientation,
248 int columns,
249 int rows,
250 int starting_corner)
251{
252 unsigned int layout[4];
253
254 LOGFN(__FILE__, __LINE__, __FUNCTION__);
255 layout[0] = orientation;
256 layout[1] = columns;
257 layout[2] = rows;
258 layout[3] = starting_corner;
259 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_DESKTOP_LAYOUT,
260 layout, 4);
261}
262
263EAPI void
264ecore_x_netwm_desk_workareas_set(Ecore_X_Window root,
265 unsigned int *areas,
266 unsigned int n_desks)
267{
268 LOGFN(__FILE__, __LINE__, __FUNCTION__);
269 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_WORKAREA, areas,
270 4 * n_desks);
271}
272
273EAPI unsigned int *
274ecore_x_netwm_desk_workareas_get(Ecore_X_Window root, unsigned int *n_desks)
275{
276 int ret;
277 unsigned int *areas = NULL;
278
279 if (!root) root = DefaultRootWindow(_ecore_x_disp);
280
281 ret = ecore_x_window_prop_card32_list_get(root, ECORE_X_ATOM_NET_WORKAREA,
282 &areas);
283 if (!areas)
284 {
285 if (n_desks) *n_desks = 0;
286 return 0;
287 }
288 if (n_desks) *n_desks = ret / 4;
289 return areas;
290}
291
292EAPI void
293ecore_x_netwm_desk_current_set(Ecore_X_Window root,
294 unsigned int desk)
295{
296 LOGFN(__FILE__, __LINE__, __FUNCTION__);
297 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_CURRENT_DESKTOP, &desk,
298 1);
299}
300
301EAPI void
302ecore_x_netwm_showing_desktop_set(Ecore_X_Window root,
303 Eina_Bool on)
304{
305 unsigned int val;
306
307 LOGFN(__FILE__, __LINE__, __FUNCTION__);
308 val = (on) ? 1 : 0;
309 ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_NET_SHOWING_DESKTOP, &val,
310 1);
311}
312
313/*
314 * Client status
315 */
316
317/* Mapping order */
318EAPI void
319ecore_x_netwm_client_list_set(Ecore_X_Window root,
320 Ecore_X_Window *p_clients,
321 unsigned int n_clients)
322{
323 LOGFN(__FILE__, __LINE__, __FUNCTION__);
324 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST,
325 p_clients, n_clients);
326}
327
328/* Stacking order */
329EAPI void
330ecore_x_netwm_client_list_stacking_set(Ecore_X_Window root,
331 Ecore_X_Window *p_clients,
332 unsigned int n_clients)
333{
334 LOGFN(__FILE__, __LINE__, __FUNCTION__);
335 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_CLIENT_LIST_STACKING,
336 p_clients, n_clients);
337}
338
339EAPI void
340ecore_x_netwm_client_active_set(Ecore_X_Window root,
341 Ecore_X_Window win)
342{
343 LOGFN(__FILE__, __LINE__, __FUNCTION__);
344 ecore_x_window_prop_window_set(root, ECORE_X_ATOM_NET_ACTIVE_WINDOW,
345 &win, 1);
346}
347
348EAPI void
349ecore_x_netwm_client_active_request(Ecore_X_Window root,
350 Ecore_X_Window win,
351 int type,
352 Ecore_X_Window current_win)
353{
354 XEvent xev;
355
356 LOGFN(__FILE__, __LINE__, __FUNCTION__);
357 if (!root)
358 root = DefaultRootWindow(_ecore_x_disp);
359
360 xev.xclient.type = ClientMessage;
361 xev.xclient.display = _ecore_x_disp;
362 xev.xclient.window = win;
363 xev.xclient.message_type = ECORE_X_ATOM_NET_ACTIVE_WINDOW;
364 xev.xclient.format = 32;
365 xev.xclient.data.l[0] = type;
366 xev.xclient.data.l[1] = CurrentTime;
367 xev.xclient.data.l[2] = current_win;
368 xev.xclient.data.l[3] = 0;
369 xev.xclient.data.l[4] = 0;
370
371 XSendEvent(_ecore_x_disp, root, False,
372 SubstructureRedirectMask | SubstructureNotifyMask, &xev);
373}
374
375EAPI void
376ecore_x_netwm_name_set(Ecore_X_Window win,
377 const char *name)
378{
379 LOGFN(__FILE__, __LINE__, __FUNCTION__);
380 _ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_NAME, name);
381}
382
383EAPI int
384ecore_x_netwm_name_get(Ecore_X_Window win,
385 char **name)
386{
387 LOGFN(__FILE__, __LINE__, __FUNCTION__);
388 if (name)
389 *name = _ecore_x_window_prop_string_utf8_get(win,
390 ECORE_X_ATOM_NET_WM_NAME);
391
392 return 1;
393}
394
395EAPI void
396ecore_x_netwm_startup_id_set(Ecore_X_Window win,
397 const char *id)
398{
399 LOGFN(__FILE__, __LINE__, __FUNCTION__);
400 _ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_STARTUP_ID, id);
401}
402
403EAPI int
404ecore_x_netwm_startup_id_get(Ecore_X_Window win,
405 char **id)
406{
407 LOGFN(__FILE__, __LINE__, __FUNCTION__);
408 if (id)
409 *id = _ecore_x_window_prop_string_utf8_get(win,
410 ECORE_X_ATOM_NET_STARTUP_ID);
411
412 return 1;
413}
414
415EAPI void
416ecore_x_netwm_visible_name_set(Ecore_X_Window win,
417 const char *name)
418{
419 LOGFN(__FILE__, __LINE__, __FUNCTION__);
420 _ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_VISIBLE_NAME,
421 name);
422}
423
424EAPI int
425ecore_x_netwm_visible_name_get(Ecore_X_Window win,
426 char **name)
427{
428 LOGFN(__FILE__, __LINE__, __FUNCTION__);
429 if (name)
430 *name = _ecore_x_window_prop_string_utf8_get(
431 win,
432 ECORE_X_ATOM_NET_WM_VISIBLE_NAME);
433
434 return 1;
435}
436
437EAPI void
438ecore_x_netwm_icon_name_set(Ecore_X_Window win,
439 const char *name)
440{
441 LOGFN(__FILE__, __LINE__, __FUNCTION__);
442 _ecore_x_window_prop_string_utf8_set(win, ECORE_X_ATOM_NET_WM_ICON_NAME,
443 name);
444}
445
446EAPI int
447ecore_x_netwm_icon_name_get(Ecore_X_Window win,
448 char **name)
449{
450 LOGFN(__FILE__, __LINE__, __FUNCTION__);
451 if (name)
452 *name = _ecore_x_window_prop_string_utf8_get(
453 win,
454 ECORE_X_ATOM_NET_WM_ICON_NAME);
455
456 return 1;
457}
458
459EAPI void
460ecore_x_netwm_visible_icon_name_set(Ecore_X_Window win,
461 const char *name)
462{
463 LOGFN(__FILE__, __LINE__, __FUNCTION__);
464 _ecore_x_window_prop_string_utf8_set(win,
465 ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME,
466 name);
467}
468
469EAPI int
470ecore_x_netwm_visible_icon_name_get(Ecore_X_Window win,
471 char **name)
472{
473 LOGFN(__FILE__, __LINE__, __FUNCTION__);
474 if (name)
475 *name = _ecore_x_window_prop_string_utf8_get(
476 win,
477 ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME);
478
479 return 1;
480}
481
482EAPI void
483ecore_x_netwm_desktop_set(Ecore_X_Window win,
484 unsigned int desk)
485{
486 LOGFN(__FILE__, __LINE__, __FUNCTION__);
487 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_DESKTOP, &desk, 1);
488}
489
490EAPI Eina_Bool
491ecore_x_netwm_desktop_get(Ecore_X_Window win,
492 unsigned int *desk)
493{
494 int ret;
495 unsigned int tmp;
496
497 LOGFN(__FILE__, __LINE__, __FUNCTION__);
498 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_DESKTOP,
499 &tmp, 1);
500
501 if (desk)
502 *desk = tmp;
503
504 return ret == 1 ? EINA_TRUE : EINA_FALSE;
505}
506
507/*
508 * _NET_WM_STRUT is deprecated
509 */
510EAPI void
511ecore_x_netwm_strut_set(Ecore_X_Window win,
512 int left,
513 int right,
514 int top,
515 int bottom)
516{
517 unsigned int strut[4];
518
519 LOGFN(__FILE__, __LINE__, __FUNCTION__);
520 strut[0] = left;
521 strut[1] = right;
522 strut[2] = top;
523 strut[3] = bottom;
524 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_STRUT, strut, 4);
525}
526
527/*
528 * _NET_WM_STRUT is deprecated
529 */
530EAPI Eina_Bool
531ecore_x_netwm_strut_get(Ecore_X_Window win,
532 int *left,
533 int *right,
534 int *top,
535 int *bottom)
536{
537 int ret = 0;
538 unsigned int strut[4];
539
540 LOGFN(__FILE__, __LINE__, __FUNCTION__);
541 ret = ecore_x_window_prop_card32_get(win,
542 ECORE_X_ATOM_NET_WM_STRUT,
543 strut,
544 4);
545 if (ret != 4)
546 return EINA_FALSE;
547
548 if (left)
549 *left = strut[0];
550
551 if (right)
552 *right = strut[1];
553
554 if (top)
555 *top = strut[2];
556
557 if (bottom)
558 *bottom = strut[3];
559
560 return EINA_TRUE;
561}
562
563EAPI void
564ecore_x_netwm_strut_partial_set(Ecore_X_Window win,
565 int left,
566 int right,
567 int top,
568 int bottom,
569 int left_start_y,
570 int left_end_y,
571 int right_start_y,
572 int right_end_y,
573 int top_start_x,
574 int top_end_x,
575 int bottom_start_x,
576 int bottom_end_x)
577{
578 unsigned int strut[12];
579
580 LOGFN(__FILE__, __LINE__, __FUNCTION__);
581 strut[0] = left;
582 strut[1] = right;
583 strut[2] = top;
584 strut[3] = bottom;
585 strut[4] = left_start_y;
586 strut[5] = left_end_y;
587 strut[6] = right_start_y;
588 strut[7] = right_end_y;
589 strut[8] = top_start_x;
590 strut[9] = top_end_x;
591 strut[10] = bottom_start_x;
592 strut[11] = bottom_end_x;
593 ecore_x_window_prop_card32_set(win,
594 ECORE_X_ATOM_NET_WM_STRUT_PARTIAL,
595 strut,
596 12);
597}
598
599EAPI Eina_Bool
600ecore_x_netwm_strut_partial_get(Ecore_X_Window win,
601 int *left,
602 int *right,
603 int *top,
604 int *bottom,
605 int *left_start_y,
606 int *left_end_y,
607 int *right_start_y,
608 int *right_end_y,
609 int *top_start_x,
610 int *top_end_x,
611 int *bottom_start_x,
612 int *bottom_end_x)
613{
614 int ret = 0;
615 unsigned int strut[12];
616
617 LOGFN(__FILE__, __LINE__, __FUNCTION__);
618 ret = ecore_x_window_prop_card32_get(win,
619 ECORE_X_ATOM_NET_WM_STRUT_PARTIAL,
620 strut,
621 12);
622 if (ret != 12)
623 return EINA_FALSE;
624
625 if (left)
626 *left = strut[0];
627
628 if (right)
629 *right = strut[1];
630
631 if (top)
632 *top = strut[2];
633
634 if (bottom)
635 *bottom = strut[3];
636
637 if (left_start_y)
638 *left_start_y = strut[4];
639
640 if (left_end_y)
641 *left_end_y = strut[5];
642
643 if (right_start_y)
644 *right_start_y = strut[6];
645
646 if (right_end_y)
647 *right_end_y = strut[7];
648
649 if (top_start_x)
650 *top_start_x = strut[8];
651
652 if (top_end_x)
653 *top_end_x = strut[9];
654
655 if (bottom_start_x)
656 *bottom_start_x = strut[10];
657
658 if (bottom_end_x)
659 *bottom_end_x = strut[11];
660
661 return EINA_TRUE;
662}
663
664EAPI void
665ecore_x_netwm_icons_set(Ecore_X_Window win,
666 Ecore_X_Icon *icon,
667 int num)
668{
669 unsigned int *data, *p, *p2;
670 unsigned int i, size, x, y;
671
672 LOGFN(__FILE__, __LINE__, __FUNCTION__);
673 size = 0;
674 for (i = 0; i < (unsigned int)num; i++)
675 {
676 size += 2 + (icon[i].width * icon[i].height);
677 }
678 data = malloc(size * sizeof(unsigned int));
679 if (!data) return;
680 p = data;
681 for (i = 0; i < (unsigned int)num; i++)
682 {
683 p[0] = icon[i].width;
684 p[1] = icon[i].height;
685 p += 2;
686 p2 = icon[i].data;
687 for (y = 0; y < icon[i].height; y++)
688 {
689 for (x = 0; x < icon[i].width; x++)
690 {
691 unsigned int r, g, b, a;
692
693 a = (*p2 >> 24) & 0xff;
694 r = (*p2 >> 16) & 0xff;
695 g = (*p2 >> 8 ) & 0xff;
696 b = (*p2 ) & 0xff;
697 if ((a > 0) && (a < 255))
698 {
699 // unpremul
700 r = (r * 255) / a;
701 g = (g * 255) / a;
702 b = (b * 255) / a;
703 }
704 *p = (a << 24) | (r << 16) | (g << 8) | b;
705 p++;
706 p2++;
707 }
708 }
709 }
710 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_ICON,
711 data, size);
712 free(data);
713}
714
715EAPI Eina_Bool
716ecore_x_netwm_icons_get(Ecore_X_Window win,
717 Ecore_X_Icon **icon,
718 int *num)
719{
720 unsigned int *data, *p;
721 unsigned int *src;
722 unsigned int len, icons, i;
723 int num_ret;
724
725 LOGFN(__FILE__, __LINE__, __FUNCTION__);
726 if (num)
727 *num = 0;
728
729 if (icon)
730 *icon = NULL;
731
732 num_ret = ecore_x_window_prop_card32_list_get(win, ECORE_X_ATOM_NET_WM_ICON,
733 &data);
734 if (num_ret <= 0)
735 return EINA_FALSE;
736
737 if (!data)
738 return EINA_FALSE;
739
740 if (num_ret < 2)
741 {
742 free(data);
743 return EINA_FALSE;
744 }
745
746 /* Check how many icons there are */
747 icons = 0;
748 p = data;
749 while (p)
750 {
751 len = p[0] * p[1];
752 p += (len + 2);
753 if ((p - data) > num_ret)
754 {
755 free(data);
756 return EINA_FALSE;
757 }
758
759 icons++;
760
761 if ((p - data) == num_ret)
762 p = NULL;
763 }
764 if (num)
765 *num = icons;
766
767 /* If the user doesn't want the icons, return */
768 if (!icon)
769 {
770 free(data);
771 return EINA_TRUE;
772 }
773
774 /* Allocate memory */
775 *icon = malloc(icons * sizeof(Ecore_X_Icon));
776 if (!(*icon))
777 {
778 free(data);
779 return EINA_FALSE;
780 }
781
782 /* Fetch the icons */
783 p = data;
784 for (i = 0; i < icons; i++)
785 {
786 unsigned int *ps, *pd, *pe;
787
788 len = p[0] * p[1];
789 ((*icon)[i]).width = p[0];
790 ((*icon)[i]).height = p[1];
791 src = &(p[2]);
792 ((*icon)[i]).data = malloc(len * sizeof(unsigned int));
793 if (!((*icon)[i]).data)
794 {
795 while (i)
796 free(((*icon)[--i]).data);
797 free(*icon);
798 free(data);
799 return EINA_FALSE;
800 }
801
802 pd = ((*icon)[i]).data;
803 ps = src;
804 pe = ps + len;
805 for (; ps < pe; ps++)
806 {
807 unsigned int r, g, b, a;
808
809 a = (*ps >> 24) & 0xff;
810 r = (((*ps >> 16) & 0xff) * a) / 255;
811 g = (((*ps >> 8) & 0xff) * a) / 255;
812 b = (((*ps) & 0xff) * a) / 255;
813 *pd = (a << 24) | (r << 16) | (g << 8) | (b);
814 pd++;
815 }
816 p += (len + 2);
817 }
818
819 free(data);
820
821 return EINA_TRUE;
822}
823
824EAPI void
825ecore_x_netwm_icon_geometry_set(Ecore_X_Window win,
826 int x,
827 int y,
828 int width,
829 int height)
830{
831 unsigned int geometry[4];
832
833 LOGFN(__FILE__, __LINE__, __FUNCTION__);
834 geometry[0] = x;
835 geometry[1] = y;
836 geometry[2] = width;
837 geometry[3] = height;
838 ecore_x_window_prop_card32_set(win,
839 ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
840 geometry,
841 4);
842}
843
844EAPI Eina_Bool
845ecore_x_netwm_icon_geometry_get(Ecore_X_Window win,
846 int *x,
847 int *y,
848 int *width,
849 int *height)
850{
851 int ret;
852 unsigned int geometry[4];
853
854 LOGFN(__FILE__, __LINE__, __FUNCTION__);
855 ret = ecore_x_window_prop_card32_get(win,
856 ECORE_X_ATOM_NET_WM_ICON_GEOMETRY,
857 geometry,
858 4);
859 if (ret != 4)
860 return EINA_FALSE;
861
862 if (x)
863 *x = geometry[0];
864
865 if (y)
866 *y = geometry[1];
867
868 if (width)
869 *width = geometry[2];
870
871 if (height)
872 *height = geometry[3];
873
874 return EINA_TRUE;
875}
876
877EAPI void
878ecore_x_netwm_pid_set(Ecore_X_Window win,
879 int pid)
880{
881 unsigned int tmp;
882
883 LOGFN(__FILE__, __LINE__, __FUNCTION__);
884 tmp = pid;
885 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_PID,
886 &tmp, 1);
887}
888
889EAPI Eina_Bool
890ecore_x_netwm_pid_get(Ecore_X_Window win,
891 int *pid)
892{
893 int ret;
894 unsigned int tmp;
895
896 LOGFN(__FILE__, __LINE__, __FUNCTION__);
897 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_PID,
898 &tmp, 1);
899 if (pid)
900 *pid = tmp;
901
902 return ret == 1 ? EINA_TRUE : EINA_FALSE;
903}
904
905EAPI void
906ecore_x_netwm_handled_icons_set(Ecore_X_Window win)
907{
908 LOGFN(__FILE__, __LINE__, __FUNCTION__);
909 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
910 NULL, 0);
911}
912
913EAPI Eina_Bool
914ecore_x_netwm_handled_icons_get(Ecore_X_Window win)
915{
916 int ret = 0;
917 LOGFN(__FILE__, __LINE__, __FUNCTION__);
918 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_HANDLED_ICONS,
919 NULL, 0);
920 return ret == 0 ? EINA_TRUE : EINA_FALSE;
921}
922
923EAPI void
924ecore_x_netwm_user_time_set(Ecore_X_Window win,
925 unsigned int tim)
926{
927 LOGFN(__FILE__, __LINE__, __FUNCTION__);
928 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_USER_TIME,
929 &tim, 1);
930}
931
932EAPI Eina_Bool
933ecore_x_netwm_user_time_get(Ecore_X_Window win,
934 unsigned int *tim)
935{
936 int ret;
937 unsigned int tmp;
938
939 LOGFN(__FILE__, __LINE__, __FUNCTION__);
940 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_USER_TIME,
941 &tmp, 1);
942 if (tim)
943 *tim = tmp;
944
945 return ret == 1 ? EINA_TRUE : EINA_FALSE;
946}
947
948Ecore_X_Window_State
949_ecore_x_netwm_state_get(Ecore_X_Atom a)
950{
951 if (a == ECORE_X_ATOM_NET_WM_STATE_MODAL)
952 return ECORE_X_WINDOW_STATE_MODAL;
953 else if (a == ECORE_X_ATOM_NET_WM_STATE_STICKY)
954 return ECORE_X_WINDOW_STATE_STICKY;
955 else if (a == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT)
956 return ECORE_X_WINDOW_STATE_MAXIMIZED_VERT;
957 else if (a == ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ)
958 return ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ;
959 else if (a == ECORE_X_ATOM_NET_WM_STATE_SHADED)
960 return ECORE_X_WINDOW_STATE_SHADED;
961 else if (a == ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR)
962 return ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
963 else if (a == ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER)
964 return ECORE_X_WINDOW_STATE_SKIP_PAGER;
965 else if (a == ECORE_X_ATOM_NET_WM_STATE_HIDDEN)
966 return ECORE_X_WINDOW_STATE_HIDDEN;
967 else if (a == ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN)
968 return ECORE_X_WINDOW_STATE_FULLSCREEN;
969 else if (a == ECORE_X_ATOM_NET_WM_STATE_ABOVE)
970 return ECORE_X_WINDOW_STATE_ABOVE;
971 else if (a == ECORE_X_ATOM_NET_WM_STATE_BELOW)
972 return ECORE_X_WINDOW_STATE_BELOW;
973 else if (a == ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION)
974 return ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION;
975 else
976 return ECORE_X_WINDOW_STATE_UNKNOWN;
977}
978
979static Ecore_X_Atom
980_ecore_x_netwm_state_atom_get(Ecore_X_Window_State s)
981{
982 switch (s)
983 {
984 case ECORE_X_WINDOW_STATE_MODAL:
985 return ECORE_X_ATOM_NET_WM_STATE_MODAL;
986
987 case ECORE_X_WINDOW_STATE_STICKY:
988 return ECORE_X_ATOM_NET_WM_STATE_STICKY;
989
990 case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
991 return ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT;
992
993 case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
994 return ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ;
995
996 case ECORE_X_WINDOW_STATE_SHADED:
997 return ECORE_X_ATOM_NET_WM_STATE_SHADED;
998
999 case ECORE_X_WINDOW_STATE_SKIP_TASKBAR:
1000 return ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR;
1001
1002 case ECORE_X_WINDOW_STATE_SKIP_PAGER:
1003 return ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER;
1004
1005 case ECORE_X_WINDOW_STATE_HIDDEN:
1006 return ECORE_X_ATOM_NET_WM_STATE_HIDDEN;
1007
1008 case ECORE_X_WINDOW_STATE_FULLSCREEN:
1009 return ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN;
1010
1011 case ECORE_X_WINDOW_STATE_ABOVE:
1012 return ECORE_X_ATOM_NET_WM_STATE_ABOVE;
1013
1014 case ECORE_X_WINDOW_STATE_BELOW:
1015 return ECORE_X_ATOM_NET_WM_STATE_BELOW;
1016
1017 case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION:
1018 return ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION;
1019
1020 default:
1021 return 0;
1022 }
1023}
1024
1025EAPI void
1026ecore_x_netwm_window_state_set(Ecore_X_Window win,
1027 Ecore_X_Window_State *state,
1028 unsigned int num)
1029{
1030 Ecore_X_Atom *set;
1031 unsigned int i;
1032
1033 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1034 if (!num)
1035 {
1036 ecore_x_window_prop_property_del(win, ECORE_X_ATOM_NET_WM_STATE);
1037 return;
1038 }
1039
1040 set = malloc(num * sizeof(Ecore_X_Atom));
1041 if (!set)
1042 return;
1043
1044 for (i = 0; i < num; i++)
1045 set[i] = _ecore_x_netwm_state_atom_get(state[i]);
1046
1047 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_STATE, set, num);
1048
1049 free(set);
1050}
1051
1052EAPI Eina_Bool
1053ecore_x_netwm_window_state_get(Ecore_X_Window win,
1054 Ecore_X_Window_State **state,
1055 unsigned int *num)
1056{
1057 int num_ret, i;
1058 Ecore_X_Atom *atoms;
1059
1060 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1061 if (num)
1062 *num = 0;
1063
1064 if (state)
1065 *state = NULL;
1066
1067 num_ret = ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_STATE,
1068 &atoms);
1069 if (num_ret <= 0)
1070 return EINA_FALSE;
1071
1072 if (state)
1073 {
1074 *state = malloc(num_ret * sizeof(Ecore_X_Window_State));
1075 if (*state)
1076 for (i = 0; i < num_ret; ++i)
1077 (*state)[i] = _ecore_x_netwm_state_get(atoms[i]);
1078
1079 if (num)
1080 *num = num_ret;
1081 }
1082
1083 free(atoms);
1084 return EINA_TRUE;
1085}
1086
1087static Ecore_X_Window_Type
1088_ecore_x_netwm_window_type_type_get(Ecore_X_Atom atom)
1089{
1090 if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP)
1091 return ECORE_X_WINDOW_TYPE_DESKTOP;
1092 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK)
1093 return ECORE_X_WINDOW_TYPE_DOCK;
1094 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR)
1095 return ECORE_X_WINDOW_TYPE_TOOLBAR;
1096 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU)
1097 return ECORE_X_WINDOW_TYPE_MENU;
1098 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY)
1099 return ECORE_X_WINDOW_TYPE_UTILITY;
1100 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH)
1101 return ECORE_X_WINDOW_TYPE_SPLASH;
1102 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG)
1103 return ECORE_X_WINDOW_TYPE_DIALOG;
1104 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL)
1105 return ECORE_X_WINDOW_TYPE_NORMAL;
1106 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU)
1107 return ECORE_X_WINDOW_TYPE_DROPDOWN_MENU;
1108 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU)
1109 return ECORE_X_WINDOW_TYPE_POPUP_MENU;
1110 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP)
1111 return ECORE_X_WINDOW_TYPE_TOOLTIP;
1112 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION)
1113 return ECORE_X_WINDOW_TYPE_NOTIFICATION;
1114 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO)
1115 return ECORE_X_WINDOW_TYPE_COMBO;
1116 else if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND)
1117 return ECORE_X_WINDOW_TYPE_DND;
1118 else
1119 return ECORE_X_WINDOW_TYPE_UNKNOWN;
1120}
1121
1122static Ecore_X_Atom
1123_ecore_x_netwm_window_type_atom_get(Ecore_X_Window_Type type)
1124{
1125 switch (type)
1126 {
1127 case ECORE_X_WINDOW_TYPE_DESKTOP:
1128 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
1129
1130 case ECORE_X_WINDOW_TYPE_DOCK:
1131 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
1132
1133 case ECORE_X_WINDOW_TYPE_TOOLBAR:
1134 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
1135
1136 case ECORE_X_WINDOW_TYPE_MENU:
1137 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
1138
1139 case ECORE_X_WINDOW_TYPE_UTILITY:
1140 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
1141
1142 case ECORE_X_WINDOW_TYPE_SPLASH:
1143 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
1144
1145 case ECORE_X_WINDOW_TYPE_DIALOG:
1146 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
1147
1148 case ECORE_X_WINDOW_TYPE_NORMAL:
1149 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
1150
1151 case ECORE_X_WINDOW_TYPE_DROPDOWN_MENU:
1152 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DROPDOWN_MENU;
1153
1154 case ECORE_X_WINDOW_TYPE_POPUP_MENU:
1155 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_POPUP_MENU;
1156
1157 case ECORE_X_WINDOW_TYPE_TOOLTIP:
1158 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLTIP;
1159
1160 case ECORE_X_WINDOW_TYPE_NOTIFICATION:
1161 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NOTIFICATION;
1162
1163 case ECORE_X_WINDOW_TYPE_COMBO:
1164 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_COMBO;
1165
1166 case ECORE_X_WINDOW_TYPE_DND:
1167 return ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DND;
1168
1169 default:
1170 return 0;
1171 }
1172}
1173
1174/*
1175 * FIXME: We should set WM_TRANSIENT_FOR if type is ECORE_X_WINDOW_TYPE_TOOLBAR
1176 * , ECORE_X_WINDOW_TYPE_MENU or ECORE_X_WINDOW_TYPE_DIALOG
1177 */
1178EAPI void
1179ecore_x_netwm_window_type_set(Ecore_X_Window win,
1180 Ecore_X_Window_Type type)
1181{
1182 Ecore_X_Atom atom;
1183
1184 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1185 atom = _ecore_x_netwm_window_type_atom_get(type);
1186 ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
1187 &atom, 1);
1188}
1189
1190/* FIXME: Maybe return 0 on some conditions? */
1191EAPI Eina_Bool
1192ecore_x_netwm_window_type_get(Ecore_X_Window win,
1193 Ecore_X_Window_Type *type)
1194{
1195 int num;
1196 Ecore_X_Atom *atoms = NULL;
1197
1198 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1199 if (type)
1200 *type = ECORE_X_WINDOW_TYPE_NORMAL;
1201
1202 num = ecore_x_window_prop_atom_list_get(win,
1203 ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
1204 &atoms);
1205 if ((type) && (num >= 1) && (atoms))
1206 *type = _ecore_x_netwm_window_type_type_get(atoms[0]);
1207
1208 free(atoms);
1209 if (num >= 1)
1210 return EINA_TRUE;
1211
1212 return EINA_FALSE;
1213}
1214
1215EAPI int
1216ecore_x_netwm_window_types_get(Ecore_X_Window win,
1217 Ecore_X_Window_Type **types)
1218{
1219 int num, i;
1220 Ecore_X_Atom *atoms = NULL;
1221 Ecore_X_Window_Type *atoms2 = NULL;
1222
1223 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1224 if (types)
1225 *types = NULL;
1226
1227 num = ecore_x_window_prop_atom_list_get(win,
1228 ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
1229 &atoms);
1230 if ((num <= 0) || (!atoms))
1231 {
1232 if (atoms)
1233 free(atoms);
1234
1235 return 0;
1236 }
1237
1238 atoms2 = malloc(num * sizeof(Ecore_X_Window_Type));
1239 if (!atoms2)
1240 return 0;
1241
1242 for (i = 0; i < num; i++)
1243 atoms2[i] = _ecore_x_netwm_window_type_type_get(atoms[i]);
1244 free(atoms);
1245 if (types)
1246 *types = atoms2;
1247 else
1248 free(atoms2);
1249
1250 return num;
1251}
1252
1253static Ecore_X_Atom
1254_ecore_x_netwm_action_atom_get(Ecore_X_Action action)
1255{
1256 switch (action)
1257 {
1258 case ECORE_X_ACTION_MOVE:
1259 return ECORE_X_ATOM_NET_WM_ACTION_MOVE;
1260
1261 case ECORE_X_ACTION_RESIZE:
1262 return ECORE_X_ATOM_NET_WM_ACTION_RESIZE;
1263
1264 case ECORE_X_ACTION_MINIMIZE:
1265 return ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE;
1266
1267 case ECORE_X_ACTION_SHADE:
1268 return ECORE_X_ATOM_NET_WM_ACTION_SHADE;
1269
1270 case ECORE_X_ACTION_STICK:
1271 return ECORE_X_ATOM_NET_WM_ACTION_STICK;
1272
1273 case ECORE_X_ACTION_MAXIMIZE_HORZ:
1274 return ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ;
1275
1276 case ECORE_X_ACTION_MAXIMIZE_VERT:
1277 return ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT;
1278
1279 case ECORE_X_ACTION_FULLSCREEN:
1280 return ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN;
1281
1282 case ECORE_X_ACTION_CHANGE_DESKTOP:
1283 return ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP;
1284
1285 case ECORE_X_ACTION_CLOSE:
1286 return ECORE_X_ATOM_NET_WM_ACTION_CLOSE;
1287
1288 case ECORE_X_ACTION_ABOVE:
1289 return ECORE_X_ATOM_NET_WM_ACTION_ABOVE;
1290
1291 case ECORE_X_ACTION_BELOW:
1292 return ECORE_X_ATOM_NET_WM_ACTION_BELOW;
1293
1294 default:
1295 return 0;
1296 }
1297}
1298
1299/* FIXME: Get complete list */
1300EAPI Eina_Bool
1301ecore_x_netwm_allowed_action_isset(Ecore_X_Window win,
1302 Ecore_X_Action action)
1303{
1304 int num, i;
1305 Ecore_X_Atom *atoms, atom;
1306 Eina_Bool ret = EINA_FALSE;
1307
1308 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1309 num = ecore_x_window_prop_atom_list_get(win, ECORE_X_ATOM_NET_WM_WINDOW_TYPE,
1310 &atoms);
1311 if (num <= 0)
1312 return ret;
1313
1314 atom = _ecore_x_netwm_action_atom_get(action);
1315
1316 for (i = 0; i < num; ++i)
1317 {
1318 if (atom == atoms[i])
1319 {
1320 ret = 1;
1321 break;
1322 }
1323 }
1324
1325 free(atoms);
1326 return ret;
1327}
1328
1329/* FIXME: Set complete list */
1330EAPI void
1331ecore_x_netwm_allowed_action_set(Ecore_X_Window win,
1332 Ecore_X_Action *action,
1333 unsigned int num)
1334{
1335 Ecore_X_Atom *set;
1336 unsigned int i;
1337
1338 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1339 if (!num)
1340 {
1341 ecore_x_window_prop_property_del(win,
1342 ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS);
1343 return;
1344 }
1345
1346 set = malloc(num * sizeof(Ecore_X_Atom));
1347 if (!set)
1348 return;
1349
1350 for (i = 0; i < num; i++)
1351 set[i] = _ecore_x_netwm_action_atom_get(action[i]);
1352
1353 ecore_x_window_prop_atom_set(win,
1354 ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS,
1355 set,
1356 num);
1357
1358 free(set);
1359}
1360
1361EAPI Eina_Bool
1362ecore_x_netwm_allowed_action_get(Ecore_X_Window win,
1363 Ecore_X_Action **action,
1364 unsigned int *num)
1365{
1366 int num_ret, i;
1367 Ecore_X_Atom *atoms;
1368
1369 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1370 if (num)
1371 *num = 0;
1372
1373 if (action)
1374 *action = NULL;
1375
1376 num_ret = ecore_x_window_prop_atom_list_get(
1377 win,
1378 ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS,
1379 &atoms);
1380 if (num_ret <= 0)
1381 return EINA_FALSE;
1382
1383 if (action)
1384 {
1385 *action = malloc(num_ret * sizeof(Ecore_X_Action));
1386 if (*action)
1387 for (i = 0; i < num_ret; ++i)
1388 (*action)[i] = _ecore_x_netwm_action_atom_get(atoms[i]);
1389
1390 if (num)
1391 *num = num_ret;
1392 }
1393
1394 free(atoms);
1395 return EINA_TRUE;
1396}
1397
1398EAPI void
1399ecore_x_netwm_opacity_set(Ecore_X_Window win,
1400 unsigned int opacity)
1401{
1402 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1403 ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
1404 &opacity, 1);
1405}
1406
1407EAPI Eina_Bool
1408ecore_x_netwm_opacity_get(Ecore_X_Window win,
1409 unsigned int *opacity)
1410{
1411 int ret;
1412 unsigned int tmp;
1413
1414 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1415 ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_NET_WM_WINDOW_OPACITY,
1416 &tmp, 1);
1417 if (opacity)
1418 *opacity = tmp;
1419
1420 return ret == 1 ? EINA_TRUE : EINA_FALSE;
1421}
1422
1423EAPI void
1424ecore_x_netwm_frame_size_set(Ecore_X_Window win,
1425 int fl,
1426 int fr,
1427 int ft,
1428 int fb)
1429{
1430 unsigned int frames[4];
1431
1432 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1433 frames[0] = fl;
1434 frames[1] = fr;
1435 frames[2] = ft;
1436 frames[3] = fb;
1437 ecore_x_window_prop_card32_set(win,
1438 ECORE_X_ATOM_NET_FRAME_EXTENTS,
1439 frames,
1440 4);
1441}
1442
1443EAPI Eina_Bool
1444ecore_x_netwm_frame_size_get(Ecore_X_Window win,
1445 int *fl,
1446 int *fr,
1447 int *ft,
1448 int *fb)
1449{
1450 int ret = 0;
1451 unsigned int frames[4];
1452
1453 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1454 ret = ecore_x_window_prop_card32_get(win,
1455 ECORE_X_ATOM_NET_FRAME_EXTENTS,
1456 frames,
1457 4);
1458 if (ret != 4)
1459 return EINA_FALSE;
1460
1461 if (fl)
1462 *fl = frames[0];
1463
1464 if (fr)
1465 *fr = frames[1];
1466
1467 if (ft)
1468 *ft = frames[2];
1469
1470 if (fb)
1471 *fb = frames[3];
1472
1473 return EINA_TRUE;
1474}
1475
1476EAPI Eina_Bool
1477ecore_x_netwm_sync_counter_get(Ecore_X_Window win,
1478 Ecore_X_Sync_Counter *counter)
1479{
1480 int ret;
1481 unsigned int tmp;
1482
1483 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1484 ret = ecore_x_window_prop_card32_get(
1485 win,
1486 ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER,
1487 &tmp,
1488 1);
1489
1490 if (counter)
1491 *counter = tmp;
1492
1493 return ret == 1 ? EINA_TRUE : EINA_FALSE;
1494}
1495
1496EAPI void
1497ecore_x_netwm_ping_send(Ecore_X_Window win)
1498{
1499 XEvent xev;
1500
1501 if (!win)
1502 return;
1503
1504 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1505 xev.xclient.type = ClientMessage;
1506 xev.xclient.display = _ecore_x_disp;
1507 xev.xclient.window = win;
1508 xev.xclient.message_type = ECORE_X_ATOM_WM_PROTOCOLS;
1509 xev.xclient.format = 32;
1510 xev.xclient.data.l[0] = ECORE_X_ATOM_NET_WM_PING;
1511 xev.xclient.data.l[1] = _ecore_x_event_last_time;
1512 xev.xclient.data.l[2] = win;
1513 xev.xclient.data.l[3] = 0;
1514 xev.xclient.data.l[4] = 0;
1515
1516 XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
1517}
1518
1519EAPI void
1520ecore_x_netwm_sync_request_send(Ecore_X_Window win,
1521 unsigned int serial)
1522{
1523 XSyncValue value;
1524 XEvent xev;
1525
1526 if (!win)
1527 return;
1528
1529 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1530 XSyncIntToValue(&value, (int)serial);
1531
1532 xev.xclient.type = ClientMessage;
1533 xev.xclient.display = _ecore_x_disp;
1534 xev.xclient.window = win;
1535 xev.xclient.message_type = ECORE_X_ATOM_WM_PROTOCOLS;
1536 xev.xclient.format = 32;
1537 xev.xclient.data.l[0] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
1538 xev.xclient.data.l[1] = _ecore_x_event_last_time;
1539 xev.xclient.data.l[2] = XSyncValueLow32(value);
1540 xev.xclient.data.l[3] = XSyncValueHigh32(value);
1541 xev.xclient.data.l[4] = 0;
1542
1543 XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
1544}
1545
1546EAPI void
1547ecore_x_netwm_state_request_send(Ecore_X_Window win,
1548 Ecore_X_Window root,
1549 Ecore_X_Window_State s1,
1550 Ecore_X_Window_State s2,
1551 Eina_Bool set)
1552{
1553 XEvent xev;
1554
1555 if (!win)
1556 return;
1557
1558 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1559 if (!root)
1560 root = DefaultRootWindow(_ecore_x_disp);
1561
1562 xev.xclient.type = ClientMessage;
1563 xev.xclient.serial = 0;
1564 xev.xclient.send_event = True;
1565 xev.xclient.display = _ecore_x_disp;
1566 xev.xclient.window = win;
1567 xev.xclient.format = 32;
1568 xev.xclient.message_type = ECORE_X_ATOM_NET_WM_STATE;
1569 xev.xclient.data.l[0] = !!set;
1570 xev.xclient.data.l[1] = _ecore_x_netwm_state_atom_get(s1);
1571 xev.xclient.data.l[2] = _ecore_x_netwm_state_atom_get(s2);
1572 /* 1 == normal client, if someone wants to use this
1573 * function in a pager, this should be 2 */
1574 xev.xclient.data.l[3] = 1;
1575 xev.xclient.data.l[4] = 0;
1576
1577 XSendEvent(_ecore_x_disp, root, False,
1578 SubstructureNotifyMask | SubstructureRedirectMask, &xev);
1579}
1580
1581EAPI void
1582ecore_x_netwm_desktop_request_send(Ecore_X_Window win,
1583 Ecore_X_Window root,
1584 unsigned int desktop)
1585{
1586 XEvent xev;
1587
1588 if (!win)
1589 return;
1590
1591 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1592 if (!root)
1593 root = DefaultRootWindow(_ecore_x_disp);
1594
1595 xev.xclient.type = ClientMessage;
1596 xev.xclient.serial = 0;
1597 xev.xclient.send_event = True;
1598 xev.xclient.display = _ecore_x_disp;
1599 xev.xclient.window = win;
1600 xev.xclient.format = 32;
1601 xev.xclient.message_type = ECORE_X_ATOM_NET_WM_DESKTOP;
1602 xev.xclient.data.l[0] = desktop;
1603
1604 XSendEvent(_ecore_x_disp, root, False,
1605 SubstructureNotifyMask | SubstructureRedirectMask, &xev);
1606}
1607
1608int
1609_ecore_x_netwm_startup_info_begin(Ecore_X_Window win __UNUSED__,
1610 char *data __UNUSED__)
1611{
1612#if 0
1613 Ecore_X_Startup_Info *info;
1614 unsigned char *exists = 0;
1615
1616 if (!startup_info)
1617 return 0;
1618
1619 info = eina_hash_find(startup_info, (void *)win);
1620 if (info)
1621 {
1622 exists = 1;
1623 WRN("Already got info for win: 0x%x", win);
1624 _ecore_x_netwm_startup_info_free(info);
1625 }
1626
1627 info = calloc(1, sizeof(Ecore_X_Startup_Info));
1628 if (!info)
1629 return 0;
1630
1631 info->win = win;
1632 info->length = 0;
1633 info->buffer_size = 161;
1634 info->buffer = calloc(info->buffer_size, sizeof(char));
1635 if (!info->buffer)
1636 {
1637 _ecore_x_netwm_startup_info_free(info);
1638 return 0;
1639 }
1640
1641 memcpy(info->buffer, data, 20);
1642 info->length += 20;
1643 info->buffer[info->length] = 0;
1644 if (exists)
1645 eina_hash_modify(startup_info, (void *)info->win, info);
1646 else
1647 eina_hash_add(startup_info, (void *)info->win, info);
1648
1649 if (strlen(info->buffer) != 20)
1650 /* We have a '\0' in there, the message is done */
1651 _ecore_x_netwm_startup_info_process(info);
1652
1653#endif /* if 0 */
1654 return 1;
1655}
1656
1657int
1658_ecore_x_netwm_startup_info(Ecore_X_Window win __UNUSED__,
1659 char *data __UNUSED__)
1660{
1661#if 0
1662 Ecore_X_Startup_Info *info;
1663 char *p;
1664
1665 if (!startup_info)
1666 return 0;
1667
1668 info = eina_hash_find(startup_info, (void *)win);
1669 if (!info)
1670 return 0;
1671
1672 if ((info->length + 20) > info->buffer_size)
1673 {
1674 info->buffer_size += 160;
1675 info->buffer = realloc(info->buffer, info->buffer_size * sizeof(char));
1676 if (!info->buffer)
1677 {
1678 eina_hash_del(startup_info, (void *)info->win);
1679 _ecore_x_netwm_startup_info_free(info);
1680 return 0;
1681 }
1682 }
1683
1684 memcpy(info->buffer + info->length, data, 20);
1685 p = info->buffer + info->length;
1686 info->length += 20;
1687 info->buffer[info->length] = 0;
1688 if (strlen(p) != 20)
1689 /* We have a '\0' in there, the message is done */
1690 _ecore_x_netwm_startup_info_process(info);
1691
1692#endif /* if 0 */
1693 return 1;
1694}
1695
1696/*
1697 * Set UTF-8 string property
1698 */
1699static void
1700_ecore_x_window_prop_string_utf8_set(Ecore_X_Window win,
1701 Ecore_X_Atom atom,
1702 const char *str)
1703{
1704 XChangeProperty(_ecore_x_disp, win, atom, ECORE_X_ATOM_UTF8_STRING, 8,
1705 PropModeReplace, (unsigned char *)str, strlen(str));
1706}
1707
1708/*
1709 * Get UTF-8 string property
1710 */
1711static char *
1712_ecore_x_window_prop_string_utf8_get(Ecore_X_Window win,
1713 Ecore_X_Atom atom)
1714{
1715 char *str;
1716 unsigned char *prop_ret;
1717 Atom type_ret;
1718 unsigned long bytes_after, num_ret;
1719 int format_ret;
1720
1721 str = NULL;
1722 prop_ret = NULL;
1723 XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
1724 ECORE_X_ATOM_UTF8_STRING, &type_ret,
1725 &format_ret, &num_ret, &bytes_after, &prop_ret);
1726 if (prop_ret && num_ret > 0 && format_ret == 8)
1727 {
1728 str = malloc(num_ret + 1);
1729 if (str)
1730 {
1731 memcpy(str, prop_ret, num_ret);
1732 str[num_ret] = '\0';
1733 }
1734 }
1735
1736 if (prop_ret)
1737 XFree(prop_ret);
1738
1739 return str;
1740}
1741
1742#if 0 /* Unused */
1743/*
1744 * Process startup info
1745 */
1746static int
1747_ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
1748{
1749 Ecore_X_Event_Startup_Sequence *e;
1750 int event;
1751 char *p;
1752
1753 p = strchr(info->buffer, ':');
1754 if (!p)
1755 {
1756 eina_hash_del(startup_info, (void *)info->win);
1757 _ecore_x_netwm_startup_info_free(info);
1758 return 0;
1759 }
1760
1761 *p = 0;
1762 if (!strcmp(info->buffer, "new"))
1763 {
1764 if (info->init)
1765 event = ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE;
1766 else
1767 event = ECORE_X_EVENT_STARTUP_SEQUENCE_NEW;
1768
1769 info->init = 1;
1770 }
1771 else if (!strcmp(info->buffer, "change"))
1772 event = ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE;
1773 else if (!strcmp(info->buffer, "remove"))
1774 event = ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE;
1775 else
1776 {
1777 eina_hash_del(startup_info, (void *)info->win);
1778 _ecore_x_netwm_startup_info_free(info);
1779 return 0;
1780 }
1781
1782 p++;
1783
1784 if (!_ecore_x_netwm_startup_info_parse(info, p))
1785 {
1786 eina_hash_del(startup_info, (void *)info->win);
1787 _ecore_x_netwm_startup_info_free(info);
1788 return 0;
1789 }
1790
1791 if (info->init)
1792 {
1793 e = calloc(1, sizeof(Ecore_X_Event_Startup_Sequence));
1794 if (!e)
1795 {
1796 eina_hash_del(startup_info, (void *)info->win);
1797 _ecore_x_netwm_startup_info_free(info);
1798 return 0;
1799 }
1800
1801 e->win = info->win;
1802 ecore_event_add(event, e, NULL, NULL);
1803 }
1804
1805 if (event == ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE)
1806 {
1807 eina_hash_del(startup_info, (void *)info->win);
1808 _ecore_x_netwm_startup_info_free(info);
1809 }
1810 else
1811 {
1812 /* Discard buffer */
1813 info->length = 0;
1814 info->buffer[0] = 0;
1815 }
1816
1817 return 1;
1818}
1819
1820/*
1821 * Parse startup info
1822 */
1823static int
1824_ecore_x_netwm_startup_info_parse(Ecore_X_Startup_Info *info,
1825 char *data)
1826{
1827 while (*data)
1828 {
1829 int in_quot_sing, in_quot_dbl, escaped;
1830 char *p, *pp;
1831 char *key;
1832 char value[1024];
1833
1834 /* Skip space */
1835 while (*data == ' ')
1836 data++;
1837 /* Get key */
1838 key = data;
1839 data = strchr(key, '=');
1840 if (!data)
1841 return 0;
1842
1843 *data = 0;
1844 data++;
1845
1846 /* Get value */
1847 p = data;
1848 pp = value;
1849 in_quot_dbl = 0;
1850 in_quot_sing = 0;
1851 escaped = 0;
1852 while (*p)
1853 {
1854 if ((pp - value) >= 1024)
1855 return 0;
1856
1857 if (escaped)
1858 {
1859 *pp = *p;
1860 pp++;
1861 escaped = 0;
1862 }
1863 else if (in_quot_sing)
1864 {
1865 if (*p == '\\')
1866 escaped = 1;
1867 else if (*p == '\'')
1868 in_quot_sing = 0;
1869 else
1870 {
1871 *pp = *p;
1872 pp++;
1873 }
1874 }
1875 else if (in_quot_dbl)
1876 {
1877 if (*p == '\\')
1878 escaped = 1;
1879 else if (*p == '\"')
1880 in_quot_dbl = 0;
1881 else
1882 {
1883 *pp = *p;
1884 pp++;
1885 }
1886 }
1887 else
1888 {
1889 if (*p == '\\')
1890 escaped = 1;
1891 else if (*p == '\'')
1892 in_quot_sing = 1;
1893 else if (*p == '\"')
1894 in_quot_dbl = 1;
1895 else if (*p == ' ')
1896 break;
1897 else
1898 {
1899 *pp = *p;
1900 pp++;
1901 }
1902 }
1903
1904 p++;
1905 }
1906 if ((in_quot_dbl) || (in_quot_sing))
1907 return 0;
1908
1909 data = p;
1910 *pp = 0;
1911
1912 /* Parse info */
1913 if (!strcmp(key, "ID"))
1914 {
1915 if ((info->id) && (strcmp(info->id, value)))
1916 return 0;
1917
1918 info->id = strdup(value);
1919 p = strstr(value, "_TIME");
1920 if (p)
1921 info->timestamp = atoi(p + 5);
1922 }
1923 else if (!strcmp(key, "NAME"))
1924 {
1925 if (info->name)
1926 free(info->name);
1927
1928 info->name = strdup(value);
1929 }
1930 else if (!strcmp(key, "SCREEN"))
1931 info->screen = atoi(value);
1932 else if (!strcmp(key, "BIN"))
1933 {
1934 if (info->bin)
1935 free(info->bin);
1936
1937 info->bin = strdup(value);
1938 }
1939 else if (!strcmp(key, "ICON"))
1940 {
1941 if (info->icon)
1942 free(info->icon);
1943
1944 info->icon = strdup(value);
1945 }
1946 else if (!strcmp(key, "DESKTOP"))
1947 info->desktop = atoi(value);
1948 else if (!strcmp(key, "TIMESTAMP"))
1949 {
1950 if (!info->timestamp)
1951 info->timestamp = atoi(value);
1952 }
1953 else if (!strcmp(key, "DESCRIPTION"))
1954 {
1955 if (info->description)
1956 free(info->description);
1957
1958 info->description = strdup(value);
1959 }
1960 else if (!strcmp(key, "WMCLASS"))
1961 {
1962 if (info->wmclass)
1963 free(info->wmclass);
1964
1965 info->wmclass = strdup(value);
1966 }
1967 else if (!strcmp(key, "SILENT"))
1968 info->silent = atoi(value);
1969 else
1970 ERR("Ecore X Sequence, Unknown: %s=%s", key, value);
1971 }
1972 if (!info->id)
1973 return 0;
1974
1975 return 1;
1976}
1977
1978#endif /* if 0 */
1979
1980/*
1981 * Free startup info struct
1982 */
1983static void
1984_ecore_x_netwm_startup_info_free(void *data)
1985{
1986 Ecore_X_Startup_Info *info;
1987
1988 info = data;
1989 if (!info)
1990 return;
1991
1992 if (info->buffer)
1993 free(info->buffer);
1994
1995 if (info->id)
1996 free(info->id);
1997
1998 if (info->name)
1999 free(info->name);
2000
2001 if (info->bin)
2002 free(info->bin);
2003
2004 if (info->icon)
2005 free(info->icon);
2006
2007 if (info->description)
2008 free(info->description);
2009
2010 if (info->wmclass)
2011 free(info->wmclass);
2012
2013 free(info);
2014}
2015
2016/*
2017 * Is screen composited?
2018 */
2019EAPI Eina_Bool
2020ecore_x_screen_is_composited(int screen)
2021{
2022 Ecore_X_Window win;
2023 static Ecore_X_Atom atom = None;
2024 char buf[32];
2025
2026 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2027 snprintf(buf, sizeof(buf), "_NET_WM_CM_S%i", screen);
2028 if (atom == None)
2029 atom = XInternAtom(_ecore_x_disp, buf, False);
2030
2031 if (atom == None)
2032 return EINA_FALSE;
2033
2034 win = XGetSelectionOwner(_ecore_x_disp, atom);
2035
2036 return (win != None) ? EINA_TRUE : EINA_FALSE;
2037}
2038
2039EAPI void
2040ecore_x_screen_is_composited_set(int screen,
2041 Ecore_X_Window win)
2042{
2043 static Ecore_X_Atom atom = None;
2044 char buf[32];
2045
2046 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2047 snprintf(buf, sizeof(buf), "_NET_WM_CM_S%i", screen);
2048 if (atom == None)
2049 atom = XInternAtom(_ecore_x_disp, buf, False);
2050
2051 if (atom == None)
2052 return;
2053
2054 XSetSelectionOwner(_ecore_x_disp, atom, win, _ecore_x_event_last_time);
2055}
2056
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_pixmap.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_pixmap.c
deleted file mode 100644
index 7b13615..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_pixmap.c
+++ /dev/null
@@ -1,121 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "Ecore.h"
6#include "ecore_x_private.h"
7#include "Ecore_X.h"
8
9/**
10 * @defgroup Ecore_X_Pixmap_Group X Pixmap Functions
11 *
12 * Functions that operate on pixmaps.
13 */
14
15/**
16 * Creates a new pixmap.
17 * @param win Window used to determine which screen of the display the
18 * pixmap should be created on. If 0, the default root window
19 * is used.
20 * @param w Width of the new pixmap.
21 * @param h Height of the new pixmap.
22 * @param dep Depth of the pixmap. If 0, the default depth of the default
23 * screen is used.
24 * @return New pixmap.
25 * @ingroup Ecore_X_Pixmap_Group
26 */
27EAPI Ecore_X_Pixmap
28ecore_x_pixmap_new(Ecore_X_Window win,
29 int w,
30 int h,
31 int dep)
32{
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34 if (win == 0)
35 win = DefaultRootWindow(_ecore_x_disp);
36
37 if (dep == 0)
38 dep = DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp));
39
40 return XCreatePixmap(_ecore_x_disp, win, w, h, dep);
41}
42
43/**
44 * Deletes the reference to the given pixmap.
45 *
46 * If no other clients have a reference to the given pixmap, the server
47 * will destroy it.
48 *
49 * @param pmap The given pixmap.
50 * @ingroup Ecore_X_Pixmap_Group
51 */
52EAPI void
53ecore_x_pixmap_free(Ecore_X_Pixmap pmap)
54{
55 LOGFN(__FILE__, __LINE__, __FUNCTION__);
56 XFreePixmap(_ecore_x_disp, pmap);
57}
58
59/**
60 * Pastes a rectangular area of the given pixmap onto the given drawable.
61 * @param pmap The given pixmap.
62 * @param dest The given drawable.
63 * @param gc The graphics context which governs which operation will
64 * be used to paste the area onto the drawable.
65 * @param sx The X position of the area on the pixmap.
66 * @param sy The Y position of the area on the pixmap.
67 * @param w The width of the area.
68 * @param h The height of the area.
69 * @param dx The X position at which to paste the area on @p dest.
70 * @param dy The Y position at which to paste the area on @p dest.
71 * @ingroup Ecore_X_Pixmap_Group
72 */
73EAPI void
74ecore_x_pixmap_paste(Ecore_X_Pixmap pmap,
75 Ecore_X_Drawable dest,
76 Ecore_X_GC gc,
77 int sx,
78 int sy,
79 int w,
80 int h,
81 int dx,
82 int dy)
83{
84 LOGFN(__FILE__, __LINE__, __FUNCTION__);
85 XCopyArea(_ecore_x_disp, pmap, dest, gc, sx, sy, w, h, dx, dy);
86}
87
88/**
89 * Retrieves the size of the given pixmap.
90 * @param pmap The given pixmap.
91 * @param x Pointer to an integer in which to store the X position.
92 * @param y Pointer to an integer in which to store the Y position.
93 * @param w Pointer to an integer in which to store the width.
94 * @param h Pointer to an integer in which to store the height.
95 * @ingroup Ecore_X_Pixmap_Group
96 */
97EAPI void
98ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap,
99 int *x,
100 int *y,
101 int *w,
102 int *h)
103{
104 LOGFN(__FILE__, __LINE__, __FUNCTION__);
105 if (pmap)
106 ecore_x_drawable_geometry_get(pmap, x, y, w, h);
107}
108
109/**
110 * Retrieves the depth of the given pixmap.
111 * @param pmap The given pixmap.
112 * @return The depth of the pixmap.
113 * @ingroup Ecore_X_Pixmap_Group
114 */
115EAPI int
116ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap)
117{
118 LOGFN(__FILE__, __LINE__, __FUNCTION__);
119 return ecore_x_drawable_depth_get(pmap);
120}
121
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_private.h b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_private.h
deleted file mode 100644
index 02a01f7..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_private.h
+++ /dev/null
@@ -1,385 +0,0 @@
1#ifndef _ECORE_X_PRIVATE_H
2#define _ECORE_X_PRIVATE_H
3
4#include <sys/param.h>
5#ifndef MAXHOSTNAMELEN
6#define MAXHOSTNAMELEN 256
7#endif /* ifndef MAXHOSTNAMELEN */
8
9#include <X11/Xlib.h>
10#include <X11/Xproto.h>
11#include <X11/Xutil.h>
12#include <X11/Xatom.h>
13#include <X11/Xresource.h>
14#include <X11/keysymdef.h>
15#include <X11/extensions/XShm.h>
16#include <X11/extensions/shape.h>
17#include <X11/extensions/sync.h>
18#include <X11/extensions/dpms.h>
19#ifdef ECORE_XCURSOR
20#include <X11/Xcursor/Xcursor.h>
21#endif /* ifdef ECORE_XCURSOR */
22#ifdef ECORE_XPRINT
23#include <X11/extensions/Print.h>
24#endif /* ifdef ECORE_XPRINT */
25#ifdef ECORE_XINERAMA
26#include <X11/extensions/Xinerama.h>
27#endif /* ifdef ECORE_XINERAMA */
28#ifdef ECORE_XRANDR
29#include <X11/extensions/Xrandr.h>
30#endif /* ifdef ECORE_XRANDR */
31#ifdef ECORE_XSS
32#include <X11/extensions/scrnsaver.h>
33#endif /* ifdef ECORE_XSS */
34#ifdef ECORE_XRENDER
35#include <X11/extensions/Xrender.h>
36#endif /* ifdef ECORE_XRENDER */
37#ifdef ECORE_XFIXES
38#include <X11/extensions/Xfixes.h>
39#endif /* ifdef ECORE_XFIXES */
40#ifdef ECORE_XCOMPOSITE
41#include <X11/extensions/Xcomposite.h>
42#endif /* ifdef ECORE_XCOMPOSITE */
43#ifdef ECORE_XDAMAGE
44#include <X11/extensions/Xdamage.h>
45#endif /* ifdef ECORE_XDAMAGE */
46#ifdef ECORE_XGESTURE
47#include <X11/extensions/gesture.h>
48#include <X11/extensions/gestureproto.h>
49#endif /* ifdef ECORE_XGESTURE */
50#ifdef ECORE_XDPMS
51#include <X11/extensions/dpms.h>
52#endif /* ifdef ECORE_XDPMS */
53#ifdef ECORE_XKB
54#include <X11/XKBlib.h>
55#endif /* ifdef ECORE_XKB */
56#ifdef ECORE_XI2
57#include <X11/extensions/XInput2.h>
58#endif /* ifdef ECORE_XI2 */
59
60#ifndef XK_MISCELLANY
61# define XK_MISCELLANY 1
62#endif
63
64#include "Ecore.h"
65#include "ecore_private.h"
66#include "Ecore_X.h"
67#include "Ecore_Input.h"
68
69extern int _ecore_xlib_log_dom;
70#ifdef ECORE_XLIB_DEFAULT_LOG_COLOR
71# undef ECORE_XLIB_DEFAULT_LOG_COLOR
72#endif /* ifdef ECORE_XLIB_DEFAULT_LOG_COLOR */
73#define ECORE_XLIB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
74
75#ifdef ERR
76# undef ERR
77#endif /* ifdef ERR */
78#define ERR(...) EINA_LOG_DOM_ERR(_ecore_xlib_log_dom, __VA_ARGS__)
79
80#ifdef DBG
81# undef DBG
82#endif /* ifdef DBG */
83#define DBG(...) EINA_LOG_DOM_DBG(_ecore_xlib_log_dom, __VA_ARGS__)
84
85#ifdef INF
86# undef INF
87#endif /* ifdef INF */
88#define INF(...) EINA_LOG_DOM_INFO(_ecore_xlib_log_dom, __VA_ARGS__)
89
90#ifdef WRN
91# undef WRN
92#endif /* ifdef WRN */
93#define WRN(...) EINA_LOG_DOM_WARN(_ecore_xlib_log_dom, __VA_ARGS__)
94
95#ifdef CRIT
96# undef CRIT
97#endif /* ifdef CRIT */
98#define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_xlib_log_dom, __VA_ARGS__)
99
100typedef struct _Ecore_X_Selection_Intern Ecore_X_Selection_Intern;
101
102struct _Ecore_X_Selection_Intern
103{
104 Ecore_X_Window win;
105 Ecore_X_Atom selection;
106 unsigned char *data;
107 int length;
108 Time time;
109};
110
111typedef struct _Ecore_X_Selection_Converter Ecore_X_Selection_Converter;
112
113struct _Ecore_X_Selection_Converter
114{
115 Ecore_X_Atom target;
116 Eina_Bool (*convert)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *type, int *typeseize);
117 Ecore_X_Selection_Converter *next;
118};
119
120typedef struct _Ecore_X_Selection_Parser Ecore_X_Selection_Parser;
121
122struct _Ecore_X_Selection_Parser
123{
124 char *target;
125 void *(*parse)(const char *target, void *data, int size, int format);
126 Ecore_X_Selection_Parser *next;
127};
128
129typedef struct _Ecore_X_DND_Source
130{
131 int version;
132 Ecore_X_Window win, dest;
133
134 enum {
135 ECORE_X_DND_SOURCE_IDLE,
136 ECORE_X_DND_SOURCE_DRAGGING,
137 ECORE_X_DND_SOURCE_DROPPED,
138 ECORE_X_DND_SOURCE_CONVERTING
139 } state;
140
141 struct
142 {
143 short x, y;
144 unsigned short width, height;
145 } rectangle;
146
147 struct
148 {
149 Ecore_X_Window window;
150 int x, y;
151 } prev;
152
153 Time time;
154
155 Ecore_X_Atom action, accepted_action;
156
157 int will_accept;
158 int suppress;
159
160 int await_status;
161} Ecore_X_DND_Source;
162
163typedef struct _Ecore_X_DND_Target
164{
165 int version;
166 Ecore_X_Window win, source;
167
168 enum {
169 ECORE_X_DND_TARGET_IDLE,
170 ECORE_X_DND_TARGET_ENTERED
171 } state;
172
173 struct
174 {
175 int x, y;
176 } pos;
177
178 Time time;
179
180 Ecore_X_Atom action, accepted_action;
181
182 int will_accept;
183} Ecore_X_DND_Target;
184
185extern int ECORE_X_MODIFIER_SHIFT;
186extern int ECORE_X_MODIFIER_CTRL;
187extern int ECORE_X_MODIFIER_ALT;
188extern int ECORE_X_MODIFIER_WIN;
189
190extern int ECORE_X_LOCK_SCROLL;
191extern int ECORE_X_LOCK_NUM;
192extern int ECORE_X_LOCK_CAPS;
193extern int ECORE_X_LOCK_SHIFT;
194
195extern Display *_ecore_x_disp;
196extern double _ecore_x_double_click_time;
197extern Time _ecore_x_event_last_time;
198extern Window _ecore_x_event_last_win;
199extern int _ecore_x_event_last_root_x;
200extern int _ecore_x_event_last_root_y;
201extern Eina_Bool _ecore_x_xcursor;
202
203extern Ecore_X_Atom _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
204
205extern int _ecore_window_grabs_num;
206extern Window *_ecore_window_grabs;
207extern Eina_Bool (*_ecore_window_grab_replay_func)(void *data,
208 int event_type,
209 void *event);
210extern void *_ecore_window_grab_replay_data;
211
212extern Ecore_X_Window _ecore_x_private_win;
213
214void _ecore_x_error_handler_init(void);
215void _ecore_x_event_handle_any_event(XEvent *xevent);
216void _ecore_x_event_handle_key_press(XEvent *xevent);
217void _ecore_x_event_handle_key_release(XEvent *xevent);
218void _ecore_x_event_handle_button_press(XEvent *xevent);
219void _ecore_x_event_handle_button_release(XEvent *xevent);
220void _ecore_x_event_handle_motion_notify(XEvent *xevent);
221void _ecore_x_event_handle_enter_notify(XEvent *xevent);
222void _ecore_x_event_handle_leave_notify(XEvent *xevent);
223void _ecore_x_event_handle_focus_in(XEvent *xevent);
224void _ecore_x_event_handle_focus_out(XEvent *xevent);
225void _ecore_x_event_handle_keymap_notify(XEvent *xevent);
226void _ecore_x_event_handle_expose(XEvent *xevent);
227void _ecore_x_event_handle_graphics_expose(XEvent *xevent);
228void _ecore_x_event_handle_visibility_notify(XEvent *xevent);
229void _ecore_x_event_handle_create_notify(XEvent *xevent);
230void _ecore_x_event_handle_destroy_notify(XEvent *xevent);
231void _ecore_x_event_handle_unmap_notify(XEvent *xevent);
232void _ecore_x_event_handle_map_notify(XEvent *xevent);
233void _ecore_x_event_handle_map_request(XEvent *xevent);
234void _ecore_x_event_handle_reparent_notify(XEvent *xevent);
235void _ecore_x_event_handle_configure_notify(XEvent *xevent);
236void _ecore_x_event_handle_configure_request(XEvent *xevent);
237void _ecore_x_event_handle_gravity_notify(XEvent *xevent);
238void _ecore_x_event_handle_resize_request(XEvent *xevent);
239void _ecore_x_event_handle_circulate_notify(XEvent *xevent);
240void _ecore_x_event_handle_circulate_request(XEvent *xevent);
241void _ecore_x_event_handle_property_notify(XEvent *xevent);
242void _ecore_x_event_handle_selection_clear(XEvent *xevent);
243void _ecore_x_event_handle_selection_request(XEvent *xevent);
244void _ecore_x_event_handle_selection_notify(XEvent *xevent);
245void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
246void _ecore_x_event_handle_client_message(XEvent *xevent);
247void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
248void _ecore_x_event_handle_shape_change(XEvent *xevent);
249void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
250#ifdef ECORE_XGESTURE
251void _ecore_x_event_handle_gesture_notify_flick(XEvent *xevent);
252void _ecore_x_event_handle_gesture_notify_pan(XEvent *xevent);
253void _ecore_x_event_handle_gesture_notify_pinchrotation(XEvent *xevent);
254void _ecore_x_event_handle_gesture_notify_tap(XEvent *xevent);
255void _ecore_x_event_handle_gesture_notify_tapnhold(XEvent *xevent);
256void _ecore_x_event_handle_gesture_notify_hold(XEvent *xevent);
257void _ecore_x_event_handle_gesture_notify_group(XEvent *xevent);
258#endif /* ifdef ECORE_XGESTURE */
259void _ecore_x_event_handle_sync_counter(XEvent *xevent);
260void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
261#ifdef ECORE_XRANDR
262void _ecore_x_event_handle_randr_change(XEvent *xevent);
263void _ecore_x_event_handle_randr_notify(XEvent *xevent);
264#endif /* ifdef ECORE_XRANDR */
265#ifdef ECORE_XFIXES
266void _ecore_x_event_handle_fixes_selection_notify(XEvent *xevent);
267#endif /* ifdef ECORE_XFIXES */
268#ifdef ECORE_XDAMAGE
269void _ecore_x_event_handle_damage_notify(XEvent *xevent);
270#endif /* ifdef ECORE_XDAMAGE */
271void _ecore_x_event_handle_generic_event(XEvent *xevent);
272
273void _ecore_x_selection_data_init(void);
274void _ecore_x_selection_shutdown(void);
275Ecore_X_Atom _ecore_x_selection_target_atom_get(const char *target);
276char *_ecore_x_selection_target_get(Ecore_X_Atom target);
277Ecore_X_Selection_Intern *_ecore_x_selection_get(Ecore_X_Atom selection);
278Eina_Bool _ecore_x_selection_set(Window w,
279 const void *data,
280 int len,
281 Ecore_X_Atom selection);
282int _ecore_x_selection_convert(Ecore_X_Atom selection,
283 Ecore_X_Atom target,
284 void **data_ret,
285 Ecore_X_Atom *targettype,
286 int *targetsize);
287void *_ecore_x_selection_parse(const char *target,
288 void *data,
289 int size,
290 int format);
291
292void _ecore_x_sync_magic_send(int val,
293 Ecore_X_Window swin);
294void _ecore_x_window_grab_remove(Ecore_X_Window win);
295void _ecore_x_key_grab_remove(Ecore_X_Window win);
296
297/* from dnd */
298void _ecore_x_dnd_init(void);
299Ecore_X_DND_Source *_ecore_x_dnd_source_get(void);
300Ecore_X_DND_Target *_ecore_x_dnd_target_get(void);
301void _ecore_x_dnd_drag(Ecore_X_Window root,
302 int x,
303 int y);
304void _ecore_x_dnd_shutdown(void);
305
306/* from netwm */
307Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
308int _ecore_x_netwm_startup_info_begin(Ecore_X_Window win,
309 char *data);
310int _ecore_x_netwm_startup_info(Ecore_X_Window win,
311 char *data);
312
313/* Fixes * Damage * Composite * DPMS */
314void _ecore_x_fixes_init(void);
315void _ecore_x_damage_init(void);
316void _ecore_x_composite_init(void);
317void _ecore_x_dpms_init(void);
318void _ecore_x_randr_init(void);
319void _ecore_x_gesture_init(void);
320
321void _ecore_x_atoms_init(void);
322
323extern int _ecore_x_xi2_opcode;
324
325void _ecore_x_events_init(void);
326void _ecore_x_events_shutdown(void);
327
328void _ecore_x_input_init(void);
329void _ecore_x_input_shutdown(void);
330void _ecore_x_input_handler(XEvent *xevent);
331/* from sync */
332
333void _ecore_mouse_move(unsigned int timestamp,
334 unsigned int xmodifiers,
335 int x,
336 int y,
337 int x_root,
338 int y_root,
339 unsigned int event_window,
340 unsigned int window,
341 unsigned int root_win,
342 int same_screen,
343 int dev,
344 double radx,
345 double rady,
346 double pressure,
347 double angle,
348 double mx,
349 double my,
350 double mrx,
351 double mry);
352Ecore_Event_Mouse_Button *_ecore_mouse_button(int event,
353 unsigned int timestamp,
354 unsigned int xmodifiers,
355 unsigned int buttons,
356 int x,
357 int y,
358 int x_root,
359 int y_root,
360 unsigned int event_window,
361 unsigned int window,
362 unsigned int root_win,
363 int same_screen,
364 int dev,
365 double radx,
366 double rady,
367 double pressure,
368 double angle,
369 double mx,
370 double my,
371 double mrx,
372 double mry);
373
374void _ecore_x_modifiers_get(void);
375
376//#define LOGFNS 1
377
378#ifdef LOGFNS
379#include <stdio.h>
380#define LOGFN(fl, ln, fn) printf("-ECORE-X: %25s: %5i - %s\n", fl, ln, fn);
381#else /* ifdef LOGFNS */
382#define LOGFN(fl, ln, fn)
383#endif /* ifdef LOGFNS */
384
385#endif /* ifndef _ECORE_X_PRIVATE_H */
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.c
deleted file mode 100644
index d4d834f..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.c
+++ /dev/null
@@ -1,102 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6#include "ecore_x_randr.h"
7
8static Eina_Bool _randr_available = EINA_FALSE;
9#ifdef ECORE_XRANDR
10static int _randr_major, _randr_minor;
11int _randr_version;
12#define RANDR_1_1 ((1 << 16) | 1)
13#define RANDR_1_2 ((1 << 16) | 2)
14#define RANDR_1_3 ((1 << 16) | 3)
15
16#define RANDR_VALIDATE_ROOT(screen, \
17 root) ((screen = \
18 XRRRootToScreen(_ecore_x_disp, \
19 root)) != -1)
20
21#define Ecore_X_Randr_Unset -1
22
23XRRScreenResources *(*_ecore_x_randr_get_screen_resources)(Display * dpy,
24 Window window);
25
26#endif /* ifdef ECORE_XRANDR */
27
28void
29_ecore_x_randr_init(void)
30{
31#ifdef ECORE_XRANDR
32 _randr_major = 1;
33 _randr_minor = 3;
34 _randr_version = 0;
35
36 _ecore_x_randr_get_screen_resources = NULL;
37 if (XRRQueryVersion(_ecore_x_disp, &_randr_major, &_randr_minor))
38 {
39 _randr_version = (_randr_major << 16) | _randr_minor;
40 if (_randr_version >= RANDR_1_3)
41 _ecore_x_randr_get_screen_resources = XRRGetScreenResourcesCurrent;
42 else if (_randr_version == RANDR_1_2)
43 _ecore_x_randr_get_screen_resources = XRRGetScreenResources;
44
45 _randr_available = EINA_TRUE;
46 }
47 else
48 _randr_available = EINA_FALSE;
49
50#else
51 _randr_available = EINA_FALSE;
52#endif
53}
54
55/*
56 * @brief query whether randr is available or not
57 * @return EINA_TRUE, if extension is available, else EINA_FALSE
58 */
59EAPI Eina_Bool
60ecore_x_randr_query(void)
61{
62 return _randr_available;
63}
64
65/*
66 * @return version of the RandRR extension supported by the server or,
67 * in case RandRR extension is not available, Ecore_X_Randr_Unset (=-1).
68 * bit version information: 31 MAJOR 16 | 15 MINOR 0
69 */
70EAPI int
71ecore_x_randr_version_get(void)
72{
73#ifdef ECORE_XRANDR
74 LOGFN(__FILE__, __LINE__, __FUNCTION__);
75 if (_randr_available)
76 {
77 return _randr_version;
78 }
79 else
80 {
81 return Ecore_X_Randr_Unset;
82 }
83#else
84 return -1;
85#endif
86}
87
88Eina_Bool
89_ecore_x_randr_root_validate(Ecore_X_Window root)
90{
91#ifdef ECORE_XRANDR
92 Ecore_X_Randr_Screen scr = -1;
93 if (root && RANDR_VALIDATE_ROOT(scr, root))
94 return EINA_TRUE;
95 else
96 return EINA_FALSE;
97
98#else
99 return EINA_FALSE;
100#endif
101}
102
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.h b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.h
deleted file mode 100644
index eca3c0c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr.h
+++ /dev/null
@@ -1,7 +0,0 @@
1#ifndef ECORE_X_INLINE_X
2#define ECORE_X_INLINE_X
3Eina_Bool _ecore_x_randr_root_validate(Ecore_X_Window root);
4Eina_Bool _ecore_x_randr_output_validate(Ecore_X_Window root,
5 Ecore_X_Randr_Output
6 output);
7#endif
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_11.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_11.c
deleted file mode 100644
index 816f8d5..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_11.c
+++ /dev/null
@@ -1,335 +0,0 @@
1/*
2 * vim:ts=8:sw=3:sts=8:expandtab:cino=>5n-3f0^-2{2
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif /* ifdef HAVE_CONFIG_H */
8
9#include "ecore_x_private.h"
10#include "ecore_x_randr.h"
11#include <stdio.h>
12#include <stdlib.h>
13#include <unistd.h>
14#include <string.h>
15
16#define Ecore_X_Randr_None 0
17#ifdef ECORE_XRANDR
18
19#define RANDR_1_1 ((1 << 16) | 1)
20
21#define RANDR_VALIDATE_ROOT(screen, \
22 root) ((screen = \
23 XRRRootToScreen(_ecore_x_disp, \
24 root)) != -1)
25#define RANDR_CHECK_1_1_RET(ret) if (_randr_version < RANDR_1_1) \
26 return ret
27
28extern XRRScreenResources *(*_ecore_x_randr_get_screen_resources)(Display *
29 dpy,
30 Window
31 window);
32extern int _randr_version;
33#endif /* ifdef ECORE_XRANDR */
34
35/*
36 * @param root window which's primary output will be queried
37 */
38EAPI Ecore_X_Randr_Orientation
39ecore_x_randr_screen_primary_output_orientations_get(Ecore_X_Window root)
40{
41#ifdef ECORE_XRANDR
42 Rotation rot = Ecore_X_Randr_None, crot;
43
44 LOGFN(__FILE__, __LINE__, __FUNCTION__);
45 rot =
46 XRRRotations(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp,
47 root), &crot);
48 return rot;
49#else /* ifdef ECORE_XRANDR */
50 return Ecore_X_Randr_None;
51#endif /* ifdef ECORE_XRANDR */
52}
53
54/*
55 * @param root window which's primary output will be queried
56 * @return the current orientation of the root window's screen primary output
57 */
58EAPI Ecore_X_Randr_Orientation
59ecore_x_randr_screen_primary_output_orientation_get(Ecore_X_Window root)
60{
61#ifdef ECORE_XRANDR
62 Rotation crot = Ecore_X_Randr_None;
63 XRRRotations(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp,
64 root), &crot);
65 return crot;
66#else /* ifdef ECORE_XRANDR */
67 return Ecore_X_Randr_None;
68#endif /* ifdef ECORE_XRANDR */
69}
70
71/*
72 * @brief sets a given screen's primary output's orientation
73 * @param root window which's screen's primary output will be queried
74 * @param orientation orientation which should be set for the root window's screen primary output
75 * @return EINA_TRUE if the primary output's orientation could be successfully altered
76 */
77EAPI Eina_Bool
78ecore_x_randr_screen_primary_output_orientation_set(
79 Ecore_X_Window root,
80 Ecore_X_Randr_Orientation
81 orientation)
82{
83#ifdef ECORE_XRANDR
84 XRRScreenConfiguration *xrr_screen_cfg = NULL;
85 int sizeid;
86 Rotation crot;
87 Eina_Bool ret = EINA_FALSE;
88 if (!(xrr_screen_cfg = XRRGetScreenInfo(_ecore_x_disp, root)))
89 return EINA_FALSE;
90
91 sizeid = XRRConfigCurrentConfiguration(xrr_screen_cfg, &crot);
92 if (!XRRSetScreenConfig(_ecore_x_disp, xrr_screen_cfg, root, sizeid,
93 orientation, CurrentTime))
94 ret = EINA_TRUE;
95
96 if (xrr_screen_cfg)
97 XRRFreeScreenConfigInfo(xrr_screen_cfg);
98
99 return ret;
100#else /* ifdef ECORE_XRANDR */
101 return EINA_FALSE;
102#endif /* ifdef ECORE_XRANDR */
103}
104
105/*
106 * @brief gets a screen's primary output's possible sizes
107 * @param root window which's primary output will be queried
108 * @param num number of sizes reported as supported by the screen's primary output
109 * @return an array of sizes reported as supported by the screen's primary output or - if query failed - NULL
110 */
111EAPI Ecore_X_Randr_Screen_Size_MM *
112ecore_x_randr_screen_primary_output_sizes_get(Ecore_X_Window root,
113 int *num)
114{
115#ifdef ECORE_XRANDR
116 Ecore_X_Randr_Screen_Size_MM *ret = NULL;
117 XRRScreenSize *sizes;
118 int i, n;
119
120 /* we don't have to free sizes, because they're hold in a cache inside X*/
121 sizes =
122 XRRSizes(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp,
123 root), &n);
124 if ((!sizes) || (n <= 0)) return NULL;
125 ret = calloc(n, sizeof(Ecore_X_Randr_Screen_Size_MM));
126 if (!ret)
127 return NULL;
128
129 if (num)
130 *num = n;
131
132 for (i = 0; i < n; i++)
133 {
134 ret[i].width = sizes[i].width;
135 ret[i].height = sizes[i].height;
136 ret[i].width_mm = sizes[i].mwidth;
137 ret[i].height_mm = sizes[i].mheight;
138 }
139 return ret;
140#else /* ifdef ECORE_XRANDR */
141 return NULL;
142#endif /* ifdef ECORE_XRANDR */
143}
144
145/*
146 * @brief get the current set size of a given screen's primary output
147 * @param root window which's primary output will be queried
148 * @param w the current size's width
149 * @param h the current size's height
150 * @param w_mm the current size's width in mm
151 * @param h_mm the current size's height in mm
152 * @param size_index of current set size to be used with ecore_x_randr_primary_output_size_set()
153 */
154EAPI void
155ecore_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root,
156 int *w,
157 int *h,
158 int *w_mm,
159 int *h_mm,
160 int *size_index)
161{
162#ifdef ECORE_XRANDR
163 XRRScreenSize *sizes;
164 XRRScreenConfiguration *sc = NULL;
165 int idx;
166 Rotation orientation;
167 int n;
168
169 if (!(sc = XRRGetScreenInfo(_ecore_x_disp, root)))
170 {
171 ERR("Couldn't get screen information for %d", root);
172 return;
173 }
174
175 idx = XRRConfigCurrentConfiguration(sc, &orientation);
176
177 sizes =
178 XRRSizes(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp,
179 root), &n);
180 if ((idx < n) && (idx >= 0))
181 {
182 if (w)
183 *w = sizes[idx].width;
184
185 if (h)
186 *h = sizes[idx].height;
187
188 if (w_mm)
189 *w_mm = sizes[idx].mwidth;
190
191 if (h_mm)
192 *h_mm = sizes[idx].mheight;
193
194 if (size_index)
195 *size_index = idx;
196 }
197
198 XRRFreeScreenConfigInfo(sc);
199#endif /* ifdef ECORE_XRANDR */
200}
201
202/*
203 * @brief sets a given screen's primary output size, but disables all other outputs at the same time
204 * @param root window which's primary output will be queried
205 * @param size_index within the list of sizes reported as supported by the root window's screen primary output
206 * @return EINA_TRUE on success, EINA_FALSE on failure due to e.g. invalid times
207 */
208EAPI Eina_Bool
209ecore_x_randr_screen_primary_output_size_set(Ecore_X_Window root,
210 int size_index)
211{
212#ifdef ECORE_XRANDR
213 XRRScreenConfiguration *sc = NULL;
214 Eina_Bool ret = EINA_FALSE;
215 int nsizes = 0;
216
217 if (size_index >= 0 && _ecore_x_randr_root_validate(root))
218 {
219 XRRSizes(_ecore_x_disp, XRRRootToScreen(_ecore_x_disp,
220 root), &nsizes);
221
222 if (size_index < nsizes)
223 {
224 sc = XRRGetScreenInfo(_ecore_x_disp, root);
225 if (!XRRSetScreenConfig(_ecore_x_disp, sc,
226 root, size_index,
227 ECORE_X_RANDR_ORIENTATION_ROT_0, CurrentTime))
228 {
229 ret = EINA_TRUE;
230 }
231
232 if (sc)
233 XRRFreeScreenConfigInfo(sc);
234 }
235 }
236
237 return ret;
238#else /* ifdef ECORE_XRANDR */
239 return EINA_FALSE;
240#endif /* ifdef ECORE_XRANDR */
241}
242
243/*
244 * @param root window which's primary output will be queried
245 * @return currently used refresh rate or - if request failed or RandRR is not available - 0.0
246 */
247EAPI Ecore_X_Randr_Refresh_Rate
248ecore_x_randr_screen_primary_output_current_refresh_rate_get(
249 Ecore_X_Window root)
250{
251#ifdef ECORE_XRANDR
252 Ecore_X_Randr_Refresh_Rate ret = 0.0;
253 XRRScreenConfiguration *sc = NULL;
254
255 if (!_ecore_x_randr_root_validate(root) ||
256 !(sc = XRRGetScreenInfo(_ecore_x_disp, root)))
257 return ret;
258
259 ret = XRRConfigCurrentRate(sc);
260 if (sc)
261 XRRFreeScreenConfigInfo(sc);
262
263 return ret;
264#else /* ifdef ECORE_XRANDR */
265 return 0.0;
266#endif /* ifdef ECORE_XRANDR */
267}
268
269/*
270 * @param root window which's primary output will be queried
271 * @param size_index referencing the size to query valid refresh rates for
272 * @return currently used refresh rate or - if request failed or RandRR is not available - NULL
273 */
274EAPI Ecore_X_Randr_Refresh_Rate *
275ecore_x_randr_screen_primary_output_refresh_rates_get(Ecore_X_Window root,
276 int size_index,
277 int *num)
278{
279#ifdef ECORE_XRANDR
280 Ecore_X_Randr_Refresh_Rate *ret = NULL, *rates = NULL;
281 Ecore_X_Randr_Screen scr;
282 int n;
283
284 if (num
285 && RANDR_VALIDATE_ROOT(scr, root)
286 && (rates = XRRRates(_ecore_x_disp, scr, size_index, &n)))
287 {
288 if (rates && (ret = malloc(sizeof(Ecore_X_Randr_Refresh_Rate) * n)))
289 {
290 memcpy(ret, rates, (sizeof(Ecore_X_Randr_Refresh_Rate) * n));
291 *num = n;
292 }
293 }
294
295 return ret;
296#else /* ifdef ECORE_XRANDR */
297 return NULL;
298#endif /* ifdef ECORE_XRANDR */
299}
300
301//>= 1.1
302/*
303 * @brief sets the current primary output's refresh rate
304 * @param root window which's primary output will be queried
305 * @param size_index referencing the size to be set
306 * @param rate the refresh rate to be set
307 * @return EINA_TRUE on success else EINA_FALSE
308 */
309EAPI Eina_Bool
310ecore_x_randr_screen_primary_output_refresh_rate_set(
311 Ecore_X_Window root,
312 int size_index,
313 Ecore_X_Randr_Refresh_Rate
314 rate)
315{
316#ifdef ECORE_XRANDR
317 RANDR_CHECK_1_1_RET(EINA_FALSE);
318 Eina_Bool ret = EINA_FALSE;
319 XRRScreenConfiguration *sc = NULL;
320
321 if (!(sc = XRRGetScreenInfo(_ecore_x_disp, root)))
322 return ret;
323
324 if (!XRRSetScreenConfigAndRate(_ecore_x_disp, sc,
325 root, size_index,
326 RR_Rotate_0, rate, CurrentTime))
327 ret = EINA_TRUE;
328
329 XRRFreeScreenConfigInfo(sc);
330 return ret;
331#else /* ifdef ECORE_XRANDR */
332 return EINA_FALSE;
333#endif /* ifdef ECORE_XRANDR */
334}
335
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12.c
deleted file mode 100644
index ec23b3c..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12.c
+++ /dev/null
@@ -1,2360 +0,0 @@
1/*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif
8
9#include "ecore_x_private.h"
10#include "ecore_x_randr.h"
11#include <stdio.h>
12#include <stdlib.h>
13#include <unistd.h>
14#include <string.h>
15
16#define Ecore_X_Randr_None (Ecore_X_Randr_Crtc)0
17#define Ecore_X_Randr_Unset (Ecore_X_Randr_Crtc) - 1
18
19#ifdef ECORE_XRANDR
20
21#define RANDR_1_2 ((1 << 16) | 2)
22
23#define RANDR_VALIDATE_ROOT(screen, root) \
24 ((screen = XRRRootToScreen(_ecore_x_disp, root)) != -1)
25
26#define RANDR_CHECK_1_2_RET(ret) if (_randr_version < RANDR_1_2) \
27 return ret
28
29#define RANDR_PROPERTY_EDID "EDID"
30#define RANDR_PROPERTY_BACKLIGHT "Backlight"
31#define RANDR_PROPERTY_SIGNAL_FORMAT "SignalFormat"
32#define RANDR_PROPERTY_SIGNAL_PROPERTIES "SignalProperties"
33#define RANDR_PROPERTY_CONNECTOR_TYPE "ConnectorType"
34#define RANDR_PROPERTY_CONNECTOR_NUMBER "ConnectorNumber"
35#define RANDR_PROPERTY_COMPATIBILITY_LIST "CompatibilityList"
36#define RANDR_PROPERTY_CLONE_LIST "CloneList"
37
38extern XRRScreenResources *(*_ecore_x_randr_get_screen_resources)(Display *
39 dpy,
40 Window
41 window);
42extern int _randr_version;
43#endif
44
45/**
46 * @brief enable event selection. This enables basic interaction with
47 * output/crtc events and requires RRandR >= 1.2.
48 * @param win select this window's properties for RandRR events
49 * @param on enable/disable selecting
50 */
51EAPI void
52ecore_x_randr_events_select(Ecore_X_Window win,
53 Eina_Bool on)
54{
55#ifdef ECORE_XRANDR
56 int mask;
57
58 LOGFN(__FILE__, __LINE__, __FUNCTION__);
59 if (!on)
60 mask = 0;
61 else
62 {
63 mask = RRScreenChangeNotifyMask;
64 if (_randr_version >= RANDR_1_2)
65 mask |= (RRCrtcChangeNotifyMask |
66 RROutputChangeNotifyMask |
67 RROutputPropertyNotifyMask);
68 }
69
70 XRRSelectInput(_ecore_x_disp, win, mask);
71#endif
72}
73
74/**
75 * @brief validates a CRTC for a given root window's screen.
76 * @param root the window which's default display will be queried
77 * @param crtc the CRTC to be validated.
78 * @return in case it is found EINA_TRUE will be returned. Else EINA_FALSE is returned.
79 */
80static inline Eina_Bool
81_ecore_x_randr_crtc_validate(Ecore_X_Window root,
82 Ecore_X_Randr_Crtc crtc)
83{
84#ifdef ECORE_XRANDR
85 RANDR_CHECK_1_2_RET(EINA_FALSE);
86
87 XRRScreenResources *res = NULL;
88 int i;
89 Eina_Bool ret = EINA_FALSE;
90
91 if ((crtc == Ecore_X_Randr_None) ||
92 (crtc == Ecore_X_Randr_Unset))
93 return ret;
94
95 if (_ecore_x_randr_root_validate(root) && crtc &&
96 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
97 {
98 for (i = 0; i < res->ncrtc; i++)
99 {
100 if (res->crtcs[i] == crtc)
101 {
102 ret = EINA_TRUE;
103 break;
104 }
105 }
106 XRRFreeScreenResources(res);
107 }
108
109 return ret;
110#else
111 return EINA_FALSE;
112#endif
113}
114
115Eina_Bool
116_ecore_x_randr_output_validate(Ecore_X_Window root,
117 Ecore_X_Randr_Output output)
118{
119#ifdef ECORE_XRANDR
120 RANDR_CHECK_1_2_RET(EINA_FALSE);
121
122 Eina_Bool ret = EINA_FALSE;
123 XRRScreenResources *res = NULL;
124 int i;
125
126 if (_ecore_x_randr_root_validate(root) && output &&
127 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
128 {
129 for (i = 0; i < res->noutput; i++)
130 {
131 if (res->outputs[i] == output)
132 {
133 ret = EINA_TRUE;
134 break;
135 }
136 }
137 XRRFreeScreenResources(res);
138 }
139
140 return ret;
141#else
142 return EINA_FALSE;
143#endif
144}
145
146static inline Eina_Bool
147_ecore_x_randr_mode_validate(Ecore_X_Window root,
148 Ecore_X_Randr_Mode mode)
149{
150#ifdef ECORE_XRANDR
151 RANDR_CHECK_1_2_RET(EINA_FALSE);
152
153 Eina_Bool ret = EINA_FALSE;
154 XRRScreenResources *res = NULL;
155 int i;
156
157 if (_ecore_x_randr_root_validate(root) && mode &&
158 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
159 {
160 for (i = 0; i < res->nmode; i++)
161 {
162 if (res->modes[i].id == mode)
163 {
164 ret = EINA_TRUE;
165 break;
166 }
167 }
168 XRRFreeScreenResources(res);
169 }
170
171 return ret;
172#else
173 return EINA_FALSE;
174#endif
175}
176
177/*
178 * @param w width of screen in px
179 * @param h height of screen in px
180 */
181EAPI void
182ecore_x_randr_screen_current_size_get(Ecore_X_Window root,
183 int *w,
184 int *h,
185 int *w_mm,
186 int *h_mm)
187{
188#ifdef ECORE_XRANDR
189 RANDR_CHECK_1_2_RET();
190 Ecore_X_Randr_Screen scr;
191
192 if (!RANDR_VALIDATE_ROOT(scr, root))
193 return;
194
195 if (w)
196 *w = DisplayWidth(_ecore_x_disp, scr);
197
198 if (h)
199 *h = DisplayHeight(_ecore_x_disp, scr);
200
201 if (w_mm)
202 *w_mm = DisplayWidthMM(_ecore_x_disp, scr);
203
204 if (h_mm)
205 *h_mm = DisplayHeightMM(_ecore_x_disp, scr);
206
207#endif
208}
209
210/*
211 * @param root window which's screen will be queried
212 * @param wmin minimum width the screen can be set to
213 * @param hmin minimum height the screen can be set to
214 * @param wmax maximum width the screen can be set to
215 * @param hmax maximum height the screen can be set to
216 */
217EAPI void
218ecore_x_randr_screen_size_range_get(Ecore_X_Window root,
219 int *wmin,
220 int *hmin,
221 int *wmax,
222 int *hmax)
223{
224#ifdef ECORE_XRANDR
225 RANDR_CHECK_1_2_RET();
226 int twmin, thmin, twmax, thmax;
227 if (XRRGetScreenSizeRange (_ecore_x_disp, root, &twmin, &thmin, &twmax,
228 &thmax))
229 {
230 if (wmin)
231 *wmin = twmin;
232
233 if (hmin)
234 *hmin = thmin;
235
236 if (wmax)
237 *wmax = twmax;
238
239 if (hmax)
240 *hmax = thmax;
241 }
242
243#endif
244}
245
246/*
247 * @param root window which's screen's size should be set. If invalid (e.g. NULL) no action is taken.
248 * @param w width in px the screen should be set to. If out of valid boundaries, current value is assumed.
249 * @param h height in px the screen should be set to. If out of valid boundaries, current value is assumed.
250 * @param w_mm width in mm the screen should be set to. If 0, current aspect is assumed.
251 * @param h_mm height in mm the screen should be set to. If 0, current aspect is assumed.
252 * @return EINA_TRUE if request was successfully sent or screen is already in
253 * requested size, EINA_FALSE if parameters are invalid
254 */
255EAPI Eina_Bool
256ecore_x_randr_screen_current_size_set(Ecore_X_Window root,
257 int w,
258 int h,
259 int w_mm,
260 int h_mm)
261{
262#ifdef ECORE_XRANDR
263 RANDR_CHECK_1_2_RET(EINA_FALSE);
264
265 Ecore_X_Randr_Screen scr;
266 int w_c, h_c, w_mm_c, h_mm_c, twmin, thmin, twmax, thmax;
267
268 if (!RANDR_VALIDATE_ROOT(scr, root))
269 return EINA_FALSE;
270
271 ecore_x_randr_screen_current_size_get(root, &w_c, &h_c, &w_mm_c, &h_mm_c);
272 if ((w == w_c) && (h == h_c) && (w_mm_c == w_mm) && (h_mm_c == h_mm))
273 return EINA_TRUE;
274
275 ecore_x_randr_screen_size_range_get(root, &twmin, &thmin, &twmax, &thmax);
276
277 if (((w != Ecore_X_Randr_None) &&
278 ((w < twmin) ||
279 (w > twmax))) ||
280 ((h != Ecore_X_Randr_None) && ((h < thmin) || (h > thmax))))
281 return EINA_FALSE;
282
283 if (w <= 0)
284 w = DisplayWidth(_ecore_x_disp, scr);
285
286 if (h <= 0)
287 h = DisplayHeight(_ecore_x_disp, scr);
288
289 if (w_mm <= 0)
290 w_mm =
291 (int)(((double)(DisplayWidthMM(_ecore_x_disp,
292 scr) /
293 (double)DisplayWidth(_ecore_x_disp,
294 scr))) * (double)w);
295
296 if (h_mm <= 0)
297 h_mm =
298 (int)(((double)(DisplayHeightMM(_ecore_x_disp,
299 scr) /
300 (double)DisplayHeight(_ecore_x_disp,
301 scr))) * (double)h);
302
303 XRRSetScreenSize (_ecore_x_disp, root, w, h, w_mm, h_mm);
304 return EINA_TRUE;
305#else
306 return EINA_FALSE;
307#endif
308}
309
310/*
311 * @brief get detailed information for all modes related to a root window's screen
312 * @param root window which's screen's ressources are queried
313 * @param num number of modes returned
314 * @return modes' information
315 */
316EAPI Ecore_X_Randr_Mode_Info **
317ecore_x_randr_modes_info_get(Ecore_X_Window root,
318 int *num)
319{
320#ifdef ECORE_XRANDR
321 RANDR_CHECK_1_2_RET(NULL);
322 XRRScreenResources *res = NULL;
323 Ecore_X_Randr_Mode_Info **ret = NULL;
324 int i;
325
326 if (_ecore_x_randr_root_validate(root) &&
327 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
328 {
329 if ((ret =
330 (Ecore_X_Randr_Mode_Info **)malloc(sizeof(
331 Ecore_X_Randr_Mode_Info *)
332 *
333 res->nmode)))
334 {
335 for (i = 0; i < res->nmode; i++)
336 {
337 if ((ret[i] = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
338 {
339 ret[i]->xid = res->modes[i].id;
340 ret[i]->width = res->modes[i].width;
341 ret[i]->height = res->modes[i].height;
342 ret[i]->dotClock = res->modes[i].dotClock;
343 ret[i]->hSyncStart = res->modes[i].hSyncStart;
344 ret[i]->hSyncEnd = res->modes[i].hSyncEnd;
345 ret[i]->hTotal = res->modes[i].hTotal;
346 ret[i]->hSkew = res->modes[i].hSkew;
347 ret[i]->vSyncStart = res->modes[i].vSyncStart;
348 ret[i]->vSyncEnd = res->modes[i].vSyncEnd;
349 ret[i]->vTotal = res->modes[i].vTotal;
350 if ((ret[i]->name = (malloc(res->modes[i].nameLength + 1))))
351 strncpy(ret[i]->name, res->modes[i].name,
352 (res->modes[i].nameLength + 1));
353 else
354 ret[i]->name = NULL;
355
356 ret[i]->nameLength = res->modes[i].nameLength;
357 ret[i]->modeFlags = res->modes[i].modeFlags;
358 }
359 else
360 {
361 while (i > 0)
362 free(ret[--i]);
363 free(ret);
364 ret = NULL;
365 break;
366 }
367 }
368 }
369
370 if (ret && num)
371 *num = res->nmode;
372
373 XRRFreeScreenResources(res);
374 }
375
376 return ret;
377#else
378 return NULL;
379#endif
380}
381
382/*
383 * @brief add a mode to a display
384 * @param root window to which's screen's ressources are added
385 * @param mode_info
386 * @return Ecore_X_Randr_Mode of the added mode. Ecore_X_Randr_None if mode
387 * adding failed.
388 * @since 1.2.0
389 */
390EAPI Ecore_X_Randr_Mode
391ecore_x_randr_mode_info_add(Ecore_X_Window root,
392 Ecore_X_Randr_Mode_Info *mode_info)
393{
394#ifdef ECORE_XRANDR
395 RANDR_CHECK_1_2_RET(EINA_FALSE);
396 Ecore_X_Randr_Mode mode = Ecore_X_Randr_None;
397
398 if (_ecore_x_randr_root_validate(root) && mode_info)
399 mode = XRRCreateMode(_ecore_x_disp, root, (XRRModeInfo*)mode_info);
400
401 return mode;
402#else
403 return Ecore_X_Randr_None;
404#endif
405}
406
407/*
408 * @brief delete a mode from the display
409 * @param mode_info
410 * @since 1.2.0
411 */
412EAPI void
413ecore_x_randr_mode_del(Ecore_X_Randr_Mode mode)
414{
415#ifdef ECORE_XRANDR
416 RANDR_CHECK_1_2_RET();
417
418 XRRDestroyMode(_ecore_x_disp, mode);
419#else
420 return;
421#endif
422}
423
424/*
425 * @brief get detailed information for a given mode id
426 * @param root window which's screen's ressources are queried
427 * @param mode the XID which identifies the mode of interest
428 * @return mode's detailed information
429 */
430EAPI Ecore_X_Randr_Mode_Info *
431ecore_x_randr_mode_info_get(Ecore_X_Window root,
432 Ecore_X_Randr_Mode mode)
433{
434#ifdef ECORE_XRANDR
435 RANDR_CHECK_1_2_RET(NULL);
436 XRRScreenResources *res = NULL;
437 Ecore_X_Randr_Mode_Info *ret = NULL;
438 int i;
439
440 if (_ecore_x_randr_root_validate(root) &&
441 (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
442 {
443 for (i = 0; i < res->nmode; i++)
444 {
445 if ((res->modes[i].id == mode) &&
446 (ret = malloc(sizeof(Ecore_X_Randr_Mode_Info))))
447 {
448 ret->xid = res->modes[i].id;
449 ret->width = res->modes[i].width;
450 ret->height = res->modes[i].height;
451 ret->dotClock = res->modes[i].dotClock;
452 ret->hSyncStart = res->modes[i].hSyncStart;
453 ret->hSyncEnd = res->modes[i].hSyncEnd;
454 ret->hTotal = res->modes[i].hTotal;
455 ret->hSkew = res->modes[i].hSkew;
456 ret->vSyncStart = res->modes[i].vSyncStart;
457 ret->vSyncEnd = res->modes[i].vSyncEnd;
458 ret->vTotal = res->modes[i].vTotal;
459 ret->name = NULL;
460 ret->nameLength = 0;
461 if (res->modes[i].nameLength > 0)
462 {
463 ret->nameLength = res->modes[i].nameLength;
464 ret->name = malloc(res->modes[i].nameLength + 1);
465 if (ret->name)
466 memcpy(ret->name, res->modes[i].name,
467 res->modes[i].nameLength + 1);
468 }
469 ret->modeFlags = res->modes[i].modeFlags;
470 break;
471 }
472 }
473 XRRFreeScreenResources(res);
474 }
475
476 return ret;
477#else
478 return NULL;
479#endif
480}
481
482/*
483 * @brief free detailed mode information. The pointer handed in will be set to
484 * NULL after freeing the memory.
485 * @param mode_info the mode information that should be freed
486 */
487EAPI void
488ecore_x_randr_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info)
489{
490#ifdef ECORE_XRANDR
491 RANDR_CHECK_1_2_RET();
492 if (!mode_info)
493 return;
494
495 if (mode_info->name)
496 free(mode_info->name);
497
498 free(mode_info);
499 mode_info = NULL;
500#endif
501}
502
503/*
504 * @brief get all known CRTCs related to a root window's screen
505 * @param root window which's screen's ressources are queried
506 * @param num number of CRTCs returned
507 * @return CRTC IDs
508 */
509EAPI Ecore_X_Randr_Crtc *
510ecore_x_randr_crtcs_get(Ecore_X_Window root,
511 int *num)
512{
513#ifdef ECORE_XRANDR
514 RANDR_CHECK_1_2_RET(NULL);
515 XRRScreenResources *res = NULL;
516 Ecore_X_Randr_Crtc *ret = NULL;
517
518 if (num && root &&
519 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
520 {
521 if ((ret = malloc(sizeof(Ecore_X_Randr_Crtc) * res->ncrtc)))
522 {
523 memcpy(ret, res->crtcs, (sizeof(Ecore_X_Randr_Crtc) * res->ncrtc));
524 *num = res->ncrtc;
525 }
526
527 XRRFreeScreenResources(res);
528 }
529
530 return ret;
531#else
532 return NULL;
533#endif
534}
535
536/*
537 * @deprecated bad naming. Use ecore_x_randr_window_crtcs_get instead.
538 * @brief get the CRTCs, which display a certain window
539 * @param window window the displaying crtcs shall be found for
540 * @param num the number of crtcs displaying the window
541 * @return array of crtcs that display a certain window. NULL if no crtcs
542 * was found that displays the specified window.
543 */
544EAPI Ecore_X_Randr_Crtc *
545ecore_x_randr_current_crtc_get(Ecore_X_Window window,
546 int *num)
547{
548 return ecore_x_randr_window_crtcs_get(window, num);
549}
550
551/*
552 * @brief get the CRTCs, which display a certain window
553 * @param window window the displaying crtcs shall be found for
554 * @param num the number of crtcs displaying the window
555 * @return array of crtcs that display a certain window. NULL if no crtcs
556 * was found that displays the specified window.
557 * @since 1.2.0
558 */
559EAPI Ecore_X_Randr_Crtc *
560ecore_x_randr_window_crtcs_get(Ecore_X_Window window,
561 int *num)
562{
563#ifdef ECORE_XRANDR
564 Ecore_X_Window root;
565 Eina_Rectangle w_geo, c_geo;
566 Ecore_X_Randr_Crtc *crtcs;
567 Ecore_X_Randr_Mode mode;
568 Ecore_X_Randr_Output *ret = NULL;
569 Window tw;
570 int ncrtcs, i, nret = 0, rx = 0, ry = 0;
571
572 if (_randr_version < RANDR_1_2) goto _ecore_x_randr_window_crtcs_get_fail;
573
574 ecore_x_window_geometry_get(window,
575 &w_geo.x, &w_geo.y,
576 &w_geo.w, &w_geo.h);
577
578 root = ecore_x_window_root_get(window);
579 crtcs = ecore_x_randr_crtcs_get(root, &ncrtcs);
580 if (!crtcs) goto _ecore_x_randr_window_crtcs_get_fail;
581
582 /* now get window RELATIVE to root window - thats what matters. */
583 XTranslateCoordinates(_ecore_x_disp, window, root, 0, 0, &rx, &ry, &tw);
584 w_geo.x = rx;
585 w_geo.y = ry;
586
587 for (i = 0, nret = 0; i < ncrtcs; i++)
588 {
589 /* if crtc is not enabled, don't bother about it any further */
590 mode = ecore_x_randr_crtc_mode_get(root, crtcs[i]);
591 if (mode == Ecore_X_Randr_None) continue;
592
593 ecore_x_randr_crtc_geometry_get(root, crtcs[i],
594 &c_geo.x, &c_geo.y,
595 &c_geo.w, &c_geo.h);
596 if (eina_rectangles_intersect(&w_geo, &c_geo))
597 {
598 ret = realloc(ret, (sizeof(Ecore_X_Randr_Crtc) * ++nret));
599 ret[nret] = crtcs[i];
600 }
601 }
602 free(crtcs);
603
604 if (num) *num = nret;
605 return ret;
606
607_ecore_x_randr_window_crtcs_get_fail:
608#endif
609 if (num) *num = 0;
610 return NULL;
611}
612
613EAPI Ecore_X_Randr_Output *
614ecore_x_randr_outputs_get(Ecore_X_Window root,
615 int *num)
616{
617#ifdef ECORE_XRANDR
618 RANDR_CHECK_1_2_RET(NULL);
619 XRRScreenResources *res = NULL;
620 Ecore_X_Randr_Output *ret = NULL;
621
622 if (num && root &&
623 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
624 {
625 if ((ret = malloc(sizeof(Ecore_X_Randr_Output) * res->noutput)))
626 {
627 memcpy(ret, res->outputs,
628 (sizeof(Ecore_X_Randr_Output) * res->noutput));
629 if (num)
630 *num = res->noutput;
631 }
632
633 if (res)
634 XRRFreeScreenResources(res);
635 }
636
637 return ret;
638#else
639 return NULL;
640#endif
641}
642
643//Per Crtc
644/*
645 * @brief get a CRTC's outputs.
646 * @param root the root window which's screen will be queried
647 * @param num number of outputs referenced by given CRTC
648 */
649EAPI Ecore_X_Randr_Output *
650ecore_x_randr_crtc_outputs_get(Ecore_X_Window root,
651 Ecore_X_Randr_Crtc crtc,
652 int *num)
653{
654#ifdef ECORE_XRANDR
655 RANDR_CHECK_1_2_RET(NULL);
656 XRRScreenResources *res = NULL;
657 Ecore_X_Randr_Output *ret = NULL;
658 XRRCrtcInfo *crtc_info = NULL;
659
660 if (_ecore_x_randr_crtc_validate(root,
661 crtc) &&
662 (res =
663 _ecore_x_randr_get_screen_resources (_ecore_x_disp,
664 root)) &&
665 (crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
666 {
667 if ((ret = malloc(sizeof(Ecore_X_Randr_Output) * crtc_info->noutput)))
668 {
669 memcpy(ret, crtc_info->outputs,
670 (sizeof(Ecore_X_Randr_Output) * crtc_info->noutput));
671 if (num)
672 *num = crtc_info->noutput;
673 }
674
675 if (crtc_info)
676 XRRFreeCrtcInfo(crtc_info);
677
678 if (res)
679 XRRFreeScreenResources(res);
680 }
681
682 return ret;
683#else
684 return NULL;
685#endif
686}
687
688/*
689 * @brief get a CRTC's possible outputs.
690 * @param root the root window which's screen will be queried
691 * @param num number of possible outputs referenced by given CRTC
692 */
693EAPI Ecore_X_Randr_Output *
694ecore_x_randr_crtc_possible_outputs_get(Ecore_X_Window root,
695 Ecore_X_Randr_Crtc crtc,
696 int *num)
697{
698#ifdef ECORE_XRANDR
699 RANDR_CHECK_1_2_RET(NULL);
700 XRRScreenResources *res = NULL;
701 Ecore_X_Randr_Output *ret = NULL;
702 XRRCrtcInfo *crtc_info = NULL;
703
704 if (_ecore_x_randr_crtc_validate(root,
705 crtc) &&
706 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
707 {
708 if ((crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
709 {
710 if ((ret =
711 malloc(sizeof(Ecore_X_Randr_Output) * crtc_info->npossible)))
712 {
713 memcpy(ret, crtc_info->possible,
714 (sizeof(Ecore_X_Randr_Output) * crtc_info->npossible));
715 if (num)
716 *num = res->ncrtc;
717 }
718
719 XRRFreeCrtcInfo(crtc_info);
720 }
721
722 XRRFreeScreenResources(res);
723 }
724
725 return ret;
726#else
727 return NULL;
728#endif
729}
730
731EAPI void
732ecore_x_randr_crtc_geometry_get(Ecore_X_Window root,
733 Ecore_X_Randr_Crtc crtc,
734 int *x,
735 int *y,
736 int *w,
737 int *h)
738{
739#ifdef ECORE_XRANDR
740 RANDR_CHECK_1_2_RET();
741 XRRScreenResources *res = NULL;
742 XRRCrtcInfo *crtc_info = NULL;
743
744 if (_ecore_x_randr_crtc_validate(root,
745 crtc) &&
746 (res =
747 _ecore_x_randr_get_screen_resources (_ecore_x_disp,
748 root)) &&
749 (crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
750 {
751 if (x)
752 *x = crtc_info->x;
753
754 if (y)
755 *y = crtc_info->y;
756
757 if (w)
758 *w = crtc_info->width;
759
760 if (h)
761 *h = crtc_info->height;
762
763 XRRFreeCrtcInfo(crtc_info);
764 XRRFreeScreenResources(res);
765 }
766
767#endif
768}
769
770/*
771 * @brief sets the position of given CRTC within root window's screen
772 * @param root the window's screen to be queried
773 * @param crtc the CRTC which's position within the mentioned screen is to be altered
774 * @param x position on the x-axis (0 == left) of the screen. if x < 0 current value will be kept.
775 * @param y position on the y-ayis (0 == top) of the screen. if y < 0, current value will be kept.
776 * @return EINA_TRUE if position could be successfully be altered.
777 */
778EAPI Eina_Bool
779ecore_x_randr_crtc_pos_set(Ecore_X_Window root,
780 Ecore_X_Randr_Crtc crtc,
781 int x,
782 int y)
783{
784#ifdef ECORE_XRANDR
785 RANDR_CHECK_1_2_RET(EINA_FALSE);
786 int w_c, h_c, w_new = 0, h_new = 0;
787 Eina_Rectangle crtc_geo;
788
789 ecore_x_randr_crtc_geometry_get(root,
790 crtc,
791 &crtc_geo.x,
792 &crtc_geo.y,
793 &crtc_geo.w,
794 &crtc_geo.h);
795 ecore_x_randr_screen_current_size_get(root, &w_c, &h_c, NULL, NULL);
796 if (x < 0)
797 x = crtc_geo.x;
798
799 if (y < 0)
800 y = crtc_geo.y;
801
802 if ((x + crtc_geo.w) > w_c)
803 w_new = x + crtc_geo.w;
804
805 if ((y + crtc_geo.h) > h_c)
806 h_new = y + crtc_geo.h;
807
808 if ((w_new != 0) || (h_new != 0))
809 if (!ecore_x_randr_screen_current_size_set(root, w_new, h_new, 0, 0))
810 return EINA_FALSE;
811
812 return ecore_x_randr_crtc_settings_set(root,
813 crtc,
814 NULL,
815 Ecore_X_Randr_Unset,
816 x,
817 y,
818 Ecore_X_Randr_Unset,
819 Ecore_X_Randr_Unset);
820#else
821 return EINA_FALSE;
822#endif
823}
824
825/**
826 * @brief Get the current set mode of a given CRTC
827 * @param root the window's screen to be queried
828 * @param crtc the CRTC which's should be queried
829 * @return currently set mode or - in case parameters are invalid -
830 * Ecore_X_Randr_Unset
831 */
832EAPI Ecore_X_Randr_Mode
833ecore_x_randr_crtc_mode_get(Ecore_X_Window root,
834 Ecore_X_Randr_Crtc crtc)
835{
836#ifdef ECORE_XRANDR
837 RANDR_CHECK_1_2_RET(Ecore_X_Randr_Unset);
838 XRRScreenResources *res = NULL;
839 XRRCrtcInfo *crtc_info = NULL;
840 Ecore_X_Randr_Mode ret = Ecore_X_Randr_Unset;
841 if (_ecore_x_randr_root_validate(root) &&
842 _ecore_x_randr_crtc_validate(root,
843 crtc) &&
844 (res =
845 _ecore_x_randr_get_screen_resources(_ecore_x_disp,
846 root)) &&
847 (crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
848 {
849 ret = crtc_info->mode;
850 XRRFreeCrtcInfo(crtc_info);
851 XRRFreeScreenResources(res);
852 }
853
854 return ret;
855#else
856 return Ecore_X_Randr_Unset;
857#endif
858}
859
860/**
861 * @brief sets a mode for a CRTC and the outputs attached to it
862 * @param root the window's screen to be queried
863 * @param crtc the CRTC which shall be set
864 * @param outputs array of outputs which have to be compatible with the mode. If
865 * NULL CRTC will be disabled.
866 * @param noutputs number of outputs in array to be used. Use
867 * Ecore_X_Randr_Unset (or -1) to use currently used outputs.
868 * @param mode XID of the mode to be set. If set to 0 the CRTC will be disabled.
869 * If set to -1 the call will fail.
870 * @return EINA_TRUE if mode setting was successful. Else EINA_FALSE
871 */
872EAPI Eina_Bool
873ecore_x_randr_crtc_mode_set(Ecore_X_Window root,
874 Ecore_X_Randr_Crtc crtc,
875 Ecore_X_Randr_Output *outputs,
876 int noutputs,
877 Ecore_X_Randr_Mode mode)
878{
879#ifdef ECORE_XRANDR
880 RANDR_CHECK_1_2_RET(EINA_FALSE);
881
882 if (mode == Ecore_X_Randr_Unset)
883 return EINA_FALSE;
884
885 return ecore_x_randr_crtc_settings_set(root,
886 crtc,
887 outputs,
888 noutputs,
889 Ecore_X_Randr_Unset,
890 Ecore_X_Randr_Unset,
891 mode,
892 Ecore_X_Randr_Unset);
893#else
894 return EINA_FALSE;
895#endif
896}
897
898EAPI void
899ecore_x_randr_crtc_size_get(Ecore_X_Window root,
900 Ecore_X_Randr_Crtc crtc,
901 int *w,
902 int *h)
903{
904#ifdef ECORE_XRANDR
905 RANDR_CHECK_1_2_RET();
906 ecore_x_randr_crtc_geometry_get(root, crtc, NULL, NULL, w, h);
907#endif
908}
909
910EAPI Ecore_X_Randr_Refresh_Rate
911ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root,
912 Ecore_X_Randr_Crtc crtc,
913 Ecore_X_Randr_Mode mode)
914{
915#ifdef ECORE_XRANDR
916 RANDR_CHECK_1_2_RET(0.0);
917 XRRScreenResources *res = NULL;
918 XRRCrtcInfo *crtc_info = NULL;
919 Ecore_X_Randr_Refresh_Rate ret = 0.0;
920 int i;
921
922 if (_ecore_x_randr_crtc_validate(root,
923 crtc) &&
924 (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
925 {
926 for (i = 0; i < res->nmode; i++)
927 if (res->modes[i].id == mode)
928 {
929 if (res->modes[i].hTotal && res->modes[i].vTotal)
930 ret = ((double)res->modes[i].dotClock /
931 ((double)res->modes[i].hTotal *
932 (double)res->modes[i].vTotal));
933
934 break;
935 }
936 }
937
938 if (crtc_info)
939 XRRFreeCrtcInfo(crtc_info);
940
941 if (res)
942 XRRFreeScreenResources(res);
943
944 return ret;
945#else
946 return 0.0;
947#endif
948}
949
950EAPI Ecore_X_Randr_Orientation
951ecore_x_randr_crtc_orientations_get(Ecore_X_Window root,
952 Ecore_X_Randr_Crtc crtc)
953{
954#ifdef ECORE_XRANDR
955 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
956 XRRCrtcInfo *crtc_info = NULL;
957 XRRScreenResources *res = NULL;
958 Ecore_X_Randr_Orientation ret = Ecore_X_Randr_None;
959
960 if (_ecore_x_randr_crtc_validate(root,
961 crtc) &&
962 (res =
963 _ecore_x_randr_get_screen_resources (_ecore_x_disp,
964 root)) &&
965 (crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
966 {
967 ret = crtc_info->rotations;
968 }
969 if (crtc_info)
970 XRRFreeCrtcInfo(crtc_info);
971
972 if (res)
973 XRRFreeScreenResources(res);
974
975 return ret;
976#else
977 return Ecore_X_Randr_None;
978#endif
979}
980
981EAPI Ecore_X_Randr_Orientation
982ecore_x_randr_crtc_orientation_get(Ecore_X_Window root,
983 Ecore_X_Randr_Crtc crtc)
984{
985#ifdef ECORE_XRANDR
986 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
987 XRRCrtcInfo *crtc_info = NULL;
988 XRRScreenResources *res = NULL;
989 Ecore_X_Randr_Orientation ret = Ecore_X_Randr_None;
990
991 if (_ecore_x_randr_crtc_validate(root,
992 crtc) &&
993 (res =
994 _ecore_x_randr_get_screen_resources (_ecore_x_disp,
995 root)) &&
996 (crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
997 {
998 ret = crtc_info->rotation;
999 }
1000 if (crtc_info)
1001 XRRFreeCrtcInfo(crtc_info);
1002
1003 if (res)
1004 XRRFreeScreenResources(res);
1005
1006 return ret;
1007#else
1008 return Ecore_X_Randr_None;
1009#endif
1010}
1011
1012EAPI Eina_Bool
1013ecore_x_randr_crtc_orientation_set(Ecore_X_Window root,
1014 Ecore_X_Randr_Crtc crtc,
1015 Ecore_X_Randr_Orientation orientation)
1016{
1017#ifdef ECORE_XRANDR
1018 RANDR_CHECK_1_2_RET(EINA_FALSE);
1019 Eina_Bool ret = EINA_FALSE;
1020
1021 if (orientation != Ecore_X_Randr_None)
1022 {
1023 ret = ecore_x_randr_crtc_settings_set(root,
1024 crtc,
1025 NULL,
1026 Ecore_X_Randr_Unset,
1027 Ecore_X_Randr_Unset,
1028 Ecore_X_Randr_Unset,
1029 Ecore_X_Randr_Unset,
1030 orientation);
1031 }
1032
1033 return ret;
1034#else
1035 return EINA_FALSE;
1036#endif
1037}
1038
1039EAPI void
1040ecore_x_randr_crtc_pos_get(Ecore_X_Window root,
1041 Ecore_X_Randr_Crtc crtc,
1042 int *x,
1043 int *y)
1044{
1045#ifdef ECORE_XRANDR
1046 RANDR_CHECK_1_2_RET();
1047
1048 ecore_x_randr_crtc_geometry_get(root, crtc, x, y, NULL, NULL);
1049#endif
1050}
1051
1052EAPI Eina_Bool
1053ecore_x_randr_crtc_clone_set(Ecore_X_Window root,
1054 Ecore_X_Randr_Crtc original,
1055 Ecore_X_Randr_Crtc clon)
1056{
1057#ifdef ECORE_XRANDR
1058 RANDR_CHECK_1_2_RET(EINA_FALSE);
1059
1060 XRRScreenResources *res = NULL;
1061 XRRCrtcInfo *clone_crtc_info = NULL;
1062 Ecore_X_Randr_Mode original_mode = Ecore_X_Randr_None;
1063 Ecore_X_Randr_Orientation original_orientation = Ecore_X_Randr_None;
1064 Eina_Bool ret = EINA_FALSE;
1065 int x, y;
1066
1067 if (_ecore_x_randr_root_validate(root) &&
1068 _ecore_x_randr_crtc_validate(root,
1069 original) &&
1070 _ecore_x_randr_crtc_validate(root,
1071 clon) &&
1072 (res =
1073 _ecore_x_randr_get_screen_resources (_ecore_x_disp,
1074 root)) &&
1075 (clone_crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, clon)))
1076 {
1077 ecore_x_randr_crtc_geometry_get(root, original, &x, &y, NULL, NULL);
1078 original_mode = ecore_x_randr_crtc_mode_get(root, original);
1079 original_orientation = ecore_x_randr_crtc_orientation_get(root,
1080 original);
1081 ret = ecore_x_randr_crtc_settings_set(root,
1082 clon,
1083 NULL,
1084 Ecore_X_Randr_Unset,
1085 x,
1086 y,
1087 original_mode,
1088 original_orientation);
1089 XRRFreeCrtcInfo(clone_crtc_info);
1090 XRRFreeScreenResources(res);
1091 }
1092
1093 return ret;
1094#else
1095 return EINA_FALSE;
1096#endif
1097}
1098
1099/**
1100 * @brief sets the demanded parameters for a given CRTC. Note that the CRTC is
1101 * auto enabled in it's preferred mode, when it was disabled before.
1102 * @param root the root window which's default display will be queried
1103 * @param crtc the CRTC which's configuration should be altered
1104 * @param outputs an array of outputs, that should display this CRTC's content.
1105 * @param noutputs number of outputs in the array of outputs.
1106 * If set to Ecore_X_Randr_Unset, current outputs and number of outputs will be used.
1107 * If set to Ecore_X_Randr_None, CRTC will be disabled
1108 * @param x new x coordinate. If <0 (e.g. Ecore_X_Randr_Unset) the current x
1109 * corrdinate will be assumed.
1110 * @param y new y coordinate. If <0 (e.g. Ecore_X_Randr_Unset) the current y
1111 * corrdinate will be assumed.
1112 * @param mode the new mode to be set. If Ecore_X_Randr_None is passed, the
1113 * CRTC will be disabled. If Ecore_X_Randr_Unset is passed, the current mode is assumed.
1114 * @param orientation the new orientation to be set. If Ecore_X_Randr_Unset is used,
1115 * the current mode is assumed.
1116 * @return EINA_TRUE if the configuration alteration was successful, else
1117 * EINA_FALSE
1118 */
1119EAPI Eina_Bool
1120ecore_x_randr_crtc_settings_set(Ecore_X_Window root,
1121 Ecore_X_Randr_Crtc crtc,
1122 Ecore_X_Randr_Output *outputs,
1123 int noutputs,
1124 int x,
1125 int y,
1126 Ecore_X_Randr_Mode mode,
1127 Ecore_X_Randr_Orientation orientation)
1128{
1129#ifdef ECORE_XRANDR
1130 RANDR_CHECK_1_2_RET(EINA_FALSE);
1131 XRRScreenResources *res = NULL;
1132 XRRCrtcInfo *crtc_info = NULL;
1133 Eina_Bool ret = EINA_FALSE;
1134
1135 if (_ecore_x_randr_crtc_validate(root,
1136 crtc) &&
1137 (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1138 {
1139 if ((crtc_info = XRRGetCrtcInfo(_ecore_x_disp, res, crtc)))
1140 {
1141 if ((mode == Ecore_X_Randr_None) ||
1142 (noutputs == Ecore_X_Randr_None))
1143 {
1144 outputs = NULL;
1145 noutputs = 0;
1146 }
1147 else if (noutputs == (int)Ecore_X_Randr_Unset)
1148 {
1149 outputs = (Ecore_X_Randr_Output *)crtc_info->outputs;
1150 noutputs = crtc_info->noutput;
1151 }
1152
1153 if (mode == Ecore_X_Randr_Unset)
1154 mode = crtc_info->mode;
1155
1156 if (x < 0)
1157 x = crtc_info->x;
1158
1159 if (y < 0)
1160 y = crtc_info->y;
1161
1162 if (orientation == Ecore_X_Randr_Unset)
1163 orientation = crtc_info->rotation;
1164
1165 if (!XRRSetCrtcConfig(_ecore_x_disp, res, crtc, CurrentTime,
1166 x, y, mode, orientation, (RROutput *)outputs,
1167 noutputs))
1168 ret = EINA_TRUE;
1169
1170 XRRFreeCrtcInfo(crtc_info);
1171 }
1172
1173 XRRFreeScreenResources(res);
1174 }
1175
1176 return ret;
1177#else
1178 return EINA_FALSE;
1179#endif
1180}
1181
1182/**
1183 * @brief sets a CRTC relative to another one.
1184 * @param crtc_r1 the CRTC to be positioned.
1185 * @param crtc_r2 the CRTC the position should be relative to
1186 * @param policy the relation between the crtcs
1187 * @param alignment in case CRTCs size differ, aligns CRTC1 accordingly at CRTC2's
1188 * borders
1189 * @return EINA_TRUE if crtc could be successfully positioned. EINA_FALSE if
1190 * repositioning failed or if position of new crtc would be out of given screen's min/max bounds.
1191 */
1192EAPI Eina_Bool
1193ecore_x_randr_crtc_pos_relative_set(Ecore_X_Window root,
1194 Ecore_X_Randr_Crtc crtc_r1,
1195 Ecore_X_Randr_Crtc crtc_r2,
1196 Ecore_X_Randr_Output_Policy policy,
1197 Ecore_X_Randr_Relative_Alignment alignment)
1198{
1199#ifdef ECORE_XRANDR
1200 RANDR_CHECK_1_2_RET(EINA_FALSE);
1201
1202 Eina_Rectangle r1_geo, r2_geo;
1203 int w_max, h_max, cw, ch, x_n = Ecore_X_Randr_Unset, y_n =
1204 Ecore_X_Randr_Unset;
1205 /*
1206 int r1_noutputs, r2_noutputs, r1_nmodes, i, j, outputs_mode_found, mode_w, mode_h;
1207 Ecore_X_Randr_Output *r1_outputs, *r2_outputs, *r2_r1_outputs;
1208 Ecore_X_Randr_Mode *r1_modes, r2_mode, r1_mode;
1209 Eina_Bool ret;
1210 */
1211
1212 if ((ecore_x_randr_crtc_mode_get(root, crtc_r1) == Ecore_X_Randr_None)
1213 || (ecore_x_randr_crtc_mode_get(root, crtc_r2) == Ecore_X_Randr_None))
1214 return EINA_FALSE;
1215
1216 if (!_ecore_x_randr_crtc_validate(root, crtc_r1) ||
1217 (!(crtc_r1 != crtc_r2) &&
1218 !_ecore_x_randr_crtc_validate(root, crtc_r2)))
1219 return EINA_FALSE;
1220
1221 ecore_x_randr_crtc_geometry_get(root,
1222 crtc_r1,
1223 &r1_geo.x,
1224 &r1_geo.y,
1225 &r1_geo.w,
1226 &r1_geo.h);
1227 ecore_x_randr_crtc_geometry_get(root,
1228 crtc_r2,
1229 &r2_geo.x,
1230 &r2_geo.y,
1231 &r2_geo.w,
1232 &r2_geo.h);
1233 ecore_x_randr_screen_size_range_get(root, NULL, NULL, &w_max, &h_max);
1234 ecore_x_randr_screen_current_size_get(root, &cw, &ch, NULL, NULL);
1235
1236 switch (policy)
1237 {
1238 case ECORE_X_RANDR_OUTPUT_POLICY_RIGHT:
1239 //set r1 right of r2
1240 x_n = r2_geo.x + r2_geo.w;
1241
1242 switch (alignment)
1243 {
1244 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE:
1245 y_n = Ecore_X_Randr_Unset;
1246 break;
1247
1248 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
1249 y_n =
1250 ((int)(((double)r2_geo.h /
1251 2.0) + (double)r2_geo.y - ((double)r1_geo.h / 2.0)));
1252 break;
1253
1254 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
1255 y_n = ((int)((double)ch / 2.0) - ((double)r1_geo.h / 2.0));
1256 break;
1257 }
1258 break;
1259
1260 case ECORE_X_RANDR_OUTPUT_POLICY_LEFT:
1261 //set r1 left of r2
1262 x_n = r2_geo.x - r1_geo.w;
1263
1264 switch (alignment)
1265 {
1266 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE:
1267 y_n = Ecore_X_Randr_Unset;
1268 break;
1269
1270 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
1271 y_n =
1272 ((int)(((double)r2_geo.h /
1273 2.0) + r2_geo.y - ((double)r1_geo.h / 2.0)));
1274 break;
1275
1276 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
1277 y_n = ((int)(((double)ch / 2.0) - ((double)r1_geo.h / 2.0)));
1278 break;
1279 }
1280 break;
1281
1282 case ECORE_X_RANDR_OUTPUT_POLICY_BELOW:
1283 //set r1 below r2
1284 y_n = r2_geo.y + r2_geo.h;
1285
1286 switch (alignment)
1287 {
1288 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE:
1289 x_n = Ecore_X_Randr_Unset;
1290 break;
1291
1292 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
1293 x_n =
1294 ((int)((((double)r2_geo.x +
1295 (double)r2_geo.w) / 2.0) - ((double)r1_geo.w / 2.0)));
1296 break;
1297
1298 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
1299 x_n = ((int)((double)cw / 2.0));
1300 break;
1301 }
1302 break;
1303
1304 case ECORE_X_RANDR_OUTPUT_POLICY_ABOVE:
1305 y_n = r2_geo.y - r1_geo.h;
1306
1307 //set r1 above r2
1308 switch (alignment)
1309 {
1310 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_NONE:
1311 x_n = Ecore_X_Randr_Unset;
1312 break;
1313
1314 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_REL:
1315 x_n =
1316 ((int)((((double)r2_geo.x +
1317 (double)r2_geo.w) / 2.0) - ((double)r1_geo.w / 2.0)));
1318 break;
1319
1320 case ECORE_X_RANDR_RELATIVE_ALIGNMENT_CENTER_SCR:
1321 x_n = ((int)((double)cw / 2.0));
1322 break;
1323 }
1324 break;
1325
1326 case ECORE_X_RANDR_OUTPUT_POLICY_CLONE:
1327 return ecore_x_randr_crtc_pos_set(root, crtc_r1, r2_geo.x, r2_geo.y);
1328
1329 /* entire cloning (including modesetting)
1330 //all outputs of crtc1 capable of crtc2's current mode?
1331 r2_mode = ecore_x_randr_crtc_mode_get(root, crtc_r2);
1332 if (!(r1_outputs =
1333 ecore_x_randr_crtc_outputs_get(root, crtc_r1,
1334 &r1_noutputs)) ||
1335 (r1_noutputs == 0))
1336 return EINA_FALSE;
1337
1338 for (i = 0, outputs_mode_found = 0; i < r1_noutputs; i++)
1339 {
1340 if (!(r1_modes =
1341 ecore_x_randr_output_modes_get(root, r1_outputs[i],
1342 &r1_nmodes, NULL)))
1343 {
1344 free(r1_outputs);
1345 return EINA_FALSE;
1346 }
1347
1348 for (j = 0; j < r1_nmodes; j++)
1349 {
1350 ecore_x_randr_mode_size_get(root,
1351 r1_modes[j],
1352 &mode_w,
1353 &mode_h);
1354 if ((mode_w == r2_geo.w) && (mode_h == r2_geo.h))
1355 {
1356 r1_mode = r1_modes[j];
1357 ++outputs_mode_found;
1358 free(r1_modes);
1359 r1_modes = NULL;
1360 break;
1361 }
1362 }
1363 if (r1_modes)
1364 free(r1_modes);
1365
1366 if (outputs_mode_found <= i)
1367 {
1368 //an output doesn't support the set mode, cancel!
1369 free(r1_outputs);
1370 return EINA_FALSE;
1371 }
1372 }
1373 free (r1_outputs);
1374 //CRTC 1's outputs support a mode of same geometry as CRTC 2.
1375 ret =
1376 (ecore_x_randr_crtc_mode_set(root, crtc_r1, Ecore_X_Randr_None,
1377 Ecore_X_Randr_None,
1378 r1_mode) &&
1379 ecore_x_randr_crtc_pos_set(root, crtc_r1, r2_geo.x, r2_geo.y));
1380 return ret;
1381 */
1382
1383 /* entire cloning on same CRTC
1384 //all outputs of crtc1 capable of crtc2's current mode?
1385 r2_mode = ecore_x_randr_crtc_mode_get(root, crtc_r2);
1386 if (!(r1_outputs =
1387 ecore_x_randr_crtc_outputs_get(root, crtc_r1,
1388 &r1_noutputs)) ||
1389 (r1_noutputs == 0))
1390 return EINA_FALSE;
1391
1392 for (i = 0, outputs_mode_found = 0; i < r1_noutputs; i++)
1393 {
1394 if (!(r1_modes =
1395 ecore_x_randr_output_modes_get(root, r1_outputs[i],
1396 &r1_nmodes, NULL)))
1397 {
1398 free(r1_outputs);
1399 return EINA_FALSE;
1400 }
1401
1402 for (j = 0; j < r1_nmodes; j++)
1403 {
1404 if (r1_modes[j] == r2_mode)
1405 {
1406 ++outputs_mode_found;
1407 free(r1_modes);
1408 r1_modes = NULL;
1409 break;
1410 }
1411 }
1412 if (r1_modes)
1413 free(r1_modes);
1414
1415 if (outputs_mode_found <= i)
1416 {
1417 //an output doesn't support the set mode, cancel!
1418 free(r1_outputs);
1419 return EINA_FALSE;
1420 }
1421 }
1422 //check whether crtc r2 can use all outputs of r1.
1423 if (!(r2_outputs =
1424 ecore_x_randr_crtc_possible_outputs_get(root, crtc_r2,
1425 &r2_noutputs)) ||
1426 (r2_noutputs == 0))
1427 {
1428 free(r1_outputs);
1429 return EINA_FALSE;
1430 }
1431
1432 for (i = 0; i < r1_noutputs; i++)
1433 {
1434 for (j = 0; j < r2_noutputs; )
1435 {
1436 if (r1_outputs[i] == r2_outputs[j])
1437 break;
1438
1439 j++;
1440 }
1441 if (j == r2_noutputs)
1442 {
1443 //didn't find the output!
1444 free (r1_outputs);
1445 free (r2_outputs);
1446 return EINA_FALSE;
1447 }
1448 }
1449
1450 //apparently crtc2 supports all outputs of r1
1451 //TODO: check with the compatible list of outputs (property in RR1.3)
1452 r2_r1_outputs =
1453 malloc(sizeof(Ecore_X_Randr_Output) * (r1_noutputs + r2_noutputs));
1454 for (i = 0; i < r1_noutputs; i++)
1455 {
1456 r2_r1_outputs[i] = r1_outputs[i];
1457 }
1458 free(r1_outputs);
1459 for (; i < r2_noutputs; i++)
1460 {
1461 r2_r1_outputs[i] = r2_outputs[i];
1462 }
1463 free(r2_outputs);
1464 ret =
1465 ecore_x_randr_crtc_mode_set(root, crtc_r2, r2_r1_outputs,
1466 (r1_noutputs + r1_noutputs), r2_mode);
1467 free (r2_r1_outputs);
1468 return ret;
1469 */
1470 case ECORE_X_RANDR_OUTPUT_POLICY_NONE:
1471 break;
1472 }
1473 if ((x_n == r1_geo.x) && (y_n == r1_geo.x))
1474 return EINA_TRUE;
1475
1476 //out of possible bounds?
1477 if (((y_n + r1_geo.h) > h_max) || ((x_n + r1_geo.w) > w_max))
1478 return EINA_FALSE;
1479
1480 return ecore_x_randr_crtc_pos_set(root, crtc_r1, x_n, y_n);
1481#else
1482 return EINA_FALSE;
1483#endif
1484}
1485
1486/*
1487 * @brief add given mode to given output
1488 * @param output the output the mode is added to
1489 * @param mode the mode added to the output
1490 * @return EINA_FALSE if output or mode equal Ecore_X_Randr_None, else EINA_TRUE
1491 * Additionally, if xcb backend is used, the success of the addition is reported
1492 * back directly.
1493 * @since 1.2.0
1494 */
1495EAPI Eina_Bool
1496ecore_x_randr_output_mode_add(Ecore_X_Randr_Output output,
1497 Ecore_X_Randr_Mode mode)
1498{
1499#ifdef ECORE_XRANDR
1500 RANDR_CHECK_1_2_RET(EINA_FALSE);
1501
1502 if ((output == Ecore_X_Randr_None) || (mode == Ecore_X_Randr_None))
1503 return EINA_FALSE;
1504
1505 XRRAddOutputMode(_ecore_x_disp, output, mode);
1506 return EINA_TRUE;
1507#else
1508 return EINA_FALSE;
1509#endif
1510}
1511
1512/*
1513 * @brief delete given mode from given output
1514 * @param output the output the mode is removed from
1515 * @param mode the mode removed from the output
1516 * @since 1.2.0
1517 */
1518EAPI void
1519ecore_x_randr_output_mode_del(Ecore_X_Randr_Output output,
1520 Ecore_X_Randr_Mode mode)
1521{
1522#ifdef ECORE_XRANDR
1523 RANDR_CHECK_1_2_RET();
1524
1525 if ((output == Ecore_X_Randr_None) || (mode == Ecore_X_Randr_None))
1526 return;
1527
1528 XRRDeleteOutputMode(_ecore_x_disp, output, mode);
1529#else
1530 return;
1531#endif
1532}
1533
1534EAPI Ecore_X_Randr_Mode *
1535ecore_x_randr_output_modes_get(Ecore_X_Window root,
1536 Ecore_X_Randr_Output output,
1537 int *num,
1538 int *npreferred)
1539{
1540#ifdef ECORE_XRANDR
1541 RANDR_CHECK_1_2_RET(NULL);
1542 XRRScreenResources *res = NULL;
1543 XRROutputInfo *output_info = NULL;
1544 Ecore_X_Randr_Mode *modes = NULL;
1545
1546 if ((output != Ecore_X_Randr_None)
1547 && (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root))
1548 && (output_info =
1549 XRRGetOutputInfo(_ecore_x_disp, res, (RROutput)output)))
1550 {
1551 if ((modes = malloc(sizeof(Ecore_X_Randr_Mode) * output_info->nmode)))
1552 {
1553 memcpy(modes, output_info->modes,
1554 (sizeof(Ecore_X_Randr_Mode) * output_info->nmode));
1555 if (num)
1556 *num = output_info->nmode;
1557
1558 if (npreferred)
1559 *npreferred = output_info->npreferred;
1560 }
1561 }
1562
1563 if (output_info)
1564 XRRFreeOutputInfo(output_info);
1565
1566 if (res)
1567 XRRFreeScreenResources(res);
1568
1569 return modes;
1570#else
1571 return NULL;
1572#endif
1573}
1574
1575EAPI Ecore_X_Randr_Crtc *
1576ecore_x_randr_output_possible_crtcs_get(Ecore_X_Window root,
1577 Ecore_X_Randr_Output output,
1578 int *num)
1579{
1580#ifdef ECORE_XRANDR
1581 RANDR_CHECK_1_2_RET(NULL);
1582 XRRScreenResources *res = NULL;
1583 XRROutputInfo *output_info = NULL;
1584 Ecore_X_Randr_Crtc *crtcs = NULL;
1585
1586 if ((output != Ecore_X_Randr_None))
1587 {
1588 if ((res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1589 {
1590 if ((output_info = XRRGetOutputInfo(_ecore_x_disp, res, output)))
1591 {
1592 if ((crtcs = malloc(sizeof(Ecore_X_Randr_Crtc) * output_info->ncrtc)))
1593 {
1594 memcpy(crtcs, output_info->crtcs, (sizeof(Ecore_X_Randr_Crtc) * output_info->ncrtc));
1595 if (num) *num = output_info->ncrtc;
1596 }
1597 XRRFreeOutputInfo(output_info);
1598 }
1599 XRRFreeScreenResources(res);
1600 }
1601 }
1602 return crtcs;
1603#else
1604 return Ecore_X_Randr_None;
1605#endif
1606}
1607
1608/**
1609 * @brief gets the the outputs which might be used simultenously on the same
1610 * CRTC.
1611 * @param root window that this information should be queried for.
1612 * @param output the output which's clones we concern
1613 * @param num number of possible clones
1614 */
1615EAPI Ecore_X_Randr_Output *
1616ecore_x_randr_output_clones_get(Ecore_X_Window root,
1617 Ecore_X_Randr_Output output,
1618 int *num)
1619{
1620#ifdef ECORE_XRANDR
1621 RANDR_CHECK_1_2_RET(NULL);
1622 XRRScreenResources *res = NULL;
1623 XRROutputInfo *output_info = NULL;
1624 Ecore_X_Randr_Output *outputs = NULL;
1625
1626 if ((output != Ecore_X_Randr_None))
1627 {
1628 if ((res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1629 {
1630 if ((output_info = XRRGetOutputInfo(_ecore_x_disp, res, output)))
1631 {
1632 if ((outputs = malloc(sizeof(Ecore_X_Randr_Output) * output_info->nclone)))
1633 {
1634 memcpy(outputs, output_info->clones, (sizeof(Ecore_X_Randr_Output) * output_info->nclone));
1635 if (num) *num = output_info->nclone;
1636 }
1637 XRRFreeOutputInfo(output_info);
1638 }
1639 XRRFreeScreenResources(res);
1640 }
1641 }
1642 return outputs;
1643#else
1644 return Ecore_X_Randr_None;
1645#endif
1646}
1647
1648EAPI Ecore_X_Randr_Crtc
1649ecore_x_randr_output_crtc_get(Ecore_X_Window root,
1650 Ecore_X_Randr_Output output)
1651{
1652#ifdef ECORE_XRANDR
1653 RANDR_CHECK_1_2_RET(Ecore_X_Randr_None);
1654 XRRScreenResources *res = NULL;
1655 XRROutputInfo *output_info = NULL;
1656 Ecore_X_Randr_Crtc ret = Ecore_X_Randr_None;
1657
1658 if ((output != Ecore_X_Randr_None))
1659 {
1660 if ((res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1661 {
1662 if ((output_info = XRRGetOutputInfo(_ecore_x_disp, res, output)))
1663 {
1664 ret = output_info->crtc;
1665 XRRFreeOutputInfo(output_info);
1666 }
1667 XRRFreeScreenResources(res);
1668 }
1669 }
1670
1671 return ret;
1672#else
1673 return Ecore_X_Randr_None;
1674#endif
1675}
1676
1677/**
1678 * @brief gets the given output's name as reported by X
1679 * @param root the window which's screen will be queried
1680 * @param len length of returned c-string.
1681 * @return name of the output as reported by X
1682 */
1683EAPI char *
1684ecore_x_randr_output_name_get(Ecore_X_Window root,
1685 Ecore_X_Randr_Output output,
1686 int *len)
1687{
1688#ifdef ECORE_XRANDR
1689 RANDR_CHECK_1_2_RET(NULL);
1690 XRRScreenResources *res = NULL;
1691 XRROutputInfo *output_info = NULL;
1692 char *ret = NULL;
1693
1694 if ((output != Ecore_X_Randr_None)
1695 && (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root))
1696 && (output_info = XRRGetOutputInfo(_ecore_x_disp, res, output)))
1697 {
1698 /*
1699 * Actually the below command is correct, but due to a bug in libXrandr
1700 * it doesn't work. Therefore we stick with strlen().
1701 * Replace the line below with the following once this bug is
1702 * fixed within libXrandr.
1703 *
1704 * *len = output_info->nameLen;
1705 *
1706 */
1707 if ((ret = strdup(output_info->name)) && len)
1708 *len = strlen(ret);
1709
1710 XRRFreeOutputInfo(output_info);
1711 }
1712
1713 if (res)
1714 XRRFreeScreenResources(res);
1715
1716 return ret;
1717#else
1718 return NULL;
1719#endif
1720}
1721
1722/**
1723 * @brief gets the width and hight of a given mode
1724 * @param mode the mode which's size is to be looked up
1725 * @param w width of given mode in px
1726 * @param h height of given mode in px
1727 */
1728EAPI void
1729ecore_x_randr_mode_size_get(Ecore_X_Window root,
1730 Ecore_X_Randr_Mode mode,
1731 int *w,
1732 int *h)
1733{
1734#ifdef ECORE_XRANDR
1735 RANDR_CHECK_1_2_RET();
1736 XRRScreenResources *res = NULL;
1737 int i;
1738
1739 if ((mode != Ecore_X_Randr_None)
1740 && (w || h)
1741 && (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1742 {
1743 for (i = 0; i < res->nmode; i++)
1744 {
1745 if (res->modes[i].id == mode)
1746 {
1747 if (w)
1748 *w = res->modes[i].width;
1749
1750 if (h)
1751 *h = res->modes[i].height;
1752
1753 break;
1754 }
1755 }
1756 }
1757
1758 if (res)
1759 XRRFreeScreenResources(res);
1760
1761#endif
1762}
1763
1764/**
1765 * @brief gets the EDID information of an attached output if available.
1766 * Note that this information is not to be compared using ordinary string
1767 * comparison functions, since it includes 0-bytes.
1768 * @param root window this information should be queried from
1769 * @param output the XID of the output
1770 * @param length length of the byte-array. If NULL, request will fail.
1771 */
1772EAPI unsigned char *
1773ecore_x_randr_output_edid_get(Ecore_X_Window root,
1774 Ecore_X_Randr_Output output,
1775 unsigned long *length)
1776{
1777#ifdef ECORE_XRANDR
1778 RANDR_CHECK_1_2_RET(NULL);
1779 Atom name = XInternAtom (_ecore_x_disp, RANDR_PROPERTY_EDID, False);
1780 unsigned char *prop_data, *ret = NULL;
1781 int actual_format;
1782 unsigned long nitems, bytes_after;
1783 Atom actual_type;
1784
1785 if (!length || !_ecore_x_randr_output_validate(root, output))
1786 return NULL;
1787
1788 if (XRRGetOutputProperty (_ecore_x_disp, output, name,
1789 0, 100, False, False,
1790 AnyPropertyType,
1791 &actual_type, &actual_format,
1792 &nitems, &bytes_after, &prop_data) == Success)
1793 {
1794 if (actual_type == XA_INTEGER && actual_format == 8)
1795 {
1796 if ((ret = malloc(nitems * sizeof(unsigned char))))
1797 {
1798 if (length &&
1799 (memcpy(ret, prop_data, (nitems * sizeof(unsigned char)))))
1800 *length = nitems;
1801
1802 return ret;
1803 }
1804 }
1805 }
1806
1807 return NULL;
1808#else
1809 return NULL;
1810#endif
1811}
1812
1813EAPI Ecore_X_Randr_Connection_Status
1814ecore_x_randr_output_connection_status_get(Ecore_X_Window root,
1815 Ecore_X_Randr_Output output)
1816{
1817#ifdef ECORE_XRANDR
1818 RANDR_CHECK_1_2_RET(ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN);
1819 XRRScreenResources *res = NULL;
1820 XRROutputInfo *output_info = NULL;
1821 Ecore_X_Randr_Connection_Status ret =
1822 ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
1823
1824 if ((output != Ecore_X_Randr_None)
1825 && (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root))
1826 && (output_info = XRRGetOutputInfo(_ecore_x_disp, res, output)))
1827 {
1828 ret = output_info->connection;
1829 }
1830
1831 if (output_info)
1832 XRRFreeOutputInfo(output_info);
1833
1834 if (res)
1835 XRRFreeScreenResources(res);
1836
1837 return ret;
1838#else
1839 return ECORE_X_RANDR_CONNECTION_STATUS_UNKNOWN;
1840#endif
1841}
1842
1843EAPI void
1844ecore_x_randr_output_size_mm_get(Ecore_X_Window root,
1845 Ecore_X_Randr_Output output,
1846 int *w_mm,
1847 int *h_mm)
1848{
1849#ifdef ECORE_XRANDR
1850 RANDR_CHECK_1_2_RET();
1851 XRRScreenResources *res = NULL;
1852 XRROutputInfo *output_info = NULL;
1853
1854 if ((output != Ecore_X_Randr_None)
1855 && (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
1856 {
1857 if ((output_info =
1858 XRRGetOutputInfo(_ecore_x_disp, res, (RROutput)output)))
1859 {
1860 if (w_mm)
1861 *w_mm = output_info->mm_width;
1862
1863 if (h_mm)
1864 *h_mm = output_info->mm_height;
1865
1866 XRRFreeOutputInfo(output_info);
1867 }
1868
1869 XRRFreeScreenResources(res);
1870 }
1871
1872#endif
1873}
1874
1875EAPI Eina_Bool
1876ecore_x_randr_move_all_crtcs_but(Ecore_X_Window root,
1877 const Ecore_X_Randr_Crtc *not_moved,
1878 int nnot_moved,
1879 int dx,
1880 int dy)
1881{
1882#ifdef ECORE_XRANDR
1883 Ecore_X_Randr_Crtc *crtcs_to_be_moved = NULL;
1884 XRRScreenResources *res = NULL;
1885 int i, j, k, n;
1886 Eina_Bool ret;
1887
1888 if ((nnot_moved <= 0) || (!not_moved)
1889 || !_ecore_x_randr_root_validate(root)
1890 || !(res =
1891 _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
1892 return EINA_FALSE;
1893
1894 n = (res->ncrtc - nnot_moved);
1895 if ((crtcs_to_be_moved = malloc(sizeof(Ecore_X_Randr_Crtc) * n)))
1896 {
1897 for (i = 0, k = 0; (i < res->ncrtc) && (k < n); i++)
1898 {
1899 for (j = 0; j < nnot_moved; j++)
1900 {
1901 if (res->crtcs[i] == not_moved[j])
1902 break;
1903 }
1904 if (j == nnot_moved)
1905 //crtcs[i] is not in the 'not to move'-list
1906 crtcs_to_be_moved[k++] = res->crtcs[i];
1907 }
1908 }
1909
1910 XRRFreeScreenResources(res);
1911 ret = ecore_x_randr_move_crtcs(root, crtcs_to_be_moved, n, dx, dy);
1912 free(crtcs_to_be_moved);
1913 return ret;
1914#else
1915 return EINA_FALSE;
1916#endif
1917}
1918
1919/*
1920 * @brief move given CRTCs belonging to the given root window's screen dx/dy pixels relative to their current position. The screen size will be automatically adjusted if necessary and possible.
1921 * @param root window which's screen's resources are used
1922 * @param crtcs list of CRTCs to be moved
1923 * @param ncrtc number of CRTCs in array
1924 * @param dx amount of pixels the CRTCs should be moved in x direction
1925 * @param dy amount of pixels the CRTCs should be moved in y direction
1926 * @return EINA_TRUE if all crtcs could be moved successfully.
1927 */
1928EAPI Eina_Bool
1929ecore_x_randr_move_crtcs(Ecore_X_Window root,
1930 const Ecore_X_Randr_Crtc *crtcs,
1931 int ncrtc,
1932 int dx,
1933 int dy)
1934{
1935#ifdef ECORE_XRANDR
1936 RANDR_CHECK_1_2_RET(EINA_FALSE);
1937 XRRScreenResources *res = NULL;
1938 XRRCrtcInfo **crtc_info = NULL;
1939 Eina_Bool ret = EINA_TRUE;
1940 int i, cw, ch, w_max, h_max, nw, nh;
1941
1942 crtc_info = alloca(sizeof(XRRCrtcInfo *) * ncrtc);
1943 memset(crtc_info, 0, sizeof(XRRCrtcInfo *) * ncrtc);
1944 if (_ecore_x_randr_root_validate(root)
1945 && (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
1946 {
1947 ecore_x_randr_screen_size_range_get(root, NULL, NULL, &w_max, &h_max);
1948 ecore_x_randr_screen_current_size_get(root, &cw, &ch, NULL, NULL);
1949 nw = cw;
1950 nh = ch;
1951
1952 for (i = 0;
1953 (i < ncrtc) &&
1954 (crtc_info[i] = XRRGetCrtcInfo(_ecore_x_disp, res, crtcs[i]));
1955 i++)
1956 {
1957 if (((crtc_info[i]->x + dx) < 0) ||
1958 ((int)(crtc_info[i]->x + crtc_info[i]->width + dx) > w_max)
1959 || ((crtc_info[i]->y + dy) < 0) ||
1960 ((int)(crtc_info[i]->y + crtc_info[i]->height + dy) > h_max)
1961 )
1962 goto _ecore_x_randr_move_crtcs_fail_free_crtc_info;
1963
1964 nw = MAX((int)(crtc_info[i]->x + crtc_info[i]->width + dx), nw);
1965 nh = MAX((int)(crtc_info[i]->y + crtc_info[i]->height + dy), nh);
1966 }
1967 //not out of bounds
1968
1969 //resize if necessary
1970 if (!(((nw > cw) ||
1971 (nh > ch)) ||
1972 ecore_x_randr_screen_current_size_set(root, nw, nh,
1973 Ecore_X_Randr_Unset,
1974 Ecore_X_Randr_Unset)))
1975 goto _ecore_x_randr_move_crtcs_fail_free_crtc_info;
1976
1977 //actually move all the crtcs, keep their rotation and mode.
1978 for (i = 0; (i < ncrtc) && crtc_info[i]; i++)
1979 {
1980 if ((crtc_info[i]) &&
1981 (!ecore_x_randr_crtc_settings_set(root, crtcs[i], NULL,
1982 Ecore_X_Randr_Unset,
1983 (crtc_info[i]->x + dx),
1984 (crtc_info[i]->y + dy),
1985 crtc_info[i]->mode,
1986 crtc_info[i]->rotation)))
1987 {
1988 ret = EINA_FALSE;
1989 break;
1990 }
1991 }
1992 if (i < ncrtc)
1993 {
1994 //something went wrong, let's try to move the already moved crtcs
1995 //back.
1996 while ((i--) >= 0)
1997 {
1998 if (crtc_info[i])
1999 ecore_x_randr_crtc_settings_set(root,
2000 crtcs[i],
2001 NULL,
2002 Ecore_X_Randr_Unset,
2003 (crtc_info[i]->x - dx),
2004 (crtc_info[i]->y - dy),
2005 crtc_info[i]->mode,
2006 crtc_info[i]->rotation);
2007 }
2008 }
2009
2010 for (i = 0; i < ncrtc; i++)
2011 {
2012 if (crtc_info[i]) XRRFreeCrtcInfo(crtc_info[i]);
2013 }
2014 }
2015
2016 XRRFreeScreenResources(res);
2017
2018 return ret;
2019_ecore_x_randr_move_crtcs_fail_free_crtc_info:
2020 while (i-- > 0)
2021 XRRFreeCrtcInfo(crtc_info[i]);
2022 XRRFreeScreenResources(res);
2023 return EINA_FALSE;
2024#else
2025 return EINA_FALSE;
2026#endif
2027}
2028
2029/**
2030 * @brief removes unused screen space. The most upper left CRTC is set to 0x0
2031 * and all other CRTCs dx,dy respectively.
2032 * @param root the window's screen which will be reset.
2033 */
2034EAPI void
2035ecore_x_randr_screen_reset(Ecore_X_Window root)
2036{
2037#ifdef ECORE_XRANDR
2038 XRRCrtcInfo *crtc_info = NULL;
2039 XRRScreenResources *res = NULL;
2040 //the 100000 are just a random huge number.
2041 int i, dx_min = 100000, dy_min = 100000, w_n = 0, h_n = 0, nenabled_crtcs = 0;
2042
2043 if (!_ecore_x_randr_root_validate(root) ||
2044 !(res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
2045 return;
2046
2047 Ecore_X_Randr_Crtc enabled_crtcs[res->ncrtc];
2048
2049 for (i = 0; i < res->ncrtc; i++)
2050 {
2051 if (!(crtc_info =
2052 XRRGetCrtcInfo(_ecore_x_disp, res,
2053 res->crtcs[i])) ||
2054 (crtc_info->mode == Ecore_X_Randr_None) ||
2055 (crtc_info->mode == Ecore_X_Randr_Unset)
2056 || ((crtc_info->noutput == 0)))
2057 continue;
2058
2059 enabled_crtcs[nenabled_crtcs++] = res->crtcs[i];
2060
2061 if ((int)(crtc_info->x + crtc_info->width) > w_n)
2062 w_n = (crtc_info->x + crtc_info->width);
2063
2064 if ((int)(crtc_info->y + crtc_info->height) > h_n)
2065 h_n = (crtc_info->y + crtc_info->height);
2066
2067 if (crtc_info->x < dx_min)
2068 dx_min = crtc_info->x;
2069 if (crtc_info->y < dy_min)
2070 dy_min = crtc_info->y;
2071
2072 XRRFreeCrtcInfo(crtc_info);
2073 }
2074 if ((dx_min > 0) || (dy_min > 0))
2075 {
2076 if (ecore_x_randr_move_crtcs(root, enabled_crtcs, nenabled_crtcs, -dx_min, -dy_min))
2077 {
2078 w_n -= dx_min;
2079 h_n -= dy_min;
2080 }
2081 }
2082 ecore_x_randr_screen_current_size_set(root,
2083 w_n,
2084 h_n,
2085 Ecore_X_Randr_Unset,
2086 Ecore_X_Randr_Unset);
2087#endif
2088}
2089
2090/**
2091 * @brief set up the backlight level to the given level.
2092 * @param root the window's screen which will be set.
2093 * @param level of the backlight between 0 and 1
2094 */
2095
2096EAPI void
2097ecore_x_randr_screen_backlight_level_set(Ecore_X_Window root,
2098 double level)
2099{
2100#ifdef ECORE_XRANDR
2101 RANDR_CHECK_1_2_RET();
2102 Atom _backlight;
2103 XRRScreenResources *resources = NULL;
2104 Ecore_X_Randr_Output output;
2105 int o;
2106
2107 if ((level < 0) || (level > 1))
2108 {
2109 ERR("Wrong value for the backlight level. It should be between 0 and 1.");
2110 return;
2111 }
2112
2113 /*
2114 * To make sure that the _backlight atomic property still exists.
2115 */
2116 _backlight = XInternAtom(_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
2117 if (_backlight == None)
2118 {
2119 WRN("Backlight setting is not supported on this server or driver");
2120 return;
2121 }
2122
2123 /* get the ressources */
2124 resources = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root);
2125 if (!resources) return;
2126
2127 for (o = 0; o < resources->noutput; o++)
2128 {
2129 output = resources->outputs[o];
2130 if (ecore_x_randr_output_backlight_level_get(root, output) >= 0)
2131 {
2132 ecore_x_randr_output_backlight_level_set(root, output, level);
2133 }
2134 }
2135 XRRFreeScreenResources(resources);
2136#endif
2137}
2138
2139/*
2140 * @brief check if a backlight is available
2141 * @return whether a blacklight is available
2142 */
2143
2144EAPI Eina_Bool
2145ecore_x_randr_output_backlight_available(void)
2146{
2147#ifdef ECORE_XRANDR
2148 RANDR_CHECK_1_2_RET(-1);
2149 Atom _backlight;
2150
2151 _backlight = XInternAtom(_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
2152
2153 return (_backlight == None) ? EINA_FALSE : EINA_TRUE;
2154
2155#endif
2156 return EINA_FALSE;
2157}
2158
2159/*
2160 * @brief get the backlight level of the given output
2161 * @param root window which's screen should be queried
2162 * @param output from which the backlight level should be retrieved
2163 * @return the backlight level
2164 */
2165
2166EAPI double
2167ecore_x_randr_output_backlight_level_get(Ecore_X_Window root,
2168 Ecore_X_Randr_Output output)
2169{
2170#ifdef ECORE_XRANDR
2171 RANDR_CHECK_1_2_RET(-1);
2172 Atom actual_type;
2173 Atom _backlight;
2174 XRRPropertyInfo *info = NULL;
2175 double dvalue;
2176 int actual_format;
2177 long value, max, min;
2178 unsigned long nitems;
2179 unsigned long bytes_after;
2180 unsigned char *prop = NULL;
2181
2182 /* set backlight variable if not already done */
2183
2184 _backlight = XInternAtom(_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
2185 if (_backlight == None)
2186 {
2187 ERR("Backlight property is not suppported on this server or driver");
2188 return -1;
2189 }
2190
2191 if (!_ecore_x_randr_output_validate(root, output))
2192 {
2193 ERR("Invalid output");
2194 return -1;
2195 }
2196
2197 if (XRRGetOutputProperty(_ecore_x_disp, output, _backlight,
2198 0, 4, False, False, None,
2199 &actual_type, &actual_format,
2200 &nitems, &bytes_after, &prop) != Success)
2201 {
2202 WRN("Backlight not supported on this output");
2203 return -1;
2204 }
2205
2206 if ((actual_type != XA_INTEGER) || (nitems != 1) || (actual_format != 32)) return -1;
2207
2208 value = *((long *)prop);
2209 free (prop);
2210
2211 /* I have the current value of the backlight */
2212 /* Now retrieve the min and max intensities of the output */
2213 info = XRRQueryOutputProperty(_ecore_x_disp, output, _backlight);
2214 if (info)
2215 {
2216 dvalue = -1;
2217 if ((info->range) && (info->num_values == 2))
2218 {
2219 /* finally convert the current value in the interval [0..1] */
2220 min = info->values[0];
2221 max = info->values[1];
2222 dvalue = ((double)(value - min)) / ((double)(max - min));
2223 }
2224 free(info);
2225 return dvalue;
2226 }
2227#endif
2228 return -1;
2229}
2230
2231/*
2232 * @brief set the backlight level of a given output
2233 * @param root window which's screen should be queried
2234 * @param output that should be set
2235 * @param level for which the backlight should be set
2236 * @return EINA_TRUE in case of success
2237 */
2238
2239EAPI Eina_Bool
2240ecore_x_randr_output_backlight_level_set(Ecore_X_Window root,
2241 Ecore_X_Randr_Output output,
2242 double level)
2243{
2244#ifdef ECORE_XRANDR
2245 RANDR_CHECK_1_2_RET(EINA_FALSE);
2246 Atom _backlight;
2247 XRRPropertyInfo *info = NULL;
2248 double min, max, tmp;
2249 long new;
2250
2251 if ((level < 0) || (level > 1))
2252 {
2253 ERR("Backlight level should be between 0 and 1");
2254 return EINA_FALSE;
2255 }
2256
2257 if (!_ecore_x_randr_output_validate(root, output))
2258 {
2259 ERR("Wrong output value");
2260 return EINA_FALSE;
2261 }
2262
2263 _backlight = XInternAtom(_ecore_x_disp, RANDR_PROPERTY_BACKLIGHT, True);
2264 if (_backlight == None)
2265 {
2266 WRN("Backlight property is not suppported on this server or driver");
2267 return EINA_FALSE;
2268 }
2269
2270 info = XRRQueryOutputProperty(_ecore_x_disp, output, _backlight);
2271 if (info)
2272 {
2273 if ((info->range) && (info->num_values == 2))
2274 {
2275 min = info->values[0];
2276 max = info->values[1];
2277 tmp = (level * (max - min)) + min;
2278 new = tmp;
2279 if (new > max) new = max;
2280 if (new < min) new = min;
2281 XRRChangeOutputProperty(_ecore_x_disp, output, _backlight, XA_INTEGER, 32,
2282 PropModeReplace, (unsigned char *)&new, 1);
2283 XFlush(_ecore_x_disp);
2284 }
2285 free(info);
2286 return EINA_TRUE;
2287 }
2288#endif
2289 return EINA_FALSE;
2290}
2291
2292/*
2293 * @brief get the outputs, which display a certain window
2294 * @param window window the displaying outputs shall be found for
2295 * @param num the number of outputs displaying the window
2296 * @return array of outputs that display a certain window. NULL if no outputs
2297 * was found that displays the specified window.
2298 */
2299
2300EAPI Ecore_X_Randr_Output *
2301ecore_x_randr_window_outputs_get(Ecore_X_Window window,
2302 int *num)
2303{
2304#ifdef ECORE_XRANDR
2305 Ecore_X_Window root;
2306 Ecore_X_Randr_Crtc *crtcs;
2307 Ecore_X_Randr_Output *outputs, *ret = NULL;
2308 int ncrtcs, noutputs, i, nret = 0;
2309
2310 if (_randr_version < RANDR_1_2) goto _ecore_x_randr_current_output_get_fail;
2311
2312 root = ecore_x_window_root_get(window);
2313 if (!(crtcs = ecore_x_randr_window_crtcs_get(window, &ncrtcs)))
2314 goto _ecore_x_randr_current_output_get_fail;
2315
2316 for (i = 0, nret = 0; i < ncrtcs; i++)
2317 {
2318
2319 outputs = ecore_x_randr_crtc_outputs_get(root, crtcs[i],
2320 &noutputs);
2321 if (!outputs)
2322 goto _ecore_x_randr_current_output_get_fail_free;
2323 nret += noutputs;
2324 ret = realloc(ret, (nret * sizeof(Ecore_X_Randr_Output)));
2325 memcpy(&ret[nret], outputs, (noutputs * sizeof(Ecore_X_Randr_Output)));
2326 free(outputs);
2327 }
2328 free(crtcs);
2329
2330 if (num)
2331 *num = nret;
2332
2333 return ret;
2334
2335_ecore_x_randr_current_output_get_fail_free:
2336 free(outputs);
2337 free(crtcs);
2338 free(ret);
2339_ecore_x_randr_current_output_get_fail:
2340#endif
2341 if (num) *num = 0;
2342 return NULL;
2343}
2344
2345/*
2346 * @deprecated bad naming. Use ecore_x_randr_window_outputs_get instead.
2347 * @brief get the outputs, which display a certain window
2348 * @param window window the displaying outputs shall be found for
2349 * @param num the number of outputs displaying the window
2350 * @return array of outputs that display a certain window. NULL if no outputs
2351 * was found that displays the specified window.
2352 */
2353
2354EAPI Ecore_X_Randr_Output *
2355ecore_x_randr_current_output_get(Ecore_X_Window window,
2356 int *num)
2357{
2358 return ecore_x_randr_window_outputs_get(window, num);
2359}
2360
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12_edid.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12_edid.c
deleted file mode 100644
index 5bda332..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_12_edid.c
+++ /dev/null
@@ -1,463 +0,0 @@
1/*
2 * Copyright 2006-2009 Red Hat, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * on the rights to use, copy, modify, merge, publish, distribute, sub
8 * license, and/or sell copies of the Software, and to permit persons to whom
9 * the Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 */
22/* Original Author: Adam Jackson <ajax@nwnk.net> */
23/* Heavily modified by: Leif Middelschulte <leif.middelschulte@gmail.com> */
24
25#include "Ecore_X.h"
26#include <stdio.h>
27#include <stdlib.h>
28#include <unistd.h>
29#include <string.h>
30
31/* TODO:
32 * - see other TODO's within this file.
33 */
34
35#define ECORE_X_RANDR_EDID_VERSION_10 ((1 << 8) | 0)
36#define ECORE_X_RANDR_EDID_VERSION_11 ((1 << 8) | 1)
37#define ECORE_X_RANDR_EDID_VERSION_12 ((1 << 8) | 2)
38#define ECORE_X_RANDR_EDID_VERSION_13 ((1 << 8) | 3)
39#define ECORE_X_RANDR_EDID_VERSION_14 ((1 << 8) | 4)
40
41#define _ECORE_X_RANDR_EDID_OFFSET_MANUFACTURER 0x08
42#define _ECORE_X_RANDR_EDID_OFFSET_TYPE 0x14
43#define _ECORE_X_RANDR_EDID_OFFSET_VERSION_MAJOR 0x12
44#define _ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR 0x13
45#define _ECORE_X_RANDR_EDID_OFFSET_DPMS 0x18
46#define _ECORE_X_RANDR_EDID_OFFSET_COLORSPACE 0x18
47#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK 0x36
48#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE 3
49#define _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT 5
50#define _ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO_PREFERRED 15
51#define _ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO 14
52
53#define _ECORE_X_RANDR_EDID_MASK_DIGITAL 0x80
54#define _ECORE_X_RANDR_EDID_MASK_DIGITAL_INTERFACE 0x0f
55#define _ECORE_X_RANDR_EDID_MASK_DIGITAL_TMDS_DFP_10 0x01
56#define _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_ANALOGOUS 0x18
57#define _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_DIGITAL_YCRCB_444 0x10
58#define _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_DIGITAL_YCRCB_422 0x08
59#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_PREFERRED 0xe0
60#define _ECORE_X_RANDR_EDID_MASK_DPMS 0xE0
61#define _ECORE_X_RANDR_EDID_MASK_DPMS_STANDBY 0x80
62#define _ECORE_X_RANDR_EDID_MASK_DPMS_SUSPEND 0x40
63#define _ECORE_X_RANDR_EDID_MASK_DPMS_OFF 0x20
64#define _ECORE_X_RANDR_EDID_MASK_INTERFACE_TYPE 0x0f
65#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_4_3 0x80
66#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_16_9 0x40
67#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_16_10 0x20
68#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_5_4 0x10
69#define _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_15_9 0x08
70
71#define _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX 13
72
73typedef enum _Ecore_X_Randr_Edid_Aspect_Ratio_Preferred {
74 ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_4_3 = 0x00,
75 ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_16_9 = 0x01,
76 ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_16_10 = 0x02,
77 ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_5_4 = 0x03,
78 ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_15_9 = 0x04
79} Ecore_X_Randr_Edid_Aspect_Ratio_Preferred;
80
81/* Some convenience loops */
82#define _ECORE_X_RANDR_EDID_FOR_EACH_EXTENSION_BLOCK(edid, edid_length, extension_block_iter) \
83 for (extension_block_iter = edid; extension_block_iter < (edid + edid_length); extension_block_iter += 128)
84
85#define _ECORE_X_RANDR_EDID_FOR_EACH_CEA_BLOCK(edid, edid_length, cea_block_iter) \
86 _ECORE_X_RANDR_EDID_FOR_EACH_EXTENSION_BLOCK(edid, edid_length, cea_block_iter) \
87 if (cea_block_iter[0] == 0x02)
88
89/* The following macro is to be used with caution as it inherits another loop.
90 * Therefore using a 'break;' statement will lead to continuation in the
91 * inherent 'Extension block'-loop.
92 */
93#define _ECORE_X_RANDR_EDID_FOR_EACH_CEA_DETAILED_BLOCK(edid, edid_length, cea_block_iter, detailed_block_iter) \
94 _ECORE_X_RANDR_EDID_FOR_EACH_CEA_BLOCK(edid, edid_length, cea_block_iter) \
95 for (detailed_block_iter = cea_block_iter + cea_block_iter[2]; detailed_block_iter + 18 < cea_block_iter + 127; detailed_block_iter += 18) \
96 if (detailed_block_iter[0])
97
98#define _ECORE_X_RANDR_EDID_FOR_EACH_DESCRIPTOR_BLOCK(edid, block) \
99 for (block = edid + _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK; block <= (edid + _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK + (3 * 18)); block += 18)
100
101#define _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block) \
102 _ECORE_X_RANDR_EDID_FOR_EACH_DESCRIPTOR_BLOCK(edid, block) \
103 if ((block[0] == 0) && (block[1] == 0))
104
105EAPI Eina_Bool
106ecore_x_randr_edid_has_valid_header(unsigned char *edid,
107 unsigned long edid_length)
108{
109 const unsigned char header[] =
110 { 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
111 if (!edid) return EINA_FALSE;
112 if (edid_length < 8) return EINA_FALSE;
113 if (!memcmp(edid, header, 8)) return EINA_TRUE;
114 return EINA_FALSE;
115}
116
117EAPI int
118ecore_x_randr_edid_version_get(unsigned char *edid,
119 unsigned long edid_length)
120{
121 if ((edid_length > _ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR) &&
122 (ecore_x_randr_edid_has_valid_header(edid, edid_length)))
123 return (edid[_ECORE_X_RANDR_EDID_OFFSET_VERSION_MAJOR] << 8) |
124 edid[_ECORE_X_RANDR_EDID_OFFSET_VERSION_MINOR];
125 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
126}
127
128EAPI int
129ecore_x_randr_edid_manufacturer_model_get(unsigned char *edid,
130 unsigned long edid_length)
131{
132 if ((edid_length > 0x0b) &&
133 (ecore_x_randr_edid_has_valid_header(edid, edid_length)))
134 return (int)(edid[0x0a] + (edid[0x0b] << 8));
135 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
136}
137
138EAPI int
139ecore_x_randr_edid_manufacturer_serial_number_get(unsigned char *edid,
140 unsigned long edid_length)
141{
142 if ((edid_length > 0x0f) &&
143 (ecore_x_randr_edid_has_valid_header(edid, edid_length)))
144 return (int)(edid[0x0c] + (edid[0x0d] << 8) +
145 (edid[0x0e] << 16) + (edid[0x0f] << 24));
146 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
147}
148
149EAPI char *
150ecore_x_randr_edid_manufacturer_name_get(unsigned char *edid,
151 unsigned long edid_length)
152{
153 if ((edid_length > (_ECORE_X_RANDR_EDID_OFFSET_MANUFACTURER + 1)) &&
154 (ecore_x_randr_edid_has_valid_header(edid, edid_length)))
155 {
156 unsigned char *x;
157 char *name;
158
159 x = (edid + _ECORE_X_RANDR_EDID_OFFSET_MANUFACTURER);
160 name = malloc(sizeof(char) * 4);
161 if (!name) return NULL;
162 name[0] = ((x[0] & 0x7c) >> 2) + '@';
163 name[1] = ((x[0] & 0x03) << 3) + ((x[1] & 0xe0) >> 5) + '@';
164 name[2] = (x[1] & 0x1f) + '@';
165 name[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] = 0;
166 return name;
167 }
168 return NULL;
169}
170
171EAPI char *
172ecore_x_randr_edid_display_name_get(unsigned char *edid,
173 unsigned long edid_length)
174{
175 unsigned char *block = NULL;
176 int version = ecore_x_randr_edid_version_get(edid, edid_length);
177
178 if (version < ECORE_X_RANDR_EDID_VERSION_13) return NULL;
179 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
180 {
181 if (block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xfc)
182 {
183 char *name, *p;
184 const char *edid_name;
185
186 edid_name = (const char *)block + _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT;
187 name = malloc(sizeof(char) * _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX);
188 if (!name) return NULL;
189 strncpy(name, edid_name, (_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX - 1));
190 name[_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX] = 0;
191 for (p = name; *p; p++)
192 {
193 if ((*p < ' ') || (*p > '~')) *p = 0;
194 }
195 return name;
196 }
197 }
198 return NULL;
199}
200
201EAPI Ecore_X_Randr_Edid_Aspect_Ratio
202ecore_x_randr_edid_display_aspect_ratio_preferred_get(unsigned char *edid,
203 unsigned long edid_length)
204{
205 unsigned char *block = NULL;
206 int version = ecore_x_randr_edid_version_get(edid, edid_length);
207
208 if (version < ECORE_X_RANDR_EDID_VERSION_13) return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
209 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
210 {
211 if ((block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xfd) &&
212 (block[10] == 0x04))
213 {
214 Ecore_X_Randr_Edid_Aspect_Ratio_Preferred preferred_ratio =
215 (Ecore_X_Randr_Edid_Aspect_Ratio_Preferred)
216 ((block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO_PREFERRED] &
217 _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_PREFERRED) >> 5);
218 switch (preferred_ratio)
219 {
220 case ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_4_3:
221 return ECORE_X_RANDR_EDID_ASPECT_RATIO_4_3;
222
223 case ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_16_9:
224 return ECORE_X_RANDR_EDID_ASPECT_RATIO_16_9;
225
226 case ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_16_10:
227 return ECORE_X_RANDR_EDID_ASPECT_RATIO_16_10;
228
229 case ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_5_4:
230 return ECORE_X_RANDR_EDID_ASPECT_RATIO_5_4;
231
232 case ECORE_X_RANDR_EDID_ASPECT_RATIO_PREFERRED_15_9:
233 return ECORE_X_RANDR_EDID_ASPECT_RATIO_15_9;
234
235 default:
236 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
237 }
238 }
239 }
240 return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
241}
242
243EAPI Ecore_X_Randr_Edid_Aspect_Ratio
244ecore_x_randr_edid_display_aspect_ratios_get(unsigned char *edid,
245 unsigned long edid_length)
246{
247 Ecore_X_Randr_Edid_Aspect_Ratio ret = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
248 unsigned char *block = NULL;
249 int version = ecore_x_randr_edid_version_get(edid, edid_length);
250
251 if (version < ECORE_X_RANDR_EDID_VERSION_13) return ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
252 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
253 {
254 if ((block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xfd) &&
255 (block[10] == 0x04))
256 {
257 if (block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO] & _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_4_3)
258 ret |= ECORE_X_RANDR_EDID_ASPECT_RATIO_4_3;
259 if (block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO] & _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_16_9)
260 ret |= ECORE_X_RANDR_EDID_ASPECT_RATIO_16_9;
261 if (block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO] & _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_16_10)
262 ret |= ECORE_X_RANDR_EDID_ASPECT_RATIO_16_10;
263 if (block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO] & _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_5_4)
264 ret |= ECORE_X_RANDR_EDID_ASPECT_RATIO_5_4;
265 if (block[_ECORE_X_RANDR_EDID_OFFSET_ASPECT_RATIO] & _ECORE_X_RANDR_EDID_MASK_ASPECT_RATIO_15_9)
266 ret |= ECORE_X_RANDR_EDID_ASPECT_RATIO_15_9;
267 }
268 }
269 return ret;
270}
271
272EAPI char *
273ecore_x_randr_edid_display_ascii_get(unsigned char *edid,
274 unsigned long edid_length)
275{
276 unsigned char *block = NULL;
277 int version = ecore_x_randr_edid_version_get(edid, edid_length);
278
279 if (version < ECORE_X_RANDR_EDID_VERSION_13) return NULL;
280 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
281 {
282 if (block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xfe)
283 {
284 char *ascii, *p;
285 const char *edid_ascii = (const char *)block +
286 _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT;
287 /*
288 * TODO: Two of these in a row, in the third and fourth slots,
289 * seems to be specified by SPWG: http://www.spwg.org/
290 */
291 ascii = malloc(sizeof(char) * _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX);
292 if (!ascii) return NULL;
293 strncpy(ascii, edid_ascii, (_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX - 1));
294 ascii[_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX] = 0;
295 for (p = ascii; *p; p++)
296 {
297 if ((*p < ' ') || (*p > '~')) *p = 0;
298 }
299 return ascii;
300 }
301 }
302 return NULL;
303}
304
305EAPI char *
306ecore_x_randr_edid_display_serial_get(unsigned char *edid,
307 unsigned long edid_length)
308{
309 unsigned char *block = NULL;
310 int version = ecore_x_randr_edid_version_get(edid, edid_length);
311
312 if (version < ECORE_X_RANDR_EDID_VERSION_13) return NULL;
313 _ECORE_X_RANDR_EDID_FOR_EACH_NON_PIXEL_DESCRIPTOR_BLOCK(edid, block)
314 {
315 if (block[_ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_TYPE] == 0xff)
316 {
317 char *serial, *p;
318 const char *edid_serial = (const char *)block +
319 _ECORE_X_RANDR_EDID_OFFSET_DESCRIPTOR_BLOCK_CONTENT;
320 /*
321 * TODO: Two of these in a row, in the third and fourth slots,
322 * seems to be specified by SPWG: http://www.spwg.org/
323 */
324 serial = malloc(sizeof(char) * _ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX);
325 if (!serial) return NULL;
326 strncpy(serial, edid_serial, (_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX - 1));
327 serial[_ECORE_X_RANDR_EDID_DISPLAY_DESCRIPTOR_BLOCK_CONTENT_LENGTH_MAX] = 0;
328 for (p = serial; *p; p++)
329 {
330 if ((*p < ' ') || (*p > '~')) *p = 0;
331 }
332 return serial;
333 }
334 }
335 return NULL;
336}
337
338EAPI Eina_Bool
339ecore_x_randr_edid_info_has_valid_checksum(unsigned char *edid,
340 unsigned long edid_length)
341{
342 unsigned char *cea_block_iter = NULL;
343 char sum = 0;
344 int i;
345 int version = ecore_x_randr_edid_version_get(edid, edid_length);
346
347 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
348 if (edid_length < 128) return EINA_FALSE;
349
350 /* Check the EDID block itself */
351 for (i = 0; i < 128; i++)
352 sum += edid[i];
353 if (sum) return EINA_FALSE;
354
355 /* Check the cea extension blocks */
356 _ECORE_X_RANDR_EDID_FOR_EACH_CEA_BLOCK(edid, edid_length, cea_block_iter)
357 {
358 for (i = 0, sum = 0; i < 128; i++)
359 sum += cea_block_iter[i];
360 }
361 if (sum) return EINA_FALSE;
362 return EINA_TRUE;
363}
364
365EAPI Eina_Bool
366ecore_x_randr_edid_dpms_available_get(unsigned char *edid,
367 unsigned long edid_length)
368{
369 int version = ecore_x_randr_edid_version_get(edid, edid_length);
370
371 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
372 return !!(edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] &
373 _ECORE_X_RANDR_EDID_MASK_DPMS);
374}
375
376EAPI Eina_Bool
377ecore_x_randr_edid_dpms_standby_available_get(unsigned char *edid,
378 unsigned long edid_length)
379{
380 int version = ecore_x_randr_edid_version_get(edid, edid_length);
381
382 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
383 if (edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] & _ECORE_X_RANDR_EDID_MASK_DPMS)
384 return !!(edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] &
385 _ECORE_X_RANDR_EDID_MASK_DPMS_STANDBY);
386 return EINA_FALSE;
387}
388
389EAPI Eina_Bool
390ecore_x_randr_edid_dpms_suspend_available_get(unsigned char *edid,
391 unsigned long edid_length)
392{
393 int version = ecore_x_randr_edid_version_get(edid, edid_length);
394
395 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
396 if (edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] & _ECORE_X_RANDR_EDID_MASK_DPMS)
397 return !!(edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] &
398 _ECORE_X_RANDR_EDID_MASK_DPMS_SUSPEND);
399 return EINA_FALSE;
400}
401
402EAPI Eina_Bool
403ecore_x_randr_edid_dpms_off_available_get(unsigned char *edid,
404 unsigned long edid_length)
405{
406 int version = ecore_x_randr_edid_version_get(edid, edid_length);
407
408 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
409 if (edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] & _ECORE_X_RANDR_EDID_MASK_DPMS)
410 return !!(edid[_ECORE_X_RANDR_EDID_OFFSET_DPMS] &
411 _ECORE_X_RANDR_EDID_MASK_DPMS_OFF);
412 return EINA_FALSE;
413}
414
415EAPI Eina_Bool
416ecore_x_randr_edid_display_type_digital_get(unsigned char *edid,
417 unsigned long edid_length)
418{
419 int version = ecore_x_randr_edid_version_get(edid, edid_length);
420
421 if (version < ECORE_X_RANDR_EDID_VERSION_13) return EINA_FALSE;
422 return !!(edid[_ECORE_X_RANDR_EDID_OFFSET_TYPE] &
423 _ECORE_X_RANDR_EDID_MASK_DIGITAL);
424}
425
426EAPI Ecore_X_Randr_Edid_Display_Colorscheme
427ecore_x_randr_edid_display_colorscheme_get(unsigned char *edid,
428 unsigned long edid_length)
429{
430 Ecore_X_Randr_Edid_Display_Colorscheme colorscheme = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
431 int version = ecore_x_randr_edid_version_get(edid, edid_length);
432
433 if (version < ECORE_X_RANDR_EDID_VERSION_13) return colorscheme;
434 if (ecore_x_randr_edid_display_type_digital_get(edid, edid_length))
435 {
436 colorscheme = ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_4_4_4;
437 if (edid[_ECORE_X_RANDR_EDID_OFFSET_COLORSPACE] &
438 _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_DIGITAL_YCRCB_444)
439 colorscheme |= ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_YCRCB_4_4_4;
440 if (edid[_ECORE_X_RANDR_EDID_OFFSET_COLORSPACE] &
441 _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_DIGITAL_YCRCB_422)
442 colorscheme |= ECORE_X_RANDR_EDID_DISPLAY_COLORSCHEME_COLOR_RGB_YCRCB_4_2_2;
443 }
444 else
445 colorscheme = edid[_ECORE_X_RANDR_EDID_OFFSET_COLORSPACE] & _ECORE_X_RANDR_EDID_MASK_COLORSCHEME_ANALOGOUS;
446 return colorscheme;
447}
448
449EAPI Ecore_X_Randr_Edid_Display_Interface_Type
450ecore_x_randr_edid_display_interface_type_get(unsigned char *edid,
451 unsigned long edid_length)
452{
453 Ecore_X_Randr_Edid_Display_Interface_Type type = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
454 int version = ecore_x_randr_edid_version_get(edid, edid_length);
455
456 if (version < ECORE_X_RANDR_EDID_VERSION_13) return type;
457 type = edid[_ECORE_X_RANDR_EDID_OFFSET_TYPE] &
458 _ECORE_X_RANDR_EDID_MASK_INTERFACE_TYPE;
459 if (type > ECORE_X_RANDR_EDID_DISPLAY_INTERFACE_DISPLAY_PORT)
460 type = ECORE_X_RANDR_EDID_UNKNOWN_VALUE;
461 return type;
462}
463
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_13.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_13.c
deleted file mode 100644
index 5d1c8e9..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_randr_13.c
+++ /dev/null
@@ -1,68 +0,0 @@
1/*
2 * vim:ts=8:sw=3:sts=8:expandtab:cino=>5n-3f0^-2{2
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif
8
9#include "ecore_x_private.h"
10#include "ecore_x_randr.h"
11#include <stdio.h>
12#include <stdlib.h>
13#include <unistd.h>
14#include <string.h>
15
16#define Ecore_X_Randr_None 0
17#define Ecore_X_Randr_Unset -1
18
19#ifdef ECORE_XRANDR
20
21#define RANDR_1_3 ((1 << 16) | 3)
22#define RANDR_CHECK_1_3_RET(ret) if (_randr_version < RANDR_1_3) \
23 return ret
24
25extern XRRScreenResources *(*_ecore_x_randr_get_screen_resources)(Display *
26 dpy,
27 Window
28 window);
29extern int _randr_version;
30#endif
31
32/*
33 * @param root window which's screen should be queried
34 * @return Ecore_X_Randr_Ouptut_Id or - if query failed or none is set - Ecore_X_Randr_None
35 */
36EAPI Ecore_X_Randr_Output
37ecore_x_randr_primary_output_get(Ecore_X_Window root)
38{
39#ifdef ECORE_XRANDR
40 RANDR_CHECK_1_3_RET(Ecore_X_Randr_None);
41 if (!_ecore_x_randr_root_validate(root))
42 return Ecore_X_Randr_None;
43
44 return XRRGetOutputPrimary(_ecore_x_disp, root);
45#else
46 return Ecore_X_Randr_None;
47#endif
48}
49
50/*
51 * @param root window which's screen should be queried
52 * @param output that should be set as given root window's screen primary output
53 */
54EAPI void
55ecore_x_randr_primary_output_set(Ecore_X_Window root,
56 Ecore_X_Randr_Output output)
57{
58#ifdef ECORE_XRANDR
59 RANDR_CHECK_1_3_RET();
60
61 if (_ecore_x_randr_output_validate(root, output))
62 {
63 XRRSetOutputPrimary(_ecore_x_disp, root, output);
64 }
65
66#endif
67}
68
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_region.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_region.c
deleted file mode 100644
index 81d7eea..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_region.c
+++ /dev/null
@@ -1,158 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "ecore_x_private.h"
6
7/*
8 * [x] XCreateRegion
9 * [ ] XPolygonRegion
10 * [x] XSetRegion
11 * [x] XDestroyRegion
12 *
13 * [x] XOffsetRegion
14 * [ ] XShrinkRegion
15 *
16 * [ ] XClipBox
17 * [x] XIntersectRegion
18 * [x] XUnionRegion
19 * [x] XUnionRectWithRegion
20 * [x] XSubtractRegion
21 * [ ] XXorRegion
22 *
23 * [x] XEmptyRegion
24 * [x] XEqualRegion
25 *
26 * [x] XPointInRegion
27 * [x] XRectInRegion
28 */
29
30EAPI Ecore_X_XRegion *
31ecore_x_xregion_new()
32{
33 LOGFN(__FILE__, __LINE__, __FUNCTION__);
34 return (Ecore_X_XRegion *)XCreateRegion();
35}
36
37EAPI void
38ecore_x_xregion_free(Ecore_X_XRegion *region)
39{
40 LOGFN(__FILE__, __LINE__, __FUNCTION__);
41 if (!region)
42 return;
43
44 XDestroyRegion((Region)region);
45}
46
47EAPI Eina_Bool
48ecore_x_xregion_set(Ecore_X_XRegion *region,
49 Ecore_X_GC gc)
50{
51 LOGFN(__FILE__, __LINE__, __FUNCTION__);
52 return XSetRegion(_ecore_x_disp, gc, (Region)region) ? EINA_TRUE : EINA_FALSE;
53}
54
55EAPI void
56ecore_x_xregion_translate(Ecore_X_XRegion *region,
57 int x,
58 int y)
59{
60 LOGFN(__FILE__, __LINE__, __FUNCTION__);
61 if (!region)
62 return;
63
64 /* return value not used */
65 XOffsetRegion((Region)region, x, y);
66}
67
68EAPI Eina_Bool
69ecore_x_xregion_intersect(Ecore_X_XRegion *dst,
70 Ecore_X_XRegion *r1,
71 Ecore_X_XRegion *r2)
72{
73 LOGFN(__FILE__, __LINE__, __FUNCTION__);
74 return XIntersectRegion((Region)r1, (Region)r2, (Region)dst) ? EINA_TRUE : EINA_FALSE;
75}
76
77EAPI Eina_Bool
78ecore_x_xregion_union(Ecore_X_XRegion *dst,
79 Ecore_X_XRegion *r1,
80 Ecore_X_XRegion *r2)
81{
82 LOGFN(__FILE__, __LINE__, __FUNCTION__);
83 return XUnionRegion((Region)r1, (Region)r2, (Region)dst) ? EINA_TRUE : EINA_FALSE;
84}
85
86EAPI Eina_Bool
87ecore_x_xregion_union_rect(Ecore_X_XRegion *dst,
88 Ecore_X_XRegion *src,
89 Ecore_X_Rectangle *rect)
90{
91 XRectangle xr;
92
93 LOGFN(__FILE__, __LINE__, __FUNCTION__);
94 xr.x = rect->x;
95 xr.y = rect->y;
96 xr.width = rect->width;
97 xr.height = rect->height;
98
99 return XUnionRectWithRegion(&xr, (Region)src, (Region)dst) ? EINA_TRUE : EINA_FALSE;
100}
101
102EAPI Eina_Bool
103ecore_x_xregion_subtract(Ecore_X_XRegion *dst,
104 Ecore_X_XRegion *rm,
105 Ecore_X_XRegion *rs)
106{
107 LOGFN(__FILE__, __LINE__, __FUNCTION__);
108 return XSubtractRegion((Region)rm, (Region)rs, (Region)dst) ? EINA_TRUE : EINA_FALSE;
109}
110
111EAPI Eina_Bool
112ecore_x_xregion_is_empty(Ecore_X_XRegion *region)
113{
114 if (!region)
115 return EINA_TRUE;
116
117 LOGFN(__FILE__, __LINE__, __FUNCTION__);
118 return XEmptyRegion((Region)region) ? EINA_TRUE : EINA_FALSE;
119}
120
121EAPI Eina_Bool
122ecore_x_xregion_is_equal(Ecore_X_XRegion *r1,
123 Ecore_X_XRegion *r2)
124{
125 if (!r1 || !r2)
126 return EINA_FALSE;
127
128 LOGFN(__FILE__, __LINE__, __FUNCTION__);
129 return XEqualRegion((Region)r1, (Region)r1) ? EINA_TRUE : EINA_FALSE;
130}
131
132EAPI Eina_Bool
133ecore_x_xregion_point_contain(Ecore_X_XRegion *region,
134 int x,
135 int y)
136{
137 if (!region)
138 return EINA_FALSE;
139
140 LOGFN(__FILE__, __LINE__, __FUNCTION__);
141 return XPointInRegion((Region)region, x, y) ? EINA_TRUE : EINA_FALSE;
142}
143
144EAPI Eina_Bool
145ecore_x_xregion_rect_contain(Ecore_X_XRegion *region,
146 Ecore_X_Rectangle *rect)
147{
148 if (!region || !rect)
149 return EINA_FALSE;
150
151 LOGFN(__FILE__, __LINE__, __FUNCTION__);
152 return XRectInRegion((Region)region,
153 rect->x,
154 rect->y,
155 rect->width,
156 rect->height) ? EINA_TRUE : EINA_FALSE;
157}
158
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c
deleted file mode 100644
index 40dd738..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c
+++ /dev/null
@@ -1,173 +0,0 @@
1/*
2 * Screensaver code
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif /* ifdef HAVE_CONFIG_H */
8
9#include "Ecore.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14static int _screensaver_available = -1;
15
16EAPI Eina_Bool
17ecore_x_screensaver_event_available_get(void)
18{
19 if (_screensaver_available >= 0)
20 return _screensaver_available;
21
22#ifdef ECORE_XSS
23 int _screensaver_major, _screensaver_minor;
24
25 LOGFN(__FILE__, __LINE__, __FUNCTION__);
26 _screensaver_major = 1;
27 _screensaver_minor = 0;
28
29 if (XScreenSaverQueryVersion(_ecore_x_disp, &_screensaver_major,
30 &_screensaver_minor))
31 _screensaver_available = 1;
32 else
33 _screensaver_available = 0;
34
35#else /* ifdef ECORE_XSS */
36 _screensaver_available = 0;
37#endif /* ifdef ECORE_XSS */
38 return _screensaver_available;
39}
40
41EAPI int
42ecore_x_screensaver_idle_time_get(void)
43{
44#ifdef ECORE_XSS
45 XScreenSaverInfo *xss;
46 int idle;
47
48 LOGFN(__FILE__, __LINE__, __FUNCTION__);
49 xss = XScreenSaverAllocInfo();
50 XScreenSaverQueryInfo(_ecore_x_disp,
51 RootWindow(_ecore_x_disp, DefaultScreen(
52 _ecore_x_disp)), xss);
53 idle = xss->idle / 1000;
54 XFree(xss);
55
56 return idle;
57#else
58 return 0;
59#endif /* ifdef ECORE_XSS */
60}
61
62EAPI void
63ecore_x_screensaver_set(int timeout,
64 int interval,
65 int prefer_blanking,
66 int allow_exposures)
67{
68 LOGFN(__FILE__, __LINE__, __FUNCTION__);
69 XSetScreenSaver(_ecore_x_disp,
70 timeout,
71 interval,
72 prefer_blanking,
73 allow_exposures);
74}
75
76EAPI void
77ecore_x_screensaver_timeout_set(int timeout)
78{
79 int pto, pint, pblank, pexpo;
80
81 LOGFN(__FILE__, __LINE__, __FUNCTION__);
82 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
83 XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
84}
85
86EAPI int
87ecore_x_screensaver_timeout_get(void)
88{
89 int pto, pint, pblank, pexpo;
90
91 LOGFN(__FILE__, __LINE__, __FUNCTION__);
92 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
93 return pto;
94}
95
96EAPI void
97ecore_x_screensaver_blank_set(int blank)
98{
99 int pto, pint, pblank, pexpo;
100
101 LOGFN(__FILE__, __LINE__, __FUNCTION__);
102 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
103 XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
104}
105
106EAPI int
107ecore_x_screensaver_blank_get(void)
108{
109 int pto, pint, pblank, pexpo;
110
111 LOGFN(__FILE__, __LINE__, __FUNCTION__);
112 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
113 return pblank;
114}
115
116EAPI void
117ecore_x_screensaver_expose_set(int expose)
118{
119 int pto, pint, pblank, pexpo;
120
121 LOGFN(__FILE__, __LINE__, __FUNCTION__);
122 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
123 XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
124}
125
126EAPI int
127ecore_x_screensaver_expose_get(void)
128{
129 int pto, pint, pblank, pexpo;
130
131 LOGFN(__FILE__, __LINE__, __FUNCTION__);
132 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
133 return pexpo;
134}
135
136EAPI void
137ecore_x_screensaver_interval_set(int interval)
138{
139 int pto, pint, pblank, pexpo;
140
141 LOGFN(__FILE__, __LINE__, __FUNCTION__);
142 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
143 XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
144}
145
146EAPI int
147ecore_x_screensaver_interval_get(void)
148{
149 int pto, pint, pblank, pexpo;
150
151 LOGFN(__FILE__, __LINE__, __FUNCTION__);
152 XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
153 return pint;
154}
155
156EAPI void
157ecore_x_screensaver_event_listen_set(Eina_Bool on)
158{
159#ifdef ECORE_XSS
160 Ecore_X_Window root;
161
162 LOGFN(__FILE__, __LINE__, __FUNCTION__);
163 root = DefaultRootWindow(_ecore_x_disp);
164 if (on)
165 XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask);
166 else
167 XScreenSaverSelectInput(_ecore_x_disp, root, 0);
168#else
169 return;
170 on = EINA_FALSE;
171#endif /* ifdef ECORE_XSS */
172}
173
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
deleted file mode 100644
index fa177c3..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_selection.c
+++ /dev/null
@@ -1,1002 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Ecore.h"
9#include "ecore_private.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14static Ecore_X_Selection_Intern selections[4];
15static Ecore_X_Selection_Converter *converters = NULL;
16static Ecore_X_Selection_Parser *parsers = NULL;
17
18static Eina_Bool _ecore_x_selection_converter_text(char *target,
19 void *data,
20 int size,
21 void **data_ret,
22 int *size_ret,
23 Ecore_X_Atom *tprop,
24 int *);
25static int _ecore_x_selection_data_default_free(void *data);
26static void *_ecore_x_selection_parser_files(const char *target,
27 void *data,
28 int size,
29 int format);
30static int _ecore_x_selection_data_files_free(void *data);
31static void *_ecore_x_selection_parser_text(const char *target,
32 void *data,
33 int size,
34 int format);
35static int _ecore_x_selection_data_text_free(void *data);
36static void *_ecore_x_selection_parser_targets(const char *target,
37 void *data,
38 int size,
39 int format);
40static int _ecore_x_selection_data_targets_free(void *data);
41
42#define ECORE_X_SELECTION_DATA(x) ((Ecore_X_Selection_Data *)(x))
43
44void
45_ecore_x_selection_data_init(void)
46{
47 /* Initialize global data */
48 memset(selections, 0, sizeof(selections));
49
50 /* Initialize converters */
51 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_TEXT,
52 _ecore_x_selection_converter_text);
53#ifdef X_HAVE_UTF8_STRING
54 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_UTF8_STRING,
55 _ecore_x_selection_converter_text);
56#endif /* ifdef X_HAVE_UTF8_STRING */
57 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_COMPOUND_TEXT,
58 _ecore_x_selection_converter_text);
59 ecore_x_selection_converter_atom_add(ECORE_X_ATOM_STRING,
60 _ecore_x_selection_converter_text);
61
62 /* Initialize parsers */
63 ecore_x_selection_parser_add("text/plain",
64 _ecore_x_selection_parser_text);
65 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_UTF8_STRING,
66 _ecore_x_selection_parser_text);
67 ecore_x_selection_parser_add("text/uri-list",
68 _ecore_x_selection_parser_files);
69 ecore_x_selection_parser_add("_NETSCAPE_URL",
70 _ecore_x_selection_parser_files);
71 ecore_x_selection_parser_add(ECORE_X_SELECTION_TARGET_TARGETS,
72 _ecore_x_selection_parser_targets);
73}
74
75void
76_ecore_x_selection_shutdown(void)
77{
78 Ecore_X_Selection_Converter *cnv;
79 Ecore_X_Selection_Parser *prs;
80
81 /* free the selection converters */
82 cnv = converters;
83 while (cnv)
84 {
85 Ecore_X_Selection_Converter *tmp;
86
87 tmp = cnv->next;
88 free(cnv);
89 cnv = tmp;
90 }
91 converters = NULL;
92
93 /* free the selection parsers */
94 prs = parsers;
95 while (prs)
96 {
97 Ecore_X_Selection_Parser *tmp;
98
99 tmp = prs;
100 prs = prs->next;
101 free(tmp->target);
102 free(tmp);
103 }
104 parsers = NULL;
105}
106
107Ecore_X_Selection_Intern *
108_ecore_x_selection_get(Ecore_X_Atom selection)
109{
110 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
111 return &selections[0];
112 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
113 return &selections[1];
114 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
115 return &selections[2];
116 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
117 return &selections[3];
118 else
119 return NULL;
120}
121
122Eina_Bool
123_ecore_x_selection_set(Window w,
124 const void *data,
125 int size,
126 Ecore_X_Atom selection)
127{
128 int in;
129 unsigned char *buf = NULL;
130
131 XSetSelectionOwner(_ecore_x_disp, selection, w, _ecore_x_event_last_time);
132 if (XGetSelectionOwner(_ecore_x_disp, selection) != w)
133 return EINA_FALSE;
134
135 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
136 in = 0;
137 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
138 in = 1;
139 else if (selection == ECORE_X_ATOM_SELECTION_XDND)
140 in = 2;
141 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
142 in = 3;
143 else
144 return EINA_FALSE;
145
146 if (data)
147 {
148 selections[in].win = w;
149 selections[in].selection = selection;
150 selections[in].length = size;
151 selections[in].time = _ecore_x_event_last_time;
152
153 buf = malloc(size);
154 if (!buf) return EINA_FALSE;
155 memcpy(buf, data, size);
156 selections[in].data = buf;
157 }
158 else if (selections[in].data)
159 {
160 free(selections[in].data);
161 memset(&selections[in], 0, sizeof(Ecore_X_Selection_Data));
162 }
163
164 return EINA_TRUE;
165}
166
167/**
168 * Claim ownership of the PRIMARY selection and set its data.
169 * @param w The window to which this selection belongs
170 * @param data The data associated with the selection
171 * @param size The size of the data buffer in bytes
172 * @return Returns 1 if the ownership of the selection was successfully
173 * claimed, or 0 if unsuccessful.
174 */
175EAPI Eina_Bool
176ecore_x_selection_primary_set(Ecore_X_Window w,
177 const void *data,
178 int size)
179{
180 LOGFN(__FILE__, __LINE__, __FUNCTION__);
181 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_PRIMARY);
182}
183
184/**
185 * Release ownership of the primary selection
186 * @return Returns 1 if the selection was successfully cleared,
187 * or 0 if unsuccessful.
188 *
189 */
190EAPI Eina_Bool
191ecore_x_selection_primary_clear(void)
192{
193 LOGFN(__FILE__, __LINE__, __FUNCTION__);
194 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_PRIMARY);
195}
196
197/**
198 * Claim ownership of the SECONDARY selection and set its data.
199 * @param w The window to which this selection belongs
200 * @param data The data associated with the selection
201 * @param size The size of the data buffer in bytes
202 * @return Returns 1 if the ownership of the selection was successfully
203 * claimed, or 0 if unsuccessful.
204 */
205EAPI Eina_Bool
206ecore_x_selection_secondary_set(Ecore_X_Window w,
207 const void *data,
208 int size)
209{
210 LOGFN(__FILE__, __LINE__, __FUNCTION__);
211 return _ecore_x_selection_set(w,
212 data,
213 size,
214 ECORE_X_ATOM_SELECTION_SECONDARY);
215}
216
217/**
218 * Release ownership of the secondary selection
219 * @return Returns 1 if the selection was successfully cleared,
220 * or 0 if unsuccessful.
221 *
222 */
223EAPI Eina_Bool
224ecore_x_selection_secondary_clear(void)
225{
226 LOGFN(__FILE__, __LINE__, __FUNCTION__);
227 return _ecore_x_selection_set(None,
228 NULL,
229 0,
230 ECORE_X_ATOM_SELECTION_SECONDARY);
231}
232
233/**
234 * Claim ownership of the XDND selection and set its data.
235 * @param w The window to which this selection belongs
236 * @param data The data associated with the selection
237 * @param size The size of the data buffer in bytes
238 * @return Returns 1 if the ownership of the selection was successfully
239 * claimed, or 0 if unsuccessful.
240 */
241EAPI Eina_Bool
242ecore_x_selection_xdnd_set(Ecore_X_Window w,
243 const void *data,
244 int size)
245{
246 LOGFN(__FILE__, __LINE__, __FUNCTION__);
247 return _ecore_x_selection_set(w, data, size, ECORE_X_ATOM_SELECTION_XDND);
248}
249
250/**
251 * Release ownership of the XDND selection
252 * @return Returns 1 if the selection was successfully cleared,
253 * or 0 if unsuccessful.
254 *
255 */
256EAPI Eina_Bool
257ecore_x_selection_xdnd_clear(void)
258{
259 LOGFN(__FILE__, __LINE__, __FUNCTION__);
260 return _ecore_x_selection_set(None, NULL, 0, ECORE_X_ATOM_SELECTION_XDND);
261}
262
263/**
264 * Claim ownership of the CLIPBOARD selection and set its data.
265 * @param w The window to which this selection belongs
266 * @param data The data associated with the selection
267 * @param size The size of the data buffer in bytes
268 * @return Returns 1 if the ownership of the selection was successfully
269 * claimed, or 0 if unsuccessful.
270 *
271 * Get the converted data from a previous CLIPBOARD selection
272 * request. The buffer must be freed when done with.
273 */
274EAPI Eina_Bool
275ecore_x_selection_clipboard_set(Ecore_X_Window w,
276 const void *data,
277 int size)
278{
279 LOGFN(__FILE__, __LINE__, __FUNCTION__);
280 return _ecore_x_selection_set(w,
281 data,
282 size,
283 ECORE_X_ATOM_SELECTION_CLIPBOARD);
284}
285
286/**
287 * Release ownership of the clipboard selection
288 * @return Returns 1 if the selection was successfully cleared,
289 * or 0 if unsuccessful.
290 *
291 */
292EAPI Eina_Bool
293ecore_x_selection_clipboard_clear(void)
294{
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
296 return _ecore_x_selection_set(None,
297 NULL,
298 0,
299 ECORE_X_ATOM_SELECTION_CLIPBOARD);
300}
301
302Ecore_X_Atom
303_ecore_x_selection_target_atom_get(const char *target)
304{
305 Ecore_X_Atom x_target;
306
307 if (!strcmp(target, ECORE_X_SELECTION_TARGET_TEXT))
308 x_target = ECORE_X_ATOM_TEXT;
309 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_COMPOUND_TEXT))
310 x_target = ECORE_X_ATOM_COMPOUND_TEXT;
311 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_STRING))
312 x_target = ECORE_X_ATOM_STRING;
313 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_UTF8_STRING))
314 x_target = ECORE_X_ATOM_UTF8_STRING;
315 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_FILENAME))
316 x_target = ECORE_X_ATOM_FILE_NAME;
317 else
318 x_target = ecore_x_atom_get(target);
319
320 return x_target;
321}
322
323char *
324_ecore_x_selection_target_get(Ecore_X_Atom target)
325{
326 /* FIXME: Should not return mem allocated with strdup or X mixed,
327 * one should use free to free, the other XFree */
328 if (target == ECORE_X_ATOM_FILE_NAME)
329 return strdup(ECORE_X_SELECTION_TARGET_FILENAME);
330 else if (target == ECORE_X_ATOM_STRING)
331 return strdup(ECORE_X_SELECTION_TARGET_STRING);
332 else if (target == ECORE_X_ATOM_UTF8_STRING)
333 return strdup(ECORE_X_SELECTION_TARGET_UTF8_STRING);
334 else if (target == ECORE_X_ATOM_TEXT)
335 return strdup(ECORE_X_SELECTION_TARGET_TEXT);
336 else
337 return XGetAtomName(_ecore_x_disp, target);
338}
339
340static void
341_ecore_x_selection_request(Ecore_X_Window w,
342 Ecore_X_Atom selection,
343 const char *target_str)
344{
345 Ecore_X_Atom target, prop;
346
347 target = _ecore_x_selection_target_atom_get(target_str);
348
349 if (selection == ECORE_X_ATOM_SELECTION_PRIMARY)
350 prop = ECORE_X_ATOM_SELECTION_PROP_PRIMARY;
351 else if (selection == ECORE_X_ATOM_SELECTION_SECONDARY)
352 prop = ECORE_X_ATOM_SELECTION_PROP_SECONDARY;
353 else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
354 prop = ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD;
355 else
356 return;
357
358 XConvertSelection(_ecore_x_disp, selection, target, prop,
359 w, CurrentTime);
360}
361
362EAPI void
363ecore_x_selection_primary_request(Ecore_X_Window w,
364 const char *target)
365{
366 LOGFN(__FILE__, __LINE__, __FUNCTION__);
367 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_PRIMARY, target);
368}
369
370EAPI void
371ecore_x_selection_secondary_request(Ecore_X_Window w,
372 const char *target)
373{
374 LOGFN(__FILE__, __LINE__, __FUNCTION__);
375 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_SECONDARY, target);
376}
377
378EAPI void
379ecore_x_selection_xdnd_request(Ecore_X_Window w,
380 const char *target)
381{
382 Ecore_X_Atom atom;
383 Ecore_X_DND_Target *_target;
384
385 LOGFN(__FILE__, __LINE__, __FUNCTION__);
386 _target = _ecore_x_dnd_target_get();
387 atom = _ecore_x_selection_target_atom_get(target);
388 XConvertSelection(_ecore_x_disp, ECORE_X_ATOM_SELECTION_XDND, atom,
389 ECORE_X_ATOM_SELECTION_PROP_XDND, w,
390 _target->time);
391}
392
393EAPI void
394ecore_x_selection_clipboard_request(Ecore_X_Window w,
395 const char *target)
396{
397 LOGFN(__FILE__, __LINE__, __FUNCTION__);
398 _ecore_x_selection_request(w, ECORE_X_ATOM_SELECTION_CLIPBOARD, target);
399}
400
401EAPI void
402ecore_x_selection_converter_atom_add(Ecore_X_Atom target,
403 Eina_Bool (*func)(char *target,
404 void *data,
405 int size,
406 void **data_ret,
407 int *size_ret,
408 Ecore_X_Atom *ttype,
409 int *tsize))
410{
411 Ecore_X_Selection_Converter *cnv;
412
413 LOGFN(__FILE__, __LINE__, __FUNCTION__);
414 cnv = converters;
415 if (converters)
416 {
417 while (1)
418 {
419 if (cnv->target == target)
420 {
421 cnv->convert = func;
422 return;
423 }
424
425 if (cnv->next)
426 cnv = cnv->next;
427 else
428 break;
429 }
430
431 cnv->next = calloc(1, sizeof(Ecore_X_Selection_Converter));
432 if (!cnv->next) return;
433 cnv = cnv->next;
434 }
435 else
436 {
437 converters = calloc(1, sizeof(Ecore_X_Selection_Converter));
438 if (!converters) return;
439 cnv = converters;
440 }
441
442 cnv->target = target;
443 cnv->convert = func;
444}
445
446EAPI void
447ecore_x_selection_converter_add(char *target,
448 Eina_Bool (*func)(char *target,
449 void *data,
450 int size,
451 void **data_ret,
452 int *size_ret,
453 Ecore_X_Atom *,
454 int *))
455{
456 Ecore_X_Atom x_target;
457
458 if (!func || !target)
459 return;
460
461 LOGFN(__FILE__, __LINE__, __FUNCTION__);
462 x_target = _ecore_x_selection_target_atom_get(target);
463
464 ecore_x_selection_converter_atom_add(x_target, func);
465}
466
467EAPI void
468ecore_x_selection_converter_atom_del(Ecore_X_Atom target)
469{
470 Ecore_X_Selection_Converter *cnv, *prev_cnv;
471
472 LOGFN(__FILE__, __LINE__, __FUNCTION__);
473 prev_cnv = NULL;
474 cnv = converters;
475
476 while (cnv)
477 {
478 if (cnv->target == target)
479 {
480 if (prev_cnv)
481 prev_cnv->next = cnv->next;
482 else
483 {
484 converters = cnv->next; /* This was the first converter */
485 }
486
487 free(cnv);
488
489 return;
490 }
491
492 prev_cnv = cnv;
493 cnv = cnv->next;
494 }
495}
496
497EAPI void
498ecore_x_selection_converter_del(char *target)
499{
500 Ecore_X_Atom x_target;
501
502 if (!target)
503 return;
504
505 LOGFN(__FILE__, __LINE__, __FUNCTION__);
506 x_target = _ecore_x_selection_target_atom_get(target);
507 ecore_x_selection_converter_atom_del(x_target);
508}
509
510EAPI Eina_Bool
511ecore_x_selection_notify_send(Ecore_X_Window requestor,
512 Ecore_X_Atom selection,
513 Ecore_X_Atom target,
514 Ecore_X_Atom property,
515 Ecore_X_Time tim)
516{
517 XEvent xev;
518 XSelectionEvent xnotify;
519
520 LOGFN(__FILE__, __LINE__, __FUNCTION__);
521 xnotify.type = SelectionNotify;
522 xnotify.display = _ecore_x_disp;
523 xnotify.requestor = requestor;
524 xnotify.selection = selection;
525 xnotify.target = target;
526 xnotify.property = property;
527 xnotify.time = tim;
528 xnotify.send_event = True;
529 xnotify.serial = 0;
530
531 xev.xselection = xnotify;
532 return (XSendEvent(_ecore_x_disp, requestor, False, 0, &xev) > 0) ? EINA_TRUE : EINA_FALSE;
533}
534
535/* Locate and run conversion callback for specified selection target */
536EAPI Eina_Bool
537ecore_x_selection_convert(Ecore_X_Atom selection,
538 Ecore_X_Atom target,
539 void **data_ret,
540 int *size,
541 Ecore_X_Atom *targtype,
542 int *typesize)
543{
544 Ecore_X_Selection_Intern *sel;
545 Ecore_X_Selection_Converter *cnv;
546 void *data;
547 char *tgt_str;
548
549 LOGFN(__FILE__, __LINE__, __FUNCTION__);
550 sel = _ecore_x_selection_get(selection);
551 tgt_str = _ecore_x_selection_target_get(target);
552
553 for (cnv = converters; cnv; cnv = cnv->next)
554 {
555 if (cnv->target == target)
556 {
557 int r;
558 r = cnv->convert(tgt_str, sel->data, sel->length, &data, size,
559 targtype, typesize);
560 free(tgt_str);
561 if (r)
562 {
563 *data_ret = data;
564 return r;
565 }
566 else
567 return EINA_FALSE;
568 }
569 }
570
571 /* ICCCM says "If the selection cannot be converted into a form based on the target (and parameters, if any), the owner should refuse the SelectionRequest as previously described." */
572 return EINA_FALSE;
573
574 /* Default, just return the data
575 * data_ret = malloc(sel->length);
576 memcpy(*data_ret, sel->data, sel->length);
577 free(tgt_str);
578 return 1;
579 */
580}
581
582/* TODO: We need to work out a mechanism for automatic conversion to any requested
583 * locale using Ecore_Txt functions */
584/* Converter for standard non-utf8 text targets */
585static Eina_Bool
586_ecore_x_selection_converter_text(char *target,
587 void *data,
588 int size,
589 void **data_ret,
590 int *size_ret,
591 Ecore_X_Atom *targprop __UNUSED__,
592 int *s __UNUSED__)
593{
594 XTextProperty text_prop;
595 char *mystr;
596 XICCEncodingStyle style;
597
598 if (!data || !size)
599 return EINA_FALSE;
600
601 LOGFN(__FILE__, __LINE__, __FUNCTION__);
602 if (!strcmp(target, ECORE_X_SELECTION_TARGET_TEXT))
603 style = XTextStyle;
604 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_COMPOUND_TEXT))
605 style = XCompoundTextStyle;
606 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_STRING))
607 style = XStringStyle;
608
609#ifdef X_HAVE_UTF8_STRING
610 else if (!strcmp(target, ECORE_X_SELECTION_TARGET_UTF8_STRING))
611 style = XUTF8StringStyle;
612#endif /* ifdef X_HAVE_UTF8_STRING */
613 else
614 return EINA_FALSE;
615
616 mystr = alloca(size + 1);
617 memcpy(mystr, data, size);
618 mystr[size] = '\0';
619
620#ifdef X_HAVE_UTF8_STRING
621 if (Xutf8TextListToTextProperty(_ecore_x_disp, &mystr, 1, style,
622 &text_prop) == Success)
623 {
624 int bufsize = strlen((char *)text_prop.value) + 1;
625 *data_ret = malloc(bufsize);
626 if (!*data_ret)
627 {
628 return EINA_FALSE;
629 }
630 memcpy(*data_ret, text_prop.value, bufsize);
631 *size_ret = bufsize;
632 XFree(text_prop.value);
633 return EINA_TRUE;
634 }
635
636#else /* ifdef X_HAVE_UTF8_STRING */
637 if (XmbTextListToTextProperty(_ecore_x_disp, &mystr, 1, style,
638 &text_prop) == Success)
639 {
640 int bufsize = strlen(text_prop.value) + 1;
641 *data_ret = malloc(bufsize);
642 if (!*data_ret) return EINA_FALSE;
643 memcpy(*data_ret, text_prop.value, bufsize);
644 *size_ret = bufsize;
645 XFree(text_prop.value);
646 return EINA_TRUE;
647 }
648
649#endif /* ifdef X_HAVE_UTF8_STRING */
650 else
651 {
652 return EINA_TRUE;
653 }
654}
655
656EAPI void
657ecore_x_selection_parser_add(const char *target,
658 void *(*func)(const char *target, void *data,
659 int size,
660 int format))
661{
662 Ecore_X_Selection_Parser *prs;
663
664 if (!target)
665 return;
666
667 LOGFN(__FILE__, __LINE__, __FUNCTION__);
668 prs = parsers;
669 if (parsers)
670 {
671 while (prs->next)
672 {
673 if (!strcmp(prs->target, target))
674 {
675 prs->parse = func;
676 return;
677 }
678
679 prs = prs->next;
680 }
681
682 prs->next = calloc(1, sizeof(Ecore_X_Selection_Parser));
683 if (!prs->next) return;
684 prs = prs->next;
685 }
686 else
687 {
688 parsers = calloc(1, sizeof(Ecore_X_Selection_Parser));
689 if (!parsers) return;
690 prs = parsers;
691 }
692
693 prs->target = strdup(target);
694 prs->parse = func;
695}
696
697EAPI void
698ecore_x_selection_parser_del(const char *target)
699{
700 Ecore_X_Selection_Parser *prs, *prev_prs;
701
702 if (!target)
703 return;
704
705 LOGFN(__FILE__, __LINE__, __FUNCTION__);
706 prev_prs = NULL;
707 prs = parsers;
708
709 while (prs)
710 {
711 if (!strcmp(prs->target, target))
712 {
713 if (prev_prs)
714 prev_prs->next = prs->next;
715 else
716 {
717 parsers = prs->next; /* This was the first parser */
718 }
719
720 free(prs->target);
721 free(prs);
722
723 return;
724 }
725
726 prev_prs = prs;
727 prs = prs->next;
728 }
729}
730
731/**
732 * Change the owner and last-change time for the specified selection.
733 * @param win The owner of the specified atom.
734 * @param atom The selection atom
735 * @param tim Specifies the time
736 * @since 1.1.0
737 */
738EAPI void
739ecore_x_selection_owner_set(Ecore_X_Window win,
740 Ecore_X_Atom atom,
741 Ecore_X_Time tim)
742{
743 XSetSelectionOwner(_ecore_x_disp, atom, win, tim);
744}
745
746/**
747 * Return the window that currently owns the specified selection.
748 *
749 * @param atom The specified selection atom.
750 *
751 * @return The window that currently owns the specified selection.
752 * @since 1.1.0
753 */
754EAPI Ecore_X_Window
755ecore_x_selection_owner_get(Ecore_X_Atom atom)
756{
757 return XGetSelectionOwner(_ecore_x_disp, atom);
758}
759
760/* Locate and run conversion callback for specified selection target */
761void *
762_ecore_x_selection_parse(const char *target,
763 void *data,
764 int size,
765 int format)
766{
767 Ecore_X_Selection_Parser *prs;
768 Ecore_X_Selection_Data *sel;
769
770 for (prs = parsers; prs; prs = prs->next)
771 {
772 if (!strcmp(prs->target, target))
773 {
774 sel = prs->parse(target, data, size, format);
775 if (sel) return sel;
776 }
777 }
778
779 /* Default, just return the data */
780 sel = calloc(1, sizeof(Ecore_X_Selection_Data));
781 if (!sel) return NULL;
782 sel->free = _ecore_x_selection_data_default_free;
783 sel->length = size;
784 sel->format = format;
785 sel->data = data;
786 return sel;
787}
788
789static int
790_ecore_x_selection_data_default_free(void *data)
791{
792 Ecore_X_Selection_Data *sel;
793
794 sel = data;
795 free(sel->data);
796 free(sel);
797 return 1;
798}
799
800static void *
801_ecore_x_selection_parser_files(const char *target,
802 void *_data,
803 int size,
804 int format __UNUSED__)
805{
806 Ecore_X_Selection_Data_Files *sel;
807 char *t, *data = _data;
808 int i, is;
809 char *tmp;
810 char **t2;
811
812 if (strcmp(target, "text/uri-list") &&
813 strcmp(target, "_NETSCAPE_URL"))
814 return NULL;
815
816 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Files));
817 if (!sel) return NULL;
818 ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_files_free;
819
820 if (data[size - 1])
821 {
822 /* Isn't nul terminated */
823 size++;
824 t = realloc(data, size);
825 if (!t)
826 {
827 free(sel);
828 return NULL;
829 }
830 data = t;
831 data[size - 1] = 0;
832 }
833
834 tmp = malloc(size);
835 if (!tmp)
836 {
837 free(sel);
838 return NULL;
839 }
840 i = 0;
841 is = 0;
842 while ((is < size) && (data[is]))
843 {
844 if ((i == 0) && (data[is] == '#'))
845 for (; ((data[is]) && (data[is] != '\n')); is++) ;
846 else
847 {
848 if ((data[is] != '\r') &&
849 (data[is] != '\n'))
850 tmp[i++] = data[is++];
851 else
852 {
853 while ((data[is] == '\r') || (data[is] == '\n'))
854 is++;
855 tmp[i] = 0;
856 sel->num_files++;
857 t2 = realloc(sel->files, sel->num_files * sizeof(char *));
858 if (t2)
859 {
860 sel->files = t2;
861 sel->files[sel->num_files - 1] = strdup(tmp);
862 }
863 tmp[0] = 0;
864 i = 0;
865 }
866 }
867 }
868 if (i > 0)
869 {
870 tmp[i] = 0;
871 sel->num_files++;
872 t2 = realloc(sel->files, sel->num_files * sizeof(char *));
873 if (t2)
874 {
875 sel->files = t2;
876 sel->files[sel->num_files - 1] = strdup(tmp);
877 }
878 }
879
880 free(tmp);
881 free(data);
882
883 ECORE_X_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_FILES;
884 ECORE_X_SELECTION_DATA(sel)->length = sel->num_files;
885
886 return ECORE_X_SELECTION_DATA(sel);
887}
888
889static int
890_ecore_x_selection_data_files_free(void *data)
891{
892 Ecore_X_Selection_Data_Files *sel;
893 int i;
894
895 sel = data;
896 if (sel->files)
897 {
898 for (i = 0; i < sel->num_files; i++)
899 free(sel->files[i]);
900 free(sel->files);
901 }
902
903 free(sel);
904 return 0;
905}
906
907static void *
908_ecore_x_selection_parser_text(const char *target __UNUSED__,
909 void *_data,
910 int size,
911 int format __UNUSED__)
912{
913 Ecore_X_Selection_Data_Text *sel;
914 unsigned char *data = _data;
915 void *t;
916
917 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Text));
918 if (!sel) return NULL;
919 if (data[size - 1])
920 {
921 /* Isn't nul terminated */
922 size++;
923 t = realloc(data, size);
924 if (!t)
925 {
926 free(sel);
927 return NULL;
928 }
929 data = t;
930 data[size - 1] = 0;
931 }
932
933 sel->text = (char *)data;
934 ECORE_X_SELECTION_DATA(sel)->length = size;
935 ECORE_X_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_TEXT;
936 ECORE_X_SELECTION_DATA(sel)->data = data;
937 ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_text_free;
938 return sel;
939}
940
941static int
942_ecore_x_selection_data_text_free(void *data)
943{
944 Ecore_X_Selection_Data_Text *sel;
945
946 sel = data;
947 free(sel->text);
948 free(sel);
949 return 1;
950}
951
952static void *
953_ecore_x_selection_parser_targets(const char *target __UNUSED__,
954 void *data,
955 int size,
956 int format __UNUSED__)
957{
958 Ecore_X_Selection_Data_Targets *sel;
959 unsigned long *targets;
960 int i;
961
962 sel = calloc(1, sizeof(Ecore_X_Selection_Data_Targets));
963 if (!sel) return NULL;
964 targets = (unsigned long *)data;
965
966 sel->num_targets = size - 2;
967 sel->targets = malloc((size - 2) * sizeof(char *));
968 if (!sel->targets)
969 {
970 free(sel);
971 return NULL;
972 }
973 for (i = 2; i < size; i++)
974 sel->targets[i - 2] = XGetAtomName(_ecore_x_disp, targets[i]);
975
976 ECORE_X_SELECTION_DATA(sel)->free = _ecore_x_selection_data_targets_free;
977 ECORE_X_SELECTION_DATA(sel)->content = ECORE_X_SELECTION_CONTENT_TARGETS;
978 ECORE_X_SELECTION_DATA(sel)->length = size;
979 ECORE_X_SELECTION_DATA(sel)->data = data;
980 return sel;
981}
982
983static int
984_ecore_x_selection_data_targets_free(void *data)
985{
986 Ecore_X_Selection_Data_Targets *sel;
987 int i;
988
989 sel = data;
990
991 if (sel->targets)
992 {
993 for (i = 0; i < sel->num_targets; i++)
994 XFree(sel->targets[i]);
995 free(sel->targets);
996 }
997
998 free(ECORE_X_SELECTION_DATA(sel)->data);
999 free(sel);
1000 return 1;
1001}
1002
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c
deleted file mode 100644
index 0c7f546..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c
+++ /dev/null
@@ -1,159 +0,0 @@
1/*
2 * XSync code
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif /* ifdef HAVE_CONFIG_H */
8
9#include "Ecore.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14EAPI Ecore_X_Sync_Alarm
15ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
16{
17 Ecore_X_Sync_Alarm alarm;
18 XSyncAlarmAttributes values;
19 XSyncValue init;
20
21 LOGFN(__FILE__, __LINE__, __FUNCTION__);
22 XSyncIntToValue(&init, 0);
23 XSyncSetCounter(_ecore_x_disp, counter, init);
24
25 values.trigger.counter = counter;
26 values.trigger.value_type = XSyncAbsolute;
27 XSyncIntToValue(&values.trigger.wait_value, 1);
28 values.trigger.test_type = XSyncPositiveComparison;
29
30 XSyncIntToValue(&values.delta, 1);
31
32 values.events = True;
33
34 alarm = XSyncCreateAlarm(_ecore_x_disp,
35 XSyncCACounter |
36 XSyncCAValueType |
37 XSyncCAValue |
38 XSyncCATestType |
39 XSyncCADelta |
40 XSyncCAEvents,
41 &values);
42
43 ecore_x_sync();
44 return alarm;
45}
46
47EAPI Eina_Bool
48ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
49{
50 LOGFN(__FILE__, __LINE__, __FUNCTION__);
51 return XSyncDestroyAlarm(_ecore_x_disp, alarm);
52}
53
54EAPI Eina_Bool
55ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter,
56 unsigned int *val)
57{
58 XSyncValue value;
59
60 LOGFN(__FILE__, __LINE__, __FUNCTION__);
61 if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
62 {
63 *val = (unsigned int)XSyncValueLow32(value);
64 return EINA_TRUE;
65 }
66
67 return EINA_FALSE;
68}
69
70EAPI Ecore_X_Sync_Counter
71ecore_x_sync_counter_new(int val)
72{
73 XSyncCounter counter;
74 XSyncValue v;
75
76 LOGFN(__FILE__, __LINE__, __FUNCTION__);
77 XSyncIntToValue(&v, val);
78 counter = XSyncCreateCounter(_ecore_x_disp, v);
79 return counter;
80}
81
82EAPI void
83ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
84{
85 LOGFN(__FILE__, __LINE__, __FUNCTION__);
86 XSyncDestroyCounter(_ecore_x_disp, counter);
87}
88
89EAPI void
90ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter,
91 int by)
92{
93 XSyncValue v;
94
95 LOGFN(__FILE__, __LINE__, __FUNCTION__);
96 XSyncIntToValue(&v, by);
97 XSyncChangeCounter(_ecore_x_disp, counter, v);
98}
99
100EAPI void
101ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter,
102 int val)
103{
104 XSyncWaitCondition cond;
105 XSyncValue v, v2;
106
107 LOGFN(__FILE__, __LINE__, __FUNCTION__);
108 XSyncQueryCounter(_ecore_x_disp, counter, &v);
109 XSyncIntToValue(&v, val);
110 XSyncIntToValue(&v2, val + 1);
111 cond.trigger.counter = counter;
112 cond.trigger.value_type = XSyncAbsolute;
113 cond.trigger.wait_value = v;
114 cond.trigger.test_type = XSyncPositiveComparison;
115 cond.event_threshold = v2;
116 XSyncAwait(_ecore_x_disp, &cond, 1);
117// XSync(_ecore_x_disp, False); // dont need this
118}
119
120EAPI void
121ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter,
122 int val)
123{
124 XSyncValue v;
125
126 LOGFN(__FILE__, __LINE__, __FUNCTION__);
127 XSyncIntToValue(&v, val);
128 XSyncSetCounter(_ecore_x_disp, counter, v);
129}
130
131EAPI void
132ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter,
133 int val_hi,
134 unsigned int val_lo)
135{
136 XSyncValue v;
137
138 LOGFN(__FILE__, __LINE__, __FUNCTION__);
139 XSyncIntsToValue(&v, val_lo, val_hi);
140 XSyncSetCounter(_ecore_x_disp, counter, v);
141}
142
143EAPI Eina_Bool
144ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter,
145 int *val_hi,
146 unsigned int *val_lo)
147{
148 XSyncValue value;
149
150 LOGFN(__FILE__, __LINE__, __FUNCTION__);
151 if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
152 {
153 *val_lo = (unsigned int)XSyncValueLow32(value);
154 *val_hi = (int)XSyncValueHigh32(value);
155 return EINA_TRUE;
156 }
157 return EINA_FALSE;
158}
159
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_test.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_test.c
deleted file mode 100644
index 23eea10..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_test.c
+++ /dev/null
@@ -1,167 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#ifdef ECORE_XTEST
8# include <X11/extensions/XTest.h>
9#endif /* ifdef ECORE_XTEST */
10
11#include "ecore_x_private.h"
12#include "Ecore_X.h"
13#include <string.h>
14
15EAPI Eina_Bool
16#ifdef ECORE_XTEST
17ecore_x_test_fake_key_down(const char *key)
18#else
19ecore_x_test_fake_key_down(const char *key __UNUSED__)
20#endif
21{
22#ifdef ECORE_XTEST
23 KeyCode keycode = 0;
24 KeySym keysym;
25
26 LOGFN(__FILE__, __LINE__, __FUNCTION__);
27 if (!strncmp(key, "Keycode-", 8))
28 keycode = atoi(key + 8);
29 else
30 {
31 keysym = XStringToKeysym(key);
32 if (keysym == NoSymbol)
33 return EINA_FALSE;
34
35 keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
36 }
37
38 if (keycode == 0)
39 return EINA_FALSE;
40
41 return XTestFakeKeyEvent(_ecore_x_disp, keycode, 1, 0) ? EINA_TRUE : EINA_FALSE;
42#else /* ifdef ECORE_XTEST */
43 return EINA_FALSE;
44#endif /* ifdef ECORE_XTEST */
45}
46
47EAPI Eina_Bool
48#ifdef ECORE_XTEST
49ecore_x_test_fake_key_up(const char *key)
50#else
51ecore_x_test_fake_key_up(const char *key __UNUSED__)
52#endif
53{
54#ifdef ECORE_XTEST
55 KeyCode keycode = 0;
56 KeySym keysym;
57
58 LOGFN(__FILE__, __LINE__, __FUNCTION__);
59 if (!strncmp(key, "Keycode-", 8))
60 keycode = atoi(key + 8);
61 else
62 {
63 keysym = XStringToKeysym(key);
64 if (keysym == NoSymbol)
65 return EINA_FALSE;
66
67 keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
68 }
69
70 if (keycode == 0)
71 return EINA_FALSE;
72
73 return XTestFakeKeyEvent(_ecore_x_disp, keycode, 0, 0) ? EINA_TRUE : EINA_FALSE;
74#else /* ifdef ECORE_XTEST */
75 return EINA_FALSE;
76#endif /* ifdef ECORE_XTEST */
77}
78
79EAPI Eina_Bool
80#ifdef ECORE_XTEST
81ecore_x_test_fake_key_press(const char *key)
82#else
83ecore_x_test_fake_key_press(const char *key __UNUSED__)
84#endif
85{
86#ifdef ECORE_XTEST
87 KeyCode keycode = 0;
88 KeySym keysym = 0;
89 int shift = 0;
90
91 LOGFN(__FILE__, __LINE__, __FUNCTION__);
92 if (!strncmp(key, "Keycode-", 8))
93 keycode = atoi(key + 8);
94 else
95 {
96 keysym = XStringToKeysym(key);
97 if (keysym == NoSymbol)
98 return EINA_FALSE;
99
100 keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
101 if (XKeycodeToKeysym(_ecore_x_disp, keycode, 0) != keysym)
102 {
103 if (XKeycodeToKeysym(_ecore_x_disp, keycode, 1) == keysym)
104 shift = 1;
105 else
106 keycode = 0;
107 }
108 else
109 shift = 0;
110 }
111
112 if (keycode == 0)
113 {
114 static int mod = 0;
115 KeySym *keysyms;
116 int keycode_min, keycode_max, keycode_num;
117 int i;
118
119 XDisplayKeycodes(_ecore_x_disp, &keycode_min, &keycode_max);
120 keysyms = XGetKeyboardMapping(_ecore_x_disp, keycode_min,
121 keycode_max - keycode_min + 1,
122 &keycode_num);
123 mod = (mod + 1) & 0x7;
124 i = (keycode_max - keycode_min - mod - 1) * keycode_num;
125
126 keysyms[i] = keysym;
127 XChangeKeyboardMapping(_ecore_x_disp, keycode_min, keycode_num,
128 keysyms, (keycode_max - keycode_min));
129 XFree(keysyms);
130 XSync(_ecore_x_disp, False);
131 keycode = keycode_max - mod - 1;
132 }
133
134 if (shift)
135 XTestFakeKeyEvent(_ecore_x_disp,
136 XKeysymToKeycode(_ecore_x_disp, XK_Shift_L), 1, 0);
137
138 XTestFakeKeyEvent(_ecore_x_disp, keycode, 1, 0);
139 XTestFakeKeyEvent(_ecore_x_disp, keycode, 0, 0);
140 if (shift)
141 XTestFakeKeyEvent(_ecore_x_disp,
142 XKeysymToKeycode(_ecore_x_disp, XK_Shift_L), 0, 0);
143
144 return EINA_TRUE;
145#else /* ifdef ECORE_XTEST */
146 return EINA_FALSE;
147#endif /* ifdef ECORE_XTEST */
148}
149
150EAPI const char *
151ecore_x_keysym_string_get(int keysym)
152{
153 return XKeysymToString(keysym);
154}
155
156EAPI int
157ecore_x_keysym_keycode_get(const char *keyname)
158{
159 int keycode = 0;
160
161 if (!strncmp(keyname, "Keycode-", 8))
162 keycode = atoi(keyname + 8);
163 else
164 keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(keyname));
165
166 return keycode;
167}
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_vsync.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_vsync.c
deleted file mode 100644
index 4296bb2..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_vsync.c
+++ /dev/null
@@ -1,351 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include "Ecore.h"
6#include "ecore_x_private.h"
7#include "Ecore_X.h"
8
9#include <string.h>
10#include <stdlib.h>
11#include <string.h>
12#include <unistd.h>
13#include <dlfcn.h>
14#include <sys/types.h>
15#include <sys/stat.h>
16#include <fcntl.h>
17
18#define ECORE_X_VSYNC_DRI2 1
19
20#ifdef ECORE_X_VSYNC_DRI2
21// relevant header bits of dri/drm inlined here to avoid needing external
22// headers to build
23/// drm
24typedef unsigned int drm_magic_t;
25
26typedef enum
27{
28 DRM_VBLANK_ABSOLUTE = 0x00000000,
29 DRM_VBLANK_RELATIVE = 0x00000001,
30 DRM_VBLANK_EVENT = 0x04000000,
31 DRM_VBLANK_FLIP = 0x08000000,
32 DRM_VBLANK_NEXTONMISS = 0x10000000,
33 DRM_VBLANK_SECONDARY = 0x20000000,
34 DRM_VBLANK_SIGNAL = 0x40000000
35}
36drmVBlankSeqType;
37
38typedef struct _drmVBlankReq
39{
40 drmVBlankSeqType type;
41 unsigned int sequence;
42 unsigned long signal;
43} drmVBlankReq;
44
45typedef struct _drmVBlankReply
46{
47 drmVBlankSeqType type;
48 unsigned int sequence;
49 long tval_sec;
50 long tval_usec;
51} drmVBlankReply;
52
53typedef union _drmVBlank
54{
55 drmVBlankReq request;
56 drmVBlankReply reply;
57} drmVBlank;
58
59#define DRM_EVENT_CONTEXT_VERSION 2
60
61typedef struct _drmEventContext
62{
63 int version;
64 void (*vblank_handler)(int fd,
65 unsigned int sequence,
66 unsigned int tv_sec,
67 unsigned int tv_usec,
68 void *user_data);
69 void (*page_flip_handler)(int fd,
70 unsigned int sequence,
71 unsigned int tv_sec,
72 unsigned int tv_usec,
73 void *user_data);
74} drmEventContext;
75
76static int (*sym_drmClose)(int fd) = NULL;
77static int (*sym_drmGetMagic)(int fd,
78 drm_magic_t *magic) = NULL;
79static int (*sym_drmWaitVBlank)(int fd,
80 drmVBlank *vbl) = NULL;
81static int (*sym_drmHandleEvent)(int fd,
82 drmEventContext *evctx) = NULL;
83
84//// dri
85
86static Bool (*sym_DRI2QueryExtension)(Display *display,
87 int *eventBase,
88 int *errorBase) = NULL;
89static Bool (*sym_DRI2QueryVersion)(Display *display,
90 int *major,
91 int *minor) = NULL;
92static Bool (*sym_DRI2Connect)(Display *display,
93 XID window,
94 char **driverName,
95 char **deviceName) = NULL;
96static Bool (*sym_DRI2Authenticate)(Display *display,
97 XID window,
98 drm_magic_t magic) = NULL;
99
100//// dri/drm data needed
101static int dri2_event = 0;
102static int dri2_error = 0;
103static int dri2_major = 0;
104static int dri2_minor = 0;
105static char *device_name = 0;
106static char *driver_name = 0;
107static drm_magic_t drm_magic;
108
109static int drm_fd = -1;
110static int drm_event_is_busy = 0;
111static int drm_animators_interval = 1;
112static drmEventContext drm_evctx;
113static Ecore_Fd_Handler *dri_drm_fdh = NULL;
114
115static void *dri_lib = NULL;
116static void *drm_lib = NULL;
117
118static Window dri_drm_vsync_root = 0;
119
120static void
121_dri_drm_tick_schedule(void)
122{
123 drmVBlank vbl;
124
125 vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
126 vbl.request.sequence = drm_animators_interval;
127 vbl.request.signal = 0;
128 sym_drmWaitVBlank(drm_fd, &vbl);
129}
130
131static void
132_dri_drm_tick_begin(void *data __UNUSED__)
133{
134 drm_event_is_busy = 1;
135 _dri_drm_tick_schedule();
136}
137
138static void
139_dri_drm_tick_end(void *data __UNUSED__)
140{
141 drm_event_is_busy = 0;
142}
143
144static void
145_dri_drm_vblank_handler(int fd __UNUSED__,
146 unsigned int frame __UNUSED__,
147 unsigned int sec __UNUSED__,
148 unsigned int usec __UNUSED__,
149 void *data __UNUSED__)
150{
151 ecore_animator_custom_tick();
152 if (drm_event_is_busy) _dri_drm_tick_schedule();
153}
154
155static Eina_Bool
156_dri_drm_cb(void *data __UNUSED__,
157 Ecore_Fd_Handler *fd_handler __UNUSED__)
158{
159 sym_drmHandleEvent(drm_fd, &drm_evctx);
160 return ECORE_CALLBACK_RENEW;
161}
162
163// yes. most evil. we dlopen libdrm and libGL etc. to manually find smbols
164// so we can be as compatible as possible given the whole mess of the
165// gl/dri/drm etc. world. and handle graceful failure at runtime not
166// compile time
167static int
168_dri_drm_link(void)
169{
170 const char *drm_libs[] =
171 {
172 "libdrm.so.2",
173 "libdrm.so.1",
174 "libdrm.so.0",
175 "libdrm.so",
176 NULL,
177 };
178 const char *dri_libs[] =
179 {
180 "libdri2.so.2",
181 "libdri2.so.1",
182 "libdri2.so.0",
183 "libdri2.so",
184 "libGL.so.4",
185 "libGL.so.3",
186 "libGL.so.2",
187 "libGL.so.1",
188 "libGL.so.0",
189 "libGL.so",
190 NULL,
191 };
192 int i, fail;
193#define SYM(lib, xx) \
194 do { \
195 sym_ ## xx = dlsym(lib, #xx); \
196 if (!(sym_ ## xx)) { \
197 fprintf(stderr, "%s\n", dlerror()); \
198 fail = 1; \
199 } \
200 } while (0)
201
202 if (dri_lib) return 1;
203 for (i = 0; drm_libs[i]; i++)
204 {
205 drm_lib = dlopen(drm_libs[i], RTLD_LOCAL | RTLD_LAZY);
206 if (drm_lib)
207 {
208 fail = 0;
209 SYM(drm_lib, drmClose);
210 SYM(drm_lib, drmWaitVBlank);
211 SYM(drm_lib, drmHandleEvent);
212 if (fail)
213 {
214 dlclose(drm_lib);
215 drm_lib = NULL;
216 }
217 else break;
218 }
219 }
220 if (!drm_lib) return 0;
221 for (i = 0; dri_libs[i]; i++)
222 {
223 dri_lib = dlopen(dri_libs[i], RTLD_LOCAL | RTLD_LAZY);
224 if (dri_lib)
225 {
226 fail = 0;
227 SYM(dri_lib, DRI2QueryExtension);
228 SYM(dri_lib, DRI2QueryVersion);
229 SYM(dri_lib, DRI2Connect);
230 SYM(dri_lib, DRI2Authenticate);
231 if (fail)
232 {
233 dlclose(dri_lib);
234 dri_lib = NULL;
235 }
236 else break;
237 }
238 }
239 if (!dri_lib)
240 {
241 dlclose(drm_lib);
242 drm_lib = NULL;
243 return 0;
244 }
245 return 1;
246}
247
248static int
249_dri_drm_init(void)
250{
251 if (!sym_DRI2QueryExtension(_ecore_x_disp, &dri2_event, &dri2_error))
252 return 0;
253 if (!sym_DRI2QueryVersion(_ecore_x_disp, &dri2_major, &dri2_minor))
254 return 0;
255 if (dri2_major < 2)
256 return 0;
257 if (!sym_DRI2Connect(_ecore_x_disp, dri_drm_vsync_root, &driver_name, &device_name))
258 return 0;
259 drm_fd = open(device_name, O_RDWR);
260 if (drm_fd < 0)
261 return 0;
262 sym_drmGetMagic(drm_fd, &drm_magic);
263 if (!sym_DRI2Authenticate(_ecore_x_disp, dri_drm_vsync_root, drm_magic))
264 {
265 close(drm_fd);
266 drm_fd = -1;
267 return 0;
268 }
269 memset(&drm_evctx, 0, sizeof(drm_evctx));
270 drm_evctx.version = DRM_EVENT_CONTEXT_VERSION;
271 drm_evctx.vblank_handler = _dri_drm_vblank_handler;
272 drm_evctx.page_flip_handler = NULL;
273
274 dri_drm_fdh = ecore_main_fd_handler_add(drm_fd, ECORE_FD_READ,
275 _dri_drm_cb, NULL, NULL, NULL);
276 if (!dri_drm_fdh)
277 {
278 close(drm_fd);
279 drm_fd = -1;
280 return 0;
281 }
282 return 1;
283}
284
285static void
286_dri_drm_shutdown(void)
287{
288 if (drm_fd >= 0)
289 {
290 close(drm_fd);
291 drm_fd = -1;
292 }
293 if (dri_drm_fdh)
294 {
295 ecore_main_fd_handler_del(dri_drm_fdh);
296 dri_drm_fdh = NULL;
297 }
298}
299
300#endif
301
302EAPI Eina_Bool
303ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win)
304{
305#ifdef ECORE_X_VSYNC_DRI2
306 Ecore_X_Window root;
307
308 root = ecore_x_window_root_get(win);
309 if (root != dri_drm_vsync_root)
310 {
311 dri_drm_vsync_root = root;
312 if (dri_drm_vsync_root)
313 {
314 if (!_dri_drm_link())
315 {
316 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
317 return EINA_FALSE;
318 }
319 _dri_drm_shutdown();
320 if (!_dri_drm_init())
321 {
322 dri_drm_vsync_root = 0;
323 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
324 return EINA_FALSE;
325 }
326 ecore_animator_custom_source_tick_begin_callback_set
327 (_dri_drm_tick_begin, NULL);
328 ecore_animator_custom_source_tick_end_callback_set
329 (_dri_drm_tick_end, NULL);
330 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_CUSTOM);
331 }
332 else
333 {
334 if (drm_fd >= 0)
335 {
336 _dri_drm_shutdown();
337 ecore_animator_custom_source_tick_begin_callback_set
338 (NULL, NULL);
339 ecore_animator_custom_source_tick_end_callback_set
340 (NULL, NULL);
341 ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER);
342 }
343 }
344 }
345 return EINA_TRUE;
346#else
347 return EINA_FALSE;
348 win = 0;
349#endif
350}
351
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window.c
deleted file mode 100644
index 90392bf..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window.c
+++ /dev/null
@@ -1,1723 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <sys/types.h>
7#include <unistd.h>
8
9#include "Ecore.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14static int ignore_num = 0;
15static Ecore_X_Window *ignore_list = NULL;
16
17/**
18 * @defgroup Ecore_X_Window_Create_Group X Window Creation Functions
19 *
20 * Functions that can be used to create an X window.
21 */
22
23/**
24 * Creates a new window.
25 * @param parent The parent window to use. If @p parent is @c 0, the root
26 * window of the default display is used.
27 * @param x X position.
28 * @param y Y position.
29 * @param w Width.
30 * @param h Height.
31 * @return The new window handle.
32 * @ingroup Ecore_X_Window_Create_Group
33 */
34EAPI Ecore_X_Window
35ecore_x_window_new(Ecore_X_Window parent,
36 int x,
37 int y,
38 int w,
39 int h)
40{
41 Window win;
42 XSetWindowAttributes attr;
43
44 LOGFN(__FILE__, __LINE__, __FUNCTION__);
45 if (parent == 0)
46 parent = DefaultRootWindow(_ecore_x_disp);
47
48 attr.backing_store = NotUseful;
49 attr.override_redirect = False;
50 attr.border_pixel = 0;
51 attr.background_pixmap = None;
52 attr.bit_gravity = NorthWestGravity;
53 attr.win_gravity = NorthWestGravity;
54 attr.save_under = False;
55 attr.do_not_propagate_mask = NoEventMask;
56 attr.event_mask = KeyPressMask |
57 KeyReleaseMask |
58 ButtonPressMask |
59 ButtonReleaseMask |
60 EnterWindowMask |
61 LeaveWindowMask |
62 PointerMotionMask |
63 ExposureMask |
64 VisibilityChangeMask |
65 StructureNotifyMask |
66 FocusChangeMask |
67 PropertyChangeMask |
68 ColormapChangeMask;
69 win = XCreateWindow(_ecore_x_disp, parent,
70 x, y, w, h, 0,
71 CopyFromParent, /*DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
72 InputOutput,
73 CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
74 CWBackingStore |
75 CWOverrideRedirect |
76/* CWColormap | */
77 CWBorderPixel |
78 CWBackPixmap |
79 CWSaveUnder |
80 CWDontPropagate |
81 CWEventMask |
82 CWBitGravity |
83 CWWinGravity,
84 &attr);
85
86 if (parent == DefaultRootWindow(_ecore_x_disp))
87 ecore_x_window_defaults_set(win);
88
89 return win;
90}
91
92/**
93 * Creates a window with the override redirect attribute set to @c True.
94 * @param parent The parent window to use. If @p parent is @c 0, the root
95 * window of the default display is used.
96 * @param x X position.
97 * @param y Y position.
98 * @param w Width.
99 * @param h Height.
100 * @return The new window handle.
101 * @ingroup Ecore_X_Window_Create_Group
102 */
103EAPI Ecore_X_Window
104ecore_x_window_override_new(Ecore_X_Window parent,
105 int x,
106 int y,
107 int w,
108 int h)
109{
110 Window win;
111 XSetWindowAttributes attr;
112
113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
114 if (parent == 0)
115 parent = DefaultRootWindow(_ecore_x_disp);
116
117 attr.backing_store = NotUseful;
118 attr.override_redirect = True;
119 attr.border_pixel = 0;
120 attr.background_pixmap = None;
121 attr.bit_gravity = NorthWestGravity;
122 attr.win_gravity = NorthWestGravity;
123 attr.save_under = False;
124 attr.do_not_propagate_mask = NoEventMask;
125 attr.event_mask = KeyPressMask |
126 KeyReleaseMask |
127 ButtonPressMask |
128 ButtonReleaseMask |
129 EnterWindowMask |
130 LeaveWindowMask |
131 PointerMotionMask |
132 ExposureMask |
133 VisibilityChangeMask |
134 StructureNotifyMask |
135 FocusChangeMask |
136 PropertyChangeMask |
137 ColormapChangeMask;
138 win = XCreateWindow(_ecore_x_disp, parent,
139 x, y, w, h, 0,
140 CopyFromParent, /*DefaultDepth(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
141 InputOutput,
142 CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
143 CWBackingStore |
144 CWOverrideRedirect |
145/* CWColormap | */
146 CWBorderPixel |
147 CWBackPixmap |
148 CWSaveUnder |
149 CWDontPropagate |
150 CWEventMask |
151 CWBitGravity |
152 CWWinGravity,
153 &attr);
154 return win;
155}
156
157/**
158 * Creates a new input window.
159 * @param parent The parent window to use. If @p parent is @c 0, the root
160 * window of the default display is used.
161 * @param x X position.
162 * @param y Y position.
163 * @param w Width.
164 * @param h Height.
165 * @return The new window.
166 * @ingroup Ecore_X_Window_Create_Group
167 */
168EAPI Ecore_X_Window
169ecore_x_window_input_new(Ecore_X_Window parent,
170 int x,
171 int y,
172 int w,
173 int h)
174{
175 Window win;
176 XSetWindowAttributes attr;
177
178 LOGFN(__FILE__, __LINE__, __FUNCTION__);
179 if (parent == 0)
180 parent = DefaultRootWindow(_ecore_x_disp);
181
182 attr.override_redirect = True;
183 attr.do_not_propagate_mask = NoEventMask;
184 attr.event_mask = KeyPressMask |
185 KeyReleaseMask |
186 ButtonPressMask |
187 ButtonReleaseMask |
188 EnterWindowMask |
189 LeaveWindowMask |
190 PointerMotionMask |
191 ExposureMask |
192 VisibilityChangeMask |
193 StructureNotifyMask |
194 FocusChangeMask |
195 PropertyChangeMask |
196 ColormapChangeMask;
197 win = XCreateWindow(_ecore_x_disp, parent,
198 x, y, w, h, 0,
199 CopyFromParent,
200 InputOnly,
201 CopyFromParent, /*DefaultVisual(_ecore_x_disp, DefaultScreen(_ecore_x_disp)),*/
202 CWOverrideRedirect |
203 CWDontPropagate |
204 CWEventMask,
205 &attr);
206
207 if (parent == DefaultRootWindow(_ecore_x_disp))
208 {
209 }
210
211 return win;
212}
213
214/**
215 * @defgroup Ecore_X_Window_Properties_Group X Window Property Functions
216 *
217 * Functions that set window properties.
218 */
219
220/**
221 * Sets the default properties for the given window.
222 *
223 * The default properties set for the window are @c WM_CLIENT_MACHINE and
224 * @c _NET_WM_PID.
225 *
226 * @param win The given window.
227 * @ingroup Ecore_X_Window_Properties_Group
228 */
229EAPI void
230ecore_x_window_defaults_set(Ecore_X_Window win)
231{
232 long pid;
233 char buf[MAXHOSTNAMELEN];
234 char *hostname[1];
235 int argc;
236 char **argv;
237 XTextProperty xprop;
238
239 LOGFN(__FILE__, __LINE__, __FUNCTION__);
240 /*
241 * Set WM_CLIENT_MACHINE.
242 */
243 gethostname(buf, MAXHOSTNAMELEN);
244 buf[MAXHOSTNAMELEN - 1] = '\0';
245 hostname[0] = buf;
246 /* The ecore function uses UTF8 which Xlib may not like (especially
247 * with older clients) */
248 /* ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_CLIENT_MACHINE,
249 (char *)buf); */
250 if (XStringListToTextProperty(hostname, 1, &xprop))
251 {
252 XSetWMClientMachine(_ecore_x_disp, win, &xprop);
253 XFree(xprop.value);
254 }
255
256 /*
257 * Set _NET_WM_PID
258 */
259 pid = getpid();
260 ecore_x_netwm_pid_set(win, pid);
261
262 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
263
264 ecore_app_args_get(&argc, &argv);
265 ecore_x_icccm_command_set(win, argc, argv);
266}
267
268EAPI void
269ecore_x_window_configure(Ecore_X_Window win,
270 Ecore_X_Window_Configure_Mask mask,
271 int x,
272 int y,
273 int w,
274 int h,
275 int border_width,
276 Ecore_X_Window sibling,
277 int stack_mode)
278{
279 XWindowChanges xwc;
280
281 if (!win)
282 return;
283
284 LOGFN(__FILE__, __LINE__, __FUNCTION__);
285
286 xwc.x = x;
287 xwc.y = y;
288 xwc.width = w;
289 xwc.height = h;
290 xwc.border_width = border_width;
291 xwc.sibling = sibling;
292 xwc.stack_mode = stack_mode;
293
294 XConfigureWindow(_ecore_x_disp, win, mask, &xwc);
295}
296
297/**
298 * @defgroup Ecore_X_Window_Destroy_Group X Window Destroy Functions
299 *
300 * Functions to destroy X windows.
301 */
302
303/**
304 * Deletes the given window.
305 * @param win The given window.
306 * @ingroup Ecore_X_Window_Destroy_Group
307 */
308EAPI void
309ecore_x_window_free(Ecore_X_Window win)
310{
311 /* sorry sir, deleting the root window doesn't sound like
312 * a smart idea.
313 */
314 LOGFN(__FILE__, __LINE__, __FUNCTION__);
315 if (win)
316 XDestroyWindow(_ecore_x_disp, win);
317}
318
319/**
320 * Set if a window should be ignored.
321 * @param win The given window.
322 * @param ignore if to ignore
323 */
324EAPI void
325ecore_x_window_ignore_set(Ecore_X_Window win,
326 int ignore)
327{
328 int i, j, cnt;
329 Ecore_X_Window *t;
330
331 LOGFN(__FILE__, __LINE__, __FUNCTION__);
332 if (ignore)
333 {
334 if (ignore_list)
335 {
336 for (i = 0; i < ignore_num; i++)
337 {
338 if (win == ignore_list[i])
339 return;
340 }
341 t = realloc(ignore_list, (ignore_num + 1) * sizeof(Ecore_X_Window));
342 if (!t) return;
343 ignore_list = t;
344 ignore_list[ignore_num++] = win;
345 }
346 else
347 {
348 ignore_num = 0;
349 ignore_list = malloc(sizeof(Ecore_X_Window));
350 if (ignore_list)
351 ignore_list[ignore_num++] = win;
352 }
353 }
354 else
355 {
356 if (!ignore_list)
357 return;
358
359 for (cnt = ignore_num, i = 0, j = 0; i < cnt; i++)
360 {
361 if (win != ignore_list[i])
362 ignore_list[j++] = ignore_list[i];
363 else
364 ignore_num--;
365 }
366
367 if (ignore_num <= 0)
368 {
369 free(ignore_list);
370 ignore_list = NULL;
371 return;
372 }
373 t = realloc(ignore_list, ignore_num * sizeof(Ecore_X_Window));
374 if (t) ignore_list = t;
375 }
376}
377
378/**
379 * Get the ignore list
380 * @param num number of windows in the list
381 * @return list of windows to ignore
382 */
383EAPI Ecore_X_Window *
384ecore_x_window_ignore_list(int *num)
385{
386 if (num)
387 *num = ignore_num;
388
389 return ignore_list;
390}
391
392/**
393 * Sends a delete request to the given window.
394 * @param win The given window.
395 * @ingroup Ecore_X_Window_Destroy_Group
396 */
397EAPI void
398ecore_x_window_delete_request_send(Ecore_X_Window win)
399{
400 XEvent xev;
401
402 /* sorry sir, deleting the root window doesn't sound like
403 * a smart idea.
404 */
405 if (!win)
406 return;
407
408 LOGFN(__FILE__, __LINE__, __FUNCTION__);
409 xev.xclient.type = ClientMessage;
410 xev.xclient.display = _ecore_x_disp;
411 xev.xclient.window = win;
412 xev.xclient.message_type = ECORE_X_ATOM_WM_PROTOCOLS;
413 xev.xclient.format = 32;
414 xev.xclient.data.l[0] = ECORE_X_ATOM_WM_DELETE_WINDOW;
415 xev.xclient.data.l[1] = CurrentTime;
416
417 XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
418}
419
420/**
421 * @defgroup Ecore_X_Window_Visibility_Group X Window Visibility Functions
422 *
423 * Functions to access and change the visibility of X windows.
424 */
425
426/**
427 * Shows a window.
428 *
429 * Synonymous to "mapping" a window in X Window System terminology.
430 *
431 * @param win The window to show.
432 * @ingroup Ecore_X_Window_Visibility
433 */
434EAPI void
435ecore_x_window_show(Ecore_X_Window win)
436{
437 LOGFN(__FILE__, __LINE__, __FUNCTION__);
438 XMapWindow(_ecore_x_disp, win);
439}
440
441/**
442 * Hides a window.
443 *
444 * Synonymous to "unmapping" a window in X Window System terminology.
445 *
446 * @param win The window to hide.
447 * @ingroup Ecore_X_Window_Visibility
448 */
449EAPI void
450ecore_x_window_hide(Ecore_X_Window win)
451{
452 XEvent xev;
453 Window root;
454 int idum;
455 unsigned int uidum;
456
457 /* ICCCM: SEND unmap event... */
458 LOGFN(__FILE__, __LINE__, __FUNCTION__);
459 root = win;
460 if (ScreenCount(_ecore_x_disp) == 1)
461 root = DefaultRootWindow(_ecore_x_disp);
462 else
463 XGetGeometry(_ecore_x_disp,
464 win,
465 &root,
466 &idum,
467 &idum,
468 &uidum,
469 &uidum,
470 &uidum,
471 &uidum);
472
473 xev.xunmap.type = UnmapNotify;
474 xev.xunmap.serial = 0;
475 xev.xunmap.send_event = True;
476 xev.xunmap.display = _ecore_x_disp;
477 xev.xunmap.event = root;
478 xev.xunmap.window = win;
479 xev.xunmap.from_configure = False;
480 XSendEvent(_ecore_x_disp, xev.xunmap.event, False,
481 SubstructureRedirectMask | SubstructureNotifyMask, &xev);
482 XUnmapWindow(_ecore_x_disp, win);
483}
484
485/**
486 * @defgroup Ecore_X_Window_Geometry_Group X Window Geometry Functions
487 *
488 * Functions that change or retrieve the geometry of X windows.
489 */
490
491/**
492 * Moves a window to the position @p x, @p y.
493 *
494 * The position is relative to the upper left hand corner of the
495 * parent window.
496 *
497 * @param win The window to move.
498 * @param x X position.
499 * @param y Y position.
500 * @ingroup Ecore_X_Window_Geometry_Group
501 */
502EAPI void
503ecore_x_window_move(Ecore_X_Window win,
504 int x,
505 int y)
506{
507 LOGFN(__FILE__, __LINE__, __FUNCTION__);
508 XMoveWindow(_ecore_x_disp, win, x, y);
509}
510
511/**
512 * Resizes a window.
513 * @param win The window to resize.
514 * @param w New width of the window.
515 * @param h New height of the window.
516 * @ingroup Ecore_X_Window_Geometry_Group
517 */
518EAPI void
519ecore_x_window_resize(Ecore_X_Window win,
520 int w,
521 int h)
522{
523 LOGFN(__FILE__, __LINE__, __FUNCTION__);
524 if (w < 1)
525 w = 1;
526
527 if (h < 1)
528 h = 1;
529
530 XResizeWindow(_ecore_x_disp, win, w, h);
531}
532
533/**
534 * Moves and resizes a window.
535 * @param win The window to move and resize.
536 * @param x New X position of the window.
537 * @param y New Y position of the window.
538 * @param w New width of the window.
539 * @param h New height of the window.
540 * @ingroup Ecore_X_Window_Geometry_Group
541 */
542EAPI void
543ecore_x_window_move_resize(Ecore_X_Window win,
544 int x,
545 int y,
546 int w,
547 int h)
548{
549 LOGFN(__FILE__, __LINE__, __FUNCTION__);
550 if (w < 1)
551 w = 1;
552
553 if (h < 1)
554 h = 1;
555
556 XMoveResizeWindow(_ecore_x_disp, win, x, y, w, h);
557}
558
559/**
560 * @defgroup Ecore_X_Window_Focus_Functions X Window Focus Functions
561 *
562 * Functions that give the focus to an X Window.
563 */
564
565/**
566 * Sets the focus to the window @p win.
567 * @param win The window to focus.
568 * @ingroup Ecore_X_Window_Focus_Functions
569 */
570EAPI void
571ecore_x_window_focus(Ecore_X_Window win)
572{
573 LOGFN(__FILE__, __LINE__, __FUNCTION__);
574 if (win == 0)
575 win = DefaultRootWindow(_ecore_x_disp); // XSetInputFocus(_ecore_x_disp, win, RevertToNone, CurrentTime);
576
577// XSetInputFocus(_ecore_x_disp, win, RevertToPointerRoot, CurrentTime);
578 XSetInputFocus(_ecore_x_disp, win, RevertToParent, CurrentTime);
579}
580
581/**
582 * Sets the focus to the given window at a specific time.
583 * @param win The window to focus.
584 * @param t When to set the focus to the window.
585 * @ingroup Ecore_X_Window_Focus_Functions
586 */
587EAPI void
588ecore_x_window_focus_at_time(Ecore_X_Window win,
589 Ecore_X_Time t)
590{
591 LOGFN(__FILE__, __LINE__, __FUNCTION__);
592 if (win == 0)
593 win = DefaultRootWindow(_ecore_x_disp); // XSetInputFocus(_ecore_x_disp, win, RevertToNone, t);
594
595// XSetInputFocus(_ecore_x_disp, win, PointerRoot, t);
596 XSetInputFocus(_ecore_x_disp, win, RevertToParent, t);
597}
598
599/**
600 * gets the window that has focus.
601 * @return The window that has focus.
602 * @ingroup Ecore_X_Window_Focus_Functions
603 */
604EAPI Ecore_X_Window
605ecore_x_window_focus_get(void)
606{
607 Window win;
608 int revert_mode;
609
610 LOGFN(__FILE__, __LINE__, __FUNCTION__);
611 win = 0;
612 XGetInputFocus(_ecore_x_disp, &win, &revert_mode);
613 return win;
614}
615
616/**
617 * @defgroup Ecore_X_Window_Z_Order_Group X Window Z Order Functions
618 *
619 * Functions that change the Z order of X windows.
620 */
621
622/**
623 * Raises the given window.
624 * @param win The window to raise.
625 * @ingroup Ecore_X_Window_Z_Order_Group
626 */
627EAPI void
628ecore_x_window_raise(Ecore_X_Window win)
629{
630 LOGFN(__FILE__, __LINE__, __FUNCTION__);
631 XRaiseWindow(_ecore_x_disp, win);
632}
633
634/**
635 * Lowers the given window.
636 * @param win The window to lower.
637 * @ingroup Ecore_X_Window_Z_Order_Group
638 */
639EAPI void
640ecore_x_window_lower(Ecore_X_Window win)
641{
642 LOGFN(__FILE__, __LINE__, __FUNCTION__);
643 XLowerWindow(_ecore_x_disp, win);
644}
645
646/**
647 * @defgroup Ecore_X_Window_Parent_Group X Window Parent Functions
648 *
649 * Functions that retrieve or changes the parent window of a window.
650 */
651
652/**
653 * Moves a window to within another window at a given position.
654 * @param win The window to reparent.
655 * @param new_parent The new parent window.
656 * @param x X position within new parent window.
657 * @param y Y position within new parent window.
658 * @ingroup Ecore_X_Window_Parent_Group
659 */
660EAPI void
661ecore_x_window_reparent(Ecore_X_Window win,
662 Ecore_X_Window new_parent,
663 int x,
664 int y)
665{
666 LOGFN(__FILE__, __LINE__, __FUNCTION__);
667 if (new_parent == 0)
668 new_parent = DefaultRootWindow(_ecore_x_disp);
669
670 XReparentWindow(_ecore_x_disp, win, new_parent, x, y);
671}
672
673/**
674 * Retrieves the size of the given window.
675 * @param win The given window.
676 * @param w Pointer to an integer into which the width is to be stored.
677 * @param h Pointer to an integer into which the height is to be stored.
678 * @ingroup Ecore_X_Window_Geometry_Group
679 */
680EAPI void
681ecore_x_window_size_get(Ecore_X_Window win,
682 int *w,
683 int *h)
684{
685 int dummy_x, dummy_y;
686
687 LOGFN(__FILE__, __LINE__, __FUNCTION__);
688 if (win == 0)
689 win = DefaultRootWindow(_ecore_x_disp);
690
691 ecore_x_drawable_geometry_get(win, &dummy_x, &dummy_y, w, h);
692}
693
694/**
695 * Retrieves the geometry of the given window.
696 *
697 * Note that the x & y coordingates are relative to your parent. In
698 * particular for reparenting window managers - relative to you window border.
699 * If you want screen coordinates either walk the window tree to the root,
700 * else for ecore_evas applications see ecore_evas_geometry_get(). Elementary
701 * applications can use elm_win_screen_position_get().
702 *
703 * @param win The given window.
704 * @param x Pointer to an integer in which the X position is to be stored.
705 * @param y Pointer to an integer in which the Y position is to be stored.
706 * @param w Pointer to an integer in which the width is to be stored.
707 * @param h Pointer to an integer in which the height is to be stored.
708 * @ingroup Ecore_X_Window_Geometry_Group
709 */
710EAPI void
711ecore_x_window_geometry_get(Ecore_X_Window win,
712 int *x,
713 int *y,
714 int *w,
715 int *h)
716{
717 LOGFN(__FILE__, __LINE__, __FUNCTION__);
718 if (!win)
719 win = DefaultRootWindow(_ecore_x_disp);
720
721 ecore_x_drawable_geometry_get(win, x, y, w, h);
722}
723
724/**
725 * Retrieves the width of the border of the given window.
726 * @param win The given window.
727 * @return Width of the border of @p win.
728 * @ingroup Ecore_X_Window_Geometry_Group
729 */
730EAPI int
731ecore_x_window_border_width_get(Ecore_X_Window win)
732{
733 LOGFN(__FILE__, __LINE__, __FUNCTION__);
734 /* doesn't make sense to call this on a root window */
735 if (!win)
736 return 0;
737
738 return ecore_x_drawable_border_width_get(win);
739}
740
741/**
742 * Sets the width of the border of the given window.
743 * @param win The given window.
744 * @param width The new border width.
745 * @ingroup Ecore_X_Window_Geometry_Group
746 */
747EAPI void
748ecore_x_window_border_width_set(Ecore_X_Window win,
749 int width)
750{
751 LOGFN(__FILE__, __LINE__, __FUNCTION__);
752 /* doesn't make sense to call this on a root window */
753 if (!win)
754 return;
755
756 XSetWindowBorderWidth (_ecore_x_disp, win, width);
757}
758
759/**
760 * Retrieves the depth of the given window.
761 * @param win The given window.
762 * @return Depth of the window.
763 */
764EAPI int
765ecore_x_window_depth_get(Ecore_X_Window win)
766{
767 LOGFN(__FILE__, __LINE__, __FUNCTION__);
768 return ecore_x_drawable_depth_get(win);
769}
770
771/**
772 * To be documented.
773 *
774 * FIXME: To be fixed.
775 */
776EAPI void
777ecore_x_window_cursor_show(Ecore_X_Window win,
778 Eina_Bool show)
779{
780 LOGFN(__FILE__, __LINE__, __FUNCTION__);
781 if (win == 0)
782 win = DefaultRootWindow(_ecore_x_disp);
783
784 if (!show)
785 {
786 Cursor c;
787 XColor cl;
788 Pixmap p, m;
789 GC gc;
790 XGCValues gcv;
791
792 p = XCreatePixmap(_ecore_x_disp, win, 1, 1, 1);
793 m = XCreatePixmap(_ecore_x_disp, win, 1, 1, 1);
794 gc = XCreateGC(_ecore_x_disp, m, 0, &gcv);
795 XSetForeground(_ecore_x_disp, gc, 0);
796 XDrawPoint(_ecore_x_disp, m, gc, 0, 0);
797 XFreeGC(_ecore_x_disp, gc);
798 c = XCreatePixmapCursor(_ecore_x_disp, p, m, &cl, &cl, 0, 0);
799 XDefineCursor(_ecore_x_disp, win, c);
800 XFreeCursor(_ecore_x_disp, c);
801 XFreePixmap(_ecore_x_disp, p);
802 XFreePixmap(_ecore_x_disp, m);
803 }
804 else
805 XDefineCursor(_ecore_x_disp, win, 0);
806}
807
808EAPI void
809ecore_x_window_cursor_set(Ecore_X_Window win,
810 Ecore_X_Cursor c)
811{
812 LOGFN(__FILE__, __LINE__, __FUNCTION__);
813 if (c == 0)
814 XUndefineCursor(_ecore_x_disp, win);
815 else
816 XDefineCursor(_ecore_x_disp, win, c);
817}
818
819/**
820 * Finds out whether the given window is currently visible.
821 * @param win The given window.
822 * @return 1 if the window is visible, otherwise 0.
823 * @ingroup Ecore_X_Window_Visibility_Group
824 */
825EAPI int
826ecore_x_window_visible_get(Ecore_X_Window win)
827{
828 XWindowAttributes attr;
829
830 LOGFN(__FILE__, __LINE__, __FUNCTION__);
831 return XGetWindowAttributes(_ecore_x_disp, win, &attr) &&
832 (attr.map_state == IsViewable);
833}
834
835typedef struct _Shadow Shadow;
836struct _Shadow
837{
838 Shadow *parent;
839 Shadow **children;
840 Window win;
841 int children_num;
842 short x, y;
843 unsigned short w, h;
844};
845
846static Shadow **shadow_base = NULL;
847static int shadow_num = 0;
848
849static Shadow *
850_ecore_x_window_tree_walk(Window win)
851{
852 Window *list = NULL;
853 Window parent_win = 0, root_win = 0;
854 unsigned int num;
855 Shadow *s, **sl;
856 XWindowAttributes att;
857
858 if (!XGetWindowAttributes(_ecore_x_disp, win, &att))
859 return NULL; // if (att.class == InputOnly) return NULL;
860
861 if (att.map_state != IsViewable)
862 return NULL;
863
864 s = calloc(1, sizeof(Shadow));
865 if (!s)
866 return NULL;
867
868 s->win = win;
869 s->x = att.x;
870 s->y = att.y;
871 s->w = att.width;
872 s->h = att.height;
873 if (XQueryTree(_ecore_x_disp, s->win, &root_win, &parent_win,
874 &list, &num))
875 {
876 s->children = calloc(1, sizeof(Shadow *) * num);
877 if (s->children)
878 {
879 size_t i, j;
880 s->children_num = num;
881 for (i = 0; i < num; i++)
882 {
883 s->children[i] = _ecore_x_window_tree_walk(list[i]);
884 if (s->children[i])
885 s->children[i]->parent = s;
886 }
887 /* compress list down */
888 j = 0;
889 for (i = 0; i < num; i++)
890 {
891 if (s->children[i])
892 {
893 s->children[j] = s->children[i];
894 j++;
895 }
896 }
897 if (j == 0)
898 {
899 free(s->children);
900 s->children = NULL;
901 s->children_num = 0;
902 }
903 else
904 {
905 s->children_num = j;
906 sl = realloc(s->children, sizeof(Shadow *) * j);
907 if (sl)
908 s->children = sl;
909 }
910 }
911 }
912
913 if (list)
914 XFree(list);
915
916 return s;
917}
918
919static void
920_ecore_x_window_tree_shadow_free1(Shadow *s)
921{
922 int i;
923
924 if (!s)
925 return;
926
927 if (s->children)
928 {
929 for (i = 0; i < s->children_num; i++)
930 {
931 if (s->children[i])
932 _ecore_x_window_tree_shadow_free1(s->children[i]);
933 }
934 free(s->children);
935 }
936
937 free(s);
938}
939
940static void
941_ecore_x_window_tree_shadow_free(void)
942{
943 int i;
944
945 if (!shadow_base)
946 return;
947
948 for (i = 0; i < shadow_num; i++)
949 {
950 if (!shadow_base[i])
951 continue;
952
953 _ecore_x_window_tree_shadow_free1(shadow_base[i]);
954 }
955 free(shadow_base);
956 shadow_base = NULL;
957 shadow_num = 0;
958}
959
960static void
961_ecore_x_window_tree_shadow_populate(void)
962{
963 Ecore_X_Window *roots;
964 int i, num;
965
966 roots = ecore_x_window_root_list(&num);
967 if (roots)
968 {
969 shadow_base = calloc(1, sizeof(Shadow *) * num);
970 if (shadow_base)
971 {
972 shadow_num = num;
973 for (i = 0; i < num; i++)
974 shadow_base[i] = _ecore_x_window_tree_walk(roots[i]);
975 }
976
977 free(roots);
978 }
979}
980
981/*
982 static int shadow_count = 0;
983
984 static void
985 _ecore_x_window_tree_shadow_start(void)
986 {
987 shadow_count++;
988 if (shadow_count > 1) return;
989 _ecore_x_window_tree_shadow_populate();
990 }
991
992 static void
993 _ecore_x_window_tree_shadow_stop(void)
994 {
995 shadow_count--;
996 if (shadow_count != 0) return;
997 _ecore_x_window_tree_shadow_free();
998 }
999 */
1000
1001static Shadow *
1002_ecore_x_window_shadow_tree_find_shadow(Shadow *s,
1003 Window win)
1004{
1005 Shadow *ss;
1006 int i;
1007
1008 if (s->win == win)
1009 return s;
1010
1011 if (s->children)
1012 for (i = 0; i < s->children_num; i++)
1013 {
1014 if (!s->children[i])
1015 continue;
1016
1017 if ((ss =
1018 _ecore_x_window_shadow_tree_find_shadow(s->children[i], win)))
1019 return ss;
1020 }
1021
1022 return NULL;
1023}
1024
1025static Shadow *
1026_ecore_x_window_shadow_tree_find(Window base)
1027{
1028 Shadow *s;
1029 int i;
1030
1031 for (i = 0; i < shadow_num; i++)
1032 {
1033 if (!shadow_base[i])
1034 continue;
1035
1036 if ((s = _ecore_x_window_shadow_tree_find_shadow(shadow_base[i], base)))
1037 return s;
1038 }
1039 return NULL;
1040}
1041
1042static int
1043_inside_rects(Shadow *s,
1044 int x,
1045 int y,
1046 int bx,
1047 int by,
1048 Ecore_X_Rectangle *rects,
1049 int num)
1050{
1051 int i, inside;
1052
1053 if (!rects) return 0;
1054 inside = 0;
1055 for (i = 0; i < num; i++)
1056 {
1057 if ((x >= s->x + bx + rects[i].x) &&
1058 (y >= s->y + by + rects[i].y) &&
1059 (x < (int)(s->x + bx + rects[i].x + rects[i].width)) &&
1060 (y < (int)(s->y + by + rects[i].y + rects[i].height)))
1061 {
1062 inside = 1;
1063 break;
1064 }
1065 }
1066 free(rects);
1067 return inside;
1068}
1069
1070static Window
1071_ecore_x_window_shadow_tree_at_xy_get_shadow(Shadow *s,
1072 int bx,
1073 int by,
1074 int x,
1075 int y,
1076 Ecore_X_Window *skip,
1077 int skip_num)
1078{
1079 Window child;
1080 int i, j;
1081 int wx, wy;
1082
1083 wx = s->x + bx;
1084 wy = s->y + by;
1085 if (!((x >= wx) && (y >= wy) && (x < (wx + s->w)) && (y < (wy + s->h))))
1086 return 0;
1087
1088 /* FIXME: get shape */
1089 {
1090 int num;
1091 Ecore_X_Rectangle *rects;
1092
1093 num = 0;
1094 rects = ecore_x_window_shape_rectangles_get(s->win, &num);
1095 if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0;
1096 num = 0;
1097 rects = ecore_x_window_shape_input_rectangles_get(s->win, &num);
1098 if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0;
1099 }
1100
1101 if (s->children)
1102 {
1103 int skipit = 0;
1104
1105 for (i = s->children_num - 1; i >= 0; --i)
1106 {
1107 if (!s->children[i])
1108 continue;
1109
1110 skipit = 0;
1111 if (skip)
1112 for (j = 0; j < skip_num; j++)
1113 {
1114 if (s->children[i]->win == skip[j])
1115 {
1116 skipit = 1;
1117 goto onward;
1118 }
1119 }
1120
1121onward:
1122 if (!skipit)
1123 if ((child =
1124 _ecore_x_window_shadow_tree_at_xy_get_shadow(s->
1125 children[i
1126 ], wx, wy,
1127 x, y, skip,
1128 skip_num)))
1129 return child;
1130 }
1131 }
1132
1133 return s->win;
1134}
1135
1136static Window
1137_ecore_x_window_shadow_tree_at_xy_get(Window base,
1138 int bx,
1139 int by,
1140 int x,
1141 int y,
1142 Ecore_X_Window *skip,
1143 int skip_num)
1144{
1145 Shadow *s;
1146
1147 if (!shadow_base)
1148 {
1149 _ecore_x_window_tree_shadow_populate();
1150 if (!shadow_base)
1151 return 0;
1152 }
1153
1154 s = _ecore_x_window_shadow_tree_find(base);
1155 if (!s)
1156 return 0;
1157
1158 return _ecore_x_window_shadow_tree_at_xy_get_shadow(s,
1159 bx,
1160 by,
1161 x,
1162 y,
1163 skip,
1164 skip_num);
1165}
1166
1167/**
1168 * Retrieves the top, visible window at the given location,
1169 * but skips the windows in the list. This uses a shadow tree built from the
1170 * window tree that is only updated the first time
1171 * ecore_x_window_shadow_tree_at_xy_with_skip_get() is called, or the next time
1172 * it is called after a ecore_x_window_shadow_tree_flush()
1173 * @param base The base window to start searching from (normally root).
1174 * @param x The given X position.
1175 * @param y The given Y position.
1176 * @return The window at that position.
1177 * @ingroup Ecore_X_Window_Geometry_Group
1178 */
1179EAPI Ecore_X_Window
1180ecore_x_window_shadow_tree_at_xy_with_skip_get(Ecore_X_Window base,
1181 int x,
1182 int y,
1183 Ecore_X_Window *skip,
1184 int skip_num)
1185{
1186 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1187 return _ecore_x_window_shadow_tree_at_xy_get(base,
1188 0,
1189 0,
1190 x,
1191 y,
1192 skip,
1193 skip_num);
1194}
1195
1196/**
1197 * Retrieves the parent window a given window has. This uses the shadow window
1198 * tree.
1199 * @param root The root window of @p win - if 0, this will be automatically determined with extra processing overhead
1200 * @param win The window to get the parent window of
1201 * @return The parent window of @p win
1202 * @ingroup Ecore_X_Window_Geometry_Group
1203 */
1204EAPI Ecore_X_Window
1205ecore_x_window_shadow_parent_get(Ecore_X_Window root __UNUSED__,
1206 Ecore_X_Window win)
1207{
1208 Shadow *s;
1209 int i;
1210
1211 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1212 if (!shadow_base)
1213 {
1214 _ecore_x_window_tree_shadow_populate();
1215 if (!shadow_base)
1216 return 0;
1217 }
1218
1219 for (i = 0; i < shadow_num; i++)
1220 {
1221 if (!shadow_base[i])
1222 continue;
1223
1224 s = _ecore_x_window_shadow_tree_find_shadow(shadow_base[i], win);
1225 if (s)
1226 {
1227 if (!s->parent)
1228 return 0;
1229
1230 return s->parent->win;
1231 }
1232 }
1233 return 0;
1234}
1235
1236/**
1237 * Flushes the window shadow tree so nothing is stored.
1238 * @ingroup Ecore_X_Window_Geometry_Group
1239 */
1240EAPI void
1241ecore_x_window_shadow_tree_flush(void)
1242{
1243 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1244 _ecore_x_window_tree_shadow_free();
1245}
1246
1247/**
1248 * Retrieves the root window a given window is on.
1249 * @param win The window to get the root window of
1250 * @return The root window of @p win
1251 * @ingroup Ecore_X_Window_Geometry_Group
1252 */
1253EAPI Ecore_X_Window
1254ecore_x_window_root_get(Ecore_X_Window win)
1255{
1256 XWindowAttributes att;
1257
1258 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1259 if (!XGetWindowAttributes(_ecore_x_disp, win, &att))
1260 return 0;
1261
1262 return att.root;
1263}
1264
1265static Window
1266_ecore_x_window_at_xy_get(Window base,
1267 int bx,
1268 int by,
1269 int x,
1270 int y,
1271 Ecore_X_Window *skip,
1272 int skip_num)
1273{
1274 Window *list = NULL;
1275 Window parent_win = 0, child = 0, root_win = 0;
1276 int i, j, wx, wy, ww, wh;
1277 unsigned int num;
1278
1279 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1280 if (!ecore_x_window_visible_get(base))
1281 return 0;
1282
1283 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1284 ecore_x_window_geometry_get(base, &wx, &wy, &ww, &wh);
1285 wx += bx;
1286 wy += by;
1287
1288 if (!((x >= wx) && (y >= wy) && (x < (wx + ww)) && (y < (wy + wh))))
1289 return 0;
1290
1291 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1292 if (!XQueryTree(_ecore_x_disp, base, &root_win, &parent_win, &list, &num))
1293 return base;
1294
1295 if (list)
1296 {
1297 int skipit = 0;
1298
1299 for (i = num - 1; i >= 0; --i)
1300 {
1301 skipit = 0;
1302
1303 if (skip)
1304 for (j = 0; j < skip_num; j++)
1305 {
1306 if (list[i] == skip[j])
1307 {
1308 skipit = 1;
1309 goto onward;
1310 }
1311 }
1312
1313onward:
1314 if (!skipit)
1315 if ((child =
1316 _ecore_x_window_at_xy_get(list[i], wx, wy, x, y, skip,
1317 skip_num)))
1318 {
1319 XFree(list);
1320 return child;
1321 }
1322 }
1323 XFree(list);
1324 }
1325
1326 return base;
1327}
1328
1329/**
1330 * Retrieves the top, visible window at the given location.
1331 * @param x The given X position.
1332 * @param y The given Y position.
1333 * @return The window at that position.
1334 * @ingroup Ecore_X_Window_Geometry_Group
1335 */
1336EAPI Ecore_X_Window
1337ecore_x_window_at_xy_get(int x,
1338 int y)
1339{
1340 Ecore_X_Window win, root;
1341
1342 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1343 /* FIXME: Proper function to determine current root/virtual root
1344 * window missing here */
1345 root = DefaultRootWindow(_ecore_x_disp);
1346
1347 ecore_x_grab();
1348 win = _ecore_x_window_at_xy_get(root, 0, 0, x, y, NULL, 0);
1349 ecore_x_ungrab();
1350
1351 return win ? win : root;
1352}
1353
1354/**
1355 * Retrieves the top, visible window at the given location,
1356 * but skips the windows in the list.
1357 * @param x The given X position.
1358 * @param y The given Y position.
1359 * @return The window at that position.
1360 * @ingroup Ecore_X_Window_Geometry_Group
1361 */
1362EAPI Ecore_X_Window
1363ecore_x_window_at_xy_with_skip_get(int x,
1364 int y,
1365 Ecore_X_Window *skip,
1366 int skip_num)
1367{
1368 Ecore_X_Window win, root;
1369
1370 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1371 /* FIXME: Proper function to determine current root/virtual root
1372 * window missing here */
1373 root = DefaultRootWindow(_ecore_x_disp);
1374
1375 ecore_x_grab();
1376 win = _ecore_x_window_at_xy_get(root, 0, 0, x, y, skip, skip_num);
1377 ecore_x_ungrab();
1378
1379 return win ? win : root;
1380}
1381
1382EAPI Ecore_X_Window
1383ecore_x_window_at_xy_begin_get(Ecore_X_Window begin,
1384 int x,
1385 int y)
1386{
1387 Ecore_X_Window win;
1388
1389 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1390 ecore_x_grab();
1391 win = _ecore_x_window_at_xy_get(begin, 0, 0, x, y, NULL, 0);
1392 ecore_x_ungrab();
1393
1394 return win ? win : begin;
1395}
1396
1397/**
1398 * Retrieves the parent window of the given window.
1399 * @param win The given window.
1400 * @return The parent window of @p win.
1401 * @ingroup Ecore_X_Window_Parent_Group
1402 */
1403EAPI Ecore_X_Window
1404ecore_x_window_parent_get(Ecore_X_Window win)
1405{
1406 Window root, parent, *children = NULL;
1407 unsigned int num;
1408
1409 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1410 if (!XQueryTree(_ecore_x_disp, win, &root, &parent, &children, &num))
1411 return 0;
1412
1413 if (children)
1414 XFree(children);
1415
1416 return parent;
1417}
1418
1419/**
1420 * Sets the background color of the given window.
1421 * @param win The given window
1422 * @param r red value (0...65536, 16 bits)
1423 * @param g green value (0...65536, 16 bits)
1424 * @param b blue value (0...65536, 16 bits)
1425 */
1426EAPI void
1427ecore_x_window_background_color_set(Ecore_X_Window win,
1428 unsigned short r,
1429 unsigned short g,
1430 unsigned short b)
1431{
1432 XSetWindowAttributes attr;
1433 Colormap map;
1434 XColor col;
1435
1436 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1437 col.red = r;
1438 col.green = g;
1439 col.blue = b;
1440
1441 map = DefaultColormap(_ecore_x_disp, DefaultScreen(_ecore_x_disp));
1442 XAllocColor(_ecore_x_disp, map, &col);
1443
1444 attr.background_pixel = col.pixel;
1445 XChangeWindowAttributes(_ecore_x_disp, win, CWBackPixel, &attr);
1446}
1447
1448EAPI void
1449ecore_x_window_gravity_set(Ecore_X_Window win,
1450 Ecore_X_Gravity grav)
1451{
1452 XSetWindowAttributes att;
1453
1454 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1455 att.win_gravity = grav;
1456 XChangeWindowAttributes(_ecore_x_disp, win, CWWinGravity, &att);
1457}
1458
1459EAPI void
1460ecore_x_window_pixel_gravity_set(Ecore_X_Window win,
1461 Ecore_X_Gravity grav)
1462{
1463 XSetWindowAttributes att;
1464
1465 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1466 att.bit_gravity = grav;
1467 XChangeWindowAttributes(_ecore_x_disp, win, CWBitGravity, &att);
1468}
1469
1470EAPI void
1471ecore_x_window_pixmap_set(Ecore_X_Window win,
1472 Ecore_X_Pixmap pmap)
1473{
1474 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1475 XSetWindowBackgroundPixmap(_ecore_x_disp, win, pmap);
1476}
1477
1478EAPI void
1479ecore_x_window_area_clear(Ecore_X_Window win,
1480 int x,
1481 int y,
1482 int w,
1483 int h)
1484{
1485 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1486 XClearArea(_ecore_x_disp, win, x, y, w, h, False);
1487}
1488
1489EAPI void
1490ecore_x_window_area_expose(Ecore_X_Window win,
1491 int x,
1492 int y,
1493 int w,
1494 int h)
1495{
1496 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1497 XClearArea(_ecore_x_disp, win, x, y, w, h, True);
1498}
1499
1500EAPI void
1501ecore_x_window_override_set(Ecore_X_Window win,
1502 Eina_Bool override)
1503{
1504 XSetWindowAttributes att;
1505
1506 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1507 att.override_redirect = override;
1508 XChangeWindowAttributes(_ecore_x_disp, win, CWOverrideRedirect, &att);
1509}
1510
1511#ifdef ECORE_XRENDER
1512static Ecore_X_Window
1513_ecore_x_window_argb_internal_new(Ecore_X_Window parent,
1514 int x,
1515 int y,
1516 int w,
1517 int h,
1518 Eina_Bool override,
1519 Eina_Bool saveunder)
1520{
1521 Window win;
1522 XSetWindowAttributes attr;
1523 XWindowAttributes att;
1524 XVisualInfo *xvi;
1525 XVisualInfo vi_in;
1526 int nvi, i, scr = 0;
1527 XRenderPictFormat *fmt;
1528 Visual *vis;
1529
1530 if (parent == 0)
1531 {
1532 parent = DefaultRootWindow(_ecore_x_disp);
1533 scr = DefaultScreen(_ecore_x_disp);
1534 }
1535 else
1536 {
1537 /* ewww - round trip */
1538 XGetWindowAttributes(_ecore_x_disp, parent, &att);
1539 for (i = 0; i < ScreenCount(_ecore_x_disp); i++)
1540 {
1541 if (att.screen == ScreenOfDisplay(_ecore_x_disp, i))
1542 {
1543 scr = i;
1544 break;
1545 }
1546 }
1547 }
1548
1549 vi_in.screen = scr;
1550 vi_in.depth = 32;
1551 vi_in.class = TrueColor;
1552 xvi = XGetVisualInfo(_ecore_x_disp,
1553 VisualScreenMask |
1554 VisualDepthMask |
1555 VisualClassMask,
1556 &vi_in,
1557 &nvi);
1558 if (!xvi)
1559 return 0;
1560
1561 vis = NULL;
1562 for (i = 0; i < nvi; i++)
1563 {
1564 fmt = XRenderFindVisualFormat(_ecore_x_disp, xvi[i].visual);
1565 if ((fmt->type == PictTypeDirect) && (fmt->direct.alphaMask))
1566 {
1567 vis = xvi[i].visual;
1568 break;
1569 }
1570 }
1571 XFree (xvi);
1572
1573 attr.backing_store = NotUseful;
1574 attr.override_redirect = override;
1575 attr.colormap = XCreateColormap(_ecore_x_disp, parent,
1576 vis, AllocNone);
1577 attr.border_pixel = 0;
1578 attr.background_pixmap = None;
1579 attr.bit_gravity = NorthWestGravity;
1580 attr.win_gravity = NorthWestGravity;
1581 attr.save_under = saveunder;
1582 attr.do_not_propagate_mask = NoEventMask;
1583 attr.event_mask = KeyPressMask |
1584 KeyReleaseMask |
1585 ButtonPressMask |
1586 ButtonReleaseMask |
1587 EnterWindowMask |
1588 LeaveWindowMask |
1589 PointerMotionMask |
1590 ExposureMask |
1591 VisibilityChangeMask |
1592 StructureNotifyMask |
1593 FocusChangeMask |
1594 PropertyChangeMask |
1595 ColormapChangeMask;
1596 win = XCreateWindow(_ecore_x_disp, parent,
1597 x, y, w, h, 0,
1598 32,
1599 InputOutput,
1600 vis,
1601 CWBackingStore |
1602 CWOverrideRedirect |
1603 CWColormap |
1604 CWBorderPixel |
1605 CWBackPixmap |
1606 CWSaveUnder |
1607 CWDontPropagate |
1608 CWEventMask |
1609 CWBitGravity |
1610 CWWinGravity,
1611 &attr);
1612 XFreeColormap(_ecore_x_disp, attr.colormap);
1613
1614 if (parent == DefaultRootWindow(_ecore_x_disp))
1615 ecore_x_window_defaults_set(win);
1616
1617 return win;
1618}
1619
1620#endif /* ifdef ECORE_XRENDER */
1621
1622EAPI int
1623ecore_x_window_argb_get(Ecore_X_Window win)
1624{
1625#ifdef ECORE_XRENDER
1626 XWindowAttributes att;
1627 XRenderPictFormat *fmt;
1628
1629 att.visual = 0;
1630 if (!XGetWindowAttributes(_ecore_x_disp, win, &att))
1631 return 0;
1632
1633 fmt = XRenderFindVisualFormat(_ecore_x_disp, att.visual);
1634 if (!fmt)
1635 return 0;
1636
1637 if ((fmt->type == PictTypeDirect) && (fmt->direct.alphaMask))
1638 return 1;
1639
1640 return 0;
1641#else /* ifdef ECORE_XRENDER */
1642 return 0;
1643#endif /* ifdef ECORE_XRENDER */
1644}
1645
1646/**
1647 * Creates a new window.
1648 * @param parent The parent window to use. If @p parent is @c 0, the root
1649 * window of the default display is used.
1650 * @param x X position.
1651 * @param y Y position.
1652 * @param w Width.
1653 * @param h Height.
1654 * @return The new window handle.
1655 * @ingroup Ecore_X_Window_Create_Group
1656 */
1657EAPI Ecore_X_Window
1658ecore_x_window_manager_argb_new(Ecore_X_Window parent,
1659 int x,
1660 int y,
1661 int w,
1662 int h)
1663{
1664#ifdef ECORE_XRENDER
1665 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1666 return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 1, 0);
1667#else /* ifdef ECORE_XRENDER */
1668 return 0;
1669#endif /* ifdef ECORE_XRENDER */
1670}
1671
1672/**
1673 * Creates a new window.
1674 * @param parent The parent window to use. If @p parent is @c 0, the root
1675 * window of the default display is used.
1676 * @param x X position.
1677 * @param y Y position.
1678 * @param w Width.
1679 * @param h Height.
1680 * @return The new window handle.
1681 * @ingroup Ecore_X_Window_Create_Group
1682 */
1683EAPI Ecore_X_Window
1684ecore_x_window_argb_new(Ecore_X_Window parent,
1685 int x,
1686 int y,
1687 int w,
1688 int h)
1689{
1690#ifdef ECORE_XRENDER
1691 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1692 return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 0, 0);
1693#else /* ifdef ECORE_XRENDER */
1694 return 0;
1695#endif /* ifdef ECORE_XRENDER */
1696}
1697
1698/**
1699 * Creates a window with the override redirect attribute set to @c True.
1700 * @param parent The parent window to use. If @p parent is @c 0, the root
1701 * window of the default display is used.
1702 * @param x X position.
1703 * @param y Y position.
1704 * @param w Width.
1705 * @param h Height.
1706 * @return The new window handle.
1707 * @ingroup Ecore_X_Window_Create_Group
1708 */
1709EAPI Ecore_X_Window
1710ecore_x_window_override_argb_new(Ecore_X_Window parent,
1711 int x,
1712 int y,
1713 int w,
1714 int h)
1715{
1716#ifdef ECORE_XRENDER
1717 LOGFN(__FILE__, __LINE__, __FUNCTION__);
1718 return _ecore_x_window_argb_internal_new(parent, x, y, w, h, 1, 0);
1719#else /* ifdef ECORE_XRENDER */
1720 return 0;
1721#endif /* ifdef ECORE_XRENDER */
1722}
1723
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_prop.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_prop.c
deleted file mode 100644
index b581a0e..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_prop.c
+++ /dev/null
@@ -1,752 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Ecore.h"
9#include "ecore_x_private.h"
10#include "Ecore_X.h"
11#include "Ecore_X_Atoms.h"
12#include <inttypes.h>
13#include <limits.h>
14
15#define _ATOM_SET_CARD32(win, atom, p_val, cnt) \
16 XChangeProperty(_ecore_x_disp, win, atom, XA_CARDINAL, 32, PropModeReplace, \
17 (unsigned char *)p_val, cnt)
18
19/*
20 * Set CARD32 (array) property
21 */
22EAPI void
23ecore_x_window_prop_card32_set(Ecore_X_Window win,
24 Ecore_X_Atom atom,
25 unsigned int *val,
26 unsigned int num)
27{
28#if SIZEOF_INT == SIZEOF_LONG
29 _ATOM_SET_CARD32(win, atom, val, num);
30#else /* if SIZEOF_INT == SIZEOF_LONG */
31 long *v2;
32 unsigned int i;
33
34 LOGFN(__FILE__, __LINE__, __FUNCTION__);
35 v2 = malloc(num * sizeof(long));
36 if (!v2)
37 return;
38
39 for (i = 0; i < num; i++)
40 v2[i] = val[i];
41 _ATOM_SET_CARD32(win, atom, v2, num);
42 free(v2);
43#endif /* if SIZEOF_INT == SIZEOF_LONG */
44}
45
46/*
47 * Get CARD32 (array) property
48 *
49 * At most len items are returned in val.
50 * If the property was successfully fetched the number of items stored in
51 * val is returned, otherwise -1 is returned.
52 * Note: Return value 0 means that the property exists but has no elements.
53 */
54EAPI int
55ecore_x_window_prop_card32_get(Ecore_X_Window win,
56 Ecore_X_Atom atom,
57 unsigned int *val,
58 unsigned int len)
59{
60 unsigned char *prop_ret;
61 Atom type_ret;
62 unsigned long bytes_after, num_ret;
63 int format_ret;
64 unsigned int i;
65 int num;
66
67 LOGFN(__FILE__, __LINE__, __FUNCTION__);
68 prop_ret = NULL;
69 if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
70 XA_CARDINAL, &type_ret, &format_ret, &num_ret,
71 &bytes_after, &prop_ret) != Success)
72 return -1;
73
74 if (type_ret != XA_CARDINAL || format_ret != 32)
75 num = -1;
76 else if (num_ret == 0 || !prop_ret)
77 num = 0;
78 else
79 {
80 if (num_ret < len)
81 len = num_ret;
82
83 for (i = 0; i < len; i++)
84 val[i] = ((unsigned long *)prop_ret)[i];
85 num = len;
86 }
87
88 if (prop_ret)
89 XFree(prop_ret);
90
91 return num;
92}
93
94/*
95 * Get CARD32 (array) property of any length
96 *
97 * If the property was successfully fetched the number of items stored in
98 * val is returned, otherwise -1 is returned.
99 * Note: Return value 0 means that the property exists but has no elements.
100 */
101EAPI int
102ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
103 Ecore_X_Atom atom,
104 unsigned int **plst)
105{
106 unsigned char *prop_ret;
107 Atom type_ret;
108 unsigned long bytes_after, num_ret;
109 int format_ret;
110 unsigned int i, *val;
111 int num;
112
113 LOGFN(__FILE__, __LINE__, __FUNCTION__);
114 *plst = NULL;
115 prop_ret = NULL;
116 if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
117 XA_CARDINAL, &type_ret, &format_ret, &num_ret,
118 &bytes_after, &prop_ret) != Success)
119 return -1;
120
121 if ((type_ret != XA_CARDINAL) || (format_ret != 32))
122 num = -1;
123 else if ((num_ret == 0) || (!prop_ret))
124 num = 0;
125 else
126 {
127 val = malloc(num_ret * sizeof(unsigned int));
128 if (!val)
129 {
130 if (prop_ret) XFree(prop_ret);
131 return -1;
132 }
133 for (i = 0; i < num_ret; i++)
134 val[i] = ((unsigned long *)prop_ret)[i];
135 num = num_ret;
136 *plst = val;
137 }
138
139 if (prop_ret)
140 XFree(prop_ret);
141
142 return num;
143}
144
145/*
146 * Set X ID (array) property
147 */
148EAPI void
149ecore_x_window_prop_xid_set(Ecore_X_Window win,
150 Ecore_X_Atom atom,
151 Ecore_X_Atom type,
152 Ecore_X_ID *lst,
153 unsigned int num)
154{
155#if SIZEOF_INT == SIZEOF_LONG
156 XChangeProperty(_ecore_x_disp, win, atom, type, 32, PropModeReplace,
157 (unsigned char *)lst, num);
158#else /* if SIZEOF_INT == SIZEOF_LONG */
159 unsigned long *pl;
160 unsigned int i;
161
162 LOGFN(__FILE__, __LINE__, __FUNCTION__);
163 pl = malloc(num * sizeof(long));
164 if (!pl)
165 return;
166
167 for (i = 0; i < num; i++)
168 pl[i] = lst[i];
169 XChangeProperty(_ecore_x_disp, win, atom, type, 32, PropModeReplace,
170 (unsigned char *)pl, num);
171 free(pl);
172#endif /* if SIZEOF_INT == SIZEOF_LONG */
173}
174
175/*
176 * Get X ID (array) property
177 *
178 * At most len items are returned in val.
179 * If the property was successfully fetched the number of items stored in
180 * val is returned, otherwise -1 is returned.
181 * Note: Return value 0 means that the property exists but has no elements.
182 */
183EAPI int
184ecore_x_window_prop_xid_get(Ecore_X_Window win,
185 Ecore_X_Atom atom,
186 Ecore_X_Atom type,
187 Ecore_X_ID *lst,
188 unsigned int len)
189{
190 unsigned char *prop_ret;
191 Atom type_ret;
192 unsigned long bytes_after, num_ret;
193 int format_ret;
194 int num;
195 unsigned i;
196
197 LOGFN(__FILE__, __LINE__, __FUNCTION__);
198 prop_ret = NULL;
199 if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
200 type, &type_ret, &format_ret, &num_ret,
201 &bytes_after, &prop_ret) != Success)
202 return -1;
203
204 if (type_ret != type || format_ret != 32)
205 num = -1;
206 else if (num_ret == 0 || !prop_ret)
207 num = 0;
208 else
209 {
210 if (num_ret < len)
211 len = num_ret;
212
213 for (i = 0; i < len; i++)
214 lst[i] = ((unsigned long *)prop_ret)[i];
215 num = len;
216 }
217
218 if (prop_ret)
219 XFree(prop_ret);
220
221 return num;
222}
223
224/*
225 * Get X ID (array) property
226 *
227 * If the property was successfully fetched the number of items stored in
228 * val is returned, otherwise -1 is returned.
229 * The returned array must be freed with free().
230 * Note: Return value 0 means that the property exists but has no elements.
231 */
232EAPI int
233ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
234 Ecore_X_Atom atom,
235 Ecore_X_Atom type,
236 Ecore_X_ID **val)
237{
238 unsigned char *prop_ret;
239 Atom type_ret;
240 unsigned long bytes_after, num_ret;
241 int format_ret;
242 Ecore_X_Atom *alst;
243 int num;
244 unsigned i;
245
246 LOGFN(__FILE__, __LINE__, __FUNCTION__);
247 *val = NULL;
248 prop_ret = NULL;
249 if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
250 type, &type_ret, &format_ret, &num_ret,
251 &bytes_after, &prop_ret) != Success)
252 return -1;
253
254 if (type_ret != type || format_ret != 32)
255 num = -1;
256 else if (num_ret == 0 || !prop_ret)
257 num = 0;
258 else
259 {
260 alst = malloc(num_ret * sizeof(Ecore_X_ID));
261 for (i = 0; i < num_ret; i++)
262 alst[i] = ((unsigned long *)prop_ret)[i];
263 num = num_ret;
264 *val = alst;
265 }
266
267 if (prop_ret)
268 XFree(prop_ret);
269
270 return num;
271}
272
273/*
274 * Remove/add/toggle X ID list item.
275 */
276EAPI void
277ecore_x_window_prop_xid_list_change(Ecore_X_Window win,
278 Ecore_X_Atom atom,
279 Ecore_X_Atom type,
280 Ecore_X_ID item,
281 int op)
282{
283 Ecore_X_ID *lst;
284 int i, num;
285
286 LOGFN(__FILE__, __LINE__, __FUNCTION__);
287 num = ecore_x_window_prop_xid_list_get(win, atom, type, &lst);
288 if (num < 0)
289 {
290 return; /* Error - assuming invalid window */
291 }
292
293 /* Is it there? */
294 for (i = 0; i < num; i++)
295 {
296 if (lst[i] == item)
297 break;
298 }
299
300 if (i < num)
301 {
302 /* Was in list */
303 if (op == ECORE_X_PROP_LIST_ADD)
304 goto done; /* Remove it */
305
306 num--;
307 for (; i < num; i++)
308 lst[i] = lst[i + 1];
309 }
310 else
311 {
312 /* Was not in list */
313 if (op == ECORE_X_PROP_LIST_REMOVE)
314 goto done; /* Add it */
315
316 num++;
317 lst = realloc(lst, num * sizeof(Ecore_X_ID));
318 lst[i] = item;
319 }
320
321 ecore_x_window_prop_xid_set(win, atom, type, lst, num);
322
323done:
324 if (lst)
325 free(lst);
326}
327
328/*
329 * Set Atom (array) property
330 */
331EAPI void
332ecore_x_window_prop_atom_set(Ecore_X_Window win,
333 Ecore_X_Atom atom,
334 Ecore_X_Atom *lst,
335 unsigned int num)
336{
337 LOGFN(__FILE__, __LINE__, __FUNCTION__);
338 ecore_x_window_prop_xid_set(win, atom, XA_ATOM, lst, num);
339}
340
341/*
342 * Get Atom (array) property
343 *
344 * At most len items are returned in val.
345 * If the property was successfully fetched the number of items stored in
346 * val is returned, otherwise -1 is returned.
347 * Note: Return value 0 means that the property exists but has no elements.
348 */
349EAPI int
350ecore_x_window_prop_atom_get(Ecore_X_Window win,
351 Ecore_X_Atom atom,
352 Ecore_X_Atom *lst,
353 unsigned int len)
354{
355 LOGFN(__FILE__, __LINE__, __FUNCTION__);
356 return ecore_x_window_prop_xid_get(win, atom, XA_ATOM, lst, len);
357}
358
359/*
360 * Get Atom (array) property
361 *
362 * If the property was successfully fetched the number of items stored in
363 * val is returned, otherwise -1 is returned.
364 * The returned array must be freed with free().
365 * Note: Return value 0 means that the property exists but has no elements.
366 */
367EAPI int
368ecore_x_window_prop_atom_list_get(Ecore_X_Window win,
369 Ecore_X_Atom atom,
370 Ecore_X_Atom **plst)
371{
372 LOGFN(__FILE__, __LINE__, __FUNCTION__);
373 return ecore_x_window_prop_xid_list_get(win, atom, XA_ATOM, plst);
374}
375
376/*
377 * Remove/add/toggle atom list item.
378 */
379EAPI void
380ecore_x_window_prop_atom_list_change(Ecore_X_Window win,
381 Ecore_X_Atom atom,
382 Ecore_X_Atom item,
383 int op)
384{
385 LOGFN(__FILE__, __LINE__, __FUNCTION__);
386 ecore_x_window_prop_xid_list_change(win, atom, XA_ATOM, item, op);
387}
388
389/*
390 * Set Window (array) property
391 */
392EAPI void
393ecore_x_window_prop_window_set(Ecore_X_Window win,
394 Ecore_X_Atom atom,
395 Ecore_X_Window *lst,
396 unsigned int num)
397{
398 LOGFN(__FILE__, __LINE__, __FUNCTION__);
399 ecore_x_window_prop_xid_set(win, atom, XA_WINDOW, lst, num);
400}
401
402/*
403 * Get Window (array) property
404 *
405 * At most len items are returned in val.
406 * If the property was successfully fetched the number of items stored in
407 * val is returned, otherwise -1 is returned.
408 * Note: Return value 0 means that the property exists but has no elements.
409 */
410EAPI int
411ecore_x_window_prop_window_get(Ecore_X_Window win,
412 Ecore_X_Atom atom,
413 Ecore_X_Window *lst,
414 unsigned int len)
415{
416 LOGFN(__FILE__, __LINE__, __FUNCTION__);
417 return ecore_x_window_prop_xid_get(win, atom, XA_WINDOW, lst, len);
418}
419
420/*
421 * Get Window (array) property
422 *
423 * If the property was successfully fetched the number of items stored in
424 * val is returned, otherwise -1 is returned.
425 * The returned array must be freed with free().
426 * Note: Return value 0 means that the property exists but has no elements.
427 */
428EAPI int
429ecore_x_window_prop_window_list_get(Ecore_X_Window win,
430 Ecore_X_Atom atom,
431 Ecore_X_Window **plst)
432{
433 LOGFN(__FILE__, __LINE__, __FUNCTION__);
434 return ecore_x_window_prop_xid_list_get(win, atom, XA_WINDOW, plst);
435}
436
437/**
438 * To be documented.
439 *
440 * FIXME: To be fixed.
441 */
442EAPI Ecore_X_Atom
443ecore_x_window_prop_any_type(void)
444{
445 return AnyPropertyType;
446}
447
448/**
449 * To be documented.
450 *
451 * FIXME: To be fixed.
452 */
453EAPI void
454ecore_x_window_prop_property_set(Ecore_X_Window win,
455 Ecore_X_Atom property,
456 Ecore_X_Atom type,
457 int size,
458 void *data,
459 int number)
460{
461 LOGFN(__FILE__, __LINE__, __FUNCTION__);
462 if (win == 0)
463 win = DefaultRootWindow(_ecore_x_disp);
464
465 if (size != 32)
466 XChangeProperty(_ecore_x_disp,
467 win,
468 property,
469 type,
470 size,
471 PropModeReplace,
472 (unsigned char *)data,
473 number);
474 else
475 {
476 unsigned long *dat;
477 int i, *ptr;
478
479 dat = malloc(sizeof(unsigned long) * number);
480 if (dat)
481 {
482 for (ptr = (int *)data, i = 0; i < number; i++)
483 dat[i] = ptr[i];
484 XChangeProperty(_ecore_x_disp, win, property, type, size,
485 PropModeReplace, (unsigned char *)dat, number);
486 free(dat);
487 }
488 }
489}
490
491/**
492 * To be documented.
493 *
494 * FIXME: To be fixed.
495 */
496EAPI int
497ecore_x_window_prop_property_get(Ecore_X_Window win,
498 Ecore_X_Atom property,
499 Ecore_X_Atom type,
500 int size __UNUSED__,
501 unsigned char **data,
502 int *num)
503{
504 Atom type_ret = 0;
505 int ret, size_ret = 0;
506 unsigned long num_ret = 0, bytes = 0, i;
507 unsigned char *prop_ret = NULL;
508
509 /* make sure these are initialized */
510 if (num)
511 *num = 0;
512
513 if (data)
514 *data = NULL;
515 else /* we can't store the retrieved data, so just return */
516 return 0;
517
518 LOGFN(__FILE__, __LINE__, __FUNCTION__);
519 if (!win)
520 win = DefaultRootWindow(_ecore_x_disp);
521
522 ret = XGetWindowProperty(_ecore_x_disp, win, property, 0, LONG_MAX,
523 False, type, &type_ret, &size_ret,
524 &num_ret, &bytes, &prop_ret);
525
526 if (ret != Success)
527 return 0;
528
529 if (!num_ret)
530 {
531 XFree(prop_ret);
532 return 0;
533 }
534
535 if (!(*data = malloc(num_ret * size_ret / 8)))
536 {
537 XFree(prop_ret);
538 return 0;
539 }
540
541 switch (size_ret) {
542 case 8:
543 for (i = 0; i < num_ret; i++)
544 (*data)[i] = prop_ret[i];
545 break;
546
547 case 16:
548 for (i = 0; i < num_ret; i++)
549 ((unsigned short *)*data)[i] = ((unsigned short *)prop_ret)[i];
550 break;
551
552 case 32:
553 for (i = 0; i < num_ret; i++)
554 ((unsigned int *)*data)[i] = ((unsigned long *)prop_ret)[i];
555 break;
556 }
557
558 XFree(prop_ret);
559
560 if (num)
561 *num = num_ret;
562
563 return size_ret;
564}
565
566EAPI void
567ecore_x_window_prop_property_del(Ecore_X_Window win,
568 Ecore_X_Atom property)
569{
570 LOGFN(__FILE__, __LINE__, __FUNCTION__);
571 XDeleteProperty(_ecore_x_disp, win, property);
572}
573
574EAPI Ecore_X_Atom *
575ecore_x_window_prop_list(Ecore_X_Window win,
576 int *num_ret)
577{
578 Ecore_X_Atom *atoms;
579 Atom *atom_ret;
580 int num = 0, i;
581
582 LOGFN(__FILE__, __LINE__, __FUNCTION__);
583 if (num_ret)
584 *num_ret = 0;
585
586 atom_ret = XListProperties(_ecore_x_disp, win, &num);
587 if (!atom_ret)
588 return NULL;
589
590 atoms = malloc(num * sizeof(Ecore_X_Atom));
591 if (atoms)
592 {
593 for (i = 0; i < num; i++)
594 atoms[i] = atom_ret[i];
595 if (num_ret)
596 *num_ret = num;
597 }
598
599 XFree(atom_ret);
600 return atoms;
601}
602
603/**
604 * Set a window string property.
605 * @param win The window
606 * @param type The property
607 * @param str The string
608 *
609 * Set a window string property
610 */
611EAPI void
612ecore_x_window_prop_string_set(Ecore_X_Window win,
613 Ecore_X_Atom type,
614 const char *str)
615{
616 XTextProperty xtp;
617
618 LOGFN(__FILE__, __LINE__, __FUNCTION__);
619 if (win == 0)
620 win = DefaultRootWindow(_ecore_x_disp);
621
622 xtp.value = (unsigned char *)str;
623 xtp.format = 8;
624 xtp.encoding = ECORE_X_ATOM_UTF8_STRING;
625 xtp.nitems = strlen(str);
626 XSetTextProperty(_ecore_x_disp, win, &xtp, type);
627}
628
629/**
630 * Get a window string property.
631 * @param win The window
632 * @param type The property
633 *
634 * Return window string property of a window. String must be free'd when done.
635 */
636EAPI char *
637ecore_x_window_prop_string_get(Ecore_X_Window win,
638 Ecore_X_Atom type)
639{
640 XTextProperty xtp;
641 char *str = NULL;
642
643 LOGFN(__FILE__, __LINE__, __FUNCTION__);
644 if (win == 0)
645 win = DefaultRootWindow(_ecore_x_disp);
646
647 if (XGetTextProperty(_ecore_x_disp, win, &xtp, type))
648 {
649 int items;
650 char **list = NULL;
651 Status s;
652
653 if (xtp.encoding == ECORE_X_ATOM_UTF8_STRING)
654 str = strdup((char *)xtp.value);
655 else
656 {
657#ifdef X_HAVE_UTF8_STRING
658 s = Xutf8TextPropertyToTextList(_ecore_x_disp, &xtp,
659 &list, &items);
660#else /* ifdef X_HAVE_UTF8_STRING */
661 s = XmbTextPropertyToTextList(_ecore_x_disp, &xtp,
662 &list, &items);
663#endif /* ifdef X_HAVE_UTF8_STRING */
664 if ((s == XLocaleNotSupported) ||
665 (s == XNoMemory) || (s == XConverterNotFound))
666 str = strdup((char *)xtp.value);
667 else if ((s >= Success) && (items > 0))
668 str = strdup(list[0]);
669
670 if (list)
671 XFreeStringList(list);
672 }
673
674 XFree(xtp.value);
675 }
676
677 return str;
678}
679
680EAPI Eina_Bool
681ecore_x_window_prop_protocol_isset(Ecore_X_Window win,
682 Ecore_X_WM_Protocol protocol)
683{
684 Atom proto, *protos = NULL;
685 int i, protos_count = 0;
686 Eina_Bool ret = EINA_FALSE;
687
688 /* check for invalid values */
689 if (protocol >= ECORE_X_WM_PROTOCOL_NUM)
690 return EINA_FALSE;
691
692 LOGFN(__FILE__, __LINE__, __FUNCTION__);
693 proto = _ecore_x_atoms_wm_protocols[protocol];
694
695 if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
696 return ret;
697
698 for (i = 0; i < protos_count; i++)
699 if (protos[i] == proto)
700 {
701 ret = EINA_TRUE;
702 break;
703 }
704
705 XFree(protos);
706
707 return ret;
708}
709
710/**
711 * To be documented.
712 *
713 * FIXME: To be fixed.
714 */
715EAPI Ecore_X_WM_Protocol *
716ecore_x_window_prop_protocol_list_get(Ecore_X_Window win,
717 int *num_ret)
718{
719 Atom *protos = NULL;
720 int i, protos_count = 0;
721 Ecore_X_WM_Protocol *prot_ret = NULL;
722
723 LOGFN(__FILE__, __LINE__, __FUNCTION__);
724 if (!XGetWMProtocols(_ecore_x_disp, win, &protos, &protos_count))
725 return NULL;
726
727 if ((!protos) || (protos_count <= 0))
728 return NULL;
729
730 prot_ret = calloc(1, protos_count * sizeof(Ecore_X_WM_Protocol));
731 if (!prot_ret)
732 {
733 XFree(protos);
734 return NULL;
735 }
736
737 for (i = 0; i < protos_count; i++)
738 {
739 Ecore_X_WM_Protocol j;
740
741 prot_ret[i] = -1;
742 for (j = 0; j < ECORE_X_WM_PROTOCOL_NUM; j++)
743 {
744 if (_ecore_x_atoms_wm_protocols[j] == protos[i])
745 prot_ret[i] = j;
746 }
747 }
748 XFree(protos);
749 *num_ret = protos_count;
750 return prot_ret;
751}
752
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_shape.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_shape.c
deleted file mode 100644
index 71718cf..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_window_shape.c
+++ /dev/null
@@ -1,658 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#include "Ecore.h"
8#include "ecore_x_private.h"
9#include "Ecore_X.h"
10
11/**
12 * @defgroup Ecore_X_Window_Shape X Window Shape Functions
13 *
14 * These functions use the shape extension of the X server to change
15 * shape of given windows.
16 */
17
18/**
19 * Sets the shape of the given window to that given by the pixmap @p mask.
20 * @param win The given window.
21 * @param mask A 2-bit depth pixmap that provides the new shape of the
22 * window.
23 * @ingroup Ecore_X_Window_Shape
24 */
25EAPI void
26ecore_x_window_shape_mask_set(Ecore_X_Window win,
27 Ecore_X_Pixmap mask)
28{
29 LOGFN(__FILE__, __LINE__, __FUNCTION__);
30 XShapeCombineMask(_ecore_x_disp, win, ShapeBounding, 0, 0, mask, ShapeSet);
31}
32
33/**
34 * Sets the input shape of the given window to that given by the pixmap @p mask.
35 * @param win The given window.
36 * @param mask A 1-bit depth pixmap that provides the new input shape of the
37 * window.
38 * @ingroup Ecore_X_Window_Shape
39 */
40EAPI void
41ecore_x_window_shape_input_mask_set(Ecore_X_Window win,
42 Ecore_X_Pixmap mask)
43{
44 LOGFN(__FILE__, __LINE__, __FUNCTION__);
45#ifdef ShapeInput
46 XShapeCombineMask(_ecore_x_disp, win, ShapeInput, 0, 0, mask, ShapeSet);
47#else /* ifdef ShapeInput */
48 return;
49 win = mask = 0;
50#endif /* ifdef ShapeInput */
51}
52
53EAPI void
54ecore_x_window_shape_window_set(Ecore_X_Window win,
55 Ecore_X_Window shape_win)
56{
57 LOGFN(__FILE__, __LINE__, __FUNCTION__);
58 XShapeCombineShape(_ecore_x_disp,
59 win,
60 ShapeBounding,
61 0,
62 0,
63 shape_win,
64 ShapeBounding,
65 ShapeSet);
66}
67
68EAPI void
69ecore_x_window_shape_input_window_set(Ecore_X_Window win,
70 Ecore_X_Window shape_win)
71{
72#ifdef ShapeInput
73 LOGFN(__FILE__, __LINE__, __FUNCTION__);
74 XShapeCombineShape(_ecore_x_disp,
75 win,
76 ShapeInput,
77 0,
78 0,
79 shape_win,
80 ShapeInput,
81 ShapeSet);
82#else
83 return;
84 win = shape_win = 0;
85#endif
86}
87
88EAPI void
89ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
90 Ecore_X_Window shape_win,
91 int x,
92 int y)
93{
94 LOGFN(__FILE__, __LINE__, __FUNCTION__);
95 XShapeCombineShape(_ecore_x_disp,
96 win,
97 ShapeBounding,
98 x,
99 y,
100 shape_win,
101 ShapeBounding,
102 ShapeSet);
103}
104
105EAPI void
106ecore_x_window_shape_input_window_set_xy(Ecore_X_Window win,
107 Ecore_X_Window shape_win,
108 int x,
109 int y)
110{
111#ifdef ShapeInput
112 LOGFN(__FILE__, __LINE__, __FUNCTION__);
113 XShapeCombineShape(_ecore_x_disp,
114 win,
115 ShapeInput,
116 x,
117 y,
118 shape_win,
119 ShapeInput,
120 ShapeSet);
121#else
122 return;
123 win = shape_win = x = y = 0;
124#endif
125}
126
127EAPI void
128ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
129 int x,
130 int y,
131 int w,
132 int h)
133{
134 XRectangle rect;
135
136 LOGFN(__FILE__, __LINE__, __FUNCTION__);
137 rect.x = x;
138 rect.y = y;
139 rect.width = w;
140 rect.height = h;
141 XShapeCombineRectangles(_ecore_x_disp,
142 win,
143 ShapeBounding,
144 0,
145 0,
146 &rect,
147 1,
148 ShapeSet,
149 Unsorted);
150}
151
152EAPI void
153ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win,
154 int x,
155 int y,
156 int w,
157 int h)
158{
159#ifdef ShapeInput
160 XRectangle rect;
161
162 LOGFN(__FILE__, __LINE__, __FUNCTION__);
163 rect.x = x;
164 rect.y = y;
165 rect.width = w;
166 rect.height = h;
167 XShapeCombineRectangles(_ecore_x_disp,
168 win,
169 ShapeInput,
170 0,
171 0,
172 &rect,
173 1,
174 ShapeSet,
175 Unsorted);
176#else
177 return;
178 win = x = y = w = h = 0;
179#endif
180}
181
182EAPI void
183ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
184 Ecore_X_Rectangle *rects,
185 int num)
186{
187#ifdef ShapeInput
188 XRectangle *rect = NULL;
189 int i;
190
191 LOGFN(__FILE__, __LINE__, __FUNCTION__);
192 if (!rects) return;
193 if (num > 0)
194 {
195 rect = malloc(sizeof(XRectangle) * num);
196 if (!rect) return;
197 for (i = 0; i < num; i++)
198 {
199 rect[i].x = rects[i].x;
200 rect[i].y = rects[i].y;
201 rect[i].width = rects[i].width;
202 rect[i].height = rects[i].height;
203 }
204 }
205 XShapeCombineRectangles(_ecore_x_disp,
206 win,
207 ShapeBounding,
208 0,
209 0,
210 rect,
211 num,
212 ShapeSet,
213 Unsorted);
214 if (rect) free(rect);
215#else
216 return;
217 win = rects = num = 0;
218#endif
219}
220
221EAPI void
222ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win,
223 Ecore_X_Rectangle *rects,
224 int num)
225{
226#ifdef ShapeInput
227 XRectangle *rect = NULL;
228 int i;
229
230 LOGFN(__FILE__, __LINE__, __FUNCTION__);
231 if (!rects) return;
232 if (num > 0)
233 {
234 rect = malloc(sizeof(XRectangle) * num);
235 if (!rect) return;
236 for (i = 0; i < num; i++)
237 {
238 rect[i].x = rects[i].x;
239 rect[i].y = rects[i].y;
240 rect[i].width = rects[i].width;
241 rect[i].height = rects[i].height;
242 }
243 }
244 XShapeCombineRectangles(_ecore_x_disp,
245 win,
246 ShapeInput,
247 0,
248 0,
249 rect,
250 num,
251 ShapeSet,
252 Unsorted);
253 if (rect) free(rect);
254#else
255 return;
256 win = rects = num = 0;
257#endif
258}
259
260EAPI void
261ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win,
262 int x,
263 int y,
264 int w,
265 int h)
266{
267 XRectangle rect;
268
269 LOGFN(__FILE__, __LINE__, __FUNCTION__);
270 rect.x = x;
271 rect.y = y;
272 rect.width = w;
273 rect.height = h;
274 XShapeCombineRectangles(_ecore_x_disp,
275 win,
276 ShapeBounding,
277 0,
278 0,
279 &rect,
280 1,
281 ShapeSubtract,
282 Unsorted);
283}
284
285EAPI void
286ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win,
287 int x,
288 int y,
289 int w,
290 int h)
291{
292#ifdef ShapeInput
293 XRectangle rect;
294
295 LOGFN(__FILE__, __LINE__, __FUNCTION__);
296 rect.x = x;
297 rect.y = y;
298 rect.width = w;
299 rect.height = h;
300 XShapeCombineRectangles(_ecore_x_disp,
301 win,
302 ShapeInput,
303 0,
304 0,
305 &rect,
306 1,
307 ShapeSubtract,
308 Unsorted);
309#else
310 return;
311 win = x = y = w = h = 0;
312#endif
313}
314
315EAPI void
316ecore_x_window_shape_window_add(Ecore_X_Window win,
317 Ecore_X_Window shape_win)
318{
319 LOGFN(__FILE__, __LINE__, __FUNCTION__);
320 XShapeCombineShape(_ecore_x_disp,
321 win,
322 ShapeBounding,
323 0,
324 0,
325 shape_win,
326 ShapeBounding,
327 ShapeUnion);
328}
329
330EAPI void
331ecore_x_window_shape_window_add_xy(Ecore_X_Window win,
332 Ecore_X_Window shape_win,
333 int x,
334 int y)
335{
336 LOGFN(__FILE__, __LINE__, __FUNCTION__);
337 XShapeCombineShape(_ecore_x_disp,
338 win,
339 ShapeBounding,
340 x,
341 y,
342 shape_win,
343 ShapeBounding,
344 ShapeUnion);
345}
346
347EAPI void
348ecore_x_window_shape_input_window_add_xy(Ecore_X_Window win,
349 Ecore_X_Window shape_win,
350 int x,
351 int y)
352{
353#ifdef ShapeInput
354 LOGFN(__FILE__, __LINE__, __FUNCTION__);
355 XShapeCombineShape(_ecore_x_disp,
356 win,
357 ShapeInput,
358 x,
359 y,
360 shape_win,
361 ShapeInput,
362 ShapeUnion);
363#else
364 return;
365 win = shape_win = x = y = 0;
366#endif
367}
368
369EAPI void
370ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
371 int x,
372 int y,
373 int w,
374 int h)
375{
376 XRectangle rect;
377
378 LOGFN(__FILE__, __LINE__, __FUNCTION__);
379 rect.x = x;
380 rect.y = y;
381 rect.width = w;
382 rect.height = h;
383 XShapeCombineRectangles(_ecore_x_disp,
384 win,
385 ShapeBounding,
386 0,
387 0,
388 &rect,
389 1,
390 ShapeUnion,
391 Unsorted);
392}
393
394EAPI void
395ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win,
396 int x,
397 int y,
398 int w,
399 int h)
400{
401#ifdef ShapeInput
402 XRectangle rect;
403
404 LOGFN(__FILE__, __LINE__, __FUNCTION__);
405 rect.x = x;
406 rect.y = y;
407 rect.width = w;
408 rect.height = h;
409 XShapeCombineRectangles(_ecore_x_disp,
410 win,
411 ShapeInput,
412 0,
413 0,
414 &rect,
415 1,
416 ShapeUnion,
417 Unsorted);
418#else
419 return;
420 win = x = y = w = h = 0;
421#endif
422}
423
424EAPI void
425ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
426 int x,
427 int y,
428 int w,
429 int h)
430{
431 XRectangle rect;
432
433 LOGFN(__FILE__, __LINE__, __FUNCTION__);
434 rect.x = x;
435 rect.y = y;
436 rect.width = w;
437 rect.height = h;
438 XShapeCombineRectangles(_ecore_x_disp,
439 win,
440 ShapeBounding,
441 0,
442 0,
443 &rect,
444 1,
445 ShapeIntersect,
446 Unsorted);
447}
448
449EAPI void
450ecore_x_window_shape_input_rectangle_clip(Ecore_X_Window win,
451 int x,
452 int y,
453 int w,
454 int h)
455{
456#ifdef ShapeInput
457 XRectangle rect;
458
459 LOGFN(__FILE__, __LINE__, __FUNCTION__);
460 rect.x = x;
461 rect.y = y;
462 rect.width = w;
463 rect.height = h;
464 XShapeCombineRectangles(_ecore_x_disp,
465 win,
466 ShapeInput,
467 0,
468 0,
469 &rect,
470 1,
471 ShapeIntersect,
472 Unsorted);
473#else
474 return;
475 win = x = y = w = h = 0;
476#endif
477}
478
479EAPI void
480ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
481 Ecore_X_Rectangle *rects,
482 int num)
483{
484 XRectangle *rect = NULL;
485 int i;
486
487 LOGFN(__FILE__, __LINE__, __FUNCTION__);
488 if (num > 0)
489 {
490 rect = malloc(sizeof(XRectangle) * num);
491 if (!rect) return;
492 for (i = 0; i < num; i++)
493 {
494 rect[i].x = rects[i].x;
495 rect[i].y = rects[i].y;
496 rect[i].width = rects[i].width;
497 rect[i].height = rects[i].height;
498 }
499 }
500
501 XShapeCombineRectangles(_ecore_x_disp,
502 win,
503 ShapeBounding,
504 0,
505 0,
506 rect,
507 num,
508 ShapeUnion,
509 Unsorted);
510 if (rect) free(rect);
511}
512
513EAPI void
514ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win,
515 Ecore_X_Rectangle *rects,
516 int num)
517{
518#ifdef ShapeInput
519 XRectangle *rect = NULL;
520 int i;
521
522 LOGFN(__FILE__, __LINE__, __FUNCTION__);
523 if (num > 0)
524 {
525 rect = malloc(sizeof(XRectangle) * num);
526 if (!rect) return;
527 for (i = 0; i < num; i++)
528 {
529 rect[i].x = rects[i].x;
530 rect[i].y = rects[i].y;
531 rect[i].width = rects[i].width;
532 rect[i].height = rects[i].height;
533 }
534 }
535
536 XShapeCombineRectangles(_ecore_x_disp,
537 win,
538 ShapeInput,
539 0,
540 0,
541 rect,
542 num,
543 ShapeUnion,
544 Unsorted);
545 if (rect) free(rect);
546#else
547 return;
548 win = rects = num = 0;
549#endif
550}
551
552EAPI Ecore_X_Rectangle *
553ecore_x_window_shape_rectangles_get(Ecore_X_Window win,
554 int *num_ret)
555{
556 XRectangle *rect;
557 Ecore_X_Rectangle *rects = NULL;
558 int i, num = 0, ord;
559
560 LOGFN(__FILE__, __LINE__, __FUNCTION__);
561 rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeBounding, &num, &ord);
562 if (rect)
563 {
564 if (num < 1)
565 {
566 XFree(rect);
567 if (num_ret) *num_ret = 0;
568 return NULL;
569 }
570 rects = malloc(sizeof(Ecore_X_Rectangle) * num);
571 if (!rects)
572 {
573 XFree(rect);
574 if (num_ret) *num_ret = 0;
575 return NULL;
576 }
577 for (i = 0; i < num; i++)
578 {
579 rects[i].x = rect[i].x;
580 rects[i].y = rect[i].y;
581 rects[i].width = rect[i].width;
582 rects[i].height = rect[i].height;
583 }
584 XFree(rect);
585 }
586 if (num_ret) *num_ret = num;
587 return rects;
588}
589
590EAPI Ecore_X_Rectangle *
591ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win,
592 int *num_ret)
593{
594 Ecore_X_Rectangle *rects = NULL;
595#ifdef ShapeInput
596 XRectangle *rect;
597 int i, num = 0, ord;
598
599 LOGFN(__FILE__, __LINE__, __FUNCTION__);
600 rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeInput, &num, &ord);
601 if (rect)
602 {
603 if (num < 1)
604 {
605 XFree(rect);
606 if (num_ret) *num_ret = 0;
607 return NULL;
608 }
609 rects = malloc(sizeof(Ecore_X_Rectangle) * num);
610 if (!rects)
611 {
612 XFree(rect);
613 if (num_ret) *num_ret = 0;
614 return NULL;
615 }
616 for (i = 0; i < num; i++)
617 {
618 rects[i].x = rect[i].x;
619 rects[i].y = rect[i].y;
620 rects[i].width = rect[i].width;
621 rects[i].height = rect[i].height;
622 }
623 XFree(rect);
624 }
625 if (num_ret) *num_ret = num;
626 return rects;
627#else
628 // have to return fake shape input rect of size of window
629 Window dw;
630 unsigned int di;
631
632 if (num_ret) *num_ret = 0;
633 rects = malloc(sizeof(Ecore_X_Rectangle));
634 if (!rects) return NULL;
635 if (!XGetGeometry(_ecore_x_disp, win, &dw,
636 &(rects[0].x), &(rects[0].y),
637 &(rects[0].width), &(rects[0].height),
638 &di, &di))
639 {
640 free(rects);
641 return NULL;
642 }
643 if (num_ret) *num_ret = 1;
644 return rects;
645#endif
646}
647
648EAPI void
649ecore_x_window_shape_events_select(Ecore_X_Window win,
650 Eina_Bool on)
651{
652 LOGFN(__FILE__, __LINE__, __FUNCTION__);
653 if (on)
654 XShapeSelectInput(_ecore_x_disp, win, ShapeNotifyMask);
655 else
656 XShapeSelectInput(_ecore_x_disp, win, 0);
657}
658
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xi2.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xi2.c
deleted file mode 100644
index fbfbd43..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xi2.c
+++ /dev/null
@@ -1,283 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <string.h>
6
7#include "Ecore.h"
8#include "ecore_x_private.h"
9#include "Ecore_X.h"
10
11#ifdef ECORE_XI2
12#include "Ecore_Input.h"
13#endif /* ifdef ECORE_XI2 */
14
15int _ecore_x_xi2_opcode = -1;
16
17#ifndef XIPointerEmulated
18#define XIPointerEmulated (1 << 16)
19#endif
20
21#ifdef ECORE_XI2
22static XIDeviceInfo *_ecore_x_xi2_devs = NULL;
23static int _ecore_x_xi2_num = 0;
24#endif /* ifdef ECORE_XI2 */
25
26void
27_ecore_x_input_init(void)
28{
29#ifdef ECORE_XI2
30 int event, error;
31 int major = 2, minor = 0;
32
33 if (!XQueryExtension(_ecore_x_disp, "XInputExtension",
34 &_ecore_x_xi2_opcode, &event, &error))
35 {
36 _ecore_x_xi2_opcode = -1;
37 return;
38 }
39
40 if (XIQueryVersion(_ecore_x_disp, &major, &minor) == BadRequest)
41 {
42 _ecore_x_xi2_opcode = -1;
43 return;
44 }
45
46 _ecore_x_xi2_devs = XIQueryDevice(_ecore_x_disp, XIAllDevices,
47 &_ecore_x_xi2_num);
48#endif /* ifdef ECORE_XI2 */
49}
50
51void
52_ecore_x_input_shutdown(void)
53{
54#ifdef ECORE_XI2
55 if (_ecore_x_xi2_devs)
56 {
57 XIFreeDeviceInfo(_ecore_x_xi2_devs);
58 _ecore_x_xi2_devs = NULL;
59 }
60
61 _ecore_x_xi2_num = 0;
62 _ecore_x_xi2_opcode = -1;
63#endif /* ifdef ECORE_XI2 */
64}
65
66void
67_ecore_x_input_handler(XEvent *xevent)
68{
69#ifdef ECORE_XI2
70 XIDeviceEvent *evd = (XIDeviceEvent *)(xevent->xcookie.data);
71 int devid = evd->deviceid;
72 int i;
73
74 if (_ecore_x_xi2_devs)
75 {
76 for (i = 0; i < _ecore_x_xi2_num; i++)
77 {
78 XIDeviceInfo *dev = &(_ecore_x_xi2_devs[i]);
79
80 if (devid == dev->deviceid)
81 {
82 if (dev->use == XIMasterPointer) return;
83 if ((dev->use == XISlavePointer) &&
84 (evd->flags & XIPointerEmulated)) return;
85 }
86 }
87 }
88 switch (xevent->xcookie.evtype)
89 {
90 case XI_Motion:
91 _ecore_mouse_move
92 (evd->time,
93 0, // state
94 evd->event_x, evd->event_y,
95 evd->root_x, evd->root_y,
96 evd->event,
97 (evd->child ? evd->child : evd->event),
98 evd->root,
99 1, // same_screen
100 devid, 1, 1,
101 1.0, // pressure
102 0.0, // angle
103 evd->event_x, evd->event_y,
104 evd->root_x, evd->root_y);
105 break;
106
107 case XI_ButtonPress:
108 _ecore_mouse_button
109 (ECORE_EVENT_MOUSE_BUTTON_DOWN,
110 evd->time,
111 0, // state
112 0, // button
113 evd->event_x, evd->event_y,
114 evd->root_x, evd->root_y,
115 evd->event,
116 (evd->child ? evd->child : evd->event),
117 evd->root,
118 1, // same_screen
119 devid, 1, 1,
120 1.0, // pressure
121 0.0, // angle
122 evd->event_x, evd->event_y,
123 evd->root_x, evd->root_y);
124 break;
125
126 case XI_ButtonRelease:
127 _ecore_mouse_button
128 (ECORE_EVENT_MOUSE_BUTTON_UP,
129 evd->time,
130 0, // state
131 0, // button
132 evd->event_x, evd->event_y,
133 evd->root_x, evd->root_y,
134 evd->event,
135 (evd->child ? evd->child : evd->event),
136 evd->root,
137 1, // same_screen
138 devid, 1, 1,
139 1.0, // pressure
140 0.0, // angle
141 evd->event_x, evd->event_y,
142 evd->root_x, evd->root_y);
143 break;
144
145#ifdef XI_TouchUpdate
146 case XI_TouchUpdate:
147 _ecore_mouse_move
148 (evd->time,
149 0, // state
150 evd->event_x, evd->event_y,
151 evd->root_x, evd->root_y,
152 evd->event,
153 (evd->child ? evd->child : evd->event),
154 evd->root,
155 1, // same_screen
156 devid, 1, 1,
157 1.0, // pressure
158 0.0, // angle
159 evd->event_x, evd->event_y,
160 evd->root_x, evd->root_y);
161 break;
162
163#endif
164#ifdef XI_TouchBegin
165 case XI_TouchBegin:
166 _ecore_mouse_button
167 (ECORE_EVENT_MOUSE_BUTTON_DOWN,
168 evd->time,
169 0, // state
170 0, // button
171 evd->event_x, evd->event_y,
172 evd->root_x, evd->root_y,
173 evd->event,
174 (evd->child ? evd->child : evd->event),
175 evd->root,
176 1, // same_screen
177 devid, 1, 1,
178 1.0, // pressure
179 0.0, // angle
180 evd->event_x, evd->event_y,
181 evd->root_x, evd->root_y);
182 break;
183
184#endif
185#ifdef XI_TouchEnd
186 case XI_TouchEnd:
187 _ecore_mouse_button
188 (ECORE_EVENT_MOUSE_BUTTON_UP,
189 evd->time,
190 0, // state
191 0, // button
192 evd->event_x, evd->event_y,
193 evd->root_x, evd->root_y,
194 evd->event,
195 (evd->child ? evd->child : evd->event),
196 evd->root,
197 1, // same_screen
198 devid, 1, 1,
199 1.0, // pressure
200 0.0, // angle
201 evd->event_x, evd->event_y,
202 evd->root_x, evd->root_y);
203 break;
204
205#endif
206 default:
207 break;
208 }
209#endif /* ifdef ECORE_XI2 */
210}
211
212EAPI Eina_Bool
213ecore_x_input_multi_select(Ecore_X_Window win)
214{
215#ifdef ECORE_XI2
216 int i;
217 Eina_Bool find = EINA_FALSE;
218
219 if (!_ecore_x_xi2_devs)
220 return 0;
221
222 LOGFN(__FILE__, __LINE__, __FUNCTION__);
223 for (i = 0; i < _ecore_x_xi2_num; i++)
224 {
225 XIDeviceInfo *dev = &(_ecore_x_xi2_devs[i]);
226
227 if (dev->use == XIFloatingSlave)
228 {
229 XIEventMask eventmask;
230 unsigned char mask[4] = { 0 };
231
232 eventmask.deviceid = dev->deviceid;
233 eventmask.mask_len = sizeof(mask);
234 eventmask.mask = mask;
235 XISetMask(mask, XI_ButtonPress);
236 XISetMask(mask, XI_ButtonRelease);
237 XISetMask(mask, XI_Motion);
238 XISelectEvents(_ecore_x_disp, win, &eventmask, 1);
239 find = EINA_TRUE;
240 }
241 else if (dev->use == XISlavePointer)
242 {
243 XIDeviceInfo *atdev = NULL;
244 int j;
245
246 for (j = 0; j < _ecore_x_xi2_num; j++)
247 {
248 if (_ecore_x_xi2_devs[j].deviceid == dev->attachment)
249 atdev = &(_ecore_x_xi2_devs[j]);
250 }
251 if (((atdev) && (atdev->use != XIMasterPointer)) ||
252 (!atdev))
253 {
254 XIEventMask eventmask;
255 unsigned char mask[4] = { 0 };
256
257 eventmask.deviceid = dev->deviceid;
258 eventmask.mask_len = sizeof(mask);
259 eventmask.mask = mask;
260 XISetMask(mask, XI_ButtonPress);
261 XISetMask(mask, XI_ButtonRelease);
262 XISetMask(mask, XI_Motion);
263# ifdef XI_TouchUpdate
264 XISetMask(mask, XI_TouchUpdate);
265# endif
266# ifdef XI_TouchBegin
267 XISetMask(mask, XI_TouchBegin);
268# endif
269# ifdef XI_TouchEnd
270 XISetMask(mask, XI_TouchEnd);
271# endif
272 XISelectEvents(_ecore_x_disp, win, &eventmask, 1);
273 find = EINA_TRUE;
274 }
275 }
276 }
277
278 return find;
279#else /* ifdef ECORE_XI2 */
280 return EINA_FALSE;
281#endif /* ifdef ECORE_XI2 */
282}
283
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xinerama.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xinerama.c
deleted file mode 100644
index f49a4d3..0000000
--- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_xinerama.c
+++ /dev/null
@@ -1,91 +0,0 @@
1/*
2 * Xinerama code
3 */
4
5#ifdef HAVE_CONFIG_H
6# include <config.h>
7#endif /* ifdef HAVE_CONFIG_H */
8
9#include "Ecore.h"
10#include "ecore_x_private.h"
11#include "Ecore_X.h"
12#include "Ecore_X_Atoms.h"
13
14#ifdef ECORE_XINERAMA
15static XineramaScreenInfo *_xin_info = NULL;
16static int _xin_scr_num = 0;
17#endif /* ifdef ECORE_XINERAMA */
18
19EAPI int
20ecore_x_xinerama_screen_count_get(void)
21{
22#ifdef ECORE_XINERAMA
23 int event_base, error_base;
24
25 LOGFN(__FILE__, __LINE__, __FUNCTION__);
26 if (_xin_info)
27 XFree(_xin_info);
28
29 _xin_info = NULL;
30 if (XineramaQueryExtension(_ecore_x_disp, &event_base, &error_base))
31 {
32 _xin_info = XineramaQueryScreens(_ecore_x_disp, &_xin_scr_num);
33 if (_xin_info)
34 return _xin_scr_num;
35 }
36
37#endif /* ifdef ECORE_XINERAMA */
38 return 0;
39}
40
41EAPI Eina_Bool
42ecore_x_xinerama_screen_geometry_get(int screen,
43 int *x,
44 int *y,
45 int *w,
46 int *h)
47{
48 LOGFN(__FILE__, __LINE__, __FUNCTION__);
49#ifdef ECORE_XINERAMA
50 if (_xin_info)
51 {
52 int i;
53
54 for (i = 0; i < _xin_scr_num; i++)
55 {
56 if (_xin_info[i].screen_number == screen)
57 {
58 if (x)
59 *x = _xin_info[i].x_org;
60
61 if (y)
62 *y = _xin_info[i].y_org;
63
64 if (w)
65 *w = _xin_info[i].width;
66
67 if (h)
68 *h = _xin_info[i].height;
69
70 return EINA_TRUE;
71 }
72 }
73 }
74
75#endif /* ifdef ECORE_XINERAMA */
76 if (x)
77 *x = 0;
78
79 if (y)
80 *y = 0;
81
82 if (w)
83 *w = DisplayWidth(_ecore_x_disp, 0);
84
85 if (h)
86 *h = DisplayHeight(_ecore_x_disp, 0);
87
88 return EINA_FALSE;
89 screen = 0;
90}
91