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
20 Ecore_Event_Handler *hdl;
24 e_int_config_desk(E_Container *con, const char *params)
27 E_Config_Dialog_View *v;
28 E_Config_Dialog_Data *cfdata;
29 int con_num, zone_num, dx, dy;
31 if (!params) return NULL;
32 con_num = zone_num = dx = dy = -1;
33 if (sscanf(params, "%i %i %i %i", &con_num, &zone_num, &dx, &dy) != 4)
36 if (e_config_dialog_find("E", "internal/desk")) return NULL;
38 v = E_NEW(E_Config_Dialog_View, 1);
40 cfdata = E_NEW(E_Config_Dialog_Data, 1);
41 cfdata->con_num = con_num;
42 cfdata->zone_num = zone_num;
46 v->create_cfdata = _create_data;
47 v->free_cfdata = _free_data;
48 v->basic.apply_cfdata = _basic_apply;
49 v->basic.create_widgets = _basic_create;
50 v->override_auto_apply = 1;
52 cfd = e_config_dialog_new(con, _("Desk Settings"), "E", "internal/desk",
53 "preferences-desktop", 0, v, cfdata);
58 _fill_data(E_Config_Dialog_Data *cfdata)
65 bg = e_bg_file_get(cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
67 bg = e_theme_edje_file_get("base/theme/backgrounds", "e/desktop/background");
68 cfdata->bg = strdup(bg);
70 for (l = e_config->desktop_names; l; l = l->next)
72 E_Config_Desktop_Name *dn;
76 if (dn->container != cfdata->con_num) continue;
77 if (dn->zone != cfdata->zone_num) continue;
78 if ((dn->desk_x != cfdata->desk_x) || (dn->desk_y != cfdata->desk_y))
82 cfdata->name = strdup(dn->name);
88 snprintf(name, sizeof(name), _(e_config->desktop_default_name), cfdata->desk_x, cfdata->desk_y);
89 cfdata->name = strdup(name);
94 _create_data(E_Config_Dialog *cfd)
96 E_Config_Dialog_Data *cfdata;
99 if (!cfdata) return NULL;
105 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
108 ecore_event_handler_del(cfdata->hdl);
112 E_FREE(cfdata->name);
117 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
121 if (!cfdata->name[0])
123 snprintf(name, sizeof(name), _(e_config->desktop_default_name),
124 cfdata->desk_x, cfdata->desk_y);
125 cfdata->name = strdup(name);
128 e_desk_name_del(cfdata->con_num, cfdata->zone_num,
129 cfdata->desk_x, cfdata->desk_y);
130 e_desk_name_add(cfdata->con_num, cfdata->zone_num,
131 cfdata->desk_x, cfdata->desk_y, cfdata->name);
132 e_desk_name_update();
134 e_bg_del(cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
135 e_bg_add(cfdata->con_num, cfdata->zone_num,
136 cfdata->desk_x, cfdata->desk_y, cfdata->bg);
139 e_config_save_queue();
144 _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
146 Evas_Object *o, *of, *ob;
149 zone = e_zone_current_get(cfd->con);
151 o = e_widget_list_add(evas, 0, 0);
153 of = e_widget_frametable_add(evas, _("Desktop Name"), 0);
154 ob = e_widget_label_add(evas, _("Name:"));
155 e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 0);
156 ob = e_widget_entry_add(evas, &(cfdata->name), NULL, NULL, NULL);
157 e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 1, 1, 0);
158 e_widget_list_object_append(o, of, 1, 1, 0.5);
160 of = e_widget_frametable_add(evas, _("Desktop Wallpaper"), 0);
161 ob = e_widget_preview_add(evas, 240, (240 * zone->h) / zone->w);
162 cfdata->preview = ob;
164 e_widget_preview_edje_set(ob, cfdata->bg, "e/desktop/background");
165 e_widget_frametable_object_append(of, ob, 0, 0, 3, 1, 1, 1, 1, 0);
166 ob = e_widget_button_add(evas, _("Set"), "configure",
167 _cb_config, cfdata, NULL);
168 e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 0);
169 e_widget_list_object_append(o, of, 1, 1, 0.5);
172 ecore_event_handler_del(cfdata->hdl);
173 cfdata->hdl = ecore_event_handler_add(E_EVENT_BG_UPDATE, _cb_bg_change, cfdata);
179 _cb_config(void *data, void *data2 __UNUSED__)
181 E_Config_Dialog_Data *cfdata;
186 snprintf(buf, sizeof(buf), "%i %i %i %i",
187 cfdata->con_num, cfdata->zone_num, cfdata->desk_x, cfdata->desk_y);
188 e_configure_registry_call("internal/wallpaper_desk",
189 e_container_current_get(e_manager_current_get()),
194 _cb_bg_change(void *data, int type, void *event)
196 E_Event_Bg_Update *ev;
197 E_Config_Dialog_Data *cfdata;
200 if (type != E_EVENT_BG_UPDATE) return ECORE_CALLBACK_PASS_ON;
204 if (ev->container != cfdata->con_num) return ECORE_CALLBACK_PASS_ON;
205 if (ev->zone != cfdata->zone_num) return ECORE_CALLBACK_PASS_ON;
206 if (ev->desk_x != cfdata->desk_x) return ECORE_CALLBACK_PASS_ON;
207 if (ev->desk_y != cfdata->desk_y) return ECORE_CALLBACK_PASS_ON;
209 file = e_bg_file_get(cfdata->con_num, cfdata->zone_num,
210 cfdata->desk_x, cfdata->desk_y);
212 cfdata->bg = strdup(file);
213 e_widget_preview_edje_set(cfdata->preview, cfdata->bg,
214 "e/desktop/background");
216 return ECORE_CALLBACK_PASS_ON;