3 /* PROTOTYPES - same all the time */
4 static void *_create_data(E_Config_Dialog *cfd);
5 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
9 static void _cb_disable_check_list(void *data, Evas_Object *obj);
11 /* Actual config data we will be playing with whil the dialog is active */
12 struct _E_Config_Dialog_Data
18 int geometry_auto_resize_limit;
19 int geometry_auto_move;
42 int maximize_direction;
43 int maximized_allow_manip;
44 int border_fix_on_shelf_toggle;
46 Eina_List *resistance_list;
50 e_int_config_window_geometry(E_Container *con, const char *params __UNUSED__)
53 E_Config_Dialog_View *v;
55 if (e_config_dialog_find("E", "windows/window_geometry")) return NULL;
56 v = E_NEW(E_Config_Dialog_View, 1);
59 v->create_cfdata = _create_data;
60 v->free_cfdata = _free_data;
61 v->basic.apply_cfdata = _basic_apply;
62 v->basic.create_widgets = _basic_create;
63 v->basic.check_changed = _basic_check_changed;
65 /* create config diaolg for NULL object/data */
66 cfd = e_config_dialog_new(con, _("Window Geometry"),
67 "E", "windows/window_geometry",
68 "preferences-window-geometry", 0, v, NULL);
73 _create_data(E_Config_Dialog *cfd __UNUSED__)
75 E_Config_Dialog_Data *cfdata = E_NEW(E_Config_Dialog_Data, 1);
76 if (!cfdata) return NULL;
77 cfdata->use_resist = e_config->use_resist;
78 cfdata->desk_resist = e_config->desk_resist;
79 cfdata->window_resist = e_config->window_resist;
80 cfdata->gadget_resist = e_config->gadget_resist;
81 cfdata->geometry_auto_resize_limit = e_config->geometry_auto_resize_limit;
82 cfdata->geometry_auto_move = e_config->geometry_auto_move;
83 cfdata->border_keyboard.timeout = e_config->border_keyboard.timeout;
84 cfdata->border_keyboard.move.dx = e_config->border_keyboard.move.dx;
85 cfdata->border_keyboard.resize.dx = e_config->border_keyboard.resize.dx;
86 cfdata->transient.move = e_config->transient.move;
87 cfdata->transient.resize = e_config->transient.resize;
88 cfdata->transient.raise = e_config->transient.raise;
89 cfdata->transient.lower = e_config->transient.lower;
90 cfdata->transient.layer = e_config->transient.layer;
91 cfdata->transient.desktop = e_config->transient.desktop;
92 cfdata->transient.iconify = e_config->transient.iconify;
93 cfdata->maximize_policy = (e_config->maximize_policy & E_MAXIMIZE_TYPE);
94 if (cfdata->maximize_policy == E_MAXIMIZE_NONE)
95 cfdata->maximize_policy = E_MAXIMIZE_FULLSCREEN;
96 cfdata->maximize_direction =
97 (e_config->maximize_policy & E_MAXIMIZE_DIRECTION);
98 if (!cfdata->maximize_direction)
99 cfdata->maximize_direction = E_MAXIMIZE_BOTH;
100 cfdata->maximized_allow_manip = e_config->allow_manip;
101 cfdata->border_fix_on_shelf_toggle = e_config->border_fix_on_shelf_toggle;
106 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
108 eina_list_free(cfdata->resistance_list);
113 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
115 e_config->use_resist = cfdata->use_resist;
116 e_config->desk_resist = cfdata->desk_resist;
117 e_config->window_resist = cfdata->window_resist;
118 e_config->gadget_resist = cfdata->gadget_resist;
119 e_config->geometry_auto_resize_limit = cfdata->geometry_auto_resize_limit;
120 e_config->geometry_auto_move = cfdata->geometry_auto_move;
121 e_config->border_keyboard.timeout = cfdata->border_keyboard.timeout;
122 e_config->border_keyboard.move.dx = cfdata->border_keyboard.move.dx;
123 e_config->border_keyboard.move.dy = cfdata->border_keyboard.move.dx;
124 e_config->border_keyboard.resize.dx = cfdata->border_keyboard.resize.dx;
125 e_config->border_keyboard.resize.dy = cfdata->border_keyboard.resize.dx;
126 e_config->transient.move = cfdata->transient.move;
127 e_config->transient.resize = cfdata->transient.resize;
128 e_config->transient.raise = cfdata->transient.raise;
129 e_config->transient.lower = cfdata->transient.lower;
130 e_config->transient.layer = cfdata->transient.layer;
131 e_config->transient.desktop = cfdata->transient.desktop;
132 e_config->transient.iconify = cfdata->transient.iconify;
133 e_config->maximize_policy =
134 (cfdata->maximize_policy | cfdata->maximize_direction);
135 e_config->allow_manip = cfdata->maximized_allow_manip;
136 e_config->border_fix_on_shelf_toggle = cfdata->border_fix_on_shelf_toggle;
137 e_config_save_queue();
138 return 1; /* Apply was OK */
142 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
144 return ((e_config->use_resist != cfdata->use_resist) ||
145 (e_config->desk_resist != cfdata->desk_resist) ||
146 (e_config->window_resist != cfdata->window_resist) ||
147 (e_config->gadget_resist != cfdata->gadget_resist) ||
148 (e_config->geometry_auto_resize_limit != cfdata->geometry_auto_resize_limit) ||
149 (e_config->geometry_auto_move != cfdata->geometry_auto_move) ||
150 (e_config->border_keyboard.timeout != cfdata->border_keyboard.timeout) ||
151 (e_config->border_keyboard.move.dx != cfdata->border_keyboard.move.dx) ||
152 (e_config->border_keyboard.move.dy != cfdata->border_keyboard.move.dx) ||
153 (e_config->border_keyboard.resize.dx != cfdata->border_keyboard.resize.dx) ||
154 (e_config->border_keyboard.resize.dy != cfdata->border_keyboard.resize.dx) ||
155 (e_config->transient.move != cfdata->transient.move) ||
156 (e_config->transient.resize != cfdata->transient.resize) ||
157 (e_config->transient.raise != cfdata->transient.raise) ||
158 (e_config->transient.lower != cfdata->transient.lower) ||
159 (e_config->transient.layer != cfdata->transient.layer) ||
160 (e_config->transient.desktop != cfdata->transient.desktop) ||
161 (e_config->transient.iconify != cfdata->transient.iconify) ||
162 (e_config->maximize_policy != (cfdata->maximize_policy | cfdata->maximize_direction)) ||
163 (e_config->allow_manip != cfdata->maximized_allow_manip) ||
164 (e_config->border_fix_on_shelf_toggle != cfdata->border_fix_on_shelf_toggle));
168 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
170 Evas_Object *otb, *ol, *of, *ow, *oc;
173 otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
176 ol = e_widget_list_add(evas, 0, 0);
177 oc = e_widget_check_add(evas, _("Resist obstacles"), &(cfdata->use_resist));
178 e_widget_list_object_append(ol, oc, 1, 0, 0.5);
179 ow = e_widget_label_add(evas, _("Other windows"));
180 e_widget_disabled_set(ow, !cfdata->use_resist);
181 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
182 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
183 ow = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 0, 64.0, 1.0, 0,
184 NULL, &(cfdata->window_resist), 100);
185 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
186 e_widget_disabled_set(ow, !cfdata->use_resist);
187 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
188 ow = e_widget_label_add(evas, _("Edge of the screen"));
189 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
190 e_widget_disabled_set(ow, !cfdata->use_resist);
191 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
192 ow = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 0, 64.0, 1.0, 0,
193 NULL, &(cfdata->desk_resist), 100);
194 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
195 e_widget_disabled_set(ow, !cfdata->use_resist);
196 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
197 ow = e_widget_label_add(evas, _("Desktop gadgets"));
198 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
199 e_widget_disabled_set(ow, !cfdata->use_resist);
200 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
201 ow = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 0, 64.0, 1.0, 0,
202 NULL, &(cfdata->gadget_resist), 100);
203 cfdata->resistance_list = eina_list_append (cfdata->resistance_list, ow);
204 e_widget_disabled_set(ow, !cfdata->use_resist);
205 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
206 e_widget_on_change_hook_set(oc, _cb_disable_check_list,
207 cfdata->resistance_list);
208 e_widget_toolbook_page_append(otb, NULL, _("Resistance"), ol,
209 1, 0, 1, 0, 0.5, 0.0);
212 ol = e_widget_list_add(evas, 0, 0);
213 of = e_widget_framelist_add(evas, _("Policy"), 0);
214 rg = e_widget_radio_group_new(&(cfdata->maximize_policy));
215 ow = e_widget_radio_add(evas, _("Fullscreen"), E_MAXIMIZE_FULLSCREEN, rg);
216 e_widget_framelist_object_append(of, ow);
217 /* FIXME smart is nothing else than expand - dont confuse users */
218 ow = e_widget_radio_add(evas, _("Smart expansion"), E_MAXIMIZE_SMART, rg);
219 e_widget_framelist_object_append(of, ow);
220 /* ob = e_widget_radio_add(evas, _("Expand the window"), E_MAXIMIZE_EXPAND, rg);
221 * e_widget_list_object_append(o, ob, 1, 1, 0.5); */
222 ow = e_widget_radio_add(evas, _("Fill available space"), E_MAXIMIZE_FILL, rg);
223 e_widget_framelist_object_append(of, ow);
224 e_widget_list_object_append(ol, of, 1, 0, 0.5);
225 of = e_widget_framelist_add(evas, _("Direction"), 0);
226 rg = e_widget_radio_group_new(&(cfdata->maximize_direction));
227 ow = e_widget_radio_add(evas, _("Horizontal"), E_MAXIMIZE_HORIZONTAL, rg);
228 e_widget_framelist_object_append(of, ow);
229 ow = e_widget_radio_add(evas, _("Vertical"), E_MAXIMIZE_VERTICAL, rg);
230 e_widget_framelist_object_append(of, ow);
231 ow = e_widget_radio_add(evas, _("Both"), E_MAXIMIZE_BOTH, rg);
232 e_widget_framelist_object_append(of, ow);
233 e_widget_list_object_append(ol, of, 1, 0, 0.5);
234 ow = e_widget_check_add(evas, _("Allow manipulation of maximized windows"),
235 &(cfdata->maximized_allow_manip));
236 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
237 e_widget_toolbook_page_append(otb, NULL, _("Maximization"), ol,
238 1, 0, 1, 0, 0.5, 0.0);
240 /* Keyboard Move and resize */
241 ol = e_widget_list_add(evas, 0, 0);
242 ow = e_widget_label_add(evas, _("Automatically accept changes after:"));
243 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
244 ow = e_widget_slider_add(evas, 1, 0, _("%1.1f s"), 0.0, 9.9, 0.1, 0,
245 &(cfdata->border_keyboard.timeout), NULL, 100);
246 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
247 ow = e_widget_label_add(evas, _("Move by"));
248 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
249 ow = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 1, 255, 1, 0, NULL,
250 &(cfdata->border_keyboard.move.dx), 100);
251 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
252 ow = e_widget_label_add(evas, _("Resize by"));
253 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
254 ow = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 1, 255, 1, 0, NULL,
255 &(cfdata->border_keyboard.resize.dx), 100);
256 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
257 e_widget_toolbook_page_append(otb, NULL, _("Keyboard"), ol,
258 1, 0, 1, 0, 0.5, 0.0);
261 /* Automatic Move and resize */
262 ol = e_widget_list_add(evas, 0, 0);
263 ow = e_widget_check_add(evas, _("Limit resize to useful geometry"),
264 &(cfdata->geometry_auto_resize_limit));
265 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
266 ow = e_widget_check_add(evas, _("Move after resize"),
267 &(cfdata->geometry_auto_move));
268 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
269 ow = e_widget_check_add(evas, _("Adjust windows on shelf hide"),
270 &(cfdata->border_fix_on_shelf_toggle));
271 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
272 e_widget_toolbook_page_append(otb, NULL, _("Automatic"), ol,
273 1, 0, 1, 0, 0.5, 0.0);
276 ol = e_widget_list_add(evas, 0, 0);
277 ow = e_widget_check_add(evas, _("Follow Move"),
278 &(cfdata->transient.move));
279 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
280 ow = e_widget_check_add(evas, _("Follow Resize"),
281 &(cfdata->transient.resize));
282 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
283 ow = e_widget_check_add(evas, _("Follow Raise"),
284 &(cfdata->transient.raise));
285 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
286 ow = e_widget_check_add(evas, _("Follow Lower"),
287 &(cfdata->transient.lower));
288 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
289 ow = e_widget_check_add(evas, _("Follow Layer"),
290 &(cfdata->transient.layer));
291 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
292 ow = e_widget_check_add(evas, _("Follow Desktop"),
293 &(cfdata->transient.desktop));
294 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
295 ow = e_widget_check_add(evas, _("Follow Iconify"),
296 &(cfdata->transient.iconify));
297 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
299 e_widget_toolbook_page_append(otb, NULL, _("Transients"), ol,
300 1, 0, 1, 0, 0.5, 0.0);
302 e_widget_toolbook_page_show(otb, 0);
307 _cb_disable_check_list(void *data, Evas_Object *obj)
309 const Eina_List *list = data;
312 Eina_Bool disable = !e_widget_check_checked_get(obj);
314 EINA_LIST_FOREACH(list, l, o)
315 e_widget_disabled_set(o, disable);