Option to enable desklock after screensaver timeout.

This option will make it possible to lock the screen after some
seconds screensaver started.

It is useful in cases you want a short screensaver and uses screenlock
but often need to unlock it quickly (ie: was talking to someone at the
office, screensaver starts and you would like to quickly avoid
desklock, otherwise need to stop talking, unlock and continue).



SVN revision: 40413
This commit is contained in:
Gustavo Sverzut Barbieri 2009-04-27 02:49:50 +00:00
parent cf9748a78c
commit f7b1ad0f9b
10 changed files with 85 additions and 15 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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;
e_desklock_show();
timer_post_screensaver_lock = NULL;
return 0;
}
man = data;
e = ev;
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;
}

View File

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