diff --git a/data/themes/default_desklock.edc b/data/themes/default_desklock.edc index 359abc1a6..2e03fbd98 100644 --- a/data/themes/default_desklock.edc +++ b/data/themes/default_desklock.edc @@ -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 { } } } -} +}*/ diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 23677ec87..777394eeb 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -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; } diff --git a/src/bin/e_config.h b/src/bin/e_config.h index d0a4a739d..81e825ab3 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -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 diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index e007da306..d4e6365e7 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -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; +} diff --git a/src/bin/e_int_config_desklock.c b/src/bin/e_int_config_desklock.c index a3227d385..f9965a50a 100644 --- a/src/bin/e_int_config_desklock.c +++ b/src/bin/e_int_config_desklock.c @@ -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); +} + diff --git a/src/bin/e_widget_entry.c b/src/bin/e_widget_entry.c index 563edd7e6..da73dcb11 100644 --- a/src/bin/e_widget_entry.c +++ b/src/bin/e_widget_entry.c @@ -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