Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: Ecore_X.h Makefile.am ecore_x.c ecore_x_events.c ecore_x_private.h Added Files: ecore_x_screensaver.c Log Message: minimal xscreensaver wrapping so it can be used for lock =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.157 retrieving revision 1.158 diff -u -3 -r1.157 -r1.158 --- Ecore_X.h 3 Feb 2006 21:42:38 -0000 1.157 +++ Ecore_X.h 3 Mar 2006 04:01:15 -0000 1.158 @@ -254,6 +254,7 @@ 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 @@ 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_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 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 =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Makefile.am,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- Makefile.am 13 Aug 2005 22:14:40 -0000 1.24 +++ Makefile.am 3 Mar 2006 04:01:15 -0000 1.25 @@ -5,6 +5,7 @@ @Xprint_cflags@ \ @Xinerama_cflags@ \ @Xrandr_cflags@ \ [EMAIL PROTECTED]@ \ @x_cflags@ \ -I$(top_srcdir)/src/lib/ecore \ -I$(top_srcdir)/src/lib/ecore_txt \ @@ -44,6 +45,7 @@ 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 @@ @Xprint_libs@ \ @Xinerama_libs@ \ @Xrandr_libs@ \ [EMAIL PROTECTED]@ \ @x_ldflags@ \ @x_libs@ \ $(top_builddir)/src/lib/ecore/libecore.la \ @@ -76,10 +79,14 @@ 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 =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v retrieving revision 1.104 retrieving revision 1.105 diff -u -3 -r1.104 -r1.105 --- ecore_x.c 1 Feb 2006 11:24:49 -0000 1.104 +++ ecore_x.c 3 Mar 2006 04:01:15 -0000 1.105 @@ -17,6 +17,7 @@ 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_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 @@ { 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_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_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_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 @@ /* 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); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -3 -r1.80 -r1.81 --- ecore_x_events.c 18 Feb 2006 04:35:43 -0000 1.80 +++ ecore_x_events.c 3 Mar 2006 04:01:15 -0000 1.81 @@ -1605,6 +1605,26 @@ } 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) { XSyncCounterNotifyEvent *sync_counter_event; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v retrieving revision 1.51 retrieving revision 1.52 diff -u -3 -r1.51 -r1.52 --- ecore_x_private.h 30 Sep 2005 06:16:49 -0000 1.51 +++ ecore_x_private.h 3 Mar 2006 04:01:15 -0000 1.52 @@ -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_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 ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs