and allow config to suspend even if on AC power (ie if disabled wont
authorCarsten Haitzler <raster@rasterman.com>
Sun, 21 Aug 2011 11:02:33 +0000 (11:02 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Sun, 21 Aug 2011 11:02:33 +0000 (11:02 +0000)
suspend on blank if connected to AC)

SVN revision: 62656

config/illume/e.src
config/standard/e.src
src/bin/e_config.c
src/bin/e_config.h
src/bin/e_screensaver.c
src/modules/battery/e_mod_main.c
src/modules/conf_display/e_int_config_screensaver.c

index a2a0bea..7e8768f 100644 (file)
@@ -1612,6 +1612,7 @@ group "E_Config" struct {
     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;
index f1db1b5..3bd8831 100644 (file)
@@ -1773,6 +1773,7 @@ group "E_Config" struct {
     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;
index 7b5ae53..b8cd21d 100644 (file)
@@ -798,6 +798,7 @@ e_config_init(void)
    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);
index aad490a..4b4a917 100644 (file)
@@ -225,6 +225,7 @@ struct _E_Config
    double        screensaver_ask_presentation_timeout; // GUI
    
    unsigned char screensaver_suspend;
+   unsigned char screensaver_suspend_on_ac;
    double        screensaver_suspend_delay;
 
    int         dpms_enable; // GUI
index 02c2b86..237be18 100644 (file)
@@ -9,6 +9,7 @@ static Ecore_Event_Handler *_e_screensaver_handler_border_iconify = NULL;
 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;
 
@@ -18,6 +19,7 @@ static int _e_screensaver_blanking = 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)
@@ -161,11 +163,30 @@ _e_screensaver_ask_presentation_mode(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;
 }
 
@@ -177,6 +198,7 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U
 
    if (e->on)
      {
+        _e_screensaver_on = EINA_TRUE;
         if (_e_screensaver_suspend_timer)
           {
              ecore_timer_del(_e_screensaver_suspend_timer);
@@ -189,6 +211,7 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U
      }
    else
      {
+        _e_screensaver_on = EINA_FALSE;
         if (_e_screensaver_suspend_timer)
           {
              ecore_timer_del(_e_screensaver_suspend_timer);
@@ -266,6 +289,9 @@ e_screensaver_init(void)
    _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();
@@ -284,6 +310,13 @@ e_screensaver_shutdown(void)
         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);
index db10e7f..0dc371a 100644 (file)
@@ -570,8 +570,10 @@ _battery_update(int full, int time_left, int time_full, Eina_Bool have_battery,
      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
index df56cbe..5c5b3c8 100644 (file)
@@ -29,6 +29,7 @@ struct _E_Config_Dialog_Data
    double ask_presentation_timeout;
    
    int screensaver_suspend;
+   int screensaver_suspend_on_ac;
    double screensaver_suspend_delay;
 
    Eina_List *disable_list;
@@ -73,6 +74,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
    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;
 }
 
@@ -105,6 +107,7 @@ _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
    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 */
@@ -125,6 +128,7 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfda
           (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));
 }
 
@@ -147,6 +151,10 @@ _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data
                            &(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);