diff --git a/config/default/e.src b/config/default/e.src index 59d8281bd..321b0e845 100644 --- a/config/default/e.src +++ b/config/default/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 0; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -446,6 +446,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/config/illume/e.src b/config/illume/e.src index 24f55c1ea..ca90890f0 100644 --- a/config/illume/e.src +++ b/config/illume/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -656,6 +656,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/config/minimalist/e.src b/config/minimalist/e.src index f3043f6d5..94a4e62a7 100644 --- a/config/minimalist/e.src +++ b/config/minimalist/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_background" string: "Light_Gradient.edj"; @@ -1860,6 +1860,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/config/netbook/e.src b/config/netbook/e.src index 90e0b7da8..230f3947b 100644 --- a/config/netbook/e.src +++ b/config/netbook/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_background" string: "Dark_Gradient.edj"; @@ -1924,6 +1924,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/config/scaleable/e.src b/config/scaleable/e.src index e0d3626b7..1e718aa13 100644 --- a/config/scaleable/e.src +++ b/config/scaleable/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -1947,6 +1947,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/config/standard/e.src b/config/standard/e.src index f95329a53..611a36a24 100644 --- a/config/standard/e.src +++ b/config/standard/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65840; + value "config_version" int: 65841; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -1957,6 +1957,7 @@ group "E_Config" struct { value "desklock_login_box_zone" int: -1; value "desklock_start_locked" int: 0; value "desklock_autolock_screensaver" int: 0; + value "desklock_post_screensaver_time" double: 0.0; value "desklock_autolock_idle" int: 0; value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000; value "desklock_use_custom_desklock" int: 0; diff --git a/src/bin/e_config.c b/src/bin/e_config.c index a7ca8469f..a02d1228a 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -567,6 +567,7 @@ e_config_init(void) E_CONFIG_VAL(D, T, desklock_login_box_zone, INT); E_CONFIG_VAL(D, T, desklock_start_locked, INT); E_CONFIG_VAL(D, T, desklock_autolock_screensaver, INT); + E_CONFIG_VAL(D, T, desklock_post_screensaver_time, DOUBLE); E_CONFIG_VAL(D, T, desklock_autolock_idle, INT); E_CONFIG_VAL(D, T, desklock_autolock_idle_timeout, DOUBLE); E_CONFIG_VAL(D, T, desklock_use_custom_desklock, INT); @@ -892,6 +893,10 @@ e_config_load(void) COPYVAL(mode.offline); IFCFGEND; + IFCFG(0x0131); + COPYVAL(desklock_post_screensaver_time); + IFCFGEND; + e_config->config_version = E_CONFIG_FILE_VERSION; _e_config_free(tcfg); } @@ -978,6 +983,7 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->font_hinting, 0, 2); E_CONFIG_LIMIT(e_config->desklock_login_box_zone, -2, 1000); E_CONFIG_LIMIT(e_config->desklock_autolock_screensaver, 0, 1); + E_CONFIG_LIMIT(e_config->desklock_post_screensaver_time, 0.0, 300.0); E_CONFIG_LIMIT(e_config->desklock_autolock_idle, 0, 1); E_CONFIG_LIMIT(e_config->desklock_autolock_idle_timeout, 1.0, 5400.0); E_CONFIG_LIMIT(e_config->desklock_use_custom_desklock, 0, 1); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 39da5df7b..3716018fd 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -35,7 +35,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme; /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 0x0130 +#define E_CONFIG_FILE_GENERATION 0x0131 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION) #define E_EVAS_ENGINE_DEFAULT 0 @@ -218,6 +218,7 @@ struct _E_Config int desklock_login_box_zone; // GUI int desklock_start_locked; // GUI int desklock_autolock_screensaver; // GUI + double desklock_post_screensaver_time; // GUI int desklock_autolock_idle; // GUI double desklock_autolock_idle_timeout; // GUI int desklock_use_custom_desklock; // GUI diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 4203ed7e8..26fdebe34 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -45,6 +45,7 @@ struct _Frame_Extents static Eina_List *managers = NULL; static Eina_Hash *frame_extents = NULL; +static Ecore_Timer *timer_post_screensaver_lock = NULL; /* externally accessible functions */ EAPI int @@ -69,6 +70,13 @@ e_manager_shutdown(void) eina_hash_free(frame_extents); frame_extents = NULL; } + + if (timer_post_screensaver_lock) + { + ecore_timer_del(timer_post_screensaver_lock); + timer_post_screensaver_lock = NULL; + } + return 1; } @@ -785,18 +793,39 @@ _e_manager_cb_ping(void *data, int ev_type __UNUSED__, void *ev) } static int -_e_manager_cb_screensaver_notify(void *data, int ev_type __UNUSED__, void *ev) +_e_manager_cb_timer_post_screensaver_lock(void *data __UNUSED__) { - E_Manager *man; - Ecore_X_Event_Screensaver_Notify *e; - - man = data; - e = ev; - + e_desklock_show(); + timer_post_screensaver_lock = NULL; + return 0; +} + +static int +_e_manager_cb_screensaver_notify(void *data __UNUSED__, int ev_type __UNUSED__, void *ev) +{ + Ecore_X_Event_Screensaver_Notify *e = ev; + + if (timer_post_screensaver_lock) + { + ecore_timer_del(timer_post_screensaver_lock); + timer_post_screensaver_lock = NULL; + } + if (e->on) { if (e_config->desklock_autolock_screensaver) - e_desklock_show(); + { + if (e_config->desklock_post_screensaver_time <= 1.0) + { + e_desklock_show(); + } + else + { + timer_post_screensaver_lock = ecore_timer_add + (e_config->desklock_post_screensaver_time, + _e_manager_cb_timer_post_screensaver_lock, NULL); + } + } } return 1; } diff --git a/src/modules/conf_desklock/e_int_config_desklock.c b/src/modules/conf_desklock/e_int_config_desklock.c index a0305146b..4681c6797 100644 --- a/src/modules/conf_desklock/e_int_config_desklock.c +++ b/src/modules/conf_desklock/e_int_config_desklock.c @@ -44,6 +44,7 @@ struct _E_Config_Dialog_Data int auto_lock; int screensaver_lock; double idle_time; + double post_screensaver_time; /* Adv props */ int bg_method; @@ -57,6 +58,8 @@ struct _E_Config_Dialog_Data struct { Evas_Object *auto_lock_label; Evas_Object *auto_lock_slider; + Evas_Object *post_screensaver_label; + Evas_Object *post_screensaver_slider; } basic; } gui; }; @@ -121,6 +124,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->auto_lock = e_config->desklock_autolock_idle; cfdata->screensaver_lock = e_config->desklock_autolock_screensaver; cfdata->idle_time = e_config->desklock_autolock_idle_timeout / 60; + cfdata->post_screensaver_time = e_config->desklock_post_screensaver_time; if (e_config->desklock_login_box_zone >= 0) { cfdata->login_zone = 0; @@ -163,6 +167,18 @@ _basic_auto_lock_cb_changed(void *data, Evas_Object *o) e_widget_disabled_set(cfdata->gui.basic.auto_lock_slider, disable); } +static void +_basic_screensaver_lock_cb_changed(void *data, Evas_Object *o) +{ + E_Config_Dialog_Data *cfdata = data; + int disable; + + disable = ((!cfdata->use_xscreensaver) || + (!cfdata->screensaver_lock)); + e_widget_disabled_set(cfdata->gui.basic.post_screensaver_label, disable); + e_widget_disabled_set(cfdata->gui.basic.post_screensaver_slider, disable); +} + static Evas_Object * _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { @@ -177,6 +193,15 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) e_widget_framelist_object_append(of, ow); ow = e_widget_check_add(evas, _("Lock when X screensaver activates"), &cfdata->screensaver_lock); + e_widget_on_change_hook_set(ow, _basic_screensaver_lock_cb_changed, cfdata); + e_widget_disabled_set(ow, !cfdata->use_xscreensaver); + e_widget_framelist_object_append(of, ow); + ow = e_widget_label_add(evas, _("Time after screensaver activated")); + cfdata->gui.basic.post_screensaver_label = ow; + e_widget_framelist_object_append(of, ow); + ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"), 0.0, 300.0, 10.0, 0, + &(cfdata->post_screensaver_time), NULL, 100); + cfdata->gui.basic.post_screensaver_slider = ow; e_widget_disabled_set(ow, !cfdata->use_xscreensaver); e_widget_framelist_object_append(of, ow); ow = e_widget_check_add(evas, _("Lock when idle time exceeded"), @@ -194,6 +219,7 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) e_widget_list_object_append(o, of, 1, 1, 0.5); _basic_auto_lock_cb_changed(cfdata, NULL); + _basic_screensaver_lock_cb_changed(cfdata, NULL); return o; } @@ -204,6 +230,7 @@ _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) e_config->desklock_start_locked = cfdata->start_locked; e_config->desklock_autolock_idle = cfdata->auto_lock; e_config->desklock_autolock_screensaver = cfdata->screensaver_lock; + e_config->desklock_post_screensaver_time = cfdata->post_screensaver_time; e_config->desklock_autolock_idle_timeout = cfdata->idle_time * 60; e_config_save_queue(); return 1; @@ -216,6 +243,7 @@ _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) ((e_config->desklock_start_locked != cfdata->start_locked) || (e_config->desklock_autolock_idle != cfdata->auto_lock) || (e_config->desklock_autolock_screensaver != cfdata->screensaver_lock) || + (e_config->desklock_post_screensaver_time != cfdata->post_screensaver_time) || (e_config->desklock_autolock_idle_timeout != cfdata->idle_time * 60)); }