desklock lets you auto-lock if the screensaver kicks in and set the timeout

for the screensaver (optionally).


SVN revision: 20937
This commit is contained in:
Carsten Haitzler 2006-03-03 06:00:18 +00:00
parent 272782b980
commit 9ab2777707
5 changed files with 209 additions and 143 deletions

View File

@ -462,6 +462,10 @@ e_config_init(void)
E_CONFIG_VAL(D, T, desklock_personal_passwd, STR);
E_CONFIG_VAL(D, T, desklock_background, STR);
E_CONFIG_VAL(D, T, desklock_login_box_zone, INT);
E_CONFIG_VAL(D, T, desklock_autolock, INT);
E_CONFIG_VAL(D, T, desklock_use_timeout, INT);
E_CONFIG_VAL(D, T, desklock_timeout, DOUBLE);
E_CONFIG_VAL(D, T, desklock_disable_screensaver, INT);
e_config = e_config_domain_load("e", _e_config_edd);
if (e_config)
@ -618,6 +622,10 @@ e_config_init(void)
e_config->desklock_personal_passwd = NULL;
e_config->desklock_background = NULL;
e_config->desklock_login_box_zone = -1;
e_config->desklock_autolock = 0;
e_config->desklock_use_timeout = 0;
e_config->desklock_timeout = 300.0;
e_config->desklock_disable_screensaver = 0;
/* FIXME: fill up default gadcons! */
{
@ -1680,6 +1688,10 @@ e_config_init(void)
E_CONFIG_LIMIT(e_config->cfgdlg_default_mode, 0, 1);
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, 0, 1);
E_CONFIG_LIMIT(e_config->desklock_use_timeout, 0, 1);
E_CONFIG_LIMIT(e_config->desklock_timeout, 1.0, 600.0);
E_CONFIG_LIMIT(e_config->desklock_disable_screensaver, 0, 1);
return 1;
}

View File

@ -214,7 +214,11 @@ struct _E_Config
char *desklock_personal_passwd; // GUI
char *desklock_background; // GUI
int desklock_login_box_zone; //GUI
int desklock_login_box_zone; // GUI
int desklock_autolock; // GUI
int desklock_use_timeout; // GUI
double desklock_timeout; // GUI
int desklock_disable_screensaver;
};
struct _E_Config_Module

View File

@ -49,6 +49,8 @@ e_desklock_show(void)
int zone_counter;
int total_zone_num;
if (edd) return 0;
if (!e_config->desklock_personal_passwd)
{
E_Zone *zone;
@ -114,8 +116,8 @@ e_desklock_show(void)
evas_event_freeze(edp->popup_wnd->evas);
edp->bg_object = edje_object_add(edp->popup_wnd->evas);
if (!e_config->desklock_background ||
!strcmp(e_config->desklock_background, "theme_desklock_background"))
if ((!e_config->desklock_background) ||
(!strcmp(e_config->desklock_background, "theme_desklock_background")))
{
e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock",
@ -123,9 +125,9 @@ e_desklock_show(void)
}
else if (!strcmp(e_config->desklock_background, "theme_background"))
{
e_theme_edje_object_set(edp->bg_object,
"base/theme/backgrounds",
"desktop/background");
e_theme_edje_object_set(edp->bg_object,
"base/theme/backgrounds",
"desktop/background");
}
else
{
@ -152,13 +154,12 @@ e_desklock_show(void)
evas_object_move(edp->bg_object, 0, 0);
evas_object_resize(edp->bg_object, zone->w, zone->h);
evas_object_show(edp->bg_object);
/*edje_object_part_text_set(edp->bg_object, "title",
_("Please enter your unlock password"));*/
/**/
edp->login_box = edje_object_add(edp->popup_wnd->evas);
e_theme_edje_object_set(edp->login_box,
"base/theme/desklock", "desklock/login_box");
"base/theme/desklock",
"desklock/login_box");
edje_object_part_text_set(edp->login_box, "title",
_("Please enter your unlock password"));
edje_object_part_swallow(edp->bg_object, "login_box", edp->login_box);
edje_object_size_min_calc(edp->login_box, &mw, &mh);
evas_object_move(edp->login_box, (int)((zone->w - mw)/2),
@ -362,16 +363,13 @@ _e_desklock_idler(void *data)
EAPI int
e_desklock_init(void)
{
// desklock_edd = E_CONFIG_DD_NEW("E_Desklock", E_Decklock);
//#undef T
//#undef D
//#define T E_Desklock
//#define D desklock_edd
//E_CONFIG_VAL(D, T, path, STR);
//#undef T
//#undef D
if (e_config->desklock_disable_screensaver)
ecore_x_screensaver_timeout_set(0);
else
{
if (e_config->desklock_use_timeout)
ecore_x_screensaver_timeout_set(e_config->desklock_timeout);
}
return 1;
}

View File

@ -46,35 +46,35 @@ static void _e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object *o
struct _E_Config_Dialog_Data
{
char *desklock_passwd;
char *desklock_passwd_cp;
int show_password; // local
int login_box_zone; // in e_config;
int specific_lb_zone; // local variable
int specific_lb_zone_backup; // used to have smart iface
int zone_count; // local variable;
char *cur_bg; // local variable;
Evas *evas; // local variable
Evas_Object *preview_image; // local variable
/*double vertical_lb_align;
double horizontal_lb_align;*/
struct {
Evas_Object *passwd_field;
Evas_Object *bg_list;
struct {
Evas_Object *show_all_screens;
Evas_Object *show_current_screen;
Evas_Object *show_specific_screen;
Evas_Object *screen_slider;
} loginbox_obj;
} gui;
char *desklock_passwd;
char *desklock_passwd_cp;
int show_password; // local
int autolock; // in e_config;
int use_timeout; // in e_config;
double timeout; // in e_config;
int login_box_zone; // in e_config;
int specific_lb_zone; // local variable
int specific_lb_zone_backup; // used to have smart iface
int zone_count; // local variable;
char *cur_bg; // local variable;
Evas *evas; // local variable
Evas_Object *preview_image; // local variable
struct {
Evas_Object *passwd_field;
Evas_Object *bg_list;
struct {
Evas_Object *show_all_screens;
Evas_Object *show_current_screen;
Evas_Object *show_specific_screen;
Evas_Object *screen_slider;
} loginbox_obj;
} gui;
};
typedef struct _E_Widget_Entry_Data E_Widget_Entry_Data;
@ -135,43 +135,47 @@ e_int_config_desklock(E_Container *con)
static void
_fill_desklock_data(E_Config_Dialog_Data *cfdata)
{
// we have to read it from e_config->...
if (e_config->desklock_personal_passwd)
{
cfdata->desklock_passwd = strdup(e_config->desklock_personal_passwd);
cfdata->desklock_passwd_cp = strdup(e_config->desklock_personal_passwd);
}
else
{
cfdata->desklock_passwd = strdup("");
cfdata->desklock_passwd_cp = strdup("");
}
/* should be taken from e_config */
//cfdata->login_box_on_zone = -1;
if (e_config->desklock_login_box_zone >= 0)
{
cfdata->login_box_zone = LOGINBOX_SHOW_SPECIFIC_SCREEN;
cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone =
e_config->desklock_login_box_zone;
}
else
{
cfdata->login_box_zone = e_config->desklock_login_box_zone;
cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone = 0;
}
cfdata->zone_count = _e_desklock_zone_num_get();
cfdata->show_password = 0;
if (!e_config->desklock_background)
cfdata->cur_bg = strdup(DEF_DESKLOCK_BACKGROUND);
else
cfdata->cur_bg = strdup(e_config->desklock_background);
//vertical_lb_align = e_config->desklock_login
// we have to read it from e_config->...
if (e_config->desklock_personal_passwd)
{
cfdata->desklock_passwd = strdup(e_config->desklock_personal_passwd);
cfdata->desklock_passwd_cp = strdup(e_config->desklock_personal_passwd);
}
else
{
cfdata->desklock_passwd = strdup("");
cfdata->desklock_passwd_cp = strdup("");
}
cfdata->autolock = e_config->desklock_autolock;
cfdata->use_timeout = e_config->desklock_use_timeout;
cfdata->timeout = e_config->desklock_timeout;
/* should be taken from e_config */
//cfdata->login_box_on_zone = -1;
if (e_config->desklock_login_box_zone >= 0)
{
cfdata->login_box_zone = LOGINBOX_SHOW_SPECIFIC_SCREEN;
cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone =
e_config->desklock_login_box_zone;
}
else
{
cfdata->login_box_zone = e_config->desklock_login_box_zone;
cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone = 0;
}
cfdata->zone_count = _e_desklock_zone_num_get();
cfdata->show_password = 0;
if (!e_config->desklock_background)
cfdata->cur_bg = strdup(DEF_DESKLOCK_BACKGROUND);
else
cfdata->cur_bg = strdup(e_config->desklock_background);
//vertical_lb_align = e_config->desklock_login
}
static void *
@ -202,50 +206,71 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if (cfdata->desklock_passwd_cp)
{
if (e_config->desklock_personal_passwd)
{
if (strcmp(e_config->desklock_personal_passwd, cfdata->desklock_passwd_cp) == 0)
return 1;
if (cfdata->desklock_passwd_cp)
{
if (e_config->desklock_personal_passwd)
evas_stringshare_del(e_config->desklock_personal_passwd);
}
e_config->desklock_personal_passwd = (char *)evas_stringshare_add(cfdata->desklock_passwd_cp);
e_config_save_queue();
}
}
e_config->desklock_personal_passwd = (char *)evas_stringshare_add(cfdata->desklock_passwd_cp);
e_config->desklock_autolock = cfdata->autolock;
e_config->desklock_use_timeout = cfdata->use_timeout;
e_config->desklock_timeout = cfdata->timeout;
if (e_config->desklock_use_timeout)
{
ecore_x_screensaver_timeout_set(e_config->desklock_timeout);
printf("%3.3f\n", e_config->desklock_timeout);
}
e_config_save_queue();
return 1;
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *of, *ob;
E_Widget_Check_Data *wd;
Evas_Object *o, *of, *ob;
E_Widget_Check_Data *wd;
//_fill_desklock_data(cfdata);
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("Personalized Password:"), 0);
cfdata->gui.passwd_field = ob = e_widget_entry_add(evas, &(cfdata->desklock_passwd));
_e_desklock_passwd_cb_change(cfdata, ob);
e_widget_entry_on_change_callback_set(ob, _e_desklock_passwd_cb_change, cfdata);
e_widget_min_size_set(ob, 200, 25);
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Show Password"), &(cfdata->show_password));
e_widget_framelist_object_append(of, ob);
wd = (E_Widget_Check_Data*)e_widget_data_get(ob);
edje_object_signal_callback_add(wd->o_check,"toggle_on", "", _e_desklock_cb_show_passwd, cfdata);
edje_object_signal_callback_add(wd->o_check,"toggle_off", "", _e_desklock_cb_show_passwd, cfdata);
e_widget_list_object_append(o, of, 1, 1, 0.5);
of = e_widget_framelist_add(evas, _("Automatic Locking"), 0);
ob = e_widget_check_add(evas, _("Lock when the Screensaver starts"), &(cfdata->autolock));
e_widget_framelist_object_append(of, ob);
//_fill_desklock_data(cfdata);
o = e_widget_list_add(evas, 0, 0);
of = e_widget_framelist_add(evas, _("Personalized Password:"), 0);
cfdata->gui.passwd_field = ob = e_widget_entry_add(evas, &(cfdata->desklock_passwd));
_e_desklock_passwd_cb_change(cfdata, ob);
e_widget_entry_on_change_callback_set(ob, _e_desklock_passwd_cb_change, cfdata);
e_widget_min_size_set(ob, 200, 25);
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Show Password"), &(cfdata->show_password));
wd = (E_Widget_Check_Data*)e_widget_data_get(ob);
edje_object_signal_callback_add(wd->o_check,"toggle_on", "", _e_desklock_cb_show_passwd, cfdata);
edje_object_signal_callback_add(wd->o_check,"toggle_off", "", _e_desklock_cb_show_passwd, cfdata);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
e_dialog_resizable_set(cfd->dia, 0);
return o;
ob = e_widget_check_add(evas, _("Set the screensaver timeout"), &(cfdata->use_timeout));
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Time until screensaver starts"));
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
1.0, 600.0,
1.0, 0, &(cfdata->timeout), NULL,
200);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
e_dialog_resizable_set(cfd->dia, 0);
return o;
}
/* advanced window */
@ -253,27 +278,31 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
static int
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
if (!cfdata) return 0;
if (!cfdata) return 0;
if (cfdata->cur_bg)
{
if (e_config->desklock_background)
evas_stringshare_del(e_config->desklock_background);
e_config->desklock_background = (char *)evas_stringshare_add(cfdata->cur_bg);
}
if (_e_desklock_zone_num_get() > 1)
{
if (cfdata->login_box_zone >= 0)
e_config->desklock_login_box_zone = cfdata->specific_lb_zone;
else
e_config->desklock_login_box_zone = cfdata->login_box_zone;
}
else
e_config->desklock_login_box_zone = LOGINBOX_SHOW_ALL_SCREENS;
if (cfdata->cur_bg)
{
if (e_config->desklock_background)
evas_stringshare_del(e_config->desklock_background);
e_config->desklock_background = (char *)evas_stringshare_add(cfdata->cur_bg);
}
if (_e_desklock_zone_num_get() > 1)
{
if (cfdata->login_box_zone >= 0)
e_config->desklock_login_box_zone = cfdata->specific_lb_zone;
else
e_config->desklock_login_box_zone = cfdata->login_box_zone;
}
else
e_config->desklock_login_box_zone = LOGINBOX_SHOW_ALL_SCREENS;
e_config_save_queue();
return 1;
e_config->desklock_autolock = cfdata->autolock;
e_config->desklock_use_timeout = cfdata->use_timeout;
e_config->desklock_timeout = cfdata->timeout;
e_config_save_queue();
return 1;
}
static Evas_Object *
@ -282,6 +311,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
Evas_Object *o, *of, *of1, *ob;
E_Widget_Radio_Data *wd;
/* FIXME: this dialog is broken. advanced options should ALSO INCLUDE basic options */
E_Radio_Group *rg, *rg_bkg;
Evas_Object *ot;

View File

@ -12,6 +12,7 @@ static int _e_manager_cb_key_up(void *data, int ev_type, void *ev);
static int _e_manager_cb_key_down(void *data, int ev_type, void *ev);
static int _e_manager_cb_frame_extents_request(void *data, int ev_type, void *ev);
static int _e_manager_cb_ping(void *data, int ev_type, void *ev);
static int _e_manager_cb_screensaver_notify(void *data, int ev_type, void *ev);
static Evas_Bool _e_manager_frame_extents_free_cb(Evas_Hash *hash __UNUSED__,
const char *key __UNUSED__,
@ -47,6 +48,7 @@ static Evas_Hash *frame_extents = NULL;
EAPI int
e_manager_init(void)
{
ecore_x_screensaver_event_listen_set(1);
return 1;
}
@ -110,6 +112,7 @@ e_manager_new(Ecore_X_Window root, int num)
{
man->win = man->root;
}
h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW_REQUEST, _e_manager_cb_window_show_request, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE, _e_manager_cb_window_configure, man);
@ -119,8 +122,11 @@ e_manager_new(Ecore_X_Window root, int num)
h = ecore_event_handler_add(ECORE_X_EVENT_KEY_UP, _e_manager_cb_key_up, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_FRAME_EXTENTS_REQUEST, _e_manager_cb_frame_extents_request, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_PING, _e_manager_cb_ping, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
h = ecore_event_handler_add(ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_manager_cb_screensaver_notify, man);
if (h) man->handlers = evas_list_append(man->handlers, h);
man->pointer = e_pointer_window_new(man->root);
@ -716,6 +722,22 @@ _e_manager_cb_ping(void *data, int ev_type __UNUSED__, void *ev)
return 1;
}
static int
_e_manager_cb_screensaver_notify(void *data, int ev_type __UNUSED__, void *ev)
{
E_Manager *man;
Ecore_X_Event_Screensaver_Notify *e;
man = data;
e = ev;
if (e->on)
{
if (e_config->desklock_autolock) e_desklock_show();
}
return 1;
}
static Evas_Bool
_e_manager_frame_extents_free_cb(Evas_Hash *hash __UNUSED__, const char *key __UNUSED__,
void *data, void *fdata __UNUSED__)