1 #include "e.h"
2 #include "e_mod_main.h"
3 #include "e_int_config_randr2.h"
4
5 /* local structures */
6 struct _E_Config_Dialog_Data
7 {
8 char *params;
9 E_Config_Dialog *cfd;
10 Eina_List *screen_items;
11 Eina_List *screen_items2;
12 Eina_List *screens;
13 Eina_List *freelist;
14 Evas_Object *name_obj;
15 Evas_Object *screen_obj;
16 Evas_Object *lid_obj;
17 Evas_Object *backlight_obj;
18 Evas_Object *size_obj;
19 Evas_Object *modes_obj;
20 Evas_Object *rotations_obj;
21 Evas_Object *enabled_obj;
22 Evas_Object *priority_obj;
23 Evas_Object *rel_mode_obj;
24 Evas_Object *rel_to_obj;
25 Evas_Object *rel_align_obj;
26 Evas_Object *use_profile_obj;
27 Evas_Object *profile_list_obj;
28 Evas_Object *scale_custom_obj;
29 Evas_Object *scale_value_obj;
30 Evas_Object *policy_obj;
31 int restore;
32 int hotplug;
33 int acpi;
34 int screen;
35 E_Randr2_Policy policy;
36 };
37
38 typedef struct
39 {
40 E_Config_Dialog_Data *cfdata;
41 E_Randr2_Mode mode;
42 } Mode_CBData;
43
44 typedef struct
45 {
46 E_Config_Dialog_Data *cfdata;
47 int rot;
48 } Rot_CBData;
49
50 /* local function prototypes */
51 static void *_create_data(E_Config_Dialog *cfd);
52 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
53 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
54 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
55 static int _basic_check(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
56
57 /* public functions */
58 E_Config_Dialog *
e_int_config_randr2(Evas_Object * parent EINA_UNUSED,const char * params)59 e_int_config_randr2(Evas_Object *parent EINA_UNUSED, const char *params)
60 {
61 E_Config_Dialog *cfd;
62 E_Config_Dialog_View *v;
63
64 if (e_config_dialog_find("E", "screen/screen_setup")) return NULL;
65 if (!(v = E_NEW(E_Config_Dialog_View, 1))) return NULL;
66
67 /* set dialog view functions & properties */
68 v->create_cfdata = _create_data;
69 v->free_cfdata = _free_data;
70 v->basic.create_widgets = _basic_create;
71 v->basic.apply_cfdata = _basic_apply;
72 v->basic.check_changed = _basic_check;
73 v->override_auto_apply = EINA_TRUE;
74
75 /* create new dialog */
76 cfd = e_config_dialog_new(NULL, _("Screen Setup"),
77 "E", "screen/screen_setup",
78 "preferences-system-screen-resolution",
79 0, v, (void *)params);
80 return cfd;
81 }
82
83 /* local functions */
84 static double
_multiplier_for_scale(double scale)85 _multiplier_for_scale(double scale)
86 {
87 return scale / elm_config_scale_get();
88 }
89
90 static double
_scale_for_multiplier(double multiplier)91 _scale_for_multiplier(double multiplier)
92 {
93 return multiplier * elm_config_scale_get();
94 }
95
96 static void *
_create_data(E_Config_Dialog * cfd EINA_UNUSED)97 _create_data(E_Config_Dialog *cfd EINA_UNUSED)
98 {
99 E_Config_Dialog_Data *cfdata;
100
101 if (!(cfdata = E_NEW(E_Config_Dialog_Data, 1))) return NULL;
102 if (cfd->data) cfdata->params = strdup(cfd->data);
103 cfdata->restore = e_randr2_cfg->restore;
104 cfdata->hotplug = !e_randr2_cfg->ignore_hotplug_events;
105 cfdata->acpi = !e_randr2_cfg->ignore_acpi_events;
106 cfdata->policy = e_randr2_cfg->default_policy;
107 return cfdata;
108 }
109
110 static void
_free_data(E_Config_Dialog * cfd EINA_UNUSED,E_Config_Dialog_Data * cfdata)111 _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
112 {
113 void *dt;
114 E_Config_Randr2_Screen *cs;
115
116 EINA_LIST_FREE(cfdata->screens, cs)
117 {
118 eina_stringshare_del(cs->id);
119 eina_stringshare_del(cs->rel_to);
120 eina_stringshare_del(cs->profile);
121 free(cs);
122 }
123 free(cfdata->params);
124 eina_list_free(cfdata->screen_items);
125 eina_list_free(cfdata->screen_items2);
126 EINA_LIST_FREE(cfdata->freelist, dt) free(dt);
127 E_FREE(cfdata);
128 }
129
130 static void
_cb_restore_changed(void * data EINA_UNUSED,Evas_Object * obj,void * event EINA_UNUSED)131 _cb_restore_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
132 {
133 E_Config_Dialog_Data *cfdata = data;
134 cfdata->restore = elm_check_state_get(obj);
135 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
136 }
137
138 static void
_cb_hotplug_changed(void * data EINA_UNUSED,Evas_Object * obj,void * event EINA_UNUSED)139 _cb_hotplug_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
140 {
141 E_Config_Dialog_Data *cfdata = data;
142 cfdata->hotplug = elm_check_state_get(obj);
143 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
144 }
145
146 static void
_cb_acpi_changed(void * data EINA_UNUSED,Evas_Object * obj,void * event EINA_UNUSED)147 _cb_acpi_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
148 {
149 E_Config_Dialog_Data *cfdata = data;
150 cfdata->acpi = elm_check_state_get(obj);
151 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
152 }
153
154 static E_Config_Randr2_Screen *
_config_screen_find(E_Config_Dialog_Data * cfdata)155 _config_screen_find(E_Config_Dialog_Data *cfdata)
156 {
157 return eina_list_nth(cfdata->screens, cfdata->screen);
158 }
159
160 static E_Config_Randr2_Screen *
_config_screen_n_find(E_Config_Dialog_Data * cfdata,int n)161 _config_screen_n_find(E_Config_Dialog_Data *cfdata, int n)
162 {
163 return eina_list_nth(cfdata->screens, n);
164 }
165
166 static E_Randr2_Screen *
_screen_config_find(E_Config_Randr2_Screen * cs)167 _screen_config_find(E_Config_Randr2_Screen *cs)
168 {
169 Eina_List *l;
170 E_Randr2_Screen *s;
171
172 if (!cs->id) return NULL;
173 EINA_LIST_FOREACH(e_randr2->screens, l, s)
174 {
175 if (!s->id) continue;
176 if (!strcmp(cs->id, s->id)) return s;
177 }
178 return NULL;
179 }
180
181 static E_Randr2_Screen *
_screen_config_id_find(const char * id)182 _screen_config_id_find(const char *id)
183 {
184 Eina_List *l;
185 E_Randr2_Screen *s;
186
187 if (!id) return NULL;
188 EINA_LIST_FOREACH(e_randr2->screens, l, s)
189 {
190 if (!s->id) continue;
191 if (!strcmp(s->id, id)) return s;
192 }
193 return NULL;
194 }
195
196 static E_Config_Randr2_Screen *
_screen_config_randr_id_find(const char * id)197 _screen_config_randr_id_find(const char *id)
198 {
199 Eina_List *l;
200 E_Config_Randr2_Screen *cs;
201
202 if (!id) return NULL;
203 EINA_LIST_FOREACH(e_randr2_cfg->screens, l, cs)
204 {
205 if (!cs->id) continue;
206 if (!strcmp(cs->id, id)) return cs;
207 }
208 return NULL;
209 }
210
211 static void
_cb_mode_set(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)212 _cb_mode_set(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
213 {
214 Mode_CBData *dat = data;
215 E_Config_Dialog_Data *cfdata = dat->cfdata;
216 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
217 if (!cs) return;
218 cs->mode_w = dat->mode.w;
219 cs->mode_h = dat->mode.h;
220 cs->mode_refresh = dat->mode.refresh;
221 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
222 }
223
224 static void
_cb_rot_set(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)225 _cb_rot_set(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
226 {
227 Rot_CBData *dat = data;
228 E_Config_Dialog_Data *cfdata = dat->cfdata;
229 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
230 if (!cs) return;
231 cs->rotation = dat->rot;
232 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
233 }
234
235 typedef struct _Profile_Item
236 {
237 char *profile;
238 E_Config_Dialog_Data *cfdata;
239 } Profile_Item;
240
241 static void
_profiles_list_selected_cb(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)242 _profiles_list_selected_cb(void *data,
243 Evas_Object *obj EINA_UNUSED,
244 void *event_info EINA_UNUSED)
245 {
246 Profile_Item *p = data;
247 E_Config_Randr2_Screen *cs = _config_screen_find(p->cfdata);
248 if (!cs) return;
249 eina_stringshare_del(cs->profile);
250 cs->profile = eina_stringshare_add(p->profile);
251 e_config_dialog_changed_set(p->cfdata->cfd, EINA_TRUE);
252 }
253
254 static void
_profiles_list_item_del_cb(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)255 _profiles_list_item_del_cb(void *data,
256 Evas_Object *obj EINA_UNUSED,
257 void *event_info EINA_UNUSED)
258 {
259 Profile_Item *p = data;
260 free(p->profile);
261 free(p);
262 }
263
264 static void
_basic_profile_list_fill(E_Config_Dialog_Data * cfdata,const char * prof_sel)265 _basic_profile_list_fill(E_Config_Dialog_Data *cfdata, const char *prof_sel)
266 {
267 Evas_Object *list = cfdata->profile_list_obj;
268 Eina_List *names = elm_config_profile_list_get();
269 Eina_List *l;
270 Elm_Object_Item *sel_it = NULL;
271 const char *profile;
272
273 if (!names) return;
274
275 elm_list_clear(list);
276
277 if (!prof_sel)
278 {
279 elm_list_go(list);
280 elm_config_profile_list_free(names);
281 return;
282 }
283
284 EINA_LIST_FOREACH(names, l, profile)
285 {
286 Efreet_Desktop *desk = NULL;
287 const char *label, *ext, *pdir;
288 char buf[PATH_MAX];
289 Elm_Object_Item *list_it;
290 Evas_Object *ic;
291 Profile_Item *p;
292
293 pdir = elm_config_profile_dir_get(profile, EINA_TRUE);
294 if (!pdir) pdir = elm_config_profile_dir_get(profile, EINA_FALSE);
295
296 snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
297 desk = efreet_desktop_new(buf);
298 if ((desk) && (desk->name)) label = desk->name;
299 else
300 {
301 if (desk) efreet_desktop_free(desk);
302 if (pdir) elm_config_profile_dir_free(pdir);
303
304 pdir = elm_config_profile_dir_get(profile, EINA_FALSE);
305 snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
306 desk = efreet_desktop_new(buf);
307 if ((desk) && (desk->name)) label = desk->name;
308 else label = profile;
309 }
310
311 buf[0] = 0;
312 if (pdir) snprintf(buf, sizeof(buf), "%s/icon.edj", pdir);
313 if ((desk) && (desk->icon) && (pdir))
314 snprintf(buf, sizeof(buf), "%s/%s", pdir, desk->icon);
315 ic = elm_icon_add(list);
316 ext = strrchr(buf, '.');
317 if (ext)
318 {
319 if (!strcmp(ext, ".edj")) elm_image_file_set(ic, buf, "icon");
320 else elm_image_file_set(ic, buf, NULL);
321 }
322
323 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL,
324 1, 1);
325 evas_object_show(ic);
326
327 p = malloc(sizeof(Profile_Item));
328 p->profile = strdup(profile);
329 p->cfdata = cfdata;
330 list_it = elm_list_item_append(list, label, ic, NULL,
331 _profiles_list_selected_cb, p);
332 elm_object_item_del_cb_set(list_it, _profiles_list_item_del_cb);
333 if ((prof_sel) && (!strcmp(profile, prof_sel))) sel_it = list_it;
334
335 elm_config_profile_dir_free(pdir);
336
337 if (desk) efreet_desktop_free(desk);
338 }
339
340 elm_list_go(list);
341
342 if (sel_it) elm_list_item_selected_set(sel_it, EINA_TRUE);
343
344 elm_config_profile_list_free(names);
345 }
346
347 static void
_basic_screen_info_fill(E_Config_Dialog_Data * cfdata,E_Config_Randr2_Screen * cs,E_Randr2_Screen * s)348 _basic_screen_info_fill(E_Config_Dialog_Data *cfdata, E_Config_Randr2_Screen *cs, E_Randr2_Screen *s)
349 {
350 char buf[100];
351 Eina_List *items, *l;
352 E_Randr2_Mode *m;
353 Elm_Object_Item *it, *it_sel;
354 Elm_Widget_Item *iwt;
355 void *dt;
356
357 if (!s) return;
358 // fill all the screen status info
359 elm_object_text_set(cfdata->name_obj, s->info.name);
360 elm_object_text_set(cfdata->screen_obj, s->info.screen);
361 elm_check_state_set(cfdata->lid_obj, s->info.is_lid);
362 elm_check_state_set(cfdata->backlight_obj, s->info.backlight);
363 snprintf(buf, sizeof(buf), "%imm x %imm", s->info.size.w, s->info.size.h);
364 elm_object_text_set(cfdata->size_obj, buf);
365 // XXX: connector
366
367 EINA_LIST_FREE(cfdata->freelist, dt) free(dt);
368
369 elm_list_clear(cfdata->modes_obj);
370 it_sel = NULL;
371 EINA_LIST_FOREACH(s->info.modes, l, m)
372 {
373 Mode_CBData *mode_cbdata = calloc(1, sizeof(Mode_CBData));
374
375 if (mode_cbdata)
376 {
377 mode_cbdata->cfdata = cfdata;
378 mode_cbdata->mode = *m;
379 snprintf(buf, sizeof(buf), "%ix%i @ %1.2fHz", m->w, m->h, m->refresh);
380 it = elm_list_item_append(cfdata->modes_obj, buf, NULL, NULL, _cb_mode_set, mode_cbdata);
381 cfdata->freelist = eina_list_append(cfdata->freelist, mode_cbdata);
382 /* printf("mode add %p %p %p\n", mode_cbdata, cfdata->modes_obj, it); */
383 if ((cs->mode_w == m->w) && (cs->mode_h == m->h) &&
384 (fabs(cs->mode_refresh - m->refresh) < 0.01 ))
385 it_sel = it;
386 }
387 }
388 if (it_sel) elm_list_item_selected_set(it_sel, EINA_TRUE);
389 elm_list_go(cfdata->modes_obj);
390
391 elm_list_clear(cfdata->rotations_obj);
392 it_sel = NULL;
393 if (s->info.can_rot_0)
394 {
395 Rot_CBData *rot_cbdata = calloc(1, sizeof(Rot_CBData));
396 if (rot_cbdata)
397 {
398 rot_cbdata->cfdata = cfdata;
399 rot_cbdata->rot = 0;
400 it = elm_list_item_append(cfdata->rotations_obj, "0", NULL, NULL, _cb_rot_set, rot_cbdata);
401 cfdata->freelist = eina_list_append(cfdata->freelist, rot_cbdata);
402 if (cs->rotation == 0) it_sel = it;
403 }
404 }
405 if (s->info.can_rot_90)
406 {
407 Rot_CBData *rot_cbdata = calloc(1, sizeof(Rot_CBData));
408 if (rot_cbdata)
409 {
410 rot_cbdata->cfdata = cfdata;
411 rot_cbdata->rot = 90;
412 it = elm_list_item_append(cfdata->rotations_obj, "90", NULL, NULL, _cb_rot_set, rot_cbdata);
413 cfdata->freelist = eina_list_append(cfdata->freelist, rot_cbdata);
414 if (cs->rotation == 90) it_sel = it;
415 }
416 }
417 if (s->info.can_rot_180)
418 {
419 Rot_CBData *rot_cbdata = calloc(1, sizeof(Rot_CBData));
420 if (rot_cbdata)
421 {
422 rot_cbdata->cfdata = cfdata;
423 rot_cbdata->rot = 180;
424 it = elm_list_item_append(cfdata->rotations_obj, "180", NULL, NULL, _cb_rot_set, rot_cbdata);
425 cfdata->freelist = eina_list_append(cfdata->freelist, rot_cbdata);
426 if (cs->rotation == 180) it_sel = it;
427 }
428 }
429 if (s->info.can_rot_270)
430 {
431 Rot_CBData *rot_cbdata = calloc(1, sizeof(Rot_CBData));
432 if (rot_cbdata)
433 {
434 rot_cbdata->cfdata = cfdata;
435 rot_cbdata->rot = 270;
436 it = elm_list_item_append(cfdata->rotations_obj, "270", NULL, NULL, _cb_rot_set, rot_cbdata);
437 cfdata->freelist = eina_list_append(cfdata->freelist, rot_cbdata);
438 if (cs->rotation == 270) it_sel = it;
439 }
440 }
441 if (it_sel) elm_list_item_selected_set(it_sel, EINA_TRUE);
442 elm_list_go(cfdata->rotations_obj);
443
444 elm_check_state_set(cfdata->enabled_obj, cs->enabled);
445
446 elm_slider_value_set(cfdata->priority_obj, cs->priority);
447
448 if (cs->rel_mode == E_RANDR2_RELATIVE_NONE)
449 elm_object_text_set(cfdata->rel_mode_obj, _("None"));
450 else if (cs->rel_mode == E_RANDR2_RELATIVE_CLONE)
451 elm_object_text_set(cfdata->rel_mode_obj, _("Clone"));
452 else if (cs->rel_mode == E_RANDR2_RELATIVE_TO_LEFT)
453 elm_object_text_set(cfdata->rel_mode_obj, _("Left of"));
454 else if (cs->rel_mode == E_RANDR2_RELATIVE_TO_RIGHT)
455 elm_object_text_set(cfdata->rel_mode_obj, _("Right of"));
456 else if (cs->rel_mode == E_RANDR2_RELATIVE_TO_ABOVE)
457 elm_object_text_set(cfdata->rel_mode_obj, _("Above"));
458 else if (cs->rel_mode == E_RANDR2_RELATIVE_TO_BELOW)
459 elm_object_text_set(cfdata->rel_mode_obj, _("Below"));
460 else
461 elm_object_text_set(cfdata->rel_mode_obj, _("Unconfigured"));
462
463 elm_slider_value_set(cfdata->rel_align_obj, cs->rel_align);
464
465 if (cs->profile)
466 {
467 elm_check_state_set(cfdata->use_profile_obj, EINA_TRUE);
468 elm_object_disabled_set(cfdata->profile_list_obj, EINA_FALSE);
469 elm_object_disabled_set(cfdata->scale_custom_obj, EINA_FALSE);
470
471 _basic_profile_list_fill(cfdata, cs->profile);
472
473 if (cs->scale_multiplier > 0.0)
474 {
475 elm_check_state_set(cfdata->scale_custom_obj, EINA_TRUE);
476 elm_object_disabled_set(cfdata->scale_value_obj, EINA_FALSE);
477 elm_slider_value_set(cfdata->scale_value_obj,
478 _scale_for_multiplier(cs->scale_multiplier));
479 }
480 else
481 {
482 elm_check_state_set(cfdata->scale_custom_obj, EINA_FALSE);
483 elm_object_disabled_set(cfdata->scale_value_obj, EINA_TRUE);
484 elm_slider_value_set(cfdata->scale_value_obj, elm_config_scale_get());
485 }
486 }
487 else
488 {
489 items = (Eina_List *)elm_list_items_get(cfdata->profile_list_obj);
490 EINA_LIST_FOREACH(items, l, iwt)
491 {
492 elm_list_item_selected_set(iwt, EINA_FALSE);
493 }
494 elm_check_state_set(cfdata->use_profile_obj, EINA_FALSE);
495 elm_object_disabled_set(cfdata->profile_list_obj, EINA_TRUE);
496 elm_object_disabled_set(cfdata->scale_custom_obj, EINA_TRUE);
497 elm_object_disabled_set(cfdata->scale_value_obj, EINA_TRUE);
498 }
499
500 if (!cs->rel_to)
501 elm_object_text_set(cfdata->rel_to_obj, "");
502 else
503 {
504 char *str = strdup(cs->rel_to);
505 if (str)
506 {
507 char *p = strchr(str, '/');
508 if (p)
509 {
510 *p = 0;
511 elm_object_text_set(cfdata->rel_to_obj, str);
512 }
513 free(str);
514 }
515 }
516 }
517
518 static void
_cb_screen_select(void * data,Evas_Object * obj,void * event)519 _cb_screen_select(void *data, Evas_Object *obj, void *event)
520 {
521 E_Config_Dialog_Data *cfdata = data;
522 Elm_Object_Item *it;
523 Eina_List *l;
524 int i = 0;
525
526 EINA_LIST_FOREACH(cfdata->screen_items, l, it)
527 {
528 if (it == event)
529 {
530 E_Config_Randr2_Screen *cs;
531 cfdata->screen = i;
532 cs = _config_screen_find(cfdata);
533 if (cs)
534 {
535 E_Randr2_Screen *s = _screen_config_find(cs);
536 if (s)
537 {
538 elm_object_text_set(obj, s->info.name);
539 _basic_screen_info_fill(cfdata, cs, s);
540 }
541 }
542 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
543 return;
544 }
545 i++;
546 }
547 }
548
549 static void
_cb_rel_to_set(void * data,Evas_Object * obj,void * event)550 _cb_rel_to_set(void *data, Evas_Object *obj, void *event)
551 {
552 E_Config_Dialog_Data *cfdata = data;
553 Elm_Object_Item *it;
554 Eina_List *l;
555 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
556 if (!cs) return;
557 int i = 0;
558
559 EINA_LIST_FOREACH(cfdata->screen_items2, l, it)
560 {
561 if (it == event)
562 {
563 E_Config_Randr2_Screen *cs2 = _config_screen_n_find(cfdata, i);
564 if (cs2)
565 {
566 printf("find cs = %p\n", cs2);
567 printf("cs id = %s\n", cs2->id);
568 }
569 if (cs2 == cs) return;
570 if (cs2)
571 {
572 E_Randr2_Screen *s = _screen_config_id_find(cs2->id);
573 if (s)
574 {
575 printf("Set to %p [%s]\n", cs, cs->id);
576 printf("find s = %p\n", s);
577 printf("s id = %s\n", s->id);
578 elm_object_text_set(obj, s->info.name);
579 eina_stringshare_replace(&cs->rel_to, s->id);
580 }
581 }
582 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
583 return;
584 }
585 i++;
586 }
587 }
588
589 static void
_cb_profile_enabled_changed(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)590 _cb_profile_enabled_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
591 {
592 E_Config_Dialog_Data *cfdata = data;
593 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
594 if (!cs) return;
595 if (elm_check_state_get(obj))
596 {
597 eina_stringshare_del(cs->profile);
598 cs->profile = eina_stringshare_add("standard");
599 _basic_profile_list_fill(cfdata, cs->profile);
600 elm_object_disabled_set(cfdata->profile_list_obj, EINA_FALSE);
601 elm_object_disabled_set(cfdata->scale_custom_obj, EINA_FALSE);
602 if (cs->scale_multiplier > 0.0)
603 elm_object_disabled_set(cfdata->scale_value_obj, EINA_FALSE);
604 else
605 elm_object_disabled_set(cfdata->scale_value_obj, EINA_TRUE);
606 }
607 else
608 {
609 eina_stringshare_del(cs->profile);
610 cs->profile = NULL;
611 elm_list_clear(cfdata->profile_list_obj);
612 elm_object_disabled_set(cfdata->profile_list_obj, EINA_TRUE);
613 elm_object_disabled_set(cfdata->scale_custom_obj, EINA_TRUE);
614 elm_object_disabled_set(cfdata->scale_value_obj, EINA_TRUE);
615 }
616 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
617 }
618
619 static void
_cb_custom_scale_changed(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)620 _cb_custom_scale_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
621 {
622 E_Config_Dialog_Data *cfdata = data;
623 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
624 if (!cs) return;
625
626 elm_slider_value_set(cfdata->scale_value_obj, elm_config_scale_get());
627 if (elm_check_state_get(obj))
628 {
629 elm_object_disabled_set(cfdata->scale_value_obj, EINA_FALSE);
630 cs->scale_multiplier = 1.0;
631 }
632 else
633 {
634 elm_object_disabled_set(cfdata->scale_value_obj, EINA_TRUE);
635 cs->scale_multiplier = 0.0;
636 }
637 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
638 }
639
640 static void
_cb_scale_value_changed(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)641 _cb_scale_value_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
642 {
643 E_Config_Dialog_Data *cfdata = data;
644 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
645 if (!cs) return;
646 cs->scale_multiplier =
647 _multiplier_for_scale(elm_slider_value_get(cfdata->scale_value_obj));
648 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
649 }
650
651 static void
_cb_rel_align_changed(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)652 _cb_rel_align_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
653 {
654 E_Config_Dialog_Data *cfdata = data;
655 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
656 if (!cs) return;
657 cs->rel_align = elm_slider_value_get(obj);
658 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
659 }
660
661 static void
_cb_rel_mode_none(void * data,Evas_Object * obj,void * event EINA_UNUSED)662 _cb_rel_mode_none(void *data, Evas_Object *obj, void *event EINA_UNUSED)
663 {
664 E_Config_Dialog_Data *cfdata = data;
665 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
666 if (!cs) return;
667 cs->rel_mode = E_RANDR2_RELATIVE_NONE;
668 elm_object_text_set(obj, _("None"));
669 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
670 }
671
672 static void
_cb_rel_mode_clone(void * data,Evas_Object * obj,void * event EINA_UNUSED)673 _cb_rel_mode_clone(void *data, Evas_Object *obj, void *event EINA_UNUSED)
674 {
675 E_Config_Dialog_Data *cfdata = data;
676 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
677 if (!cs) return;
678 cs->rel_mode = E_RANDR2_RELATIVE_CLONE;
679 elm_object_text_set(obj, _("Clone"));
680 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
681 }
682
683 static void
_cb_rel_mode_left_of(void * data,Evas_Object * obj,void * event EINA_UNUSED)684 _cb_rel_mode_left_of(void *data, Evas_Object *obj, void *event EINA_UNUSED)
685 {
686 E_Config_Dialog_Data *cfdata = data;
687 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
688 if (!cs) return;
689 cs->rel_mode = E_RANDR2_RELATIVE_TO_LEFT;
690 elm_object_text_set(obj, _("Left of"));
691 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
692 }
693
694 static void
_cb_rel_mode_right_of(void * data,Evas_Object * obj,void * event EINA_UNUSED)695 _cb_rel_mode_right_of(void *data, Evas_Object *obj, void *event EINA_UNUSED)
696 {
697 E_Config_Dialog_Data *cfdata = data;
698 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
699 if (!cs) return;
700 cs->rel_mode = E_RANDR2_RELATIVE_TO_RIGHT;
701 elm_object_text_set(obj, _("Right of"));
702 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
703 }
704
705 static void
_cb_rel_mode_above(void * data,Evas_Object * obj,void * event EINA_UNUSED)706 _cb_rel_mode_above(void *data, Evas_Object *obj, void *event EINA_UNUSED)
707 {
708 E_Config_Dialog_Data *cfdata = data;
709 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
710 if (!cs) return;
711 cs->rel_mode = E_RANDR2_RELATIVE_TO_ABOVE;
712 elm_object_text_set(obj, _("Above"));
713 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
714 }
715
716 static void
_cb_rel_mode_below(void * data,Evas_Object * obj,void * event EINA_UNUSED)717 _cb_rel_mode_below(void *data, Evas_Object *obj, void *event EINA_UNUSED)
718 {
719 E_Config_Dialog_Data *cfdata = data;
720 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
721 if (!cs) return;
722 cs->rel_mode = E_RANDR2_RELATIVE_TO_BELOW;
723 elm_object_text_set(obj, _("Below"));
724 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
725 }
726
727 static void
_cb_priority_changed(void * data,Evas_Object * obj EINA_UNUSED,void * event EINA_UNUSED)728 _cb_priority_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
729 {
730 E_Config_Dialog_Data *cfdata = data;
731 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
732 if (!cs) return;
733 cs->priority = elm_slider_value_get(obj);
734 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
735 }
736
737 static void
_cb_enabled_changed(void * data,Evas_Object * obj,void * event EINA_UNUSED)738 _cb_enabled_changed(void *data, Evas_Object *obj, void *event EINA_UNUSED)
739 {
740 E_Config_Dialog_Data *cfdata = data;
741 E_Config_Randr2_Screen *cs = _config_screen_find(cfdata);
742 if (!cs) return;
743 cs->enabled = elm_check_state_get(obj);
744 printf("RR: enabled = %i\n", cs->enabled);
745 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
746 }
747
748 static void
_policy_text_update(E_Config_Dialog_Data * cfdata)749 _policy_text_update(E_Config_Dialog_Data *cfdata)
750 {
751 char pbuf[128];
752 const char *policy[] =
753 {
754 _("Ignore"),
755 _("Extend"),
756 _("Clone"),
757 _("Ask")
758 };
759
760 snprintf(pbuf, sizeof(pbuf), _("Hotplug Policy (%s)"), policy[cfdata->policy]);
761 elm_object_text_set(cfdata->policy_obj, pbuf);
762 }
763
764 static void
_cb_policy_ignore(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)765 _cb_policy_ignore(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
766 {
767 E_Config_Dialog_Data *cfdata = data;
768
769 if (cfdata->policy == E_RANDR2_POLICY_NONE) return;
770 cfdata->policy = E_RANDR2_POLICY_NONE;
771 _policy_text_update(cfdata);
772 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
773 }
774
775 static void
_cb_policy_ask(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)776 _cb_policy_ask(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
777 {
778 E_Config_Dialog_Data *cfdata = data;
779
780 if (cfdata->policy == E_RANDR2_POLICY_ASK) return;
781 cfdata->policy = E_RANDR2_POLICY_ASK;
782 _policy_text_update(cfdata);
783 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
784 }
785
786 static void
_cb_policy_extend(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)787 _cb_policy_extend(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
788 {
789 E_Config_Dialog_Data *cfdata = data;
790
791 if (cfdata->policy == E_RANDR2_POLICY_EXTEND) return;
792 cfdata->policy = E_RANDR2_POLICY_EXTEND;
793 _policy_text_update(cfdata);
794 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
795 }
796
797 static void
_cb_policy_clone(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)798 _cb_policy_clone(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
799 {
800 E_Config_Dialog_Data *cfdata = data;
801
802 if (cfdata->policy == E_RANDR2_POLICY_CLONE) return;
803 cfdata->policy = E_RANDR2_POLICY_CLONE;
804 _policy_text_update(cfdata);
805 e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
806 }
807
808 static Evas_Object *
_basic_create(E_Config_Dialog * cfd,Evas * evas EINA_UNUSED,E_Config_Dialog_Data * cfdata)809 _basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data *cfdata)
810 {
811 Evas_Object *win = cfd->dia->win;
812 Evas_Object *o, *bx, *tb, *bx2;
813 Eina_List *l;
814 E_Randr2_Screen *s, *first = NULL;
815 E_Config_Randr2_Screen *first_cfg = NULL;
816 int i;
817
818 e_dialog_resizable_set(cfd->dia, 1);
819
820 o = elm_box_add(win);
821 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
822 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
823 evas_object_show(o);
824 bx = o;
825
826 ///////////////////////////////////////////////////////////////////////
827 o = elm_table_add(win);
828 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
829 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
830 elm_box_pack_end(bx, o);
831 evas_object_show(o);
832 tb = o;
833
834 o = elm_hoversel_add(win);
835 evas_object_size_hint_weight_set(o, 0.0, 0.0);
836 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
837 elm_object_text_set(o, _("Outputs"));
838 cfdata->screens = NULL;
839 cfdata->screen_items = NULL;
840 i = 0;
841 EINA_LIST_FOREACH(e_randr2->screens, l, s)
842 {
843 Elm_Object_Item *it = NULL;
844
845 if (s->info.connected)
846 {
847 E_Config_Randr2_Screen *cs;
848
849 cs = calloc(1, sizeof(E_Config_Randr2_Screen));
850 if (cs)
851 {
852 if (s->id)
853 cs->id = eina_stringshare_add(s->id);
854 if (s->config.relative.to)
855 cs->rel_to = eina_stringshare_add(s->config.relative.to);
856 cs->rel_align = s->config.relative.align;
857 cs->mode_refresh = s->config.mode.refresh;
858 cs->mode_w = s->config.mode.w;
859 cs->mode_h = s->config.mode.h;
860 cs->rotation = s->config.rotation;
861 cs->priority = s->config.priority;
862 cs->rel_mode = s->config.relative.mode;
863 cs->enabled = s->config.enabled;
864 if (s->config.profile)
865 cs->profile = eina_stringshare_add(s->config.profile);
866 cs->scale_multiplier = s->config.scale_multiplier;
867 cfdata->screens = eina_list_append(cfdata->screens, cs);
868 it = elm_hoversel_item_add(o, s->info.name,
869 NULL, ELM_ICON_NONE,
870 _cb_screen_select, cfdata);
871 if (cfdata->params)
872 {
873 if ((s->info.name) &&
874 (!strcmp(s->info.name, cfdata->params)) &&
875 (!first))
876 {
877 first = s;
878 first_cfg = cs;
879 cfdata->screen = i;
880 elm_object_text_set(o, s->info.name);
881 }
882 }
883 else
884 {
885 if (!first)
886 {
887 first = s;
888 first_cfg = cs;
889 cfdata->screen = i;
890 elm_object_text_set(o, s->info.name);
891 }
892 }
893 cfdata->screen_items = eina_list_append(cfdata->screen_items, it);
894 i++;
895 }
896 }
897 }
898 elm_table_pack(tb, o, 0, 0, 1, 1);
899 evas_object_show(o);
900
901 o = elm_entry_add(win);
902 elm_entry_scrollable_set(o, EINA_TRUE);
903 elm_entry_single_line_set(o, EINA_TRUE);
904 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
905 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
906 elm_table_pack(tb, o, 0, 1, 1, 1);
907 evas_object_show(o);
908 cfdata->name_obj = o;
909
910 o = elm_entry_add(win);
911 elm_entry_scrollable_set(o, EINA_TRUE);
912 elm_entry_single_line_set(o, EINA_TRUE);
913 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
914 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
915 elm_table_pack(tb, o, 0, 2, 1, 1);
916 evas_object_show(o);
917 cfdata->screen_obj = o;
918
919 o = elm_check_add(win);
920 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
921 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
922 elm_object_text_set(o, _("Laptop lid"));
923 elm_table_pack(tb, o, 0, 3, 1, 1);
924 evas_object_show(o);
925 cfdata->lid_obj = o;
926
927 o = elm_check_add(win);
928 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
929 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
930 elm_object_text_set(o, _("Backlight"));
931 elm_table_pack(tb, o, 0, 4, 1, 1);
932 evas_object_show(o);
933 cfdata->backlight_obj = o;
934
935 o = elm_label_add(win);
936 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
937 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
938 elm_table_pack(tb, o, 0, 5, 1, 1);
939 evas_object_show(o);
940 cfdata->size_obj = o;
941
942 ///////////////////////////////////////////////////////////////////////
943 o = elm_list_add(win);
944 elm_scroller_content_min_limit(o, 1, 0);
945 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
946 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
947 elm_table_pack(tb, o, 1, 0, 1, 14);
948 evas_object_show(o);
949 cfdata->modes_obj = o;
950
951 ///////////////////////////////////////////////////////////////////////
952 o = elm_list_add(win);
953 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
954 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
955 elm_table_pack(tb, o, 2, 0, 1, 4);
956 evas_object_show(o);
957 cfdata->rotations_obj = o;
958
959 o = elm_check_add(win);
960 evas_object_size_hint_weight_set(o, 0.0, 0.0);
961 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
962 elm_object_text_set(o, _("On"));
963 elm_table_pack(tb, o, 2, 4, 1, 1);
964 evas_object_show(o);
965 evas_object_smart_callback_add(o, "changed", _cb_enabled_changed, cfdata);
966 cfdata->enabled_obj = o;
967
968 o = elm_slider_add(win);
969 evas_object_size_hint_weight_set(o, 0.0, 0.0);
970 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
971 elm_object_text_set(o, _("Priority"));
972 elm_slider_unit_format_set(o, "%3.0f");
973 elm_slider_span_size_set(o, 100);
974 elm_slider_min_max_set(o, 0, 100);
975 elm_table_pack(tb, o, 2, 5, 1, 1);
976 evas_object_show(o);
977 evas_object_smart_callback_add(o, "changed", _cb_priority_changed, cfdata);
978 cfdata->priority_obj = o;
979
980 o = elm_hoversel_add(win);
981 evas_object_size_hint_weight_set(o, 0.0, 0.0);
982 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
983 elm_object_text_set(o, _("Relative"));
984 elm_hoversel_item_add(o, _("None"), NULL, ELM_ICON_NONE, _cb_rel_mode_none, cfdata);
985 elm_hoversel_item_add(o, _("Clone"), NULL, ELM_ICON_NONE, _cb_rel_mode_clone, cfdata);
986 elm_hoversel_item_add(o, _("Left of"), NULL, ELM_ICON_NONE, _cb_rel_mode_left_of, cfdata);
987 elm_hoversel_item_add(o, _("Right of"), NULL, ELM_ICON_NONE, _cb_rel_mode_right_of, cfdata);
988 elm_hoversel_item_add(o, _("Above"), NULL, ELM_ICON_NONE, _cb_rel_mode_above, cfdata);
989 elm_hoversel_item_add(o, _("Below"), NULL, ELM_ICON_NONE, _cb_rel_mode_below, cfdata);
990 elm_table_pack(tb, o, 2, 6, 1, 1);
991 evas_object_show(o);
992 cfdata->rel_mode_obj = o;
993
994 o = elm_hoversel_add(win);
995 evas_object_size_hint_weight_set(o, 0.0, 0.0);
996 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
997 elm_object_text_set(o, _("To"));
998 EINA_LIST_FOREACH(e_randr2->screens, l, s)
999 {
1000 Elm_Object_Item *it = NULL;
1001
1002 if (s->info.connected)
1003 {
1004 it = elm_hoversel_item_add(o, s->info.name,
1005 NULL, ELM_ICON_NONE,
1006 _cb_rel_to_set, cfdata);
1007 cfdata->screen_items2 = eina_list_append(cfdata->screen_items2, it);
1008 }
1009 }
1010 elm_table_pack(tb, o, 2, 7, 1, 1);
1011 evas_object_show(o);
1012 cfdata->rel_to_obj = o;
1013
1014 o = elm_slider_add(win);
1015 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1016 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1017 elm_object_text_set(o, _("Align"));
1018 elm_slider_unit_format_set(o, "%1.1f");
1019 elm_slider_span_size_set(o, 100);
1020 elm_slider_min_max_set(o, 0.0, 1.0);
1021 elm_table_pack(tb, o, 2, 8, 1, 1);
1022 evas_object_show(o);
1023 evas_object_smart_callback_add(o, "changed", _cb_rel_align_changed, cfdata);
1024 cfdata->rel_align_obj = o;
1025
1026 // // // // // // // // // // // // // // // // // // // // // // //
1027 o = elm_separator_add(win);
1028 elm_separator_horizontal_set(o, EINA_TRUE);
1029 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1030 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1031 elm_table_pack(tb, o, 2, 9, 1, 1);
1032 evas_object_show(o);
1033
1034 o = elm_check_add(win);
1035 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1036 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1037 elm_object_text_set(o, _("Use Profile"));
1038 elm_table_pack(tb, o, 2, 10, 1, 1);
1039 evas_object_show(o);
1040 cfdata->use_profile_obj = o;
1041 evas_object_smart_callback_add(o, "changed", _cb_profile_enabled_changed, cfdata);
1042
1043 o = elm_list_add(win);
1044 evas_object_size_hint_weight_set(o, 0.0, EVAS_HINT_EXPAND);
1045 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
1046 elm_table_pack(tb, o, 2, 11, 1, 1);
1047 evas_object_show(o);
1048 cfdata->profile_list_obj = o;
1049
1050 o = elm_check_add(win);
1051 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1052 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1053 elm_object_text_set(o, _("Custom Scale"));
1054 elm_table_pack(tb, o, 2, 12, 1, 1);
1055 evas_object_show(o);
1056 cfdata->scale_custom_obj = o;
1057 evas_object_smart_callback_add(o, "changed", _cb_custom_scale_changed, cfdata);
1058
1059 o = elm_slider_add(win);
1060 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1061 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1062 elm_object_text_set(o, _("Scale"));
1063 elm_slider_unit_format_set(o, "%1.1f");
1064 elm_slider_span_size_set(o, 100);
1065 elm_slider_min_max_set(o, 0.5, 5.5);
1066 elm_slider_value_set(o, elm_config_scale_get());
1067 elm_table_pack(tb, o, 2, 13, 1, 1);
1068 evas_object_show(o);
1069 cfdata->scale_value_obj = o;
1070 evas_object_smart_callback_add(o, "changed", _cb_scale_value_changed, cfdata);
1071
1072 _basic_profile_list_fill(cfdata, NULL);
1073 _basic_screen_info_fill(cfdata, first_cfg, first);
1074 ///////////////////////////////////////////////////////////////////////
1075
1076 o = elm_box_add(win);
1077 elm_box_horizontal_set(o, EINA_TRUE);
1078 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
1079 evas_object_size_hint_align_set(o, 0.0, EVAS_HINT_FILL);
1080 elm_box_pack_end(bx, o);
1081 evas_object_show(o);
1082 bx2 = o;
1083
1084 o = elm_check_add(win);
1085 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
1086 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
1087 elm_object_text_set(o, _("Restore setup on start"));
1088 elm_check_state_set(o, cfdata->restore);
1089 elm_box_pack_end(bx2, o);
1090 evas_object_show(o);
1091 evas_object_smart_callback_add(o, "changed", _cb_restore_changed, cfdata);
1092
1093 o = elm_check_add(win);
1094 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
1095 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
1096 elm_object_text_set(o, _("Monitor hotplug"));
1097 elm_check_state_set(o, cfdata->hotplug);
1098 elm_box_pack_end(bx2, o);
1099 evas_object_show(o);
1100 evas_object_smart_callback_add(o, "changed", _cb_hotplug_changed, cfdata);
1101
1102 o = elm_check_add(win);
1103 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
1104 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
1105 elm_object_text_set(o, _("Lid Events"));
1106 elm_check_state_set(o, cfdata->acpi);
1107 elm_box_pack_end(bx2, o);
1108 evas_object_show(o);
1109 evas_object_smart_callback_add(o, "changed", _cb_acpi_changed, cfdata);
1110
1111 cfdata->policy_obj = o = elm_hoversel_add(win);
1112 evas_object_size_hint_weight_set(o, 0.0, 0.0);
1113 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
1114 _policy_text_update(cfdata);
1115 elm_hoversel_item_add(o, _("Clone"), NULL, ELM_ICON_NONE, _cb_policy_clone, cfdata);
1116 elm_hoversel_item_add(o, _("Extend"), NULL, ELM_ICON_NONE, _cb_policy_extend, cfdata);
1117 elm_hoversel_item_add(o, _("Ask"), NULL, ELM_ICON_NONE, _cb_policy_ask, cfdata);
1118 elm_hoversel_item_add(o, _("Ignore"), NULL, ELM_ICON_NONE, _cb_policy_ignore, cfdata);
1119 elm_box_pack_end(bx2, o);
1120 evas_object_show(o);
1121
1122 evas_smart_objects_calculate(evas_object_evas_get(win));
1123
1124 e_util_win_auto_resize_fill(win);
1125 elm_win_center(win, 1, 1);
1126 cfdata->cfd = cfd;
1127 return bx;
1128 }
1129
1130 static int
_basic_apply(E_Config_Dialog * cfd EINA_UNUSED,E_Config_Dialog_Data * cfdata)1131 _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
1132 {
1133 Eina_List *l;
1134 E_Config_Randr2_Screen *cs, *cs2;
1135
1136 e_randr2_cfg->restore = cfdata->restore;
1137 e_randr2_cfg->ignore_hotplug_events = !cfdata->hotplug;
1138 e_randr2_cfg->ignore_acpi_events = !cfdata->acpi;
1139 e_randr2_cfg->default_policy = cfdata->policy;
1140
1141 printf("APPLY....................\n");
1142 EINA_LIST_FOREACH(cfdata->screens, l, cs2)
1143 {
1144 if (!cs2->id) continue;
1145 printf("APPLY .... %p\n", cs2);
1146 cs = _screen_config_randr_id_find(cs2->id);
1147 if (!cs)
1148 {
1149 cs = calloc(1, sizeof(E_Config_Randr2_Screen));
1150 cs->id = eina_stringshare_add(cs2->id);
1151 e_randr2_cfg->screens = eina_list_append(e_randr2_cfg->screens, cs);
1152 }
1153 if (cs->rel_to) eina_stringshare_del(cs->rel_to);
1154 cs->rel_to = NULL;
1155 printf("APPLY %s .... rel to %s\n", cs->id, cs2->rel_to);
1156 if (cs2->rel_to) cs->rel_to = eina_stringshare_add(cs2->rel_to);
1157 cs->rel_align = cs2->rel_align;
1158 cs->mode_w = cs2->mode_w;
1159 cs->mode_h = cs2->mode_h;
1160 cs->mode_refresh = cs2->mode_refresh;
1161 cs->rotation = cs2->rotation;
1162 cs->priority = cs2->priority;
1163 cs->rel_mode = cs2->rel_mode;
1164 if (cs->profile) eina_stringshare_del(cs->profile);
1165 cs->profile = NULL;
1166 if (cs2->profile) cs->profile = eina_stringshare_add(cs2->profile);
1167 cs->scale_multiplier = cs2->scale_multiplier;
1168 printf("APPLY %s .... rel mode %i\n", cs->id, cs->rel_mode);
1169 cs->enabled = cs2->enabled;
1170 }
1171 e_randr2_config_save();
1172 e_randr2_config_apply();
1173 return 1;
1174 }
1175
1176 static int
_basic_check(E_Config_Dialog * cfd EINA_UNUSED,E_Config_Dialog_Data * cfdata EINA_UNUSED)1177 _basic_check(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata EINA_UNUSED)
1178 {
1179 return 1;
1180 }
1181