3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
5 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
7 static void _cb_config(void *data, void *data2);
8 static Eina_Bool _cb_bg_change(void *data, int type, void *event);
10 struct _E_Config_Dialog_Data
18 #ifdef _F_USE_DESK_WINDOW_PROFILE_
23 Ecore_Event_Handler *hdl;
27 e_int_config_desk(E_Container *con, const char *params)
30 E_Config_Dialog_View *v;
31 E_Config_Dialog_Data *cfdata;
32 int con_num, zone_num, dx, dy;
34 if (!params) return NULL;
35 con_num = zone_num = dx = dy = -1;
36 if (sscanf(params, "%i %i %i %i", &con_num, &zone_num, &dx, &dy) != 4)
39 if (e_config_dialog_find("E", "internal/desk")) return NULL;
41 v = E_NEW(E_Config_Dialog_View, 1);
43 cfdata = E_NEW(E_Config_Dialog_Data, 1);
44 cfdata->con_num = con_num;
45 cfdata->zone_num = zone_num;
49 v->create_cfdata = _create_data;
50 v->free_cfdata = _free_data;
51 v->basic.apply_cfdata = _basic_apply;
52 v->basic.create_widgets = _basic_create;
53 v->override_auto_apply = 1;
55 cfd = e_config_dialog_new(con, _("Desk Settings"), "E", "internal/desk",
56 "preferences-desktop", 0, v, cfdata);
61 _fill_data(E_Config_Dialog_Data *cfdata)
67 #ifdef _F_USE_DESK_WINDOW_PROFILE_
68 E_Config_Desktop_Window_Profile *prof;
71 bg = e_bg_file_get(cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
73 bg = e_theme_edje_file_get("base/theme/backgrounds", "e/desktop/background");
74 cfdata->bg = strdup(bg);
76 for (l = e_config->desktop_names; l; l = l->next)
78 E_Config_Desktop_Name *dn;
82 if (dn->container != cfdata->con_num) continue;
83 if (dn->zone != cfdata->zone_num) continue;
84 if ((dn->desk_x != cfdata->desk_x) || (dn->desk_y != cfdata->desk_y))
88 cfdata->name = strdup(dn->name);
94 snprintf(name, sizeof(name), _(e_config->desktop_default_name), cfdata->desk_x, cfdata->desk_y);
95 cfdata->name = strdup(name);
98 #ifdef _F_USE_DESK_WINDOW_PROFILE_
99 EINA_LIST_FOREACH(e_config->desktop_window_profiles, l, prof)
101 if (!((prof->container == cfdata->con_num) &&
102 (prof->zone == cfdata->zone_num) &&
103 (prof->desk_x == cfdata->desk_x) &&
104 (prof->desk_y == cfdata->desk_y)))
108 cfdata->profile = strdup(prof->profile);
114 cfdata->profile = strdup(e_config->desktop_default_window_profile);
119 _create_data(E_Config_Dialog *cfd)
121 E_Config_Dialog_Data *cfdata;
124 if (!cfdata) return NULL;
130 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
133 ecore_event_handler_del(cfdata->hdl);
137 E_FREE(cfdata->name);
138 #ifdef _F_USE_DESK_WINDOW_PROFILE_
140 E_FREE(cfdata->profile);
146 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
150 if (!cfdata->name[0])
152 snprintf(name, sizeof(name), _(e_config->desktop_default_name),
153 cfdata->desk_x, cfdata->desk_y);
154 cfdata->name = strdup(name);
157 #ifdef _F_USE_DESK_WINDOW_PROFILE_
158 if (!cfdata->profile[0])
159 cfdata->profile = strdup(e_config->desktop_default_window_profile);
162 e_desk_name_del(cfdata->con_num, cfdata->zone_num,
163 cfdata->desk_x, cfdata->desk_y);
164 e_desk_name_add(cfdata->con_num, cfdata->zone_num,
165 cfdata->desk_x, cfdata->desk_y, cfdata->name);
166 e_desk_name_update();
168 #ifdef _F_USE_DESK_WINDOW_PROFILE_
169 e_desk_window_profile_del(cfdata->con_num, cfdata->zone_num,
170 cfdata->desk_x, cfdata->desk_y);
171 e_desk_window_profile_add(cfdata->con_num, cfdata->zone_num,
172 cfdata->desk_x, cfdata->desk_y, cfdata->profile);
173 e_desk_window_profile_update();
176 e_bg_del(cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
177 e_bg_add(cfdata->con_num, cfdata->zone_num,
178 cfdata->desk_x, cfdata->desk_y, cfdata->bg);
181 e_config_save_queue();
186 _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
188 Evas_Object *o, *of, *ob;
191 zone = e_zone_current_get(cfd->con);
193 o = e_widget_list_add(evas, 0, 0);
195 of = e_widget_frametable_add(evas, _("Desktop Name"), 0);
196 ob = e_widget_label_add(evas, _("Name:"));
197 e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 0);
198 ob = e_widget_entry_add(evas, &(cfdata->name), NULL, NULL, NULL);
199 e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 1, 1, 0);
200 e_widget_list_object_append(o, of, 1, 1, 0.5);
202 #ifdef _F_USE_DESK_WINDOW_PROFILE_
203 of = e_widget_frametable_add(evas, _("Desktop Window Profile"), 0);
204 ob = e_widget_label_add(evas, _("Profile Name:"));
205 e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 0);
206 ob = e_widget_entry_add(evas, &(cfdata->profile), NULL, NULL, NULL);
207 e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 1, 1, 0);
208 e_widget_list_object_append(o, of, 1, 1, 0.5);
211 of = e_widget_frametable_add(evas, _("Desktop Wallpaper"), 0);
212 ob = e_widget_preview_add(evas, 240, (240 * zone->h) / zone->w);
213 cfdata->preview = ob;
215 e_widget_preview_edje_set(ob, cfdata->bg, "e/desktop/background");
216 e_widget_frametable_object_append(of, ob, 0, 0, 3, 1, 1, 1, 1, 0);
217 ob = e_widget_button_add(evas, _("Set"), "configure",
218 _cb_config, cfdata, NULL);
219 e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 0);
220 e_widget_list_object_append(o, of, 1, 1, 0.5);
223 ecore_event_handler_del(cfdata->hdl);
224 cfdata->hdl = ecore_event_handler_add(E_EVENT_BG_UPDATE, _cb_bg_change, cfdata);
230 _cb_config(void *data, void *data2 __UNUSED__)
232 E_Config_Dialog_Data *cfdata;
237 snprintf(buf, sizeof(buf), "%i %i %i %i",
238 cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
239 e_configure_registry_call("internal/wallpaper_desk",
240 e_container_current_get(e_manager_current_get()),
245 _cb_bg_change(void *data, int type, void *event)
247 E_Event_Bg_Update *ev;
248 E_Config_Dialog_Data *cfdata;
251 if (type != E_EVENT_BG_UPDATE) return ECORE_CALLBACK_PASS_ON;
255 if (ev->container != cfdata->con_num) return ECORE_CALLBACK_PASS_ON;
256 if (ev->zone != cfdata->zone_num) return ECORE_CALLBACK_PASS_ON;
257 if (ev->desk_x != cfdata->desk_x) return ECORE_CALLBACK_PASS_ON;
258 if (ev->desk_y != cfdata->desk_y) return ECORE_CALLBACK_PASS_ON;
260 file = e_bg_file_get(cfdata->con_num, cfdata->zone_num,
261 cfdata->desk_x, cfdata->desk_y);
263 cfdata->bg = strdup(file);
264 e_widget_preview_edje_set(cfdata->preview, cfdata->bg,
265 "e/desktop/background");
267 return ECORE_CALLBACK_PASS_ON;