forked from enlightenment/enlightenment
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:
parent
1fdc18b446
commit
a63ac36dff
|
@ -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 {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
|
|
@ -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,9 +613,12 @@ 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! */
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
@ -66,24 +73,27 @@ e_desklock_show(void)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue