3 static Evas_Object *_trans_preview_add(E_Config_Dialog_Data *cfdata, Evas *evas, int minw, int minh);
4 static void _e_wid_done(void *data, Evas_Object *obj, const char *emission, const char *source);
5 static void _trans_preview_trans_set(E_Config_Dialog_Data *cfdata, const char *trans);
7 static void *_create_data(E_Config_Dialog *cfd);
8 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
9 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
10 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
12 static void _event_cb_changed(void *data);
13 static void _trans_cb_changed(void *data);
15 struct _E_Config_Dialog_Data
17 char *transition_start;
18 char *transition_desk;
19 char *transition_change;
21 Evas_Object *event_list;
22 Evas_Object *trans_list;
25 Evas_Object *o_prev_bg;
30 e_int_config_transitions(E_Container *con, const char *params __UNUSED__)
33 E_Config_Dialog_View *v;
35 if (e_config_dialog_find("E", "appearance/transitions")) return NULL;
36 v = E_NEW(E_Config_Dialog_View, 1);
39 v->create_cfdata = _create_data;
40 v->free_cfdata = _free_data;
41 v->basic.apply_cfdata = _basic_apply_data;
42 v->basic.create_widgets = _basic_create_widgets;
44 cfd = e_config_dialog_new(con, _("Transition Settings"),
45 "E", "appearance/transitions",
46 "preferences-transitions", 0, v, NULL);
51 _fill_data(E_Config_Dialog_Data *cfdata)
53 if (e_config->transition_start)
54 cfdata->transition_start = strdup(e_config->transition_start);
55 if (e_config->transition_desk)
56 cfdata->transition_desk = strdup(e_config->transition_desk);
57 if (e_config->transition_change)
58 cfdata->transition_change = strdup(e_config->transition_change);
62 _create_data(E_Config_Dialog *cfd __UNUSED__)
64 E_Config_Dialog_Data *cfdata;
66 cfdata = E_NEW(E_Config_Dialog_Data, 1);
72 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
74 E_FREE(cfdata->transition_start);
75 E_FREE(cfdata->transition_desk);
76 E_FREE(cfdata->transition_change);
81 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
83 if (e_config->transition_start)
84 eina_stringshare_del(e_config->transition_start);
85 e_config->transition_start = NULL;
86 if (cfdata->transition_start)
88 if (e_theme_transition_find(cfdata->transition_start))
89 e_config->transition_start =
90 eina_stringshare_add(cfdata->transition_start);
93 if (e_config->transition_desk)
94 eina_stringshare_del(e_config->transition_desk);
95 e_config->transition_desk = NULL;
96 if (cfdata->transition_desk)
98 if (e_theme_transition_find(cfdata->transition_desk))
99 e_config->transition_desk = eina_stringshare_add(cfdata->transition_desk);
102 if (e_config->transition_change)
103 eina_stringshare_del(e_config->transition_change);
104 e_config->transition_change = NULL;
105 if (cfdata->transition_change)
107 if (e_theme_transition_find(cfdata->transition_change))
108 e_config->transition_change = eina_stringshare_add(cfdata->transition_change);
111 e_config_save_queue();
116 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
119 Evas_Object *o, *of, *il;
123 zone = e_zone_current_get(cfd->con);
125 o = e_widget_list_add(evas, 0, 1);
127 of = e_widget_framelist_add(evas, _("Events"), 0);
128 il = e_widget_ilist_add(evas, 48, 48, NULL);
129 cfdata->event_list = il;
130 e_widget_size_min_set(il, 140, 200);
132 evas_event_freeze(evas_object_evas_get(il));
134 e_widget_ilist_freeze(il);
135 e_widget_ilist_append(il, NULL, _("Startup"), _event_cb_changed, cfdata, NULL);
136 e_widget_ilist_append(il, NULL, _("Desk Change"), _event_cb_changed, cfdata, NULL);
137 e_widget_ilist_append(il, NULL, _("Background Change"), _event_cb_changed, cfdata, NULL);
138 e_widget_ilist_go(il);
139 e_widget_ilist_thaw(il);
141 evas_event_thaw(evas_object_evas_get(il));
142 e_widget_framelist_object_append(of, il);
143 e_widget_list_object_append(o, of, 1, 1, 0.5);
145 of = e_widget_framelist_add(evas, _("Transitions"), 0);
146 il = e_widget_ilist_add(evas, 48, 48, NULL);
147 cfdata->trans_list = il;
148 e_widget_size_min_set(il, 100, 200);
150 evas_event_freeze(evas_object_evas_get(il));
152 e_widget_ilist_freeze(il);
153 e_widget_ilist_append(il, NULL, _("None"), _trans_cb_changed, cfdata, NULL);
154 for (l = e_theme_transition_list(); l; l = l->next)
158 e_widget_ilist_append(il, NULL, t, _trans_cb_changed, cfdata, NULL);
160 e_widget_ilist_go(il);
161 e_widget_ilist_thaw(il);
163 evas_event_thaw(evas_object_evas_get(il));
164 e_widget_framelist_object_append(of, il);
165 e_widget_list_object_append(o, of, 1, 1, 0.5);
167 of = e_widget_framelist_add(evas, _("Preview"), 0);
168 il = _trans_preview_add(cfdata, evas, 200, ((200 * zone->h) / zone->w));
169 e_widget_framelist_object_append(of, il);
170 e_widget_list_object_append(o, of, 1, 1, 0.5);
172 e_dialog_resizable_set(cfd->dia, 1);
177 _event_cb_changed(void *data)
179 E_Config_Dialog_Data *cfdata;
180 const char *list, *trans = NULL;
184 sel = e_widget_ilist_selected_get(cfdata->event_list);
188 trans = e_config->transition_start;
191 trans = e_config->transition_desk;
194 trans = e_config->transition_change;
198 for (i = 0; i < e_widget_ilist_count(cfdata->trans_list); i++)
200 list = e_widget_ilist_nth_label_get(cfdata->trans_list, i);
204 if (!strcmp(_("None"), list))
206 e_widget_ilist_selected_set(cfdata->trans_list, i);
212 if (!strcmp(trans, list))
214 e_widget_ilist_selected_set(cfdata->trans_list, i);
220 e_widget_ilist_unselect(cfdata->trans_list);
224 _trans_cb_changed(void *data)
226 E_Config_Dialog_Data *cfdata;
231 sel = e_widget_ilist_selected_get(cfdata->event_list);
233 t = e_widget_ilist_selected_label_get(cfdata->trans_list);
236 if (!strcmp(t, _("None"))) t = NULL;
240 E_FREE(cfdata->transition_start);
241 if (t) cfdata->transition_start = strdup(t);
244 E_FREE(cfdata->transition_desk);
245 if (t) cfdata->transition_desk = strdup(t);
248 E_FREE(cfdata->transition_change);
249 if (t) cfdata->transition_change = strdup(t);
255 _trans_preview_trans_set(cfdata, t);
259 _trans_preview_add(E_Config_Dialog_Data *cfdata, Evas *evas, int minw, int minh)
261 Evas_Object *obj, *o, *oa;
263 oa = e_widget_aspect_add(evas, minw, minh);
264 obj = e_widget_preview_add(evas, minw, minh);
265 e_widget_aspect_child_set(oa, obj);
267 o = edje_object_add(e_widget_preview_evas_get(obj));
268 cfdata->o_prev_bg = o;
269 e_theme_edje_object_set(o, "base/theme/widgets", "e/transpreview/1");
271 e_widget_preview_extern_object_set(obj, o);
278 _trans_preview_trans_set(E_Config_Dialog_Data *cfdata, const char *trans)
284 evas_object_del(cfdata->o_trans);
286 evas_object_del(cfdata->o_bg);
287 if (cfdata->o_prev_bg)
288 evas_object_del(cfdata->o_prev_bg);
290 cfdata->o_trans = NULL;
292 cfdata->o_prev_bg = NULL;
294 snprintf(buf, sizeof(buf), "e/transitions/%s", trans);
296 o = edje_object_add(e_widget_preview_evas_get(cfdata->tp));
298 e_theme_edje_object_set(cfdata->o_trans, "base/theme/transitions", buf);
299 edje_object_signal_callback_add(o, "e,state,done", "*", _e_wid_done, cfdata);
301 e_widget_preview_extern_object_set(cfdata->tp, o);
303 o = edje_object_add(e_widget_preview_evas_get(cfdata->tp));
305 e_theme_edje_object_set(o, "base/theme/widgets", "e/transpreview/0");
308 o = edje_object_add(e_widget_preview_evas_get(cfdata->tp));
309 cfdata->o_prev_bg = o;
310 e_theme_edje_object_set(o, "base/theme/widgets", "e/transpreview/1");
313 edje_object_part_swallow(cfdata->o_trans, "e.swallow.bg.old", cfdata->o_prev_bg);
314 edje_object_part_swallow(cfdata->o_trans, "e.swallow.bg.new", cfdata->o_bg);
316 edje_object_signal_emit(cfdata->o_trans, "e,action,start", "e");
320 _e_wid_done(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
322 E_Config_Dialog_Data *cfdata;
328 evas_object_del(cfdata->o_trans);
330 evas_object_del(cfdata->o_bg);
331 if (cfdata->o_prev_bg)
332 evas_object_del(cfdata->o_prev_bg);
334 cfdata->o_trans = NULL;
336 cfdata->o_prev_bg = NULL;
338 o = edje_object_add(e_widget_preview_evas_get(cfdata->tp));
339 cfdata->o_prev_bg = o;
340 e_theme_edje_object_set(o, "base/theme/widgets", "e/transpreview/1");
342 e_widget_preview_extern_object_set(cfdata->tp, o);