Move cursor and drawable functions to their own file. DPMS: Add doc, init function, ecore_x_dpms_timeouts_get and rename ecore_x_dpms_capable. As my xorg does not have the dpms extension, someone else has to add its test in configure.in (like other extensions)
SVN revision: 28627
This commit is contained in:
parent
9fa235b6f1
commit
de95d8bd42
|
@ -6,9 +6,9 @@
|
||||||
#define _ECORE_X_H
|
#define _ECORE_X_H
|
||||||
|
|
||||||
#ifdef EAPI
|
#ifdef EAPI
|
||||||
#undef EAPI
|
# undef EAPI
|
||||||
#endif
|
#endif
|
||||||
#ifdef WIN32
|
#ifdef _MSC_VER
|
||||||
# ifdef BUILDING_DLL
|
# ifdef BUILDING_DLL
|
||||||
# define EAPI __declspec(dllexport)
|
# define EAPI __declspec(dllexport)
|
||||||
# else
|
# else
|
||||||
|
@ -1173,11 +1173,19 @@ EAPI int ecore_x_mouse_move_send(Ecore_X_Window win, int x, int y);
|
||||||
EAPI int ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b);
|
EAPI int ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b);
|
||||||
EAPI int ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b);
|
EAPI int ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b);
|
||||||
|
|
||||||
|
|
||||||
/* FIXME: these funcs need categorising */
|
|
||||||
EAPI void ecore_x_drawable_geometry_get(Ecore_X_Drawable d, int *x, int *y, int *w, int *h);
|
EAPI void ecore_x_drawable_geometry_get(Ecore_X_Drawable d, int *x, int *y, int *w, int *h);
|
||||||
EAPI int ecore_x_drawable_border_width_get(Ecore_X_Drawable d);
|
EAPI int ecore_x_drawable_border_width_get(Ecore_X_Drawable d);
|
||||||
EAPI int ecore_x_drawable_depth_get(Ecore_X_Drawable d);
|
EAPI int ecore_x_drawable_depth_get(Ecore_X_Drawable d);
|
||||||
|
|
||||||
|
EAPI int ecore_x_cursor_color_supported_get(void);
|
||||||
|
EAPI Ecore_X_Cursor ecore_x_cursor_new(Ecore_X_Window win, int *pixels, int w, int h, int hot_x, int hot_y);
|
||||||
|
EAPI void ecore_x_cursor_free(Ecore_X_Cursor c);
|
||||||
|
EAPI Ecore_X_Cursor ecore_x_cursor_shape_get(int shape);
|
||||||
|
EAPI void ecore_x_cursor_size_set(int size);
|
||||||
|
EAPI int ecore_x_cursor_size_get(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* FIXME: these funcs need categorising */
|
||||||
EAPI Ecore_X_Window *ecore_x_window_root_list(int *num_ret);
|
EAPI Ecore_X_Window *ecore_x_window_root_list(int *num_ret);
|
||||||
EAPI Ecore_X_Window ecore_x_window_root_first_get(void);
|
EAPI Ecore_X_Window ecore_x_window_root_first_get(void);
|
||||||
EAPI int ecore_x_window_manage(Ecore_X_Window win);
|
EAPI int ecore_x_window_manage(Ecore_X_Window win);
|
||||||
|
@ -1409,13 +1417,6 @@ EAPI void ecore_x_window_save_set_add(Ecore_X_Window win);
|
||||||
EAPI void ecore_x_window_save_set_del(Ecore_X_Window win);
|
EAPI void ecore_x_window_save_set_del(Ecore_X_Window win);
|
||||||
EAPI Ecore_X_Window *ecore_x_window_children_get(Ecore_X_Window win, int *num);
|
EAPI Ecore_X_Window *ecore_x_window_children_get(Ecore_X_Window win, int *num);
|
||||||
|
|
||||||
EAPI int ecore_x_cursor_color_supported_get(void);
|
|
||||||
EAPI Ecore_X_Cursor ecore_x_cursor_new(Ecore_X_Window win, int *pixels, int w, int h, int hot_x, int hot_y);
|
|
||||||
EAPI void ecore_x_cursor_free(Ecore_X_Cursor c);
|
|
||||||
EAPI Ecore_X_Cursor ecore_x_cursor_shape_get(int shape);
|
|
||||||
EAPI void ecore_x_cursor_size_set(int size);
|
|
||||||
EAPI int ecore_x_cursor_size_get(void);
|
|
||||||
|
|
||||||
|
|
||||||
EAPI int ecore_x_pointer_grab(Ecore_X_Window win);
|
EAPI int ecore_x_pointer_grab(Ecore_X_Window win);
|
||||||
EAPI int ecore_x_pointer_confine_grab(Ecore_X_Window win);
|
EAPI int ecore_x_pointer_confine_grab(Ecore_X_Window win);
|
||||||
|
@ -1531,6 +1532,20 @@ EAPI void ecore_x_damage_subtract(Ecore_X_Damage damage, Ecore_X_Re
|
||||||
|
|
||||||
EAPI int ecore_x_screen_is_composited(int screen);
|
EAPI int ecore_x_screen_is_composited(int screen);
|
||||||
|
|
||||||
|
EAPI int ecore_x_dpms_query(void);
|
||||||
|
EAPI int ecore_x_dpms_capable_get(void);
|
||||||
|
EAPI int ecore_x_dpms_enabled_get(void);
|
||||||
|
EAPI void ecore_x_dpms_enabled_set(int enabled);
|
||||||
|
EAPI void ecore_x_dpms_timeouts_get(unsigned int *standby, unsigned int *suspend, unsigned int *off);
|
||||||
|
EAPI int ecore_x_dpms_timeouts_set(unsigned int standby, unsigned int suspend, unsigned int off);
|
||||||
|
EAPI unsigned int ecore_x_dpms_timeout_standby_get();
|
||||||
|
EAPI unsigned int ecore_x_dpms_timeout_suspend_get();
|
||||||
|
EAPI unsigned int ecore_x_dpms_timeout_off_get();
|
||||||
|
EAPI void ecore_x_dpms_timeout_standby_set(unsigned int new_timeout);
|
||||||
|
EAPI void ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout);
|
||||||
|
EAPI void ecore_x_dpms_timeout_off_set(unsigned int new_timeout);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -52,6 +52,8 @@ ecore_x_gc.c \
|
||||||
ecore_x_xinerama.c \
|
ecore_x_xinerama.c \
|
||||||
ecore_x_screensaver.c \
|
ecore_x_screensaver.c \
|
||||||
ecore_x_dpms.c \
|
ecore_x_dpms.c \
|
||||||
|
ecore_x_drawable.c \
|
||||||
|
ecore_x_cursor.c \
|
||||||
ecore_x_private.h
|
ecore_x_private.h
|
||||||
|
|
||||||
libecore_x_la_LIBADD = \
|
libecore_x_la_LIBADD = \
|
||||||
|
@ -100,4 +102,6 @@ ecore_x_gc.c \
|
||||||
ecore_x_xinerama.c \
|
ecore_x_xinerama.c \
|
||||||
ecore_x_screensaver.c \
|
ecore_x_screensaver.c \
|
||||||
ecore_x_dpms.c \
|
ecore_x_dpms.c \
|
||||||
|
ecore_x_drawable.c \
|
||||||
|
ecore_x_cursor.c \
|
||||||
ecore_x_private.h
|
ecore_x_private.h
|
||||||
|
|
|
@ -444,6 +444,7 @@ ecore_x_init(const char *name)
|
||||||
_ecore_x_dnd_init();
|
_ecore_x_dnd_init();
|
||||||
_ecore_x_fixes_init();
|
_ecore_x_fixes_init();
|
||||||
_ecore_x_damage_init();
|
_ecore_x_damage_init();
|
||||||
|
_ecore_x_dpms_init();
|
||||||
|
|
||||||
_ecore_x_init_count++;
|
_ecore_x_init_count++;
|
||||||
|
|
||||||
|
@ -801,74 +802,6 @@ _ecore_x_event_filter_end(void *data __UNUSED__, void *loop_data)
|
||||||
/* FIXME: these funcs need categorising */
|
/* FIXME: these funcs need categorising */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the geometry of the given drawable.
|
|
||||||
* @param d The given drawable.
|
|
||||||
* @param x Pointer to an integer into which the X position is to be stored.
|
|
||||||
* @param y Pointer to an integer into which the Y position is to be stored.
|
|
||||||
* @param w Pointer to an integer into which the width is to be stored.
|
|
||||||
* @param h Pointer to an integer into which the height is to be stored.
|
|
||||||
*/
|
|
||||||
EAPI void
|
|
||||||
ecore_x_drawable_geometry_get(Ecore_X_Drawable d, int *x, int *y, int *w, int *h)
|
|
||||||
{
|
|
||||||
Window dummy_win;
|
|
||||||
int ret_x, ret_y;
|
|
||||||
unsigned int ret_w, ret_h, dummy_border, dummy_depth;
|
|
||||||
|
|
||||||
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &ret_x, &ret_y,
|
|
||||||
&ret_w, &ret_h, &dummy_border, &dummy_depth))
|
|
||||||
{
|
|
||||||
ret_x = 0;
|
|
||||||
ret_y = 0;
|
|
||||||
ret_w = 0;
|
|
||||||
ret_h = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x) *x = ret_x;
|
|
||||||
if (y) *y = ret_y;
|
|
||||||
if (w) *w = (int) ret_w;
|
|
||||||
if (h) *h = (int) ret_h;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the width of the border of the given drawable.
|
|
||||||
* @param d The given drawable.
|
|
||||||
* @return The border width of the given drawable.
|
|
||||||
*/
|
|
||||||
EAPI int
|
|
||||||
ecore_x_drawable_border_width_get(Ecore_X_Drawable d)
|
|
||||||
{
|
|
||||||
Window dummy_win;
|
|
||||||
int dummy_x, dummy_y;
|
|
||||||
unsigned int dummy_w, dummy_h, border_ret, dummy_depth;
|
|
||||||
|
|
||||||
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
|
|
||||||
&dummy_w, &dummy_h, &border_ret, &dummy_depth))
|
|
||||||
border_ret = 0;
|
|
||||||
|
|
||||||
return (int) border_ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the depth of the given drawable.
|
|
||||||
* @param d The given drawable.
|
|
||||||
* @return The depth of the given drawable.
|
|
||||||
*/
|
|
||||||
EAPI int
|
|
||||||
ecore_x_drawable_depth_get(Ecore_X_Drawable d)
|
|
||||||
{
|
|
||||||
Window dummy_win;
|
|
||||||
int dummy_x, dummy_y;
|
|
||||||
unsigned int dummy_w, dummy_h, dummy_border, depth_ret;
|
|
||||||
|
|
||||||
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
|
|
||||||
&dummy_w, &dummy_h, &dummy_border, &depth_ret))
|
|
||||||
depth_ret = 0;
|
|
||||||
|
|
||||||
return (int) depth_ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of all the root windows on the server.
|
* Get a list of all the root windows on the server.
|
||||||
*
|
*
|
||||||
|
@ -1155,233 +1088,6 @@ ecore_x_window_children_get(Ecore_X_Window win, int *num)
|
||||||
return windows;
|
return windows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EAPI int
|
|
||||||
ecore_x_cursor_color_supported_get(void)
|
|
||||||
{
|
|
||||||
return _ecore_x_xcursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI Ecore_X_Cursor
|
|
||||||
ecore_x_cursor_new(Ecore_X_Window win, int *pixels, int w, int h, int hot_x, int hot_y)
|
|
||||||
{
|
|
||||||
#ifdef ECORE_XCURSOR
|
|
||||||
if (_ecore_x_xcursor)
|
|
||||||
{
|
|
||||||
Cursor c;
|
|
||||||
XcursorImage *xci;
|
|
||||||
|
|
||||||
xci = XcursorImageCreate(w, h);
|
|
||||||
if (xci)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
xci->xhot = hot_x;
|
|
||||||
xci->yhot = hot_y;
|
|
||||||
xci->delay = 0;
|
|
||||||
for (i = 0; i < (w * h); i++)
|
|
||||||
{
|
|
||||||
// int r, g, b, a;
|
|
||||||
//
|
|
||||||
// a = (pixels[i] >> 24) & 0xff;
|
|
||||||
// r = (((pixels[i] >> 16) & 0xff) * a) / 0xff;
|
|
||||||
// g = (((pixels[i] >> 8 ) & 0xff) * a) / 0xff;
|
|
||||||
// b = (((pixels[i] ) & 0xff) * a) / 0xff;
|
|
||||||
xci->pixels[i] = pixels[i];
|
|
||||||
// (a << 24) | (r << 16) | (g << 8) | (b);
|
|
||||||
}
|
|
||||||
c = XcursorImageLoadCursor(_ecore_x_disp, xci);
|
|
||||||
XcursorImageDestroy(xci);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
XColor c1, c2;
|
|
||||||
Cursor c;
|
|
||||||
Pixmap pmap, mask;
|
|
||||||
GC gc;
|
|
||||||
XGCValues gcv;
|
|
||||||
XImage *xim;
|
|
||||||
unsigned int *pix;
|
|
||||||
int fr, fg, fb, br, bg, bb;
|
|
||||||
int brightest = 0;
|
|
||||||
int darkest = 255 * 3;
|
|
||||||
int x, y;
|
|
||||||
const int dither[2][2] =
|
|
||||||
{
|
|
||||||
{0, 2},
|
|
||||||
{3, 1}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
pmap = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
|
|
||||||
mask = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
|
|
||||||
xim = XCreateImage(_ecore_x_disp,
|
|
||||||
DefaultVisual(_ecore_x_disp, 0),
|
|
||||||
1, ZPixmap, 0, NULL, w, h, 32, 0);
|
|
||||||
xim->data = malloc(xim->bytes_per_line * xim->height);
|
|
||||||
|
|
||||||
fr = 0x00; fg = 0x00; fb = 0x00;
|
|
||||||
br = 0xff; bg = 0xff; bb = 0xff;
|
|
||||||
pix = (unsigned int*)pixels;
|
|
||||||
for (y = 0; y < h; y++)
|
|
||||||
{
|
|
||||||
for (x = 0; x < w; x++)
|
|
||||||
{
|
|
||||||
int r, g, b, a;
|
|
||||||
|
|
||||||
a = (pix[0] >> 24) & 0xff;
|
|
||||||
r = (pix[0] >> 16) & 0xff;
|
|
||||||
g = (pix[0] >> 8 ) & 0xff;
|
|
||||||
b = (pix[0] ) & 0xff;
|
|
||||||
if (a > 0)
|
|
||||||
{
|
|
||||||
if ((r + g + b) > brightest)
|
|
||||||
{
|
|
||||||
brightest = r + g + b;
|
|
||||||
br = r;
|
|
||||||
bg = g;
|
|
||||||
bb = b;
|
|
||||||
}
|
|
||||||
if ((r + g + b) < darkest)
|
|
||||||
{
|
|
||||||
darkest = r + g + b;
|
|
||||||
fr = r;
|
|
||||||
fg = g;
|
|
||||||
fb = b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pix++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pix = (unsigned int*)pixels;
|
|
||||||
for (y = 0; y < h; y++)
|
|
||||||
{
|
|
||||||
for (x = 0; x < w; x++)
|
|
||||||
{
|
|
||||||
int v;
|
|
||||||
int r, g, b;
|
|
||||||
int d1, d2;
|
|
||||||
|
|
||||||
r = (pix[0] >> 16) & 0xff;
|
|
||||||
g = (pix[0] >> 8 ) & 0xff;
|
|
||||||
b = (pix[0] ) & 0xff;
|
|
||||||
d1 =
|
|
||||||
((r - fr) * (r - fr)) +
|
|
||||||
((g - fg) * (g - fg)) +
|
|
||||||
((b - fb) * (b - fb));
|
|
||||||
d2 =
|
|
||||||
((r - br) * (r - br)) +
|
|
||||||
((g - bg) * (g - bg)) +
|
|
||||||
((b - bb) * (b - bb));
|
|
||||||
if (d1 + d2)
|
|
||||||
{
|
|
||||||
v = (((d2 * 255) / (d1 + d2)) * 5) / 256;
|
|
||||||
if (v > dither[x & 0x1][y & 0x1]) v = 1;
|
|
||||||
else v = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v = 0;
|
|
||||||
}
|
|
||||||
XPutPixel(xim, x, y, v);
|
|
||||||
pix++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gc = XCreateGC(_ecore_x_disp, pmap, 0, &gcv);
|
|
||||||
XPutImage(_ecore_x_disp, pmap, gc, xim, 0, 0, 0, 0, w, h);
|
|
||||||
XFreeGC(_ecore_x_disp, gc);
|
|
||||||
|
|
||||||
pix = (unsigned int*)pixels;
|
|
||||||
for (y = 0; y < h; y++)
|
|
||||||
{
|
|
||||||
for (x = 0; x < w; x++)
|
|
||||||
{
|
|
||||||
int v;
|
|
||||||
|
|
||||||
v = (((pix[0] >> 24) & 0xff) * 5) / 256;
|
|
||||||
if (v > dither[x & 0x1][y & 0x1]) v = 1;
|
|
||||||
else v = 0;
|
|
||||||
XPutPixel(xim, x, y, v);
|
|
||||||
pix++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gc = XCreateGC(_ecore_x_disp, mask, 0, &gcv);
|
|
||||||
XPutImage(_ecore_x_disp, mask, gc, xim, 0, 0, 0, 0, w, h);
|
|
||||||
XFreeGC(_ecore_x_disp, gc);
|
|
||||||
|
|
||||||
free(xim->data);
|
|
||||||
xim->data = NULL;
|
|
||||||
XDestroyImage(xim);
|
|
||||||
|
|
||||||
c1.pixel = 0;
|
|
||||||
c1.red = fr << 8 | fr;
|
|
||||||
c1.green = fg << 8 | fg;
|
|
||||||
c1.blue = fb << 8 | fb;
|
|
||||||
c1.flags = DoRed | DoGreen | DoBlue;
|
|
||||||
|
|
||||||
c2.pixel = 0;
|
|
||||||
c2.red = br << 8 | br;
|
|
||||||
c2.green = bg << 8 | bg;
|
|
||||||
c2.blue = bb << 8 | bb;
|
|
||||||
c2.flags = DoRed | DoGreen | DoBlue;
|
|
||||||
|
|
||||||
c = XCreatePixmapCursor(_ecore_x_disp,
|
|
||||||
pmap, mask,
|
|
||||||
&c1, &c2,
|
|
||||||
hot_x, hot_y);
|
|
||||||
XFreePixmap(_ecore_x_disp, pmap);
|
|
||||||
XFreePixmap(_ecore_x_disp, mask);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI void
|
|
||||||
ecore_x_cursor_free(Ecore_X_Cursor c)
|
|
||||||
{
|
|
||||||
XFreeCursor(_ecore_x_disp, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the cursor for the given shape.
|
|
||||||
* Note that the return value must not be freed with
|
|
||||||
* ecore_x_cursor_free()!
|
|
||||||
*/
|
|
||||||
EAPI Ecore_X_Cursor
|
|
||||||
ecore_x_cursor_shape_get(int shape)
|
|
||||||
{
|
|
||||||
/* Shapes are defined in Ecore_X_Cursor.h */
|
|
||||||
return XCreateFontCursor(_ecore_x_disp, shape);
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI void
|
|
||||||
ecore_x_cursor_size_set(int size)
|
|
||||||
{
|
|
||||||
#ifdef ECORE_XCURSOR
|
|
||||||
XcursorSetDefaultSize(_ecore_x_disp, size);
|
|
||||||
#else
|
|
||||||
size = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI int
|
|
||||||
ecore_x_cursor_size_get(void)
|
|
||||||
{
|
|
||||||
#ifdef ECORE_XCURSOR
|
|
||||||
return XcursorGetDefaultSize(_ecore_x_disp);
|
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI int
|
EAPI int
|
||||||
ecore_x_pointer_grab(Ecore_X_Window win)
|
ecore_x_pointer_grab(Ecore_X_Window win)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,223 @@
|
||||||
|
#include "ecore_x_private.h"
|
||||||
|
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
ecore_x_cursor_color_supported_get(void)
|
||||||
|
{
|
||||||
|
return _ecore_x_xcursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Ecore_X_Cursor
|
||||||
|
ecore_x_cursor_new(Ecore_X_Window win, int *pixels, int w, int h, int hot_x, int hot_y)
|
||||||
|
{
|
||||||
|
#ifdef ECORE_XCURSOR
|
||||||
|
if (_ecore_x_xcursor)
|
||||||
|
{
|
||||||
|
Cursor c;
|
||||||
|
XcursorImage *xci;
|
||||||
|
|
||||||
|
xci = XcursorImageCreate(w, h);
|
||||||
|
if (xci)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
xci->xhot = hot_x;
|
||||||
|
xci->yhot = hot_y;
|
||||||
|
xci->delay = 0;
|
||||||
|
for (i = 0; i < (w * h); i++)
|
||||||
|
{
|
||||||
|
// int r, g, b, a;
|
||||||
|
//
|
||||||
|
// a = (pixels[i] >> 24) & 0xff;
|
||||||
|
// r = (((pixels[i] >> 16) & 0xff) * a) / 0xff;
|
||||||
|
// g = (((pixels[i] >> 8 ) & 0xff) * a) / 0xff;
|
||||||
|
// b = (((pixels[i] ) & 0xff) * a) / 0xff;
|
||||||
|
xci->pixels[i] = pixels[i];
|
||||||
|
// (a << 24) | (r << 16) | (g << 8) | (b);
|
||||||
|
}
|
||||||
|
c = XcursorImageLoadCursor(_ecore_x_disp, xci);
|
||||||
|
XcursorImageDestroy(xci);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
XColor c1, c2;
|
||||||
|
Cursor c;
|
||||||
|
Pixmap pmap, mask;
|
||||||
|
GC gc;
|
||||||
|
XGCValues gcv;
|
||||||
|
XImage *xim;
|
||||||
|
unsigned int *pix;
|
||||||
|
int fr, fg, fb, br, bg, bb;
|
||||||
|
int brightest = 0;
|
||||||
|
int darkest = 255 * 3;
|
||||||
|
int x, y;
|
||||||
|
const int dither[2][2] =
|
||||||
|
{
|
||||||
|
{0, 2},
|
||||||
|
{3, 1}
|
||||||
|
};
|
||||||
|
|
||||||
|
pmap = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
|
||||||
|
mask = XCreatePixmap(_ecore_x_disp, win, w, h, 1);
|
||||||
|
xim = XCreateImage(_ecore_x_disp,
|
||||||
|
DefaultVisual(_ecore_x_disp, 0),
|
||||||
|
1, ZPixmap, 0, NULL, w, h, 32, 0);
|
||||||
|
xim->data = malloc(xim->bytes_per_line * xim->height);
|
||||||
|
|
||||||
|
fr = 0x00; fg = 0x00; fb = 0x00;
|
||||||
|
br = 0xff; bg = 0xff; bb = 0xff;
|
||||||
|
pix = (unsigned int*)pixels;
|
||||||
|
for (y = 0; y < h; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < w; x++)
|
||||||
|
{
|
||||||
|
int r, g, b, a;
|
||||||
|
|
||||||
|
a = (pix[0] >> 24) & 0xff;
|
||||||
|
r = (pix[0] >> 16) & 0xff;
|
||||||
|
g = (pix[0] >> 8 ) & 0xff;
|
||||||
|
b = (pix[0] ) & 0xff;
|
||||||
|
if (a > 0)
|
||||||
|
{
|
||||||
|
if ((r + g + b) > brightest)
|
||||||
|
{
|
||||||
|
brightest = r + g + b;
|
||||||
|
br = r;
|
||||||
|
bg = g;
|
||||||
|
bb = b;
|
||||||
|
}
|
||||||
|
if ((r + g + b) < darkest)
|
||||||
|
{
|
||||||
|
darkest = r + g + b;
|
||||||
|
fr = r;
|
||||||
|
fg = g;
|
||||||
|
fb = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pix++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pix = (unsigned int*)pixels;
|
||||||
|
for (y = 0; y < h; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < w; x++)
|
||||||
|
{
|
||||||
|
int v;
|
||||||
|
int r, g, b;
|
||||||
|
int d1, d2;
|
||||||
|
|
||||||
|
r = (pix[0] >> 16) & 0xff;
|
||||||
|
g = (pix[0] >> 8 ) & 0xff;
|
||||||
|
b = (pix[0] ) & 0xff;
|
||||||
|
d1 =
|
||||||
|
((r - fr) * (r - fr)) +
|
||||||
|
((g - fg) * (g - fg)) +
|
||||||
|
((b - fb) * (b - fb));
|
||||||
|
d2 =
|
||||||
|
((r - br) * (r - br)) +
|
||||||
|
((g - bg) * (g - bg)) +
|
||||||
|
((b - bb) * (b - bb));
|
||||||
|
if (d1 + d2)
|
||||||
|
{
|
||||||
|
v = (((d2 * 255) / (d1 + d2)) * 5) / 256;
|
||||||
|
if (v > dither[x & 0x1][y & 0x1]) v = 1;
|
||||||
|
else v = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v = 0;
|
||||||
|
}
|
||||||
|
XPutPixel(xim, x, y, v);
|
||||||
|
pix++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gc = XCreateGC(_ecore_x_disp, pmap, 0, &gcv);
|
||||||
|
XPutImage(_ecore_x_disp, pmap, gc, xim, 0, 0, 0, 0, w, h);
|
||||||
|
XFreeGC(_ecore_x_disp, gc);
|
||||||
|
|
||||||
|
pix = (unsigned int*)pixels;
|
||||||
|
for (y = 0; y < h; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < w; x++)
|
||||||
|
{
|
||||||
|
int v;
|
||||||
|
|
||||||
|
v = (((pix[0] >> 24) & 0xff) * 5) / 256;
|
||||||
|
if (v > dither[x & 0x1][y & 0x1]) v = 1;
|
||||||
|
else v = 0;
|
||||||
|
XPutPixel(xim, x, y, v);
|
||||||
|
pix++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gc = XCreateGC(_ecore_x_disp, mask, 0, &gcv);
|
||||||
|
XPutImage(_ecore_x_disp, mask, gc, xim, 0, 0, 0, 0, w, h);
|
||||||
|
XFreeGC(_ecore_x_disp, gc);
|
||||||
|
|
||||||
|
free(xim->data);
|
||||||
|
xim->data = NULL;
|
||||||
|
XDestroyImage(xim);
|
||||||
|
|
||||||
|
c1.pixel = 0;
|
||||||
|
c1.red = fr << 8 | fr;
|
||||||
|
c1.green = fg << 8 | fg;
|
||||||
|
c1.blue = fb << 8 | fb;
|
||||||
|
c1.flags = DoRed | DoGreen | DoBlue;
|
||||||
|
|
||||||
|
c2.pixel = 0;
|
||||||
|
c2.red = br << 8 | br;
|
||||||
|
c2.green = bg << 8 | bg;
|
||||||
|
c2.blue = bb << 8 | bb;
|
||||||
|
c2.flags = DoRed | DoGreen | DoBlue;
|
||||||
|
|
||||||
|
c = XCreatePixmapCursor(_ecore_x_disp,
|
||||||
|
pmap, mask,
|
||||||
|
&c1, &c2,
|
||||||
|
hot_x, hot_y);
|
||||||
|
XFreePixmap(_ecore_x_disp, pmap);
|
||||||
|
XFreePixmap(_ecore_x_disp, mask);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_cursor_free(Ecore_X_Cursor c)
|
||||||
|
{
|
||||||
|
XFreeCursor(_ecore_x_disp, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the cursor for the given shape.
|
||||||
|
* Note that the return value must not be freed with
|
||||||
|
* ecore_x_cursor_free()!
|
||||||
|
*/
|
||||||
|
EAPI Ecore_X_Cursor
|
||||||
|
ecore_x_cursor_shape_get(int shape)
|
||||||
|
{
|
||||||
|
/* Shapes are defined in Ecore_X_Cursor.h */
|
||||||
|
return XCreateFontCursor(_ecore_x_disp, shape);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_cursor_size_set(int size)
|
||||||
|
{
|
||||||
|
#ifdef ECORE_XCURSOR
|
||||||
|
XcursorSetDefaultSize(_ecore_x_disp, size);
|
||||||
|
#else
|
||||||
|
size = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
ecore_x_cursor_size_get(void)
|
||||||
|
{
|
||||||
|
#ifdef ECORE_XCURSOR
|
||||||
|
return XcursorGetDefaultSize(_ecore_x_disp);
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -1,22 +1,69 @@
|
||||||
/*
|
/*
|
||||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* DPMS code
|
|
||||||
*/
|
|
||||||
#include "Ecore.h"
|
|
||||||
#include "ecore_x_private.h"
|
|
||||||
#include "Ecore_X.h"
|
|
||||||
#include "Ecore_X_Atoms.h"
|
|
||||||
|
|
||||||
/* Are we capable */
|
#include "ecore_x_private.h"
|
||||||
|
|
||||||
|
|
||||||
|
static int _dpms_available;
|
||||||
|
#ifdef ECORE_XDPMS
|
||||||
|
static int _dpms_major, _dpms_minor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_ecore_x_dpms_init(void)
|
||||||
|
{
|
||||||
|
#ifdef ECORE_XDPMS
|
||||||
|
_dpms_major = 1;
|
||||||
|
_dpms_minor = 0;
|
||||||
|
|
||||||
|
if (DpmsGetVersion(_ecore_x_disp, &_dpms_major, &_dpms_minor))
|
||||||
|
_dpms_available = 1;
|
||||||
|
else
|
||||||
|
_dpms_available = 0;
|
||||||
|
#else
|
||||||
|
_dpms_available = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup Ecore_X_DPMS_Group X DPMS Extension Functions
|
||||||
|
*
|
||||||
|
* Functions related to the X DPMS extension.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the X DPMS extension is available on the server.
|
||||||
|
* @return @c 1 if the X DPMS extension is available, @c 0 otherwise.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI int
|
EAPI int
|
||||||
ecore_x_dpms_capable(void)
|
ecore_x_dpms_query(void)
|
||||||
|
{
|
||||||
|
return _dpms_available;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the X server is capable of DPMS.
|
||||||
|
* @return @c 1 if the X server is capable of DPMS, @c 0 otherwise.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
|
EAPI int
|
||||||
|
ecore_x_dpms_capable_get(void)
|
||||||
{
|
{
|
||||||
return DPMSCapable(_ecore_x_disp);
|
return DPMSCapable(_ecore_x_disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Are we enabled */
|
|
||||||
|
/**
|
||||||
|
* Checks the DPMS state of the display.
|
||||||
|
* @return @c 1 if DPMS is enabled, @c 0 otherwise.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI int
|
EAPI int
|
||||||
ecore_x_dpms_enabled_get(void)
|
ecore_x_dpms_enabled_get(void)
|
||||||
{
|
{
|
||||||
|
@ -27,7 +74,12 @@ ecore_x_dpms_enabled_get(void)
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable/Disable DPMS */
|
|
||||||
|
/**
|
||||||
|
* Sets the DPMS state of the display.
|
||||||
|
* @param enabled @c 0 to disable DPMS characteristics of the server, enable it otherwise.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_dpms_enabled_set(int enabled)
|
ecore_x_dpms_enabled_set(int enabled)
|
||||||
{
|
{
|
||||||
|
@ -37,9 +89,30 @@ ecore_x_dpms_enabled_set(int enabled)
|
||||||
DPMSDisable(_ecore_x_disp);
|
DPMSDisable(_ecore_x_disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set all timeouts to known values */
|
|
||||||
|
/**
|
||||||
|
* Gets the timeouts. The values are in unit of seconds.
|
||||||
|
* @param standby Amount of time of inactivity before standby mode will be invoked.
|
||||||
|
* @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
|
||||||
|
* @param off Amount of time of inactivity before the monitor is shut off.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
ecore_x_dpms_timeouts_get(unsigned int *standby, unsigned int *suspend, unsigned int *off)
|
||||||
|
{
|
||||||
|
DPMSGetTimeouts(_ecore_x_disp, (unsigned short *)standby, (unsigned short *)suspend, (unsigned short *)off);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the timeouts. The values are in unit of seconds.
|
||||||
|
* @param standby Amount of time of inactivity before standby mode will be invoked.
|
||||||
|
* @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
|
||||||
|
* @param off Amount of time of inactivity before the monitor is shut off.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI int
|
EAPI int
|
||||||
ecore_x_dpms_timeouts_set(int standby, int suspend, int off)
|
ecore_x_dpms_timeouts_set(unsigned int standby, unsigned int suspend, unsigned int off)
|
||||||
{
|
{
|
||||||
return DPMSSetTimeouts(_ecore_x_disp,
|
return DPMSSetTimeouts(_ecore_x_disp,
|
||||||
standby,
|
standby,
|
||||||
|
@ -47,8 +120,13 @@ ecore_x_dpms_timeouts_set(int standby, int suspend, int off)
|
||||||
off);
|
off);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get/Set Timeouts */
|
|
||||||
EAPI int
|
/**
|
||||||
|
* Returns the amount of time of inactivity before standby mode is invoked.
|
||||||
|
* @return The standby timeout value.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
|
EAPI unsigned int
|
||||||
ecore_x_dpms_timeout_standby_get()
|
ecore_x_dpms_timeout_standby_get()
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
@ -57,7 +135,14 @@ ecore_x_dpms_timeout_standby_get()
|
||||||
return standby;
|
return standby;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
|
||||||
|
/**
|
||||||
|
* Returns the amount of time of inactivity before the second level of
|
||||||
|
* power saving is invoked.
|
||||||
|
* @return The suspend timeout value.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
|
EAPI unsigned int
|
||||||
ecore_x_dpms_timeout_suspend_get()
|
ecore_x_dpms_timeout_suspend_get()
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
@ -66,7 +151,14 @@ ecore_x_dpms_timeout_suspend_get()
|
||||||
return suspend;
|
return suspend;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
|
||||||
|
/**
|
||||||
|
* Returns the amount of time of inactivity before the third and final
|
||||||
|
* level of power saving is invoked.
|
||||||
|
* @return The off timeout value.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
|
EAPI unsigned int
|
||||||
ecore_x_dpms_timeout_off_get()
|
ecore_x_dpms_timeout_off_get()
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
@ -75,8 +167,14 @@ ecore_x_dpms_timeout_off_get()
|
||||||
return off;
|
return off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the standby timeout (in unit of seconds).
|
||||||
|
* @param new_standby Amount of time of inactivity before standby mode will be invoked.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_dpms_timeout_standby_set(int new_timeout)
|
ecore_x_dpms_timeout_standby_set(unsigned int new_timeout)
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
|
||||||
|
@ -87,8 +185,14 @@ ecore_x_dpms_timeout_standby_set(int new_timeout)
|
||||||
off);
|
off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the suspend timeout (in unit of seconds).
|
||||||
|
* @param suspend Amount of time of inactivity before the screen is placed into suspend mode.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_dpms_timeout_suspend_set(int new_timeout)
|
ecore_x_dpms_timeout_suspend_set(unsigned int new_timeout)
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
|
||||||
|
@ -99,8 +203,14 @@ ecore_x_dpms_timeout_suspend_set(int new_timeout)
|
||||||
off);
|
off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the off timeout (in unit of seconds).
|
||||||
|
* @param off Amount of time of inactivity before the monitor is shut off.
|
||||||
|
* @ingroup Ecore_X_DPMS_Group
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_dpms_timeout_off_set(int new_timeout)
|
ecore_x_dpms_timeout_off_set(unsigned int new_timeout)
|
||||||
{
|
{
|
||||||
unsigned short standby, suspend, off;
|
unsigned short standby, suspend, off;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
#include "ecore_x_private.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the geometry of the given drawable.
|
||||||
|
* @param d The given drawable.
|
||||||
|
* @param x Pointer to an integer into which the X position is to be stored.
|
||||||
|
* @param y Pointer to an integer into which the Y position is to be stored.
|
||||||
|
* @param w Pointer to an integer into which the width is to be stored.
|
||||||
|
* @param h Pointer to an integer into which the height is to be stored.
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
ecore_x_drawable_geometry_get(Ecore_X_Drawable d, int *x, int *y, int *w, int *h)
|
||||||
|
{
|
||||||
|
Window dummy_win;
|
||||||
|
int ret_x, ret_y;
|
||||||
|
unsigned int ret_w, ret_h, dummy_border, dummy_depth;
|
||||||
|
|
||||||
|
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &ret_x, &ret_y,
|
||||||
|
&ret_w, &ret_h, &dummy_border, &dummy_depth))
|
||||||
|
{
|
||||||
|
ret_x = 0;
|
||||||
|
ret_y = 0;
|
||||||
|
ret_w = 0;
|
||||||
|
ret_h = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x) *x = ret_x;
|
||||||
|
if (y) *y = ret_y;
|
||||||
|
if (w) *w = (int) ret_w;
|
||||||
|
if (h) *h = (int) ret_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the width of the border of the given drawable.
|
||||||
|
* @param d The given drawable.
|
||||||
|
* @return The border width of the given drawable.
|
||||||
|
*/
|
||||||
|
EAPI int
|
||||||
|
ecore_x_drawable_border_width_get(Ecore_X_Drawable d)
|
||||||
|
{
|
||||||
|
Window dummy_win;
|
||||||
|
int dummy_x, dummy_y;
|
||||||
|
unsigned int dummy_w, dummy_h, border_ret, dummy_depth;
|
||||||
|
|
||||||
|
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
|
||||||
|
&dummy_w, &dummy_h, &border_ret, &dummy_depth))
|
||||||
|
border_ret = 0;
|
||||||
|
|
||||||
|
return (int) border_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the depth of the given drawable.
|
||||||
|
* @param d The given drawable.
|
||||||
|
* @return The depth of the given drawable.
|
||||||
|
*/
|
||||||
|
EAPI int
|
||||||
|
ecore_x_drawable_depth_get(Ecore_X_Drawable d)
|
||||||
|
{
|
||||||
|
Window dummy_win;
|
||||||
|
int dummy_x, dummy_y;
|
||||||
|
unsigned int dummy_w, dummy_h, dummy_border, depth_ret;
|
||||||
|
|
||||||
|
if (!XGetGeometry(_ecore_x_disp, d, &dummy_win, &dummy_x, &dummy_y,
|
||||||
|
&dummy_w, &dummy_h, &dummy_border, &depth_ret))
|
||||||
|
depth_ret = 0;
|
||||||
|
|
||||||
|
return (int) depth_ret;
|
||||||
|
}
|
|
@ -43,6 +43,9 @@
|
||||||
#ifdef ECORE_XDAMAGE
|
#ifdef ECORE_XDAMAGE
|
||||||
#include <X11/extensions/Xdamage.h>
|
#include <X11/extensions/Xdamage.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef ECORE_XDPMS
|
||||||
|
#include <X11/extensions/dpms.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ecore_private.h"
|
#include "ecore_private.h"
|
||||||
#include "Ecore_X.h"
|
#include "Ecore_X.h"
|
||||||
|
@ -235,9 +238,10 @@ Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
|
||||||
int _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data);
|
int _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data);
|
||||||
int _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data);
|
int _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data);
|
||||||
|
|
||||||
/* Fixes * Damage */
|
/* Fixes * Damage * DPMS */
|
||||||
void _ecore_x_fixes_init(void);
|
void _ecore_x_fixes_init(void);
|
||||||
void _ecore_x_damage_init(void);
|
void _ecore_x_damage_init(void);
|
||||||
|
void _ecore_x_dpms_init(void);
|
||||||
|
|
||||||
/* from sync */
|
/* from sync */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue