Some work on desk lock configuration dialog and possible options.

* desklock background can be configured
* the position of the login box(for xinerama users) can be configured as well
* E config version is increased, since new items appeared.

.. and more

* just small fix to e_widget_entry. This fix drops the input cursor
to the end of the text, when widget gets focus.


SVN revision: 20927
This commit is contained in:
sndev 2006-03-03 00:02:32 +00:00 committed by sndev
parent 1fdc18b446
commit a63ac36dff
6 changed files with 844 additions and 25 deletions

View File

@ -7,6 +7,201 @@ images {
}
group {
name, "desklock/background";
parts {
part {
name: "background_image";
description {
state: "default" 0.0;
image {
normal: "e17_brushed.png";
}
fill {
size {
relative: 0 0;
offset: 400 300;
}
}
}
}
part {
name: "reflection_shadow_overlay";
description {
state: "default" 0.0;
image {
normal: "e17_"SM"reflection_shadow_overlay.png";
}
}
}
}
}
group
{
name, "desklock/login_box";
parts
{
part
{
name: "logo";
mouse_events: 0;
description
{
state: "default" 0.0;
min: 64 64;
max: 64 64;
//align: 0.45 0.5;
image {
normal: "e17_logo.png";
}
}
}
part
{
name: "label";
type: TEXT;
effect: SHADOW;
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1 {
relative: 1.0 0.0;
offset: 20 0;
to: "logo";
}
rel2 {
relative: 1.0 0.3;
offset: 0 0;
to: "logo";
}
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "Please enter your unlock password";
font: "Edje-Vera-Bold";
size: 10;
align: 0.0 0.5;
min: 1 1;
}
}
}
part
{
name: "passwd_entry_clip";
type: RECT;
mouse_events: 0;
description
{
state: "default" 0.0;
visible: 1;
rel1
{
relative: 0.0 0.0;
offset: 10 10;
to: "passwd_border";
}
rel2
{
relative: 1.0 1.0;
offset: -17 -10;
to: "passwd_border";
}
}
}
part
{
name: "passwd";
type: TEXT;
effect: SHADOW;
clip_to: "passwd_entry_clip";
description {
state: "default" 0.0;
color: 0 0 0 255;
fixed: 0 1;
align: 0.0 0.5;
rel1
{
relative: 0.0 0.0;
offset: 0 0;
to: "passwd_entry_clip";
}
rel2
{
relative: 0.0 1.0;
offset: 0 0;
to: "passwd_entry_clip";
}
color: 0 0 0 255;
color3: 255 255 255 128;
text {
text: "****";
font: "Edje-Vera-Bold";
size: 16;
align: 0.0 0.5;
min: 1 1;
text_class: "desklock_passwd";
}
}
}
part
{
name: "cursor";
mouse_events: 0;
clip_to: "passwd_entry_clip";
description {
state: "default" 0.0;
min: 16 16;
max: 16 16;
align: 0.0 0.5;
fixed: 1 1;
rel1 {
relative: 1.0 0.0;
offset: 0 -2;
to: "passwd";
}
rel2 {
relative: 1.0 0.9;
offset: 0 0;
to: "passwd";
}
image {
normal: "e17_entry_cursor.png";
}
}
}
part
{
name: "passwd_border";
mouse_events: 0;
description
{
state: "default" 0.0;
rel1
{
relative: 1.0 0.3;
offset: 0 0;
to: "logo";
}
rel2
{
relative: 5.0 0.9;
offset: 0 0;
to: "logo";
}
image
{
normal: "e17_gadman_overlay.png";
border: 15 15 15 15;
}
}
}
}
}
/*group {
name, "widgets/desklock/main";
parts
{
@ -207,4 +402,4 @@ group {
}
}
}
}
}*/

View File

@ -457,9 +457,12 @@ e_config_init(void)
E_CONFIG_VAL(D, T, cfgdlg_default_mode, INT); /**/
E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
E_CONFIG_VAL(D, T, desklock_personal_passwd, STR);
E_CONFIG_VAL(D, T, font_hinting, INT);
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 = e_config_domain_load("e", _e_config_edd);
if (e_config)
{
@ -610,8 +613,11 @@ e_config_init(void)
e_config->cfgdlg_auto_apply = 0;
e_config->cfgdlg_default_mode = 0;
e_config->gadcons = NULL;
e_config->desklock_personal_passwd = NULL;
e_config->font_hinting = 0;
e_config->desklock_personal_passwd = NULL;
e_config->desklock_background = NULL;
e_config->desklock_login_box_zone = -1;
/* FIXME: fill up default gadcons! */
{
@ -1673,6 +1679,7 @@ e_config_init(void)
E_CONFIG_LIMIT(e_config->cfgdlg_auto_apply, 0, 1);
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);
return 1;
}

View File

@ -49,7 +49,7 @@ typedef Eet_Data_Descriptor E_Config_DD;
* versioning feature. the value of this is really irrelevant - just as
* long as it increases every time we change something
*/
#define E_CONFIG_FILE_VERSION 139
#define E_CONFIG_FILE_VERSION 140
#define E_EVAS_ENGINE_DEFAULT 0
#define E_EVAS_ENGINE_SOFTWARE_X11 1
@ -210,8 +210,11 @@ struct _E_Config
int cfgdlg_default_mode; // GUI
Evas_List *gadcons;
Evas_List *shelves;
char *desklock_personal_passwd; // GUI
int font_hinting; // GUI
char *desklock_personal_passwd; // GUI
char *desklock_background; // GUI
int desklock_login_box_zone; //GUI
};
struct _E_Config_Module

View File

@ -9,8 +9,9 @@ typedef struct _E_Desklock_Popup_Data E_Desklock_Popup_Data;
struct _E_Desklock_Popup_Data
{
E_Popup *popup_wnd;
Evas_Object *bg_object;
E_Popup *popup_wnd;
Evas_Object *bg_object;
Evas_Object *login_box;
};
struct _E_Desklock_Data
@ -22,6 +23,7 @@ struct _E_Desklock_Data
};
static E_Desklock_Data *edd = NULL;
static E_Zone *last_active_zone = NULL;
/***********************************************************************/
@ -29,18 +31,23 @@ static int _e_desklock_cb_key_down(void *data, int type, void *event);
static int _e_desklock_cb_mouse_down(void *data, int type, void *event);
static int _e_desklock_cb_mouse_up(void *data, int type, void *event);
static int _e_desklock_cb_mouse_wheel(void *data, int type, void *event);
static int _e_desklock_cb_mouse_move(void *data, int type, void *event);
//static int _e_desklock_idler(void *data);
static void _e_desklock_passwd_update();
static void _e_desklock_backspace();
static void _e_desklock_delete();
static int _e_desklock_zone_num_get();
EAPI int
e_desklock_show(void)
{
Evas_List *managers, *l, *l2, *l3;
int m = 0, c = 0, z = 0;
E_Desklock_Popup_Data *edp;
Evas_List *managers, *l, *l2, *l3;
E_Desklock_Popup_Data *edp;
Evas_Coord mw, mh;
E_Zone *current_zone;
int zone_counter;
int total_zone_num;
if (!e_config->desklock_personal_passwd)
{
@ -65,24 +72,27 @@ e_desklock_show(void)
edd->handlers = NULL;
edd->passwd[0] = 0;
}
last_active_zone = current_zone =
e_zone_current_get(e_container_current_get(e_manager_current_get()));
zone_counter = 0;
total_zone_num = _e_desklock_zone_num_get();
managers = e_manager_list();
for (l = managers; l; l = l->next)
{
E_Manager *man;
m++;
man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con;
c++;
con = l2->data;
for (l3 = con->zones; l3; l3 = l3->next)
{
E_Zone *zone;
zone = l3->data;
if (!edd->elock_wnd)
@ -103,16 +113,69 @@ e_desklock_show(void)
evas_event_freeze(edp->popup_wnd->evas);
edp->bg_object = edje_object_add(edp->popup_wnd->evas);
//FIXME: This should come from config file
e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock",
"widgets/desklock/main");
if (!e_config->desklock_background ||
!strcmp(e_config->desklock_background, "theme_desklock_background"))
{
e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock",
"desklock/background");
}
else if (!strcmp(e_config->desklock_background, "theme_background"))
{
e_theme_edje_object_set(edp->bg_object,
"base/theme/backgrounds",
"desktop/background");
}
else
{
if (e_util_edje_collection_exists(e_config->desklock_background,
"desklock/background"))
{
edje_object_file_set(edp->bg_object, e_config->desklock_background,
"desklock/background");
}
else
{
if (!edje_object_file_set(edp->bg_object,
e_config->desklock_background,
"desktop/background"))
{
edje_object_file_set(edp->bg_object,
e_theme_edje_file_get("base/theme/desklock",
"desklock/background"),
"desklock/background");
}
}
}
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"));
/*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");
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),
(int)((zone->h - mh)/2));
if (total_zone_num > 1)
{
if (e_config->desklock_login_box_zone == -1)
evas_object_show(edp->login_box);
else if(e_config->desklock_login_box_zone == -2 && zone == current_zone)
evas_object_show(edp->login_box);
else if(e_config->desklock_login_box_zone == zone_counter )
evas_object_show(edp->login_box);
}
else
evas_object_show(edp->login_box);
/**/
e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object);
evas_event_thaw(edp->popup_wnd->evas);
@ -121,6 +184,8 @@ e_desklock_show(void)
edd->elock_wnd_list = evas_list_append(edd->elock_wnd_list, edp);
}
zone_counter ++;
}
}
}
@ -139,6 +204,11 @@ e_desklock_show(void)
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_WHEEL,
_e_desklock_cb_mouse_wheel,
NULL));
if (total_zone_num > 1 && e_config->desklock_login_box_zone == -2 )
edd->handlers = evas_list_append(edd->handlers,
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
_e_desklock_cb_mouse_move,
NULL));
//elock_wnd_idler = ecore_idler_add(_e_desklock_idler, NULL);
_e_desklock_passwd_update();
@ -161,6 +231,7 @@ e_desklock_hide(void)
evas_event_freeze(edp->popup_wnd->evas);
evas_object_del(edp->bg_object);
evas_object_del(edp->login_box);
evas_event_thaw(edp->popup_wnd->evas);
e_object_del(E_OBJECT(edp->popup_wnd));
@ -257,6 +328,32 @@ _e_desklock_cb_mouse_wheel(void *data, int type, void *event)
return 1;
}
static int
_e_desklock_cb_mouse_move(void *data, int type, void *event)
{
E_Desklock_Popup_Data *edp;
E_Zone *current_zone;
Evas_List *l;
current_zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
if (current_zone == last_active_zone)
return 1;
for (l = edd->elock_wnd_list; l; l = l->next)
{
edp = l->data;
if (!edp) continue;
if (edp->popup_wnd->zone == last_active_zone)
evas_object_hide(edp->login_box);
else if (edp->popup_wnd->zone == current_zone)
evas_object_show(edp->login_box);
}
last_active_zone = current_zone;
return 1;
}
static int
_e_desklock_idler(void *data)
{
return 1;
@ -304,7 +401,7 @@ _e_desklock_passwd_update()
for (l = edd->elock_wnd_list; l; l = l->next)
{
edp = l->data;
edje_object_part_text_set(edp->bg_object, "passwd", passwd_hidden);
edje_object_part_text_set(edp->login_box, "passwd", passwd_hidden);
}
}
@ -333,4 +430,25 @@ _e_desklock_delete()
_e_desklock_backspace();
}
static int
_e_desklock_zone_num_get()
{
int num;
Evas_List *l, *l2;
num = 0;
for (l = e_manager_list(); l; l = l->next)
{
E_Manager *man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con = l2->data;
num += evas_list_count(con->zones);
}
}
return num;
}

View File

@ -1,5 +1,18 @@
#include "e.h"
#define LOGINBOX_SHOW_ALL_SCREENS -1
#define LOGINBOX_SHOW_CURRENT_SCREENS -2
#define LOGINBOX_SHOW_SPECIFIC_SCREEN 0
#define BG_LIST_ICON_SIZE_W 32
#define BG_LIST_ICON_SIZE_H 32
#define BG_PREVIEW_W 280
#define BG_PREVIEW_H 200
#define DEF_DESKLOCK_BACKGROUND "theme_desklock_background"
#define DEF_THEME_BACKGROUND "theme_background"
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
@ -7,24 +20,67 @@ static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata);
static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata);
/******************************************************************************************/
static void _e_desklock_passwd_cb_change(void *data, Evas_Object *obj);
static void _e_desklock_cb_show_passwd(void *data, Evas_Object *obj, const char *emission,
const char *source);
static int _e_desklock_zone_num_get();
static void _load_bgs(E_Config_Dialog_Data *cfdata);
static void _ibg_list_cb_bg_selected(void *data);
static void _e_desklock_cb_lb_show_on_all_screens(void *data, Evas_Object *obj,
const char *emission, const char *source);
static void _e_desklock_cb_lb_show_on_current_screen(void *data, Evas_Object *obj,
const char *emission, const char *source);
static void _e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object *obj,
const char *emission, const char *source);
/*******************************************************************************************/
struct _E_Config_Dialog_Data
{
char *desklock_passwd;
char *desklock_passwd_cp;
int show_password;
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;
};
typedef struct _E_Widget_Entry_Data E_Widget_Entry_Data;
typedef struct _E_Widget_Check_Data E_Widget_Check_Data;
typedef struct _E_Widget_Entry_Data E_Widget_Entry_Data;
typedef struct _E_Widget_Check_Data E_Widget_Check_Data;
typedef struct _E_Widget_Radio_Data E_Widget_Radio_Data;
typedef struct _E_Widget_Slider_Data E_Widget_Slider_Data;
struct _E_Widget_Entry_Data
{
@ -34,12 +90,27 @@ struct _E_Widget_Entry_Data
void (*on_change_func) (void *data, Evas_Object *obj);
void *on_change_data;
};
struct _E_Widget_Check_Data
{
Evas_Object *o_check;
int *valptr;
};
struct _E_Widget_Radio_Data
{
E_Radio_Group *group;
Evas_Object *o_radio;
int valnum;
};
struct _E_Widget_Slider_Data
{
Evas_Object *o_widget, *o_slider;
double *dval;
int *ival;
};
EAPI E_Config_Dialog *
e_int_config_desklock(E_Container *con)
{
@ -52,6 +123,10 @@ e_int_config_desklock(E_Container *con)
v->free_cfdata = _free_data;
v->basic.apply_cfdata = _basic_apply_data;
v->basic.create_widgets = _basic_create_widgets;
v->advanced.apply_cfdata = _advanced_apply_data;
v->advanced.create_widgets = _advanced_create_widgets;
v->override_auto_apply = 1;
cfd = e_config_dialog_new(con, _("Desktop Lock Settings"), NULL, 0, v, NULL);
return cfd;
@ -66,7 +141,37 @@ _fill_desklock_data(E_Config_Dialog_Data *cfdata)
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
}
static void *
@ -78,6 +183,8 @@ _create_data(E_Config_Dialog *cfd)
cfdata->desklock_passwd = strdup("");
cfdata->desklock_passwd_cp = strdup("");
_fill_desklock_data(cfdata);
return cfdata;
}
static void
@ -87,6 +194,7 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
E_FREE(cfdata->desklock_passwd);
E_FREE(cfdata->desklock_passwd_cp);
E_FREE(cfdata->cur_bg);
free(cfdata);
}
@ -114,7 +222,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
Evas_Object *o, *of, *ob;
E_Widget_Check_Data *wd;
_fill_desklock_data(cfdata);
//_fill_desklock_data(cfdata);
o = e_widget_list_add(evas, 0, 0);
@ -140,6 +248,144 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
return o;
}
/* advanced window */
static int
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
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;
e_config_save_queue();
return 1;
}
static Evas_Object *
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
Evas_Object *o, *of, *of1, *ob;
E_Widget_Radio_Data *wd;
E_Radio_Group *rg, *rg_bkg;
Evas_Object *ot;
//_fill_desklock_data(cfdata);
cfdata->evas = evas;
ot = e_widget_table_add(evas, 0);
{
Evas_Object *ot1;
/* start: bkg list */
cfdata->gui.bg_list = e_widget_ilist_add(evas, BG_LIST_ICON_SIZE_W,
BG_LIST_ICON_SIZE_H, &(cfdata->cur_bg));
{
e_widget_ilist_selector_set(cfdata->gui.bg_list, 1);
e_widget_min_size_set(cfdata->gui.bg_list, 180, 200);
_load_bgs(cfdata);
e_widget_focus_set(cfdata->gui.bg_list, 1);
e_widget_ilist_go(cfdata->gui.bg_list);
}
e_widget_table_object_append(ot, cfdata->gui.bg_list, 0, 0, 1, 2, 1, 1, 1, 1);
/* end: bkg list */
/* start: Desk Lock Window Preview */
ot1 = e_widget_frametable_add(evas, _("Desk Lock Window Preview"), 0);
{
e_widget_frametable_object_append(ot1, cfdata->preview_image, 0, 1, 1, 1, 1, 1, 1, 1);
}
e_widget_table_object_append(ot, ot1, 1, 0, 1, 1, 1, 1, 1, 1);
/* end: Desk Lock Window Preview */
/* start: login box options */
/* Actually I do not know if I have to enable this if. However, if it is enabled
* this options will be seen only for those peoples who has xinerama.
* Otherwise, all the other world will not even know about them.
* Let the world know about them. Maybe in the feature somebody will turn this if
*/
if (1 || _e_desklock_zone_num_get() > 1)
{
of = e_widget_framelist_add(evas, _("Login Box Settings"), 0);
{
rg = e_widget_radio_group_new((int *)(&(cfdata->login_box_zone)));
ob = e_widget_radio_add(evas, _("Show On All Screen Zones"), LOGINBOX_SHOW_ALL_SCREENS,
rg);
cfdata->gui.loginbox_obj.show_all_screens = ob;
if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Show On Current Screen Zone"),
LOGINBOX_SHOW_CURRENT_SCREENS, rg);
cfdata->gui.loginbox_obj.show_current_screen = ob;
if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Show On Screen Zone :"), LOGINBOX_SHOW_SPECIFIC_SCREEN,
rg);
cfdata->gui.loginbox_obj.show_specific_screen = ob;
if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), 0.0, (double)(cfdata->zone_count - 1),
1.0, 0, NULL, &(cfdata->specific_lb_zone), 100);
cfdata->gui.loginbox_obj.screen_slider = ob;
if (cfdata->zone_count == 1 ||
cfdata->login_box_zone == LOGINBOX_SHOW_ALL_SCREENS)
{
e_widget_disabled_set(ob, 1);
}
e_widget_framelist_object_append(of, ob);
}
e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
}
/* end: login box options */
}
/* register callbacks for the radios in login box options
* in order to propertly update interface
*/
wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_all_screens);
edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
_e_desklock_cb_lb_show_on_all_screens, cfdata);
wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_current_screen);
edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
_e_desklock_cb_lb_show_on_current_screen, cfdata);
wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_specific_screen);
edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
_e_desklock_cb_lb_show_on_specific_screen, cfdata);
e_dialog_resizable_set(cfd->dia, 0);
return ot;
}
/* general functionality/callbacks */
static void
_e_desklock_passwd_cb_change(void *data, Evas_Object *obj)
{
@ -201,3 +447,252 @@ _e_desklock_cb_show_passwd(void *data, Evas_Object *obj, const char *emission, c
cfdata = data;
_e_desklock_passwd_cb_change(cfdata, cfdata->gui.passwd_field);
}
static int
_e_desklock_zone_num_get()
{
int num;
Evas_List *l, *l2;
num = 0;
for (l = e_manager_list(); l; l = l->next)
{
E_Manager *man = l->data;
for (l2 = man->containers; l2; l2 = l2->next)
{
E_Container *con = l2->data;
num += evas_list_count(con->zones);
}
}
return num;
}
static void
_load_bgs(E_Config_Dialog_Data *cfdata)
{
Evas_Object *bg_obj, *o, *ic, *im;
Ecore_Evas *eebuf;
Evas *evasbuf;
Evas_List *bg_dirs, *bg;
const char *f, *f1;
char *c;
if (!cfdata || !cfdata->gui.bg_list)
return;
bg_obj = edje_object_add(cfdata->evas);
eebuf = ecore_evas_buffer_new(1, 1);
evasbuf = ecore_evas_get(eebuf);
/* Desklock background */
o = edje_object_add(evasbuf);
f1 = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
c = strdup(f1);
if (edje_object_file_set(o, f1, "desklock/background"))
{
Evas_Object *o = NULL;
if (!e_thumb_exists(c))
o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &o, NULL, NULL);
else
o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme DeskLock Background",
_ibg_list_cb_bg_selected, cfdata, DEF_DESKLOCK_BACKGROUND);
}
if (!e_config->desklock_background ||
!strcmp(e_config->desklock_background, DEF_DESKLOCK_BACKGROUND))
e_widget_ilist_selected_set(cfdata->gui.bg_list, 0);
im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
BG_PREVIEW_H, 1));
evas_object_del(o);
ecore_evas_free(eebuf);
free(c);
/* end: Desklock background */
/* Theme Background */
eebuf = ecore_evas_buffer_new(1, 1);
evasbuf = ecore_evas_get(eebuf);
o = edje_object_add(evasbuf);
f = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
c = strdup(f);
if (edje_object_file_set(o, f, "desktop/background"))
{
Evas_Object *o = NULL;
if (!e_thumb_exists(c))
o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &o, NULL, NULL);
else
o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H, 1);
e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme Background", _ibg_list_cb_bg_selected,
cfdata, DEF_THEME_BACKGROUND);
}
if (e_config->desklock_background &&
strcmp(e_config->desklock_background, DEF_THEME_BACKGROUND) == 0)
{
e_widget_ilist_selected_set(cfdata->gui.bg_list, 1);
im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, BG_PREVIEW_W,
BG_PREVIEW_H, 1));
}
evas_object_del(o);
ecore_evas_free(eebuf);
free(c);
bg_dirs = e_path_dir_list_get(path_backgrounds);
for (bg = bg_dirs; bg; bg = bg->next)
{
E_Path_Dir *d;
d = bg->data;
if (ecore_file_is_dir(d->dir))
{
char *bg_file;
Ecore_List *bgs;
int i = e_widget_ilist_count(cfdata->gui.bg_list);
bgs = ecore_file_ls(d->dir);
if (!bgs) continue;
while ((bg_file = ecore_list_next(bgs)))
{
char full_path[4096];
snprintf(full_path, sizeof(full_path), "%s/%s", d->dir, bg_file);
if (ecore_file_is_dir(full_path)) continue;
if (!e_util_edje_collection_exists(full_path, "desktop/background")) continue;
if (!e_thumb_exists(full_path))
ic = e_thumb_generate_begin(full_path, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
cfdata->evas, &ic, NULL, NULL);
else
ic = e_thumb_evas_object_get(full_path, cfdata->evas, BG_LIST_ICON_SIZE_W,
BG_LIST_ICON_SIZE_H, 1);
e_widget_ilist_append(cfdata->gui.bg_list, ic, ecore_file_strip_ext(bg_file),
_ibg_list_cb_bg_selected, cfdata, full_path);
if ((e_config->desklock_background) &&
(!strcmp(e_config->desklock_background, full_path)))
{
Evas_Object *o = NULL;
e_widget_ilist_selected_set(cfdata->gui.bg_list, i);
o = edje_object_add(cfdata->evas);
edje_object_file_set(o, e_config->desktop_default_background,
"desktop/background");
im = e_widget_image_add_from_object(cfdata->evas, o, BG_PREVIEW_W, BG_PREVIEW_H);
e_widget_image_object_set(im, e_thumb_evas_object_get(full_path, cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H,
1));
}
i++;
}
free(bg_file);
ecore_list_destroy(bgs);
}
free(d);
}
evas_list_free(bg);
evas_list_free(bg_dirs);
cfdata->preview_image = im;
}
static void
_ibg_list_cb_bg_selected(void *data)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (cfdata->cur_bg[0])
{
if (strcmp(cfdata->cur_bg, DEF_DESKLOCK_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else if (strcmp(cfdata->cur_bg, DEF_THEME_BACKGROUND) == 0)
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
else
{
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(cfdata->cur_bg, cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
}
else
{
const char *theme;
theme = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
e_widget_image_object_set(cfdata->preview_image,
e_thumb_evas_object_get(strdup(theme), cfdata->evas,
BG_PREVIEW_W, BG_PREVIEW_H, 1));
}
}
static void
_e_desklock_cb_lb_show_on_all_screens(void *data, Evas_Object *obj, const char *emission,
const char *source)
{
E_Config_Dialog_Data *cfdata;
if (!(cfdata = data)) return;
cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone;
e_widget_disabled_set(cfdata->gui.loginbox_obj.screen_slider, 1);
}
static void
_e_desklock_cb_lb_show_on_current_screen(void *data, Evas_Object *obj, const char *emission,
const char *source)
{
_e_desklock_cb_lb_show_on_all_screens(data, obj, emission, source);
}
static void
_e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object *obj, const char *emission,
const char *source)
{
E_Widget_Slider_Data *wd;
E_Config_Dialog_Data *cfdata;
if (!(cfdata = data)) return;
wd = e_widget_data_get(cfdata->gui.loginbox_obj.screen_slider);
e_slider_value_set(wd->o_slider, cfdata->specific_lb_zone_backup);
cfdata->specific_lb_zone = cfdata->specific_lb_zone_backup;
//e_widget_disabled_set(wd->o_widget, 1);
}

View File

@ -43,6 +43,7 @@ _e_wid_focus_hook(Evas_Object *obj)
{
e_entry_focus(wd->o_entry);
evas_object_focus_set(wd->o_entry, 1);
e_entry_cursor_move_at_end(wd->o_entry);
e_entry_cursor_show(wd->o_entry);
}
else