forked from enlightenment/efl
minimal xscreensaver wrapping so it can be used for lock
SVN revision: 20934
This commit is contained in:
parent
2e0b4a37e8
commit
a9e37e3a66
|
@ -396,6 +396,40 @@ if test "x$have_ecore_x" = "xyes"; then
|
|||
|
||||
AC_SUBST(Xrandr_cflags)
|
||||
AC_SUBST(Xrandr_libs)
|
||||
|
||||
Xss_libs=""
|
||||
Xss_cflags=""
|
||||
use_Xss="no"
|
||||
PCFLAGS=$CFLAGS
|
||||
CFLAGS=$x_cflags" "$x_includes
|
||||
AC_CHECK_HEADER(X11/extensions/scrnsaver.h,
|
||||
[
|
||||
AC_CHECK_LIB(Xss, XScreenSaverSelectInput,
|
||||
[
|
||||
AC_DEFINE(ECORE_XSS, 1, [Build support for Xss])
|
||||
Xss_cflags=""
|
||||
Xss_libs="-lXss"
|
||||
use_Xss="yes"
|
||||
], [
|
||||
Xss_cflags=""
|
||||
Xss_libs=""
|
||||
use_Xss="no"
|
||||
], [
|
||||
$x_libs $x_ldflags
|
||||
]
|
||||
)
|
||||
], [
|
||||
Xss_cflags=""
|
||||
Xss_libs=""
|
||||
use_Xss="no"
|
||||
], [
|
||||
#include <X11/Xlib.h>
|
||||
]
|
||||
)
|
||||
CFLAGS=$PCFLAGS
|
||||
|
||||
AC_SUBST(Xss_cflags)
|
||||
AC_SUBST(Xss_libs)
|
||||
fi
|
||||
|
||||
AC_SUBST(ecore_x_cflags)
|
||||
|
@ -1153,7 +1187,7 @@ echo
|
|||
echo " Ecore_Job....................: $have_ecore_job"
|
||||
echo " Ecore_Con....................: $have_ecore_con (OpenSSL: $use_openssl)"
|
||||
echo " Ecore_Txt....................: $have_ecore_txt"
|
||||
echo " Ecore_X......................: $have_ecore_x (Xcursor: $use_Xcursor) (Xprint: $use_Xprint) (Xinerama: $use_Xinerama) (Xrandr: $use_Xrandr)"
|
||||
echo " Ecore_X......................: $have_ecore_x (Xcursor: $use_Xcursor) (Xprint: $use_Xprint) (Xinerama: $use_Xinerama) (Xrandr: $use_Xrandr) (Xscreensaver: $use_Xss)"
|
||||
echo " Ecore_FB.....................: $have_ecore_fb"
|
||||
echo " Ecore_DFB....................: $have_ecore_dfb"
|
||||
echo " Ecore_Evas...................: $have_ecore_evas"
|
||||
|
|
|
@ -254,6 +254,7 @@ typedef struct _Ecore_X_Event_Xdnd_Drop Ecore_X_Event_Xdnd_Drop;
|
|||
typedef struct _Ecore_X_Event_Xdnd_Finished Ecore_X_Event_Xdnd_Finished;
|
||||
typedef struct _Ecore_X_Event_Client_Message Ecore_X_Event_Client_Message;
|
||||
typedef struct _Ecore_X_Event_Window_Shape Ecore_X_Event_Window_Shape;
|
||||
typedef struct _Ecore_X_Event_Screensaver_Notify Ecore_X_Event_Screensaver_Notify;
|
||||
typedef struct _Ecore_X_Event_Sync_Counter Ecore_X_Event_Sync_Counter;
|
||||
typedef struct _Ecore_X_Event_Sync_Alarm Ecore_X_Event_Sync_Alarm;
|
||||
typedef struct _Ecore_X_Event_Screen_Change Ecore_X_Event_Screen_Change;
|
||||
|
@ -644,6 +645,13 @@ struct _Ecore_X_Event_Window_Shape
|
|||
Ecore_X_Time time;
|
||||
};
|
||||
|
||||
struct _Ecore_X_Event_Screensaver_Notify
|
||||
{
|
||||
Ecore_X_Window win;
|
||||
int on;
|
||||
Ecore_X_Time time;
|
||||
};
|
||||
|
||||
struct _Ecore_X_Event_Sync_Counter
|
||||
{
|
||||
Ecore_X_Time time;
|
||||
|
@ -798,6 +806,7 @@ EAPI extern int ECORE_X_EVENT_SELECTION_REQUEST;
|
|||
EAPI extern int ECORE_X_EVENT_SELECTION_NOTIFY;
|
||||
EAPI extern int ECORE_X_EVENT_CLIENT_MESSAGE;
|
||||
EAPI extern int ECORE_X_EVENT_WINDOW_SHAPE;
|
||||
EAPI extern int ECORE_X_EVENT_SCREENSAVER_NOTIFY;
|
||||
EAPI extern int ECORE_X_EVENT_SYNC_COUNTER;
|
||||
EAPI extern int ECORE_X_EVENT_SYNC_ALARM;
|
||||
EAPI extern int ECORE_X_EVENT_SCREEN_CHANGE;
|
||||
|
@ -1338,7 +1347,12 @@ EAPI void ecore_x_e_frame_size_set(Ecore_X_Window win, int fl, in
|
|||
|
||||
EAPI int ecore_x_xinerama_screen_count_get(void);
|
||||
EAPI int ecore_x_xinerama_screen_geometry_get(int screen, int *x, int *y, int *w, int *h);
|
||||
|
||||
|
||||
EAPI int ecore_x_screensaver_event_avaialable_get(void);
|
||||
EAPI void ecore_x_screensaver_timeout_set(double timeout);
|
||||
EAPI double ecore_x_screensaver_timeout_get(void);
|
||||
EAPI void ecore_x_screensaver_event_listen_set(int on);
|
||||
|
||||
/* FIXME: these funcs need categorising */
|
||||
|
||||
typedef struct _Ecore_X_Window_Attributes
|
||||
|
|
|
@ -5,6 +5,7 @@ INCLUDES = \
|
|||
@Xprint_cflags@ \
|
||||
@Xinerama_cflags@ \
|
||||
@Xrandr_cflags@ \
|
||||
@Xss_cflags@ \
|
||||
@x_cflags@ \
|
||||
-I$(top_srcdir)/src/lib/ecore \
|
||||
-I$(top_srcdir)/src/lib/ecore_txt \
|
||||
|
@ -44,6 +45,7 @@ ecore_x_window_shape.c \
|
|||
ecore_x_pixmap.c \
|
||||
ecore_x_gc.c \
|
||||
ecore_x_xinerama.c \
|
||||
ecore_x_screensaver.c \
|
||||
ecore_x_private.h
|
||||
|
||||
libecore_x_la_LIBADD = \
|
||||
|
@ -51,6 +53,7 @@ libecore_x_la_LIBADD = \
|
|||
@Xprint_libs@ \
|
||||
@Xinerama_libs@ \
|
||||
@Xrandr_libs@ \
|
||||
@Xss_libs@ \
|
||||
@x_ldflags@ \
|
||||
@x_libs@ \
|
||||
$(top_builddir)/src/lib/ecore/libecore.la \
|
||||
|
@ -76,10 +79,14 @@ ecore_x_error.c \
|
|||
ecore_x_events.c \
|
||||
ecore_x_icccm.c \
|
||||
ecore_x_netwm.c \
|
||||
ecore_x_mwm.c \
|
||||
ecore_x_e.c \
|
||||
ecore_x_selection.c \
|
||||
ecore_x_window.c \
|
||||
ecore_x_window_prop.c \
|
||||
ecore_x_window_shape.c \
|
||||
ecore_x_pixmap.c \
|
||||
ecore_x_gc.c \
|
||||
ecore_x_xinerama.c \
|
||||
ecore_x_screensaver.c \
|
||||
ecore_x_private.h
|
||||
|
|
|
@ -17,6 +17,7 @@ static void _ecore_x_event_filter_end(void *data, void *loop_data);
|
|||
static Ecore_Fd_Handler *_ecore_x_fd_handler_handle = NULL;
|
||||
static Ecore_Event_Filter *_ecore_x_filter_handler = NULL;
|
||||
static int _ecore_x_event_shape_id = 0;
|
||||
static int _ecore_x_event_screensaver_id = 0;
|
||||
static int _ecore_x_event_sync_id = 0;
|
||||
#ifdef ECORE_XRANDR
|
||||
static int _ecore_x_event_randr_id = 0;
|
||||
|
@ -95,6 +96,7 @@ EAPI int ECORE_X_EVENT_SELECTION_REQUEST = 0;
|
|||
EAPI int ECORE_X_EVENT_SELECTION_NOTIFY = 0;
|
||||
EAPI int ECORE_X_EVENT_CLIENT_MESSAGE = 0;
|
||||
EAPI int ECORE_X_EVENT_WINDOW_SHAPE = 0;
|
||||
EAPI int ECORE_X_EVENT_SCREENSAVER_NOTIFY = 0;
|
||||
EAPI int ECORE_X_EVENT_SYNC_COUNTER = 0;
|
||||
EAPI int ECORE_X_EVENT_SYNC_ALARM = 0;
|
||||
EAPI int ECORE_X_EVENT_SCREEN_CHANGE = 0;
|
||||
|
@ -150,6 +152,8 @@ ecore_x_init(const char *name)
|
|||
{
|
||||
int shape_base = 0;
|
||||
int shape_err_base = 0;
|
||||
int screensaver_base = 0;
|
||||
int screensaver_err_base = 0;
|
||||
int sync_base = 0;
|
||||
int sync_err_base = 0;
|
||||
#ifdef ECORE_XRANDR
|
||||
|
@ -171,6 +175,12 @@ ecore_x_init(const char *name)
|
|||
_ecore_x_event_shape_id = shape_base + ShapeNotify;
|
||||
if (_ecore_x_event_shape_id >= LASTEvent)
|
||||
_ecore_x_event_handlers_num = _ecore_x_event_shape_id + 1;
|
||||
#ifdef ECORE_XSS
|
||||
if (XScreenSaverQueryExtension(_ecore_x_disp, &screensaver_base, &screensaver_err_base))
|
||||
_ecore_x_event_screensaver_id = screensaver_base + ScreenSaverNotify;
|
||||
#endif
|
||||
if (_ecore_x_event_screensaver_id >= LASTEvent)
|
||||
_ecore_x_event_handlers_num = _ecore_x_event_screensaver_id + 1;
|
||||
|
||||
if (XSyncQueryExtension(_ecore_x_disp, &sync_base, &sync_err_base))
|
||||
{
|
||||
|
@ -235,6 +245,8 @@ ecore_x_init(const char *name)
|
|||
_ecore_x_event_handlers[ClientMessage] = _ecore_x_event_handle_client_message;
|
||||
if (_ecore_x_event_shape_id)
|
||||
_ecore_x_event_handlers[_ecore_x_event_shape_id] = _ecore_x_event_handle_shape_change;
|
||||
if (_ecore_x_event_screensaver_id)
|
||||
_ecore_x_event_handlers[_ecore_x_event_screensaver_id] = _ecore_x_event_handle_screensaver_notify;
|
||||
if (_ecore_x_event_sync_id)
|
||||
{
|
||||
_ecore_x_event_handlers[_ecore_x_event_sync_id + XSyncCounterNotify] =
|
||||
|
@ -281,6 +293,7 @@ ecore_x_init(const char *name)
|
|||
ECORE_X_EVENT_SELECTION_NOTIFY = ecore_event_type_new();
|
||||
ECORE_X_EVENT_CLIENT_MESSAGE = ecore_event_type_new();
|
||||
ECORE_X_EVENT_WINDOW_SHAPE = ecore_event_type_new();
|
||||
ECORE_X_EVENT_SCREENSAVER_NOTIFY = ecore_event_type_new();
|
||||
ECORE_X_EVENT_SYNC_COUNTER = ecore_event_type_new();
|
||||
ECORE_X_EVENT_SYNC_ALARM = ecore_event_type_new();
|
||||
ECORE_X_EVENT_SCREEN_CHANGE = ecore_event_type_new();
|
||||
|
@ -550,24 +563,24 @@ ecore_x_killall(Ecore_X_Window root)
|
|||
/* Tranverse window tree starting from root, and drag each
|
||||
* before the firing squad */
|
||||
for (i = 0; i < screens; ++i)
|
||||
{
|
||||
Window root_r;
|
||||
Window parent_r;
|
||||
Window *children_r = NULL;
|
||||
unsigned int num_children = 0;
|
||||
|
||||
while (XQueryTree(_ecore_x_disp, root, &root_r, &parent_r,
|
||||
&children_r, &num_children) && (num_children > 0))
|
||||
{
|
||||
for (j = 0; j < num_children; ++j)
|
||||
{
|
||||
XKillClient(_ecore_x_disp, children_r[j]);
|
||||
}
|
||||
|
||||
XFree(children_r);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
Window root_r;
|
||||
Window parent_r;
|
||||
Window *children_r = NULL;
|
||||
unsigned int num_children = 0;
|
||||
|
||||
while (XQueryTree(_ecore_x_disp, root, &root_r, &parent_r,
|
||||
&children_r, &num_children) && (num_children > 0))
|
||||
{
|
||||
for (j = 0; j < num_children; ++j)
|
||||
{
|
||||
XKillClient(_ecore_x_disp, children_r[j]);
|
||||
}
|
||||
|
||||
XFree(children_r);
|
||||
}
|
||||
}
|
||||
|
||||
XUngrabServer(_ecore_x_disp);
|
||||
XSync(_ecore_x_disp, False);
|
||||
}
|
||||
|
|
|
@ -1604,6 +1604,26 @@ _ecore_x_event_handle_shape_change(XEvent *xevent)
|
|||
ecore_event_add(ECORE_X_EVENT_WINDOW_SHAPE, e, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_x_event_handle_screensaver_notify(XEvent *xevent)
|
||||
{
|
||||
#ifdef ECORE_XSS
|
||||
XScreenSaverNotifyEvent *screensaver_event;
|
||||
Ecore_X_Event_Screensaver_Notify *e;
|
||||
|
||||
screensaver_event = (XScreenSaverNotifyEvent *)xevent;
|
||||
e = calloc(1, sizeof(Ecore_X_Event_Screensaver_Notify));
|
||||
if (!e) return;
|
||||
e->win = screensaver_event->window;
|
||||
if (screensaver_event->state == ScreenSaverOn)
|
||||
e->on = 1;
|
||||
else
|
||||
e->on = 0;
|
||||
e->time = screensaver_event->time;
|
||||
ecore_event_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, e, NULL, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_x_event_handle_sync_counter(XEvent *xevent)
|
||||
{
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
#ifdef ECORE_XRANDR
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
#endif
|
||||
#ifdef ECORE_XSS
|
||||
#include <X11/extensions/scrnsaver.h>
|
||||
#endif
|
||||
|
||||
#include "ecore_private.h"
|
||||
#include "Ecore_X.h"
|
||||
|
@ -181,6 +184,7 @@ void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
|
|||
void _ecore_x_event_handle_client_message(XEvent *xevent);
|
||||
void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
|
||||
void _ecore_x_event_handle_shape_change(XEvent *xevent);
|
||||
void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
|
||||
void _ecore_x_event_handle_sync_counter(XEvent *xevent);
|
||||
void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
|
||||
#ifdef ECORE_XRANDR
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
/*
|
||||
* Screensaver code
|
||||
*/
|
||||
#include "Ecore.h"
|
||||
#include "ecore_x_private.h"
|
||||
#include "Ecore_X.h"
|
||||
#include "Ecore_X_Atoms.h"
|
||||
|
||||
EAPI int
|
||||
ecore_x_screensaver_event_avaialable_get(void)
|
||||
{
|
||||
#ifdef ECORE_XSS
|
||||
return 1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_x_screensaver_timeout_set(double timeout)
|
||||
{
|
||||
int pto, pint, pblank, pexpo;
|
||||
|
||||
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
||||
XSetScreenSaver(_ecore_x_disp, (int)timeout,
|
||||
pint, pblank, pexpo);
|
||||
}
|
||||
|
||||
EAPI double
|
||||
ecore_x_screensaver_timeout_get(void)
|
||||
{
|
||||
int pto, pint, pblank, pexpo;
|
||||
|
||||
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
||||
return (double)pto;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_x_screensaver_event_listen_set(int on)
|
||||
{
|
||||
#ifdef ECORE_XSS
|
||||
Ecore_X_Window root;
|
||||
|
||||
root = DefaultRootWindow(_ecore_x_disp);
|
||||
if (on)
|
||||
XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask);
|
||||
else
|
||||
XScreenSaverSelectInput(_ecore_x_disp, root, 0);
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue