2006-03-02 20:01:15 -08:00
|
|
|
/*
|
|
|
|
* Screensaver code
|
|
|
|
*/
|
2009-01-31 10:33:39 -08:00
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
2010-08-02 10:47:49 -07:00
|
|
|
#endif /* ifdef HAVE_CONFIG_H */
|
2009-01-31 10:33:39 -08:00
|
|
|
|
2006-03-02 20:01:15 -08:00
|
|
|
#include "Ecore.h"
|
|
|
|
#include "ecore_x_private.h"
|
|
|
|
#include "Ecore_X.h"
|
|
|
|
#include "Ecore_X_Atoms.h"
|
|
|
|
|
2007-03-14 05:11:21 -07:00
|
|
|
static int _screensaver_available = -1;
|
|
|
|
|
2010-09-26 10:49:05 -07:00
|
|
|
EAPI Eina_Bool
|
2006-03-02 22:36:11 -08:00
|
|
|
ecore_x_screensaver_event_available_get(void)
|
2006-03-02 20:01:15 -08:00
|
|
|
{
|
2010-07-27 22:23:42 -07:00
|
|
|
if (_screensaver_available >= 0)
|
2011-10-20 22:40:59 -07:00
|
|
|
return _screensaver_available;
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2006-03-02 20:01:15 -08:00
|
|
|
#ifdef ECORE_XSS
|
2007-03-14 05:11:21 -07:00
|
|
|
int _screensaver_major, _screensaver_minor;
|
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-03-14 05:11:21 -07:00
|
|
|
_screensaver_major = 1;
|
|
|
|
_screensaver_minor = 0;
|
|
|
|
|
2010-07-27 22:23:42 -07:00
|
|
|
if (XScreenSaverQueryVersion(_ecore_x_disp, &_screensaver_major,
|
|
|
|
&_screensaver_minor))
|
2011-10-20 22:40:59 -07:00
|
|
|
_screensaver_available = 1;
|
2007-03-14 05:11:21 -07:00
|
|
|
else
|
2011-10-20 22:40:59 -07:00
|
|
|
_screensaver_available = 0;
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2010-08-02 10:47:49 -07:00
|
|
|
#else /* ifdef ECORE_XSS */
|
2007-03-14 05:11:21 -07:00
|
|
|
_screensaver_available = 0;
|
2010-08-02 10:47:49 -07:00
|
|
|
#endif /* ifdef ECORE_XSS */
|
2007-03-14 05:11:21 -07:00
|
|
|
return _screensaver_available;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-03-02 20:01:15 -08:00
|
|
|
|
2007-11-05 12:47:29 -08:00
|
|
|
EAPI int
|
2007-04-04 04:43:29 -07:00
|
|
|
ecore_x_screensaver_idle_time_get(void)
|
|
|
|
{
|
2007-11-05 12:47:29 -08:00
|
|
|
#ifdef ECORE_XSS
|
2007-04-04 04:43:29 -07:00
|
|
|
XScreenSaverInfo *xss;
|
|
|
|
int idle;
|
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-04-04 04:43:29 -07:00
|
|
|
xss = XScreenSaverAllocInfo();
|
2010-07-27 22:23:42 -07:00
|
|
|
XScreenSaverQueryInfo(_ecore_x_disp,
|
|
|
|
RootWindow(_ecore_x_disp, DefaultScreen(
|
2011-10-20 22:40:59 -07:00
|
|
|
_ecore_x_disp)), xss);
|
2007-04-04 04:43:29 -07:00
|
|
|
idle = xss->idle / 1000;
|
|
|
|
XFree(xss);
|
|
|
|
|
|
|
|
return idle;
|
2011-04-20 07:15:33 -07:00
|
|
|
#else
|
2007-04-04 04:43:29 -07:00
|
|
|
return 0;
|
2011-01-13 23:03:33 -08:00
|
|
|
#endif /* ifdef ECORE_XSS */
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2007-04-04 04:43:29 -07:00
|
|
|
|
2007-02-13 08:24:37 -08:00
|
|
|
EAPI void
|
2010-07-27 22:23:42 -07:00
|
|
|
ecore_x_screensaver_set(int timeout,
|
|
|
|
int interval,
|
|
|
|
int prefer_blanking,
|
|
|
|
int allow_exposures)
|
2007-02-13 08:24:37 -08:00
|
|
|
{
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2010-07-27 22:23:42 -07:00
|
|
|
XSetScreenSaver(_ecore_x_disp,
|
|
|
|
timeout,
|
|
|
|
interval,
|
|
|
|
prefer_blanking,
|
|
|
|
allow_exposures);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2007-02-13 08:24:37 -08:00
|
|
|
|
2006-03-02 20:01:15 -08:00
|
|
|
EAPI void
|
2007-11-05 12:47:29 -08:00
|
|
|
ecore_x_screensaver_timeout_set(int timeout)
|
2006-03-02 20:01:15 -08:00
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-11-05 12:47:29 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
|
|
|
XSetScreenSaver(_ecore_x_disp, timeout, pint, pblank, pexpo);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-03-02 20:01:15 -08:00
|
|
|
|
2007-11-05 12:47:29 -08:00
|
|
|
EAPI int
|
2006-03-02 20:01:15 -08:00
|
|
|
ecore_x_screensaver_timeout_get(void)
|
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2006-03-02 20:01:15 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
2007-11-05 12:47:29 -08:00
|
|
|
return pto;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-03-02 20:01:15 -08:00
|
|
|
|
2006-12-28 18:56:33 -08:00
|
|
|
EAPI void
|
2007-11-05 12:47:29 -08:00
|
|
|
ecore_x_screensaver_blank_set(int blank)
|
2006-12-28 18:56:33 -08:00
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-11-05 12:47:29 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
|
|
|
XSetScreenSaver(_ecore_x_disp, pto, pint, blank, pexpo);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
2007-11-05 12:47:29 -08:00
|
|
|
EAPI int
|
2006-12-28 18:56:33 -08:00
|
|
|
ecore_x_screensaver_blank_get(void)
|
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2006-12-28 18:56:33 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
2007-11-05 12:47:29 -08:00
|
|
|
return pblank;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
|
|
|
EAPI void
|
2007-11-05 12:47:29 -08:00
|
|
|
ecore_x_screensaver_expose_set(int expose)
|
2006-12-28 18:56:33 -08:00
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-11-05 12:47:29 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
|
|
|
XSetScreenSaver(_ecore_x_disp, pto, pint, pblank, expose);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
2007-11-05 13:18:35 -08:00
|
|
|
EAPI int
|
2006-12-28 18:56:33 -08:00
|
|
|
ecore_x_screensaver_expose_get(void)
|
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2006-12-28 18:56:33 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
2007-11-05 22:12:43 -08:00
|
|
|
return pexpo;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
|
|
|
EAPI void
|
2007-11-05 12:47:29 -08:00
|
|
|
ecore_x_screensaver_interval_set(int interval)
|
2006-12-28 18:56:33 -08:00
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2007-11-05 12:47:29 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
|
|
|
XSetScreenSaver(_ecore_x_disp, pto, interval, pblank, pexpo);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
2007-11-05 12:47:29 -08:00
|
|
|
EAPI int
|
2006-12-28 18:56:33 -08:00
|
|
|
ecore_x_screensaver_interval_get(void)
|
|
|
|
{
|
|
|
|
int pto, pint, pblank, pexpo;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2006-12-28 18:56:33 -08:00
|
|
|
XGetScreenSaver(_ecore_x_disp, &pto, &pint, &pblank, &pexpo);
|
2007-11-05 12:47:29 -08:00
|
|
|
return pint;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2006-12-28 18:56:33 -08:00
|
|
|
|
2006-03-02 20:01:15 -08:00
|
|
|
EAPI void
|
2010-10-02 02:32:45 -07:00
|
|
|
ecore_x_screensaver_event_listen_set(Eina_Bool on)
|
2006-03-02 20:01:15 -08:00
|
|
|
{
|
|
|
|
#ifdef ECORE_XSS
|
|
|
|
Ecore_X_Window root;
|
2007-11-05 12:47:29 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2006-03-02 20:01:15 -08:00
|
|
|
root = DefaultRootWindow(_ecore_x_disp);
|
|
|
|
if (on)
|
2012-08-26 08:34:40 -07:00
|
|
|
XScreenSaverSelectInput(_ecore_x_disp, root,
|
|
|
|
ScreenSaverNotifyMask | ScreenSaverCycle);
|
2006-03-02 20:01:15 -08:00
|
|
|
else
|
2011-10-20 22:40:59 -07:00
|
|
|
XScreenSaverSelectInput(_ecore_x_disp, root, 0);
|
2010-10-02 02:32:45 -07:00
|
|
|
#else
|
|
|
|
return;
|
2015-09-21 04:09:15 -07:00
|
|
|
on = EINA_FALSE;
|
2010-08-02 10:47:49 -07:00
|
|
|
#endif /* ifdef ECORE_XSS */
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-08-02 10:47:49 -07:00
|
|
|
|
2012-08-26 08:34:40 -07:00
|
|
|
|
|
|
|
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 */
|
|
|
|
}
|
|
|
|
|
2015-02-04 08:26:03 -08:00
|
|
|
EINA_DEPRECATED EAPI void
|
2014-06-30 23:44:12 -07:00
|
|
|
ecore_x_screensaver_supend(void)
|
2015-02-04 08:26:03 -08:00
|
|
|
{
|
|
|
|
ecore_x_screensaver_suspend();
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_x_screensaver_suspend(void)
|
2014-06-30 23:44:12 -07:00
|
|
|
{
|
|
|
|
#ifdef ECORE_XSS
|
|
|
|
XScreenSaverSuspend(_ecore_x_disp, 1);
|
|
|
|
#endif /* ifdef ECORE_XSS */
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_x_screensaver_resume(void)
|
|
|
|
{
|
|
|
|
#ifdef ECORE_XSS
|
|
|
|
XScreenSaverSuspend(_ecore_x_disp, 0);
|
|
|
|
#endif /* ifdef ECORE_XSS */
|
|
|
|
}
|
|
|
|
|
2014-07-07 07:33:29 -07:00
|
|
|
EAPI void
|
|
|
|
ecore_x_screensaver_reset(void)
|
|
|
|
{
|
|
|
|
XResetScreenSaver(_ecore_x_disp);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_x_screensaver_activate(void)
|
|
|
|
{
|
|
|
|
XActivateScreenSaver(_ecore_x_disp);
|
|
|
|
}
|