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_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
9 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
11 /* Actual config data we will be playing with whil the dialog is active */
12 #define MODE_NOTHING 0
13 #define MODE_GEOMETRY E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE
14 #define MODE_LOCKS E_REMEMBER_APPLY_LOCKS
15 #define MODE_GEOMETRY_LOCKS E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LOCKS
16 #define MODE_ALL E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | E_REMEMBER_APPLY_LAYER | \
17 E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | \
18 E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | \
19 E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | \
20 E_REMEMBER_APPLY_SKIP_TASKBAR | E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF | \
21 E_REMEMBER_APPLY_OFFER_RESISTANCE
22 struct _E_Config_Dialog_Data
54 int apply_skip_winlist;
56 int apply_skip_taskbar;
59 int apply_desktop_file;
60 int set_focus_on_start;
68 /* a nice easy setup function that does the dirty work */
70 e_int_border_remember(E_Border *bd)
73 E_Config_Dialog_View *v;
75 v = E_NEW(E_Config_Dialog_View, 1);
79 v->create_cfdata = _create_data;
80 v->free_cfdata = _free_data;
81 v->basic.apply_cfdata = _basic_apply_data;
82 v->basic.create_widgets = _basic_create_widgets;
83 v->advanced.apply_cfdata = _advanced_apply_data;
84 v->advanced.create_widgets = _advanced_create_widgets;
85 v->override_auto_apply = 1;
87 /* create config dialog for bd object/data */
88 cfd = e_config_dialog_new(bd->zone->container,
90 "E", "_border_remember_dialog",
92 bd->border_remember_dialog = cfd;
98 _clear_data(E_Config_Dialog_Data *cfdata)
100 E_FREE(cfdata->name);
101 E_FREE(cfdata->class);
102 E_FREE(cfdata->title);
103 E_FREE(cfdata->role);
104 E_FREE(cfdata->command);
105 E_FREE(cfdata->desktop);
107 memset(&cfdata->remember, 0, sizeof(cfdata->remember));
111 _fill_data(E_Config_Dialog_Data *cfdata)
121 if (rem->name && rem->name[0])
122 cfdata->name = strdup(rem->name);
123 if (rem->class && rem->class[0])
124 cfdata->class = strdup(rem->class);
125 if (rem->title && rem->title[0])
126 cfdata->title = strdup(rem->title);
127 if (rem->role && rem->role[0])
128 cfdata->role = strdup(rem->role);
129 if (rem->prop.command && rem->prop.command[0])
130 cfdata->command = strdup(rem->prop.command);
131 if (rem->prop.desktop_file && rem->prop.desktop_file[0])
132 cfdata->desktop = strdup(rem->prop.desktop_file);
134 cfdata->remember.apply_desktop_file = 1;
138 bd->client.icccm.name &&
139 bd->client.icccm.name[0])
140 cfdata->name = strdup(bd->client.icccm.name);
141 if (!cfdata->class &&
142 bd->client.icccm.class &&
143 bd->client.icccm.class[0])
144 cfdata->class = strdup(bd->client.icccm.class);
146 bd->client.icccm.window_role &&
147 bd->client.icccm.window_role[0])
148 cfdata->role = strdup(bd->client.icccm.window_role);
151 const char *title = e_border_name_get(bd);
152 if (title && title[0])
153 cfdata->title = strdup(title);
155 if (!cfdata->desktop && bd->desktop)
156 cfdata->desktop = strdup(bd->desktop->name);
158 if (!cfdata->command &&
159 (bd->client.icccm.command.argc > 0) &&
160 (bd->client.icccm.command.argv))
167 for (i = 0; i < bd->client.icccm.command.argc; i++)
174 for (j = 0; bd->client.icccm.command.argv[i][j]; j++)
176 if (k >= (int)(sizeof(buf) - 10))
181 if ((bd->client.icccm.command.argv[i][j] == ' ') ||
182 (bd->client.icccm.command.argv[i][j] == '\t') ||
183 (bd->client.icccm.command.argv[i][j] == '\\') ||
184 (bd->client.icccm.command.argv[i][j] == '\"') ||
185 (bd->client.icccm.command.argv[i][j] == '\'') ||
186 (bd->client.icccm.command.argv[i][j] == '$') ||
187 (bd->client.icccm.command.argv[i][j] == '%'))
192 buf[k] = bd->client.icccm.command.argv[i][j];
198 cfdata->command = strdup(buf);
203 if (rem->apply_first_only) cfdata->remember.apply_first_only = 1;
204 if (rem->keep_settings) cfdata->remember.keep_settings = 1;
206 if (rem->match & E_REMEMBER_MATCH_NAME)
207 cfdata->remember.match_name = 1;
208 if (rem->match & E_REMEMBER_MATCH_CLASS)
209 cfdata->remember.match_class = 1;
210 if (rem->match & E_REMEMBER_MATCH_TITLE)
211 cfdata->remember.match_title = 1;
212 if (rem->match & E_REMEMBER_MATCH_ROLE)
213 cfdata->remember.match_role = 1;
214 if (rem->match & E_REMEMBER_MATCH_TYPE)
215 cfdata->remember.match_type = 1;
216 if (rem->match & E_REMEMBER_MATCH_TRANSIENT)
217 cfdata->remember.match_transient = 1;
218 if (rem->apply & E_REMEMBER_APPLY_POS)
219 cfdata->remember.apply_pos = 1;
220 if (rem->apply & E_REMEMBER_APPLY_SIZE)
221 cfdata->remember.apply_size = 1;
222 if (rem->apply & E_REMEMBER_APPLY_LAYER)
223 cfdata->remember.apply_layer = 1;
224 if (rem->apply & E_REMEMBER_APPLY_LOCKS)
225 cfdata->remember.apply_locks = 1;
226 if (rem->apply & E_REMEMBER_APPLY_BORDER)
227 cfdata->remember.apply_border = 1;
228 if (rem->apply & E_REMEMBER_APPLY_STICKY)
229 cfdata->remember.apply_sticky = 1;
230 if (rem->apply & E_REMEMBER_APPLY_DESKTOP)
231 cfdata->remember.apply_desktop = 1;
232 if (rem->apply & E_REMEMBER_APPLY_SHADE)
233 cfdata->remember.apply_shade = 1;
234 if (rem->apply & E_REMEMBER_APPLY_FULLSCREEN)
235 cfdata->remember.apply_fullscreen = 1;
236 if (rem->apply & E_REMEMBER_APPLY_ZONE)
237 cfdata->remember.apply_zone = 1;
238 if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST)
239 cfdata->remember.apply_skip_winlist = 1;
240 if (rem->apply & E_REMEMBER_APPLY_SKIP_PAGER)
241 cfdata->remember.apply_skip_pager = 1;
242 if (rem->apply & E_REMEMBER_APPLY_SKIP_TASKBAR)
243 cfdata->remember.apply_skip_taskbar = 1;
244 if (rem->apply & E_REMEMBER_APPLY_RUN)
245 cfdata->remember.apply_run = 1;
246 if (rem->apply & E_REMEMBER_APPLY_ICON_PREF)
247 cfdata->remember.apply_icon_pref = 1;
248 if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START)
249 cfdata->remember.set_focus_on_start = 1;
250 if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE)
251 cfdata->remember.offer_resistance = 1;
254 if (!rem) cfdata->mode = MODE_NOTHING;
255 else cfdata->mode = rem->apply;
259 _create_data(E_Config_Dialog *cfd)
261 /* Create cfdata - cfdata is a temporary block of config data that this
262 * dialog will be dealing with while configuring. it will be applied to
263 * the running systems/config in the apply methods
265 E_Config_Dialog_Data *cfdata;
267 cfdata = E_NEW(E_Config_Dialog_Data, 1);
268 cfdata->border = cfd->data;
274 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
276 /* Free the cfdata */
277 if (cfdata->name) free(cfdata->name);
278 if (cfdata->class) free(cfdata->class);
279 if (cfdata->title) free(cfdata->title);
280 if (cfdata->role) free(cfdata->role);
281 if (cfdata->command) free(cfdata->command);
282 if (cfdata->desktop) free(cfdata->desktop);
284 if (!cfdata->applied && cfdata->border->remember)
286 e_remember_unuse(cfdata->border->remember);
287 e_remember_del(cfdata->border->remember);
288 e_config_save_queue();
291 cfdata->border->border_remember_dialog = NULL;
296 _warning_dialog_show(E_Container *con)
300 dia = e_dialog_new(con, "E", "_border_remember_error_multi_dialog");
301 e_dialog_title_set(dia, _("Window properties are not a unique match"));
304 _("You are trying to ask Enlightenment to remember to apply<br>"
305 "properties (such as size, location, border style etc.) to<br>"
306 "a window that <hilight>does not have unique properties</hilight>.<br>"
308 "This means it shares Name/Class, Transience, Role etc. properties<br>"
309 "with more than 1 other window on the screen and remembering<br>"
310 "properties for this window will apply to all other windows<br>"
311 "that match these properties.<br>"
313 "This is just a warning in case you did not intend this to happen.<br>"
314 "If you did, simply press <hilight>Apply</hilight> or <hilight>OK</hilight> buttons<br>"
315 "and your settings will be accepted. Press <hilight>Cancel</hilight> if you<br>"
316 "are not sure and nothing will be affected.")
318 e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
319 e_win_centered_set(dia->win, 1);
324 _check_matches(E_Remember *rem, int update)
331 EINA_LIST_FOREACH(e_border_client_list(), l, bd)
333 int match = rem->match;
334 title = e_border_name_get(bd);
336 if ((match & E_REMEMBER_MATCH_NAME) &&
337 (e_util_glob_match(bd->client.icccm.name, rem->name)))
338 match &= ~E_REMEMBER_MATCH_NAME;
340 if ((match & E_REMEMBER_MATCH_CLASS) &&
341 (e_util_glob_match(bd->client.icccm.class, rem->class)))
342 match &= ~E_REMEMBER_MATCH_CLASS;
344 if ((match & E_REMEMBER_MATCH_TITLE) &&
345 (e_util_glob_match(title, rem->title)))
346 match &= ~E_REMEMBER_MATCH_TITLE;
348 if ((match & E_REMEMBER_MATCH_ROLE) &&
349 ((!e_util_strcmp(rem->role, bd->client.icccm.window_role)) ||
350 (e_util_both_str_empty(rem->role, bd->client.icccm.window_role))))
351 match &= ~E_REMEMBER_MATCH_ROLE;
353 if ((match & E_REMEMBER_MATCH_TYPE) &&
354 (rem->type == (int)bd->client.netwm.type))
355 match &= ~E_REMEMBER_MATCH_TYPE;
357 if ((match & E_REMEMBER_MATCH_TRANSIENT) &&
358 ((rem->transient && bd->client.icccm.transient_for != 0) ||
359 (!rem->transient && (bd->client.icccm.transient_for == 0))))
360 match &= ~E_REMEMBER_MATCH_TRANSIENT;
367 bd->changes.icon = 1;
376 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
378 /* Actually take our cfdata settings and apply them in real life */
379 E_Border *bd = cfdata->border;
380 E_Remember *rem = bd->remember;
382 if (cfdata->mode == MODE_NOTHING)
386 e_remember_unuse(rem);
389 e_config_save_queue();
395 rem = e_remember_new();
405 e_remember_default_match_set(rem, cfdata->border);
407 if ((!cfdata->warned) && (_check_matches(rem, 0) > 1))
409 _warning_dialog_show(cfd->con);
414 rem->apply = cfdata->mode;
415 rem->apply_first_only = 0;
418 e_remember_update(bd);
420 e_config_save_queue();
421 return 1; /* Apply was OK */
425 _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
427 E_Border *bd = cfdata->border;
428 E_Remember *rem = bd->remember;
433 rem = e_remember_new();
441 if (rem->name) eina_stringshare_del(rem->name);
442 if (rem->class) eina_stringshare_del(rem->class);
443 if (rem->title) eina_stringshare_del(rem->title);
444 if (rem->role) eina_stringshare_del(rem->role);
445 if (rem->prop.command) eina_stringshare_del(rem->prop.command);
446 if (rem->prop.desktop_file) eina_stringshare_del(rem->prop.desktop_file);
451 rem->prop.command = NULL;
452 rem->prop.desktop_file = NULL;
456 rem->apply_first_only = cfdata->remember.apply_first_only;
458 if (cfdata->remember.match_name && cfdata->name && cfdata->name[0])
460 rem->match |= E_REMEMBER_MATCH_NAME;
461 rem->name = eina_stringshare_add(cfdata->name);
463 if (cfdata->remember.match_class && cfdata->class && cfdata->class[0])
465 rem->match |= E_REMEMBER_MATCH_CLASS;
466 rem->class = eina_stringshare_add(cfdata->class);
468 if (cfdata->remember.match_title && cfdata->title && cfdata->title[0])
470 rem->match |= E_REMEMBER_MATCH_TITLE;
471 rem->title = eina_stringshare_add(cfdata->title);
473 if (cfdata->remember.match_role && cfdata->role && cfdata->role[0])
475 rem->match |= E_REMEMBER_MATCH_ROLE;
476 rem->role = eina_stringshare_add(cfdata->role);
478 if (cfdata->remember.match_type)
480 rem->match |= E_REMEMBER_MATCH_TYPE;
481 rem->type = bd->client.netwm.type;
484 if (cfdata->remember.match_transient)
486 rem->match |= E_REMEMBER_MATCH_TRANSIENT;
487 if (bd->client.icccm.transient_for != 0)
497 dia = e_dialog_new(cfd->con, "E", "_border_remember_error_noprop_dialog");
498 e_dialog_title_set(dia, _("No match properties set"));
501 _("You are trying to ask Enlightenment to remember to apply<br>"
502 "properties (such as size, location, border style etc.) to<br>"
503 "a window <hilight>without specifying how to remember it</hilight>.<br>"
505 "You must specify at least 1 way of remembering this window.")
507 e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
508 e_win_centered_set(dia->win, 1);
510 cfdata->border->remember = rem;
514 /* TODO warn when match doesn't match the current window
515 * (when using globs) */
519 if ((!cfdata->remember.apply_first_only) &&
520 (_check_matches(rem, 0) > 1))
522 _warning_dialog_show(cfd->con);
528 if (cfdata->command && cfdata->command[0])
529 rem->prop.command = eina_stringshare_add(cfdata->command);
530 if (cfdata->remember.apply_desktop_file && cfdata->desktop)
531 rem->prop.desktop_file = eina_stringshare_add(cfdata->desktop);
534 if (cfdata->remember.apply_pos)
535 rem->apply |= E_REMEMBER_APPLY_POS;
536 if (cfdata->remember.apply_size)
537 rem->apply |= E_REMEMBER_APPLY_SIZE;
538 if (cfdata->remember.apply_layer)
539 rem->apply |= E_REMEMBER_APPLY_LAYER;
540 if (cfdata->remember.apply_locks)
541 rem->apply |= E_REMEMBER_APPLY_LOCKS;
542 if (cfdata->remember.apply_border)
543 rem->apply |= E_REMEMBER_APPLY_BORDER;
544 if (cfdata->remember.apply_sticky)
545 rem->apply |= E_REMEMBER_APPLY_STICKY;
546 if (cfdata->remember.apply_desktop)
547 rem->apply |= E_REMEMBER_APPLY_DESKTOP;
548 if (cfdata->remember.apply_shade)
549 rem->apply |= E_REMEMBER_APPLY_SHADE;
550 if (cfdata->remember.apply_fullscreen)
551 rem->apply |= E_REMEMBER_APPLY_FULLSCREEN;
552 if (cfdata->remember.apply_zone)
553 rem->apply |= E_REMEMBER_APPLY_ZONE;
554 if (cfdata->remember.apply_skip_winlist)
555 rem->apply |= E_REMEMBER_APPLY_SKIP_WINLIST;
556 if (cfdata->remember.apply_skip_pager)
557 rem->apply |= E_REMEMBER_APPLY_SKIP_PAGER;
558 if (cfdata->remember.apply_skip_taskbar)
559 rem->apply |= E_REMEMBER_APPLY_SKIP_TASKBAR;
560 if (cfdata->remember.apply_run)
561 rem->apply |= E_REMEMBER_APPLY_RUN;
562 if (cfdata->remember.apply_icon_pref)
563 rem->apply |= E_REMEMBER_APPLY_ICON_PREF;
564 if (cfdata->remember.set_focus_on_start)
565 rem->apply |= E_REMEMBER_SET_FOCUS_ON_START;
566 if (cfdata->remember.offer_resistance)
567 rem->apply |= E_REMEMBER_APPLY_OFFER_RESISTANCE;
569 if (!rem->apply && !rem->prop.desktop_file)
571 e_remember_unuse(rem);
573 if (cfdata->border->remember)
574 e_config_save_queue();
578 _check_matches(rem, 1);
579 rem->keep_settings = 0;
580 cfdata->border->remember = rem;
581 e_remember_update(cfdata->border);
582 rem->keep_settings = cfdata->remember.keep_settings;
585 e_config_save_queue();
586 return 1; /* Apply was OK */
591 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
593 /* generate the core widget layout for a basic dialog */
599 o = e_widget_list_add(evas, 0, 0);
600 rg = e_widget_radio_group_new(&(cfdata->mode));
601 ob = e_widget_radio_add(evas, _("Nothing"), MODE_NOTHING, rg);
602 e_widget_list_object_append(o, ob, 1, 1, 0.5);
603 ob = e_widget_radio_add(evas, _("Size and Position"), MODE_GEOMETRY, rg);
604 e_widget_list_object_append(o, ob, 1, 1, 0.5);
605 ob = e_widget_radio_add(evas, _("Locks"), MODE_LOCKS, rg);
606 e_widget_list_object_append(o, ob, 1, 1, 0.5);
607 ob = e_widget_radio_add(evas, _("Size, Position and Locks"), MODE_GEOMETRY_LOCKS, rg);
608 e_widget_list_object_append(o, ob, 1, 1, 0.5);
609 ob = e_widget_radio_add(evas, _("All"), MODE_ALL, rg);
610 e_widget_list_object_append(o, ob, 1, 1, 0.5);
615 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
617 /* generate the core widget layout for an advanced dialog */
618 Evas_Object *o, *ob, *of;
622 o = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale));
624 of = e_widget_list_add(evas, 0, 0);
627 ob = e_widget_check_add(evas, _("Window name"),
628 &(cfdata->remember.match_name));
629 e_widget_list_object_append(of, ob, 1, 0, 0.5);
630 ob = e_widget_entry_add(evas, &cfdata->name, NULL, NULL, NULL);
631 e_widget_list_object_append(of, ob, 1, 0, 0.5);
635 cfdata->remember.match_name = 0;
639 ob = e_widget_check_add(evas, _("Window class"),
640 &(cfdata->remember.match_class));
641 e_widget_list_object_append(of, ob, 1, 0, 0.5);
642 ob = e_widget_entry_add(evas, &cfdata->class, NULL, NULL, NULL);
643 e_widget_list_object_append(of, ob, 1, 0, 0.5);
647 cfdata->remember.match_class = 0;
651 ob = e_widget_check_add(evas, _("Title"),
652 &(cfdata->remember.match_title));
653 e_widget_list_object_append(of, ob, 1, 0, 0.5);
654 ob = e_widget_entry_add(evas, &cfdata->title, NULL, NULL, NULL);
655 e_widget_list_object_append(of, ob, 1, 0, 0.5);
659 cfdata->remember.match_title = 0;
663 ob = e_widget_check_add(evas, _("Window Role"),
664 &(cfdata->remember.match_role));
665 e_widget_list_object_append(of, ob, 1, 0, 0.5);
666 ob = e_widget_entry_add(evas, &cfdata->role, NULL, NULL, NULL);
667 e_widget_list_object_append(of, ob, 1, 0, 0.5);
671 cfdata->remember.match_role = 0;
673 if (cfdata->border->client.netwm.type != ECORE_X_WINDOW_TYPE_UNKNOWN)
675 ob = e_widget_check_add(evas, _("Window type"),
676 &(cfdata->remember.match_type));
677 e_widget_list_object_append(of, ob, 1, 0, 0.5);
681 cfdata->remember.match_type = 0;
683 ob = e_widget_label_add(evas, _("wildcard matches are allowed"));
684 e_widget_list_object_append(of, ob, 1, 0, 0.5);
685 ob = e_widget_check_add(evas, _("Transience"),
686 &(cfdata->remember.match_transient));
687 e_widget_list_object_append(of, ob, 1, 0, 0.5);
688 e_widget_toolbook_page_append(o, NULL, _("Using"), of, 1, 1, 1, 1, 0.5, 0.0);
691 of = e_widget_table_add(evas, 0);
692 ob = e_widget_check_add(evas, _("Position"),
693 &(cfdata->remember.apply_pos));
694 e_widget_table_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
695 ob = e_widget_check_add(evas, _("Size"),
696 &(cfdata->remember.apply_size));
697 e_widget_table_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
698 ob = e_widget_check_add(evas, _("Stacking"),
699 &(cfdata->remember.apply_layer));
700 e_widget_table_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
701 ob = e_widget_check_add(evas, _("Locks"),
702 &(cfdata->remember.apply_locks));
703 e_widget_table_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
704 ob = e_widget_check_add(evas, _("Border style"),
705 &(cfdata->remember.apply_border));
706 e_widget_table_object_append(of, ob, 0, 4, 1, 1, 1, 1, 1, 1);
707 ob = e_widget_check_add(evas, _("Icon Preference"),
708 &(cfdata->remember.apply_icon_pref));
709 e_widget_table_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1);
710 ob = e_widget_check_add(evas, _("Stickiness"),
711 &(cfdata->remember.apply_sticky));
712 e_widget_table_object_append(of, ob, 0, 6, 1, 1, 1, 1, 1, 1);
713 ob = e_widget_check_add(evas, _("Virtual Desktop"),
714 &(cfdata->remember.apply_desktop));
715 e_widget_table_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
716 ob = e_widget_check_add(evas, _("Shaded state"),
717 &(cfdata->remember.apply_shade));
718 e_widget_table_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
719 ob = e_widget_check_add(evas, _("Fullscreen state"),
720 &(cfdata->remember.apply_fullscreen));
721 e_widget_table_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
722 ob = e_widget_check_add(evas, _("Current Screen"),
723 &(cfdata->remember.apply_zone));
724 e_widget_table_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
725 ob = e_widget_check_add(evas, _("Skip Window List"),
726 &(cfdata->remember.apply_skip_winlist));
727 e_widget_table_object_append(of, ob, 1, 4, 1, 1, 1, 1, 1, 1);
728 ob = e_widget_check_add(evas, _("Skip Pager"),
729 &(cfdata->remember.apply_skip_pager));
730 e_widget_table_object_append(of, ob, 1, 5, 1, 1, 1, 1, 1, 1);
731 ob = e_widget_check_add(evas, _("Skip Taskbar"),
732 &(cfdata->remember.apply_skip_taskbar));
733 e_widget_table_object_append(of, ob, 1, 6, 1, 1, 1, 1, 1, 1);
734 ob = e_widget_check_add(evas, _("Offer Resistance"),
735 &(cfdata->remember.offer_resistance));
736 e_widget_table_object_append(of, ob, 1, 7, 1, 1, 1, 1, 1, 1);
737 ob = e_widget_check_add(evas, _("Application file or name (.desktop)"),
738 &(cfdata->remember.apply_desktop_file));
739 e_widget_table_object_append(of, ob, 0, 7, 1, 1, 1, 1, 1, 1);
740 ob = e_widget_entry_add(evas, &cfdata->desktop, NULL, NULL, NULL);
741 e_widget_table_object_append(of, ob, 0, 8, 2, 1, 1, 1, 1, 1);
742 e_widget_toolbook_page_append(o, NULL, _("Properties"), of, 1, 1, 1, 1, 0.5, 0.0);
744 of = e_widget_table_add(evas, 0);
745 ob = e_widget_check_add(evas, _("Match only one window"),
746 &(cfdata->remember.apply_first_only));
747 e_widget_table_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
749 ob = e_widget_check_add(evas, _("Always focus on start"),
750 &(cfdata->remember.set_focus_on_start));
751 e_widget_table_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
753 ob = e_widget_check_add(evas, _("Keep current properties"),
754 &(cfdata->remember.keep_settings));
755 e_widget_table_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
759 ob = e_widget_check_add(evas, _("Start this program on login"),
760 &(cfdata->remember.apply_run));
761 e_widget_table_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
763 e_widget_toolbook_page_append(o, NULL, _("Options"), of, 1, 1, 1, 1, 0.5, 0.0);
764 e_widget_toolbook_page_show(o, 0);