add in custom screen blank enable/disable in ecore-x so we can do e17

based on this release of efl.



SVN revision: 75714
This commit is contained in:
Carsten Haitzler 2012-08-26 15:34:40 +00:00
parent 3b197e9a54
commit 3faee27bd8
6 changed files with 78 additions and 5 deletions

View File

@ -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.

View File

@ -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

View File

@ -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);

View File

@ -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
}

View File

@ -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;

View File

@ -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 */
}