value "screensaver_ask_presentation" uchar: 1;
value "screensaver_ask_presentation_timeout" double: 30.0000000000000000000000000;
value "screensaver_suspend" uchar: 1;
+ value "screensaver_suspend_on_ac" uchar: 0;
value "screensaver_suspend_delay" double: 5.0000000000000000000000000;
value "dpms_enable" int: 1;
value "dpms_standby_enable" int: 1;
value "screensaver_ask_presentation" uchar: 1;
value "screensaver_ask_presentation_timeout" double: 30.0000000000000000000000000;
value "screensaver_suspend" uchar: 0;
+ value "screensaver_suspend_on_ac" uchar: 0;
value "screensaver_suspend_delay" double: 15.0000000000000000000000000;
value "dpms_enable" int: 1;
value "dpms_standby_enable" int: 1;
E_CONFIG_VAL(D, T, screensaver_ask_presentation_timeout, DOUBLE);
E_CONFIG_VAL(D, T, screensaver_suspend, UCHAR);
+ E_CONFIG_VAL(D, T, screensaver_suspend_on_ac, UCHAR);
E_CONFIG_VAL(D, T, screensaver_suspend_delay, DOUBLE);
E_CONFIG_VAL(D, T, dpms_enable, INT);
double screensaver_ask_presentation_timeout; // GUI
unsigned char screensaver_suspend;
+ unsigned char screensaver_suspend_on_ac;
double screensaver_suspend_delay;
int dpms_enable; // GUI
static Ecore_Event_Handler *_e_screensaver_handler_border_uniconify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_desk_set = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
+static Ecore_Event_Handler *_e_screensaver_handler_powersave = NULL;
static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
static int _e_screensaver_ask_presentation_count = 0;
static int _e_screensaver_expose = 0;
static Ecore_Timer *_e_screensaver_suspend_timer = NULL;
+static Eina_Bool _e_screensaver_on = EINA_FALSE;
EAPI void
e_screensaver_update(void)
}
static Eina_Bool
+_e_screensaver_handler_powersave_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
+{
+ if ((_e_screensaver_on) && (!_e_screensaver_suspend_timer))
+ {
+ if (e_config->screensaver_suspend)
+ {
+ if ((e_config->screensaver_suspend_on_ac) ||
+ (e_powersave_mode_get() > E_POWERSAVE_MODE_LOW))
+ e_sys_action_do(E_SYS_SUSPEND, NULL);
+ }
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
_e_screensaver_suspend_cb(void *data __UNUSED__)
{
_e_screensaver_suspend_timer = NULL;
if (e_config->screensaver_suspend)
- e_sys_action_do(E_SYS_SUSPEND, NULL);
+ {
+ if ((e_config->screensaver_suspend_on_ac) ||
+ (e_powersave_mode_get() > E_POWERSAVE_MODE_LOW))
+ e_sys_action_do(E_SYS_SUSPEND, NULL);
+ }
return EINA_FALSE;
}
if (e->on)
{
+ _e_screensaver_on = EINA_TRUE;
if (_e_screensaver_suspend_timer)
{
ecore_timer_del(_e_screensaver_suspend_timer);
}
else
{
+ _e_screensaver_on = EINA_FALSE;
if (_e_screensaver_suspend_timer)
{
ecore_timer_del(_e_screensaver_suspend_timer);
_e_screensaver_handler_desk_show = ecore_event_handler_add
(E_EVENT_DESK_SHOW, _e_screensaver_handler_desk_show_cb, NULL);
+ _e_screensaver_handler_powersave = ecore_event_handler_add
+ (E_EVENT_POWERSAVE_UPDATE, _e_screensaver_handler_powersave_cb, NULL);
+
_e_screensaver_timeout = ecore_x_screensaver_timeout_get();
_e_screensaver_interval = ecore_x_screensaver_interval_get();
_e_screensaver_blanking = ecore_x_screensaver_blank_get();
ecore_timer_del(_e_screensaver_suspend_timer);
_e_screensaver_suspend_timer = NULL;
}
+
+ if (_e_screensaver_handler_powersave)
+ {
+ ecore_event_handler_del(_e_screensaver_handler_powersave);
+ _e_screensaver_handler_powersave = NULL;
+ }
+
if (_e_screensaver_handler_config_mode)
{
ecore_event_handler_del(_e_screensaver_handler_config_mode);
e_powersave_mode_set(E_POWERSAVE_MODE_LOW);
else
{
- if ((have_power) || (full > 95))
+ if (have_power)
e_powersave_mode_set(E_POWERSAVE_MODE_LOW);
+ else if (full > 95)
+ e_powersave_mode_set(E_POWERSAVE_MODE_MEDIUM);
else if (full > 30)
e_powersave_mode_set(E_POWERSAVE_MODE_HIGH);
else
double ask_presentation_timeout;
int screensaver_suspend;
+ int screensaver_suspend_on_ac;
double screensaver_suspend_delay;
Eina_List *disable_list;
cfdata->ask_presentation = e_config->screensaver_ask_presentation;
cfdata->ask_presentation_timeout = e_config->screensaver_ask_presentation_timeout;
cfdata->screensaver_suspend = e_config->screensaver_suspend;
+ cfdata->screensaver_suspend_on_ac = e_config->screensaver_suspend_on_ac;
cfdata->screensaver_suspend_delay = e_config->screensaver_suspend_delay;
}
e_config->screensaver_ask_presentation = cfdata->ask_presentation;
e_config->screensaver_ask_presentation_timeout = cfdata->ask_presentation_timeout;
e_config->screensaver_suspend = cfdata->screensaver_suspend;
+ e_config->screensaver_suspend_on_ac = cfdata->screensaver_suspend_on_ac;
e_config->screensaver_suspend_delay = cfdata->screensaver_suspend_delay;
/* Apply settings */
(e_config->screensaver_ask_presentation != cfdata->ask_presentation) ||
(e_config->screensaver_ask_presentation_timeout != cfdata->ask_presentation_timeout) ||
(e_config->screensaver_suspend != cfdata->screensaver_suspend) ||
+ (e_config->screensaver_suspend_on_ac != cfdata->screensaver_suspend_on_ac) ||
(e_config->screensaver_suspend_delay != cfdata->screensaver_suspend_delay));
}
&(cfdata->screensaver_suspend));
cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
e_widget_list_object_append(ol, ow, 1, 1, 0.5);
+ ow = e_widget_check_add(evas, _("Even if on power"),
+ &(cfdata->screensaver_suspend_on_ac));
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
+ e_widget_list_object_append(ol, ow, 1, 1, 0.5);
ow = e_widget_label_add(evas, _("Delay until suspend"));
cfdata->disable_list = eina_list_append(cfdata->disable_list, ow);
e_widget_list_object_append(ol, ow, 1, 1, 0.5);