diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index d9896cd063..e8d0ff1876 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -865,3 +865,8 @@ 2012-08-18 Carsten Haitzler (The Rasterman) * Add xkb change events patch from trac. + +2012-08-27 Carsten Haitzler (The Rasterman) + + * Add ecore_x custom blanker screensaver enable/disable - cant + do e17 properly without so add in even in freeze. diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 0af377f186..17cc0f42f7 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -1707,7 +1707,9 @@ EAPI int ecore_x_screensaver_expose_get(void); EAPI void ecore_x_screensaver_interval_set(int timeout); EAPI int ecore_x_screensaver_interval_get(void); EAPI void ecore_x_screensaver_event_listen_set(Eina_Bool on); - +EAPI Eina_Bool ecore_x_screensaver_custom_blanking_enable(void); /** @since 1.7 */ +EAPI Eina_Bool ecore_x_screensaver_custom_blanking_disable(void); /** @since 1.7 */ + /* FIXME: these funcs need categorising */ typedef struct _Ecore_X_Window_Attributes diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c index 46fc2b0313..5722b46c52 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c @@ -1995,7 +1995,8 @@ _ecore_xcb_event_handle_screensaver_notify(xcb_generic_event_t *event) e->win = ev->window; e->on = EINA_FALSE; - if (ev->state == XCB_SCREENSAVER_STATE_ON) e->on = EINA_TRUE; + if ((ev->state == XCB_SCREENSAVER_STATE_ON) || + (ev->state == XCB_SCREENSAVER_STATE_CYCLE)) e->on = EINA_TRUE; e->time = ev->time; ecore_event_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, e, NULL, NULL); diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c index cb7249f4f1..b48cb9a205 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c @@ -324,7 +324,9 @@ ecore_x_screensaver_event_listen_set(Eina_Bool on) root = ((xcb_screen_t *)_ecore_xcb_screen)->root; if (on) xcb_screensaver_select_input(_ecore_xcb_conn, root, - XCB_SCREENSAVER_EVENT_NOTIFY_MASK); + XCB_SCREENSAVER_EVENT_NOTIFY_MASK | + XCB_SCREENSAVER_EVENT_CYCLE_MASK + ); else xcb_screensaver_select_input(_ecore_xcb_conn, root, 0); #endif @@ -336,3 +338,34 @@ ecore_x_screensaver_event_available_get(void) return _screensaver_avail; } +EAPI Eina_Bool +ecore_x_screensaver_custom_blanking_enable(void) +{ +#ifdef ECORE_XCB_SCREENSAVER + uint32_t mask_list[9]; + + xcb_screensaver_set_attributes_checked + (_ecore_xcb_conn, + ((xcb_screen_t *)_ecore_xcb_screen)->root, + -9999, -9999, 1, 1, 0, + XCB_WINDOW_CLASS_INPUT_ONLY. + XCB_COPY_FROM_PARENT, XCB_COPY_FROM_PARENT, + 0, mask_list); + return EINA_TRUE; +#else + return EINA_FALSE; +#endif +} + +EAPI Eina_Bool +ecore_x_screensaver_custom_blanking_disable(void) +{ +#ifdef ECORE_XCB_SCREENSAVER + xcb_screensaver_unset_attributes_checked + (_ecore_xcb_conn, + ((xcb_screen_t *)_ecore_xcb_screen)->root); + return EINA_TRUE; +#else + return EINA_FALSE; +#endif +} diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c index 9d0179302d..7d685cf83f 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_events.c @@ -2007,7 +2007,8 @@ _ecore_x_event_handle_screensaver_notify(XEvent *xevent) return; e->win = screensaver_event->window; - if (screensaver_event->state == ScreenSaverOn) + if ((screensaver_event->state == ScreenSaverOn) || + (screensaver_event->state == ScreenSaverCycle)) e->on = EINA_TRUE; else e->on = EINA_FALSE; diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c index 40dd738b72..3688a44c56 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_screensaver.c @@ -162,7 +162,8 @@ ecore_x_screensaver_event_listen_set(Eina_Bool on) LOGFN(__FILE__, __LINE__, __FUNCTION__); root = DefaultRootWindow(_ecore_x_disp); if (on) - XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask); + XScreenSaverSelectInput(_ecore_x_disp, root, + ScreenSaverNotifyMask | ScreenSaverCycle); else XScreenSaverSelectInput(_ecore_x_disp, root, 0); #else @@ -171,3 +172,33 @@ ecore_x_screensaver_event_listen_set(Eina_Bool on) #endif /* ifdef ECORE_XSS */ } + +EAPI Eina_Bool +ecore_x_screensaver_custom_blanking_enable(void) +{ +#ifdef ECORE_XSS + XSetWindowAttributes attr; + + XScreenSaverSetAttributes(_ecore_x_disp, + DefaultRootWindow(_ecore_x_disp), + -9999, -9999, 1, 1, 0, + CopyFromParent, InputOnly, CopyFromParent, + 0, &attr); + return EINA_TRUE; +#else + return EINA_FALSE; +#endif /* ifdef ECORE_XSS */ +} + +EAPI Eina_Bool +ecore_x_screensaver_custom_blanking_disable(void) +{ +#ifdef ECORE_XSS + XScreenSaverUnsetAttributes(_ecore_x_disp, + DefaultRootWindow(_ecore_x_disp)); + return EINA_TRUE; +#else + return EINA_FALSE; +#endif /* ifdef ECORE_XSS */ +} +