1 /*
2 * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
3 * Copyright (C) 2004-2021 Kim Woelders
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to
7 * deal in the Software without restriction, including without limitation the
8 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9 * sell copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies of the Software, its documentation and marketing & publicity
14 * materials, and acknowledgment shall be given in the documentation, materials
15 * and software packages that this Software was used.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24 #include "config.h"
25
26 #if ENABLE_DIALOGS
27 #include "E.h"
28 #include "dialog.h"
29 #include "settings.h"
30
31 typedef struct {
32 int move;
33 int resize;
34 int geominfo;
35 int maximize;
36 int maximize_speed;
37 char maximize_animate;
38 char dragbar_nocover;
39 char enable_smart_max_hv;
40 char avoid_server_grab;
41 char update_while_moving;
42 char sync_request;
43 } MovResDlgData;
44
45 static void
_DlgApplyMoveResize(Dialog * d,int val __UNUSED__,void * data __UNUSED__)46 _DlgApplyMoveResize(Dialog * d, int val __UNUSED__, void *data __UNUSED__)
47 {
48 MovResDlgData *dd = DLG_DATA_GET(d, MovResDlgData);
49
50 Conf.movres.mode_move = dd->move;
51 Conf.movres.mode_resize = dd->resize;
52 Conf.movres.mode_info = dd->geominfo;
53 Conf.movres.mode_maximize_default = dd->maximize;
54 Conf.movres.avoid_server_grab = dd->avoid_server_grab;
55 Conf.movres.update_while_moving = dd->update_while_moving;
56 Conf.movres.enable_sync_request = dd->sync_request;
57 Conf.movres.dragbar_nocover = dd->dragbar_nocover;
58 Conf.movres.enable_smart_max_hv = dd->enable_smart_max_hv;
59 Conf.movres.maximize_speed = dd->maximize_speed;
60 Conf.movres.maximize_animate = dd->maximize_animate;
61
62 autosave();
63 }
64
65 static void
_DlgFillMoveResize(Dialog * d,DItem * table,void * data __UNUSED__)66 _DlgFillMoveResize(Dialog * d, DItem * table, void *data __UNUSED__)
67 {
68 MovResDlgData *dd = DLG_DATA_GET(d, MovResDlgData);
69 DItem *di, *radio1, *radio2, *radio3, *radio4;
70
71 dd->move = Conf.movres.mode_move;
72 dd->resize = Conf.movres.mode_resize;
73 dd->geominfo = Conf.movres.mode_info;
74 dd->maximize = Conf.movres.mode_maximize_default;
75 dd->avoid_server_grab = Conf.movres.avoid_server_grab;
76 dd->update_while_moving = Conf.movres.update_while_moving;
77 dd->sync_request = Conf.movres.enable_sync_request;
78 dd->dragbar_nocover = Conf.movres.dragbar_nocover;
79 dd->enable_smart_max_hv = Conf.movres.enable_smart_max_hv;
80 dd->maximize_speed = Conf.movres.maximize_speed;
81 dd->maximize_animate = Conf.movres.maximize_animate;
82
83 DialogItemTableSetOptions(table, 2, 0, 0, 0);
84
85 di = DialogAddItem(table, DITEM_TEXT);
86 DialogItemSetFill(di, 0, 0);
87 DialogItemSetAlign(di, 0, 512);
88 DialogItemSetText(di, _("Move Methods:"));
89
90 di = DialogAddItem(table, DITEM_TEXT);
91 DialogItemSetFill(di, 0, 0);
92 DialogItemSetAlign(di, 0, 512);
93 DialogItemSetText(di, _("Resize Methods:"));
94
95 radio1 = di = DialogAddItem(table, DITEM_RADIOBUTTON);
96 DialogItemSetText(di, _("Opaque"));
97 DialogItemRadioButtonSetFirst(di, radio1);
98 DialogItemRadioButtonGroupSetVal(di, MR_OPAQUE);
99
100 radio2 = di = DialogAddItem(table, DITEM_RADIOBUTTON);
101 DialogItemSetText(di, _("Opaque"));
102 DialogItemRadioButtonSetFirst(di, radio2);
103 DialogItemRadioButtonGroupSetVal(di, MR_OPAQUE);
104
105 di = DialogAddItem(table, DITEM_RADIOBUTTON);
106 DialogItemSetText(di, _("Technical"));
107 DialogItemRadioButtonSetFirst(di, radio1);
108 DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
109
110 di = DialogAddItem(table, DITEM_RADIOBUTTON);
111 DialogItemSetText(di, _("Technical"));
112 DialogItemRadioButtonSetFirst(di, radio2);
113 DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
114
115 di = DialogAddItem(table, DITEM_RADIOBUTTON);
116 DialogItemSetText(di, _("TechOpaque"));
117 DialogItemRadioButtonSetFirst(di, radio1);
118 DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
119
120 di = DialogAddItem(table, DITEM_RADIOBUTTON);
121 DialogItemSetText(di, _("TechOpaque"));
122 DialogItemRadioButtonSetFirst(di, radio2);
123 DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
124
125 di = DialogAddItem(table, DITEM_RADIOBUTTON);
126 DialogItemSetText(di, _("Box"));
127 DialogItemRadioButtonSetFirst(di, radio1);
128 DialogItemRadioButtonGroupSetVal(di, MR_BOX);
129
130 di = DialogAddItem(table, DITEM_RADIOBUTTON);
131 DialogItemSetText(di, _("Box"));
132 DialogItemRadioButtonSetFirst(di, radio2);
133 DialogItemRadioButtonGroupSetVal(di, MR_BOX);
134
135 DialogItemRadioButtonGroupSetValPtr(radio1, &dd->move);
136 DialogItemRadioButtonGroupSetValPtr(radio2, &dd->resize);
137
138 di = DialogAddItem(table, DITEM_CHECKBUTTON);
139 DialogItemSetColSpan(di, 2);
140 DialogItemSetText(di, _("Avoid server grab"));
141 DialogItemCheckButtonSetPtr(di, &dd->avoid_server_grab);
142
143 di = DialogAddItem(table, DITEM_SEPARATOR);
144 DialogItemSetColSpan(di, 2);
145
146 di = DialogAddItem(table, DITEM_TEXT);
147 DialogItemSetColSpan(di, 2);
148 DialogItemSetFill(di, 0, 0);
149 DialogItemSetAlign(di, 0, 512);
150 DialogItemSetText(di, _("Move/Resize Geometry Info Postion:"));
151
152 radio3 = di = DialogAddItem(table, DITEM_RADIOBUTTON);
153 DialogItemSetColSpan(di, 2);
154 DialogItemSetText(di, _("Window Center (O/T/B Methods)"));
155 DialogItemRadioButtonSetFirst(di, radio3);
156 DialogItemRadioButtonGroupSetVal(di, 1);
157
158 di = DialogAddItem(table, DITEM_RADIOBUTTON);
159 DialogItemSetColSpan(di, 2);
160 DialogItemSetText(di, _("Always Screen corner"));
161 DialogItemRadioButtonSetFirst(di, radio3);
162 DialogItemRadioButtonGroupSetVal(di, 2);
163
164 di = DialogAddItem(table, DITEM_RADIOBUTTON);
165 DialogItemSetColSpan(di, 2);
166 DialogItemSetText(di, _("Don't show"));
167 DialogItemRadioButtonSetFirst(di, radio3);
168 DialogItemRadioButtonGroupSetVal(di, 0);
169 DialogItemRadioButtonGroupSetValPtr(radio3, &dd->geominfo);
170
171 di = DialogAddItem(table, DITEM_SEPARATOR);
172 DialogItemSetColSpan(di, 2);
173
174 di = DialogAddItem(table, DITEM_TEXT);
175 DialogItemSetColSpan(di, 2);
176 DialogItemSetFill(di, 0, 0);
177 DialogItemSetAlign(di, 0, 512);
178 DialogItemSetText(di, _("Default Resize Policy:"));
179
180 radio4 = di = DialogAddItem(table, DITEM_RADIOBUTTON);
181 DialogItemSetColSpan(di, 2);
182 DialogItemSetText(di, _("Conservative"));
183 DialogItemRadioButtonSetFirst(di, radio4);
184 DialogItemRadioButtonGroupSetVal(di, 2);
185
186 di = DialogAddItem(table, DITEM_RADIOBUTTON);
187 DialogItemSetColSpan(di, 2);
188 DialogItemSetText(di, _("Available"));
189 DialogItemRadioButtonSetFirst(di, radio4);
190 DialogItemRadioButtonGroupSetVal(di, 1);
191
192 di = DialogAddItem(table, DITEM_RADIOBUTTON);
193 DialogItemSetColSpan(di, 2);
194 DialogItemSetText(di, _("Absolute"));
195 DialogItemRadioButtonSetFirst(di, radio4);
196 DialogItemRadioButtonGroupSetVal(di, 0);
197 DialogItemRadioButtonGroupSetValPtr(radio4, &dd->maximize);
198
199 di = DialogAddItem(table, DITEM_SEPARATOR);
200 DialogItemSetColSpan(di, 2);
201
202 di = DialogAddItem(table, DITEM_CHECKBUTTON);
203 DialogItemSetColSpan(di, 2);
204 DialogItemSetText(di, _("Update window while moving"));
205 DialogItemCheckButtonSetPtr(di, &dd->update_while_moving);
206
207 di = DialogAddItem(table, DITEM_CHECKBUTTON);
208 DialogItemSetColSpan(di, 2);
209 DialogItemSetText(di, _("Synchronize move/resize with application"));
210 DialogItemCheckButtonSetPtr(di, &dd->sync_request);
211
212 di = DialogAddItem(table, DITEM_CHECKBUTTON);
213 DialogItemSetColSpan(di, 2);
214 DialogItemSetText(di, _("Do not cover dragbar"));
215 DialogItemCheckButtonSetPtr(di, &dd->dragbar_nocover);
216
217 di = DialogAddItem(table, DITEM_CHECKBUTTON);
218 DialogItemSetColSpan(di, 2);
219 DialogItemSetText(di, _("Enable smart maximization"));
220 DialogItemCheckButtonSetPtr(di, &dd->enable_smart_max_hv);
221
222 di = DialogAddItem(table, DITEM_CHECKBUTTON);
223 DialogItemSetColSpan(di, 2);
224 DialogItemSetText(di, _("Animate window maximization"));
225 DialogItemCheckButtonSetPtr(di, &dd->maximize_animate);
226
227 di = DialogAddItem(table, DITEM_TEXT);
228 DialogItemSetFill(di, 0, 0);
229 DialogItemSetAlign(di, 1024, 512);
230 DialogItemSetText(di, _("Maximization animation speed:"));
231
232 di = DialogAddItem(table, DITEM_SLIDER);
233 DialogItemSliderSetBounds(di, 0, 20000);
234 DialogItemSliderSetUnits(di, 500);
235 DialogItemSliderSetJump(di, 1000);
236 DialogItemSliderSetValPtr(di, &dd->maximize_speed);
237 }
238
239 const DialogDef DlgMoveResize = {
240 "CONFIGURE_MOVERESIZE",
241 N_("Move/Resize"), N_("Move & Resize Settings"),
242 sizeof(MovResDlgData),
243 SOUND_SETTINGS_MOVERESIZE,
244 "pix/moveres.png",
245 N_("Enlightenment Move & Resize\n" "Method Settings Dialog"),
246 _DlgFillMoveResize,
247 DLG_OAC, _DlgApplyMoveResize, NULL
248 };
249
250 typedef struct {
251 char with_leader;
252 char switch_popup;
253 char manual_placement;
254 char manual_placement_mouse_pointer;
255 char center_if_desk_full;
256 char map_slide;
257 char cleanup_slide;
258 int slide_mode;
259 int map_slide_speed;
260 int cleanup_slide_speed;
261 char animate_shading;
262 int shade_speed;
263 char place_ignore_struts;
264 char place_ignore_struts_fullscreen;
265 char place_ignore_struts_maximize;
266 char raise_fullscreen;
267 #ifdef USE_XINERAMA_no /* Not implemented */
268 char extra_head;
269 #endif
270 } PlaceDlgData;
271
272 static void
_DlgApplyPlacement(Dialog * d,int val __UNUSED__,void * data __UNUSED__)273 _DlgApplyPlacement(Dialog * d, int val __UNUSED__, void *data __UNUSED__)
274 {
275 PlaceDlgData *dd = DLG_DATA_GET(d, PlaceDlgData);
276
277 Conf.focus.transientsfollowleader = dd->with_leader;
278 Conf.focus.switchfortransientmap = dd->switch_popup;
279
280 Conf.place.manual = dd->manual_placement;
281 Conf.place.manual_mouse_pointer = dd->manual_placement_mouse_pointer;
282 Conf.place.center_if_desk_full = dd->center_if_desk_full;
283
284 Conf.place.slidein = dd->map_slide;
285 Conf.place.cleanupslide = dd->cleanup_slide;
286 Conf.place.slidemode = dd->slide_mode;
287 Conf.place.slidespeedmap = dd->map_slide_speed;
288 Conf.place.slidespeedcleanup = dd->cleanup_slide_speed;
289
290 Conf.shading.animate = dd->animate_shading;
291 Conf.shading.speed = dd->shade_speed;
292
293 Conf.place.ignore_struts = dd->place_ignore_struts;
294 Conf.place.ignore_struts_fullscreen = dd->place_ignore_struts_fullscreen;
295 Conf.place.ignore_struts_maximize = dd->place_ignore_struts_maximize;
296 Conf.place.raise_fullscreen = dd->raise_fullscreen;
297
298 autosave();
299 }
300
301 static void
_DlgFillPlacement(Dialog * d,DItem * table,void * data __UNUSED__)302 _DlgFillPlacement(Dialog * d, DItem * table, void *data __UNUSED__)
303 {
304 PlaceDlgData *dd = DLG_DATA_GET(d, PlaceDlgData);
305 DItem *di, *radio;
306
307 dd->with_leader = Conf.focus.transientsfollowleader;
308 dd->switch_popup = Conf.focus.switchfortransientmap;
309
310 dd->manual_placement = Conf.place.manual;
311 dd->manual_placement_mouse_pointer = Conf.place.manual_mouse_pointer;
312 dd->center_if_desk_full = Conf.place.center_if_desk_full;
313
314 dd->map_slide = Conf.place.slidein;
315 dd->cleanup_slide = Conf.place.cleanupslide;
316 dd->slide_mode = Conf.place.slidemode;
317 dd->map_slide_speed = Conf.place.slidespeedmap;
318 dd->cleanup_slide_speed = Conf.place.slidespeedcleanup;
319
320 dd->animate_shading = Conf.shading.animate;
321 dd->shade_speed = Conf.shading.speed;
322
323 dd->place_ignore_struts = Conf.place.ignore_struts;
324 dd->place_ignore_struts_fullscreen = Conf.place.ignore_struts_fullscreen;
325 dd->place_ignore_struts_maximize = Conf.place.ignore_struts_maximize;
326 dd->raise_fullscreen = Conf.place.raise_fullscreen;
327
328 #ifdef USE_XINERAMA_no /* Not implemented */
329 dd->extra_head = Conf.place.extra_head;
330 #endif
331
332 DialogItemTableSetOptions(table, 2, 0, 1, 0);
333
334 di = DialogAddItem(table, DITEM_CHECKBUTTON);
335 DialogItemSetColSpan(di, 2);
336 DialogItemSetText(di, _("Dialog windows appear together with their owner"));
337 DialogItemCheckButtonSetPtr(di, &dd->with_leader);
338
339 di = DialogAddItem(table, DITEM_CHECKBUTTON);
340 DialogItemSetColSpan(di, 2);
341 DialogItemSetText(di, _("Switch to desktop where dialog appears"));
342 DialogItemCheckButtonSetPtr(di, &dd->switch_popup);
343
344 di = DialogAddItem(table, DITEM_SEPARATOR);
345 DialogItemSetColSpan(di, 2);
346
347 di = DialogAddItem(table, DITEM_CHECKBUTTON);
348 DialogItemSetColSpan(di, 2);
349 DialogItemSetText(di, _("Place windows manually"));
350 DialogItemCheckButtonSetPtr(di, &dd->manual_placement);
351
352 di = DialogAddItem(table, DITEM_CHECKBUTTON);
353 DialogItemSetColSpan(di, 2);
354 DialogItemSetText(di, _("Place windows under mouse"));
355 DialogItemCheckButtonSetPtr(di, &dd->manual_placement_mouse_pointer);
356
357 di = DialogAddItem(table, DITEM_CHECKBUTTON);
358 DialogItemSetColSpan(di, 2);
359 DialogItemSetText(di, _("Center windows when desk is full"));
360 DialogItemCheckButtonSetPtr(di, &dd->center_if_desk_full);
361
362 di = DialogAddItem(table, DITEM_CHECKBUTTON);
363 DialogItemSetColSpan(di, 2);
364 DialogItemSetText(di, _("Slide windows in when they appear"));
365 DialogItemCheckButtonSetPtr(di, &dd->map_slide);
366
367 di = DialogAddItem(table, DITEM_CHECKBUTTON);
368 DialogItemSetColSpan(di, 2);
369 DialogItemSetText(di, _("Slide windows around when cleaning up"));
370 DialogItemCheckButtonSetPtr(di, &dd->cleanup_slide);
371
372 di = DialogAddItem(table, DITEM_TEXT);
373 DialogItemSetColSpan(di, 2);
374 DialogItemSetText(di, _("Slide Method:"));
375
376 radio = di = DialogAddItem(table, DITEM_RADIOBUTTON);
377 DialogItemSetText(di, _("Opaque"));
378 DialogItemRadioButtonSetFirst(di, radio);
379 DialogItemRadioButtonGroupSetVal(di, MR_OPAQUE);
380
381 di = DialogAddItem(table, DITEM_RADIOBUTTON);
382 DialogItemSetText(di, _("Technical"));
383 DialogItemRadioButtonSetFirst(di, radio);
384 DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
385
386 di = DialogAddItem(table, DITEM_RADIOBUTTON);
387 DialogItemSetText(di, _("TechOpaque"));
388 DialogItemRadioButtonSetFirst(di, radio);
389 DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
390
391 di = DialogAddItem(table, DITEM_RADIOBUTTON);
392 DialogItemSetText(di, _("Box"));
393 DialogItemRadioButtonSetFirst(di, radio);
394 DialogItemRadioButtonGroupSetVal(di, MR_BOX);
395
396 DialogItemRadioButtonGroupSetValPtr(radio, &dd->slide_mode);
397
398 di = DialogAddItem(table, DITEM_TEXT);
399 DialogItemSetFill(di, 0, 0);
400 DialogItemSetAlign(di, 1024, 512);
401 DialogItemSetText(di, _("Appear Slide speed:"));
402
403 di = DialogAddItem(table, DITEM_SLIDER);
404 DialogItemSliderSetBounds(di, 0, 20000);
405 DialogItemSliderSetUnits(di, 500);
406 DialogItemSliderSetJump(di, 1000);
407 DialogItemSliderSetValPtr(di, &dd->map_slide_speed);
408
409 di = DialogAddItem(table, DITEM_TEXT);
410 DialogItemSetFill(di, 0, 0);
411 DialogItemSetAlign(di, 1024, 512);
412 DialogItemSetText(di, _("Cleanup Slide speed:"));
413
414 di = DialogAddItem(table, DITEM_SLIDER);
415 DialogItemSliderSetBounds(di, 0, 20000);
416 DialogItemSliderSetUnits(di, 500);
417 DialogItemSliderSetJump(di, 1000);
418 DialogItemSliderSetValPtr(di, &dd->cleanup_slide_speed);
419
420 di = DialogAddItem(table, DITEM_SEPARATOR);
421 DialogItemSetColSpan(di, 2);
422
423 di = DialogAddItem(table, DITEM_CHECKBUTTON);
424 DialogItemSetColSpan(di, 2);
425 DialogItemSetText(di, _("Animate shading and unshading of windows"));
426 DialogItemCheckButtonSetPtr(di, &dd->animate_shading);
427
428 di = DialogAddItem(table, DITEM_TEXT);
429 DialogItemSetFill(di, 0, 0);
430 DialogItemSetAlign(di, 1024, 512);
431 DialogItemSetText(di, _("Window Shading speed:"));
432
433 di = DialogAddItem(table, DITEM_SLIDER);
434 DialogItemSliderSetBounds(di, 0, 20000);
435 DialogItemSliderSetUnits(di, 500);
436 DialogItemSliderSetJump(di, 1000);
437 DialogItemSliderSetValPtr(di, &dd->shade_speed);
438
439 di = DialogAddItem(table, DITEM_SEPARATOR);
440 DialogItemSetColSpan(di, 2);
441
442 di = DialogAddItem(table, DITEM_CHECKBUTTON);
443 DialogItemSetColSpan(di, 2);
444 DialogItemSetText(di, _("Ignore struts/panels for placing normal windows"));
445 DialogItemCheckButtonSetPtr(di, &dd->place_ignore_struts);
446
447 di = DialogAddItem(table, DITEM_CHECKBUTTON);
448 DialogItemSetColSpan(di, 2);
449 DialogItemSetText(di, _("Ignore struts/panels when windows are fullscreen"));
450 DialogItemCheckButtonSetPtr(di, &dd->place_ignore_struts_fullscreen);
451
452 di = DialogAddItem(table, DITEM_CHECKBUTTON);
453 DialogItemSetColSpan(di, 2);
454 DialogItemSetText(di, _("Ignore struts/panels when maximizing windows"));
455 DialogItemCheckButtonSetPtr(di, &dd->place_ignore_struts_maximize);
456
457 di = DialogAddItem(table, DITEM_CHECKBUTTON);
458 DialogItemSetColSpan(di, 2);
459 DialogItemSetText(di, _("Raise fullscreen windows"));
460 DialogItemCheckButtonSetPtr(di, &dd->raise_fullscreen);
461 }
462
463 const DialogDef DlgPlacement = {
464 "CONFIGURE_PLACEMENT",
465 N_("Placement"), N_("Window Placement Settings"),
466 sizeof(PlaceDlgData),
467 SOUND_SETTINGS_PLACEMENT,
468 "pix/place.png",
469 N_("Enlightenment Window Placement\n" "Settings Dialog"),
470 _DlgFillPlacement,
471 DLG_OAC, _DlgApplyPlacement, NULL
472 };
473
474 typedef struct {
475 char dialog_headers;
476 char button_image;
477 char animate_startup;
478 int magwin_zoom_res;
479 } MiscDlgData;
480
481 static void
_DlgApplyMisc(Dialog * d,int val __UNUSED__,void * data __UNUSED__)482 _DlgApplyMisc(Dialog * d, int val __UNUSED__, void *data __UNUSED__)
483 {
484 MiscDlgData *dd = DLG_DATA_GET(d, MiscDlgData);
485
486 Conf.dialogs.headers = dd->dialog_headers;
487 Conf.dialogs.button_image = dd->button_image;
488 Conf.startup.animate = dd->animate_startup;
489 Conf.magwin.zoom_res = dd->magwin_zoom_res;
490
491 autosave();
492 }
493
494 static void
_DlgFillMisc(Dialog * d,DItem * table,void * data __UNUSED__)495 _DlgFillMisc(Dialog * d, DItem * table, void *data __UNUSED__)
496 {
497 MiscDlgData *dd = DLG_DATA_GET(d, MiscDlgData);
498 DItem *di;
499
500 dd->dialog_headers = Conf.dialogs.headers;
501 dd->button_image = Conf.dialogs.button_image;
502 dd->animate_startup = Conf.startup.animate;
503 dd->magwin_zoom_res = Conf.magwin.zoom_res;
504
505 DialogItemTableSetOptions(table, 2, 0, 0, 0);
506
507 di = DialogAddItem(table, DITEM_CHECKBUTTON);
508 DialogItemSetColSpan(di, 2);
509 DialogItemSetText(di, _("Enable Dialog Headers"));
510 DialogItemCheckButtonSetPtr(di, &dd->dialog_headers);
511
512 #if 0 /* Not functional */
513 di = DialogAddItem(table, DITEM_CHECKBUTTON);
514 DialogItemSetColSpan(di, 2);
515 DialogItemSetText(di, _("Enable Button Images"));
516 DialogItemCheckButtonSetPtr(di, &dd->button_image);
517 #endif
518
519 di = DialogAddItem(table, DITEM_SEPARATOR);
520 DialogItemSetColSpan(di, 2);
521
522 di = DialogAddItem(table, DITEM_CHECKBUTTON);
523 DialogItemSetColSpan(di, 2);
524 DialogItemSetText(di, _("Enable sliding startup windows"));
525 DialogItemCheckButtonSetPtr(di, &dd->animate_startup);
526
527 di = DialogAddItem(table, DITEM_SEPARATOR);
528 DialogItemSetColSpan(di, 2);
529
530 di = DialogAddItem(table, DITEM_SEPARATOR);
531 DialogItemSetColSpan(di, 2);
532
533 di = DialogAddItem(table, DITEM_TEXT);
534 DialogItemSetColSpan(di, 2);
535 DialogItemSetAlign(di, 1024, 512);
536 DialogItemSetText(di, _("Magwin zoom resolution"));
537
538 di = DialogAddItem(table, DITEM_SLIDER);
539 DialogItemSetColSpan(di, 2);
540 DialogItemSliderSetBounds(di, 1, 32);
541 DialogItemSliderSetUnits(di, 1);
542 DialogItemSliderSetJump(di, 1);
543 DialogItemSliderSetValPtr(di, &dd->magwin_zoom_res);
544 }
545
546 const DialogDef DlgMisc = {
547 "CONFIGURE_MISCELLANEOUS",
548 N_("Miscellaneous"), N_("Miscellaneous Settings"),
549 sizeof(MiscDlgData),
550 SOUND_SETTINGS_MISCELLANEOUS,
551 "pix/miscellaneous.png",
552 N_("Enlightenment Miscellaneous\n" "Settings Dialog"),
553 _DlgFillMisc,
554 DLG_OAC, _DlgApplyMisc, NULL
555 };
556
557 #if USE_COMPOSITE
558 #include "ecompmgr.h"
559
560 /*
561 * Composite dialog
562 */
563
564 static void
_DlgApplyComposite(Dialog * d,int val __UNUSED__,void * data __UNUSED__)565 _DlgApplyComposite(Dialog * d, int val __UNUSED__, void *data __UNUSED__)
566 {
567 cfg_composite *dd = DLG_DATA_GET(d, cfg_composite);
568
569 /* Configure and read back */
570 ECompMgrConfigSet(dd);
571 ECompMgrConfigGet(dd);
572 }
573
574 static void
_DlgFillComposite(Dialog * d,DItem * table,void * data __UNUSED__)575 _DlgFillComposite(Dialog * d, DItem * table, void *data __UNUSED__)
576 {
577 cfg_composite *dd = DLG_DATA_GET(d, cfg_composite);
578 DItem *di, *radio;
579
580 /* Get current settings */
581 ECompMgrConfigGet(dd);
582
583 /* Layout */
584 DialogItemTableSetOptions(table, 2, 0, 0, 0);
585
586 di = DialogAddItem(table, DITEM_CHECKBUTTON);
587 DialogItemSetColSpan(di, 2);
588 DialogItemSetText(di, _("Enable Composite"));
589 DialogItemCheckButtonSetPtr(di, &dd->enable);
590
591 di = DialogAddItem(table, DITEM_SEPARATOR);
592 DialogItemSetColSpan(di, 2);
593
594 di = DialogAddItem(table, DITEM_CHECKBUTTON);
595 DialogItemSetColSpan(di, 2);
596 DialogItemSetText(di, _("Enable Fading"));
597 DialogItemCheckButtonSetPtr(di, &dd->fading);
598
599 di = DialogAddItem(table, DITEM_TEXT);
600 DialogItemSetFill(di, 0, 0);
601 DialogItemSetAlign(di, 0, 512);
602 DialogItemSetText(di, _("Fading Speed:"));
603
604 di = DialogAddItem(table, DITEM_SLIDER);
605 DialogItemSliderSetBounds(di, 0, 100);
606 DialogItemSliderSetUnits(di, 5);
607 DialogItemSliderSetJump(di, 5);
608 DialogItemSliderSetValPtr(di, &dd->fade_speed);
609
610 di = DialogAddItem(table, DITEM_SEPARATOR);
611 DialogItemSetColSpan(di, 2);
612
613 radio = di = DialogAddItem(table, DITEM_RADIOBUTTON);
614 DialogItemSetColSpan(di, 2);
615 DialogItemSetText(di, _("Shadows Off"));
616 DialogItemRadioButtonSetFirst(di, radio);
617 DialogItemRadioButtonGroupSetVal(di, 0);
618
619 di = DialogAddItem(table, DITEM_RADIOBUTTON);
620 DialogItemSetColSpan(di, 2);
621 DialogItemSetText(di, _("Shadows Sharp"));
622 DialogItemRadioButtonSetFirst(di, radio);
623 DialogItemRadioButtonGroupSetVal(di, 1);
624
625 di = DialogAddItem(table, DITEM_RADIOBUTTON);
626 DialogItemSetColSpan(di, 2);
627 DialogItemSetText(di, _("Shadows Sharp2"));
628 DialogItemRadioButtonSetFirst(di, radio);
629 DialogItemRadioButtonGroupSetVal(di, 3);
630
631 di = DialogAddItem(table, DITEM_RADIOBUTTON);
632 DialogItemSetColSpan(di, 2);
633 DialogItemSetText(di, _("Shadows Blurred"));
634 DialogItemRadioButtonSetFirst(di, radio);
635 DialogItemRadioButtonGroupSetVal(di, 2);
636 DialogItemRadioButtonGroupSetValPtr(radio, &dd->shadow);
637
638 di = DialogAddItem(table, DITEM_SEPARATOR);
639 DialogItemSetColSpan(di, 2);
640
641 di = DialogAddItem(table, DITEM_TEXT);
642 DialogItemSetFill(di, 0, 0);
643 DialogItemSetAlign(di, 0, 512);
644 DialogItemSetText(di, _("Default focused window opacity:"));
645
646 di = DialogAddItem(table, DITEM_SLIDER);
647 DialogItemSliderSetBounds(di, 0, 100);
648 DialogItemSliderSetUnits(di, 5);
649 DialogItemSliderSetJump(di, 5);
650 DialogItemSliderSetValPtr(di, &dd->opacity_focused);
651
652 di = DialogAddItem(table, DITEM_TEXT);
653 DialogItemSetFill(di, 0, 0);
654 DialogItemSetAlign(di, 0, 512);
655 DialogItemSetText(di, _("Default unfocused window opacity:"));
656
657 di = DialogAddItem(table, DITEM_SLIDER);
658 DialogItemSliderSetBounds(di, 0, 100);
659 DialogItemSliderSetUnits(di, 5);
660 DialogItemSliderSetJump(di, 5);
661 DialogItemSliderSetValPtr(di, &dd->opacity_unfocused);
662
663 di = DialogAddItem(table, DITEM_TEXT);
664 DialogItemSetFill(di, 0, 0);
665 DialogItemSetAlign(di, 0, 512);
666 DialogItemSetText(di, _("Default pop-up window opacity:"));
667
668 di = DialogAddItem(table, DITEM_SLIDER);
669 DialogItemSliderSetBounds(di, 0, 100);
670 DialogItemSliderSetUnits(di, 5);
671 DialogItemSliderSetJump(di, 5);
672 DialogItemSliderSetValPtr(di, &dd->opacity_override);
673 }
674
675 const DialogDef DlgComposite = {
676 "CONFIGURE_COMPOSITE",
677 N_("Composite"), N_("Composite Settings"),
678 sizeof(cfg_composite),
679 SOUND_SETTINGS_COMPOSITE,
680 "pix/pager.png",
681 N_("Enlightenment Composite\n" "Settings Dialog"),
682 _DlgFillComposite,
683 DLG_OAC, _DlgApplyComposite, NULL
684 };
685 #endif
686
687 /*
688 * Combined configuration dialog
689 */
690
691 static const DialogDef *const dialogs[] = {
692 &DlgFocus,
693 &DlgMoveResize,
694 &DlgPlacement,
695 &DlgDesks,
696 &DlgAreas,
697 &DlgPagers,
698 &DlgMenus,
699 &DlgTooltips,
700 #if ENABLE_SOUND
701 &DlgSound,
702 #endif
703 &DlgGroupDefaults,
704 &DlgRemember,
705 &DlgFx,
706 &DlgBackground,
707 &DlgTheme,
708 #if USE_COMPOSITE
709 &DlgComposite,
710 #endif
711 &DlgSession,
712 &DlgMisc,
713 };
714
715 static void
CB_DlgSelect(Dialog * d,int val,void * data)716 CB_DlgSelect(Dialog * d, int val, void *data)
717 {
718 const DialogDef *dd = dialogs[val];
719 DItem *table = (DItem *) data;
720
721 if (!table)
722 return;
723 if (!dd->fill)
724 return;
725
726 DialogCallExitFunction(d);
727
728 DialogItemTableEmpty(table);
729 DialogKeybindingsDestroy(d);
730
731 DialogSetTitle(d, _(dd->title));
732 DialogFill(d, table, dd, NULL);
733
734 DialogArrange(d, 1);
735 }
736
737 static void
_DlgFillConfiguration(Dialog * d,DItem * table,void * data __UNUSED__)738 _DlgFillConfiguration(Dialog * d, DItem * table, void *data __UNUSED__)
739 {
740 DItem *di, *buttons, *content;
741 unsigned int i;
742
743 DialogItemTableSetOptions(table, 2, 0, 0, 0);
744
745 buttons = DialogAddItem(table, DITEM_TABLE);
746 content = DialogAddItem(table, DITEM_TABLE);
747
748 for (i = 0; i < E_ARRAY_SIZE(dialogs); i++)
749 {
750 di = DialogAddItem(buttons, DITEM_BUTTON);
751 DialogItemSetPadding(di, 2, 2, 0, 0);
752 DialogItemSetText(di, _(dialogs[i]->label));
753 DialogItemSetCallback(di, CB_DlgSelect, i, content);
754 }
755
756 DialogFill(d, content, dialogs[0], NULL);
757 }
758
759 static const DialogDef DlgConfiguration = {
760 "CONFIGURE_ALL",
761 NULL, N_("Enlightenment Settings"),
762 0,
763 SOUND_SETTINGS_ALL,
764 NULL,
765 NULL,
766 _DlgFillConfiguration,
767 0, NULL, NULL
768 };
769
770 void
IPC_Cfg(const char * params)771 IPC_Cfg(const char *params)
772 {
773 unsigned int i;
774 const char *name;
775
776 if (!params || !params[0])
777 {
778 DialogShowSimple(&DlgConfiguration, NULL);
779 return;
780 }
781
782 for (i = 0; i < E_ARRAY_SIZE(dialogs); i++)
783 {
784 name = dialogs[i]->label;
785 if (Estrcasecmp(params, name))
786 continue;
787 DialogShowSimple(dialogs[i], NULL);
788 }
789 }
790 #endif /* ENABLE_DIALOGS */
791