2 #include "e_mod_main.h"
4 struct _E_Config_Dialog_Data
6 Evas_Object *o_list, *o_up;
11 /* local function prototypes */
12 static void *_create_data(E_Config_Dialog *cfd);
13 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
14 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
15 static void _cb_dir_changed(void *data, Evas_Object *obj, void *event);
16 static void _cb_sel_changed(void *data, Evas_Object *obj, void *event);
17 static void _cb_files_changed(void *data, Evas_Object *obj, void *event);
18 static void _cb_files_deleted(void *data, Evas_Object *obj, void *event);
19 static void _cb_radio_changed(void *data, Evas_Object *obj, void *event);
20 static void _cb_dir_up(void *data1, void *data2);
23 e_int_config_desklock_fsel(E_Config_Dialog *parent, Evas_Object *bg)
27 E_Config_Dialog_View *v;
32 con = e_container_current_get(e_manager_current_get());
34 v = E_NEW(E_Config_Dialog_View, 1);
35 v->create_cfdata = _create_data;
36 v->free_cfdata = _free_data;
37 v->basic.create_widgets = _basic_create;
41 cfd = e_config_dialog_new(con, _("Select a Background..."),
42 "E", "_desklock_fsel_dialog",
43 "enlightenment/background", 0, v, parent);
44 e_object_data_set(E_OBJECT(cfd), bg);
50 _create_data(E_Config_Dialog *cfd __UNUSED__)
52 E_Config_Dialog_Data *cfdata;
54 cfdata = E_NEW(E_Config_Dialog_Data, 1);
60 _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
62 const char *bg_file = NULL;
64 if (cfdata->bg) bg_file = strdup(cfdata->bg);
67 e_int_config_desklock_fsel_done(cfd->data, e_object_data_get(E_OBJECT(cfd)), bg_file);
71 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
73 Evas_Object *o, *ow, *ot, *rt;
78 o = e_widget_list_add(evas, 0, 0);
80 rg = e_widget_radio_group_new(&(cfdata->fmdir));
81 ot = e_widget_table_add(evas, 0);
82 rt = e_widget_table_add(evas, 1);
84 ow = e_widget_radio_add(evas, _("Personal"), 0, rg);
85 evas_object_smart_callback_add(ow, "changed", _cb_radio_changed, cfdata);
86 e_widget_table_object_append(rt, ow, 0, 0, 1, 1, 1, 1, 0, 0);
87 ow = e_widget_radio_add(evas, _("System"), 1, rg);
88 evas_object_smart_callback_add(ow, "changed", _cb_radio_changed, cfdata);
89 e_widget_table_object_append(rt, ow, 1, 0, 1, 1, 1, 1, 0, 0);
90 e_widget_table_object_append(ot, rt, 0, 0, 1, 1, 0, 0, 0, 0);
91 ow = e_widget_button_add(evas, _("Go up a Directory"), "go-up",
92 _cb_dir_up, cfdata, NULL);
94 e_widget_table_object_append(ot, ow, 0, 1, 1, 1, 0, 0, 0, 0);
96 if (cfdata->fmdir == 1)
97 e_prefix_data_concat_static(path, "data/backgrounds");
99 e_user_dir_concat_static(path, "backgrounds");
101 cfdata->o_list = e_widget_flist_add(evas);
104 cfg = e_widget_flist_config_get(cfdata->o_list);
105 cfg->view.no_click_rename = 1;
107 evas_object_smart_callback_add(cfdata->o_list, "dir_changed",
108 _cb_dir_changed, cfdata);
109 evas_object_smart_callback_add(cfdata->o_list, "selection_change",
110 _cb_sel_changed, cfdata);
111 evas_object_smart_callback_add(cfdata->o_list, "changed",
112 _cb_files_changed, cfdata);
113 evas_object_smart_callback_add(cfdata->o_list, "files_deleted",
114 _cb_files_deleted, cfdata);
115 e_widget_flist_path_set(cfdata->o_list, path, "/");
116 e_widget_size_min_set(cfdata->o_list, 200, 160);
117 e_widget_table_object_append(ot, cfdata->o_list, 0, 2, 1, 1, 1, 1, 1, 1);
118 e_widget_list_object_append(o, ot, 1, 1, 0.5);
124 _cb_dir_changed(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
126 E_Config_Dialog_Data *cfdata;
128 if (!(cfdata = data)) return;
129 e_widget_disabled_set(cfdata->o_up,
130 !e_widget_flist_has_parent_get(cfdata->o_list));
134 _cb_sel_changed(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
136 E_Config_Dialog_Data *cfdata;
138 E_Fm2_Icon_Info *ici;
139 const char *real_path;
142 if (!(cfdata = data)) return;
143 if (!(sel = e_widget_flist_selected_list_get(cfdata->o_list))) return;
145 real_path = e_widget_flist_real_path_get(cfdata->o_list);
146 if (!strcmp(real_path, "/"))
147 snprintf(buff, sizeof(buff), "/%s", ici->file);
149 snprintf(buff, sizeof(buff), "%s/%s", real_path, ici->file);
151 if (ecore_file_is_dir(buff)) return;
153 cfdata->bg = strdup(buff);
157 _cb_files_changed(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
159 E_Config_Dialog_Data *cfdata;
160 const char *p = NULL;
164 if (!(cfdata = data)) return;
165 if (!cfdata->bg) return;
166 p = e_widget_flist_real_path_get(cfdata->o_list);
169 if (strncmp(p, cfdata->bg, strlen(p))) return;
173 len = e_user_dir_concat_static(buff, "backgrounds");
174 if (!strncmp(cfdata->bg, buff, len))
175 p = cfdata->bg + len + 1;
178 len = e_prefix_data_concat_static(buff, "data/backgrounds");
179 if (!strncmp(cfdata->bg, buff, len))
180 p = cfdata->bg + len + 1;
184 e_widget_flist_select_set(cfdata->o_list, p, 1);
185 e_widget_flist_file_show(cfdata->o_list, p);
189 _cb_files_deleted(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
191 E_Config_Dialog_Data *cfdata;
192 Eina_List *sel, *all, *n;
193 E_Fm2_Icon_Info *ici, *ic;
195 if (!(cfdata = data)) return;
196 if (!cfdata->bg) return;
197 if (!(all = e_widget_flist_all_list_get(cfdata->o_list))) return;
198 if (!(sel = e_widget_flist_selected_list_get(cfdata->o_list))) return;
199 if (!(ici = sel->data)) return;
200 all = eina_list_data_find_list(all, ici);
201 n = eina_list_next(all);
204 if (!(n = eina_list_prev(all))) return;
206 if (!(ic = n->data)) return;
207 e_widget_flist_select_set(cfdata->o_list, ic->file, 1);
208 e_widget_flist_file_show(cfdata->o_list, ic->file);
210 evas_object_smart_callback_call(cfdata->o_list, "selection_change", cfdata);
214 _cb_radio_changed(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
216 E_Config_Dialog_Data *cfdata;
219 if (!(cfdata = data)) return;
220 if (cfdata->fmdir == 1)
221 e_prefix_data_concat_static(path, "data/backgrounds");
223 e_user_dir_concat_static(path, "backgrounds");
224 e_widget_flist_path_set(cfdata->o_list, path, "/");
228 _cb_dir_up(void *data1, void *data2 __UNUSED__)
230 E_Config_Dialog_Data *cfdata;
232 if (!(cfdata = data1)) return;
233 e_widget_flist_parent_go(cfdata->o_list);