4 #define MODE_GEOMETRY 1
6 #define MODE_GEOMETRY_LOCKS 3
9 static void _bd_cb_dialog_del(void *obj);
10 static void _bd_cb_dialog_close(void *data, E_Dialog *dia);
11 static Evas_Object *_bd_icccm_create(E_Dialog *dia, void *data);
12 static Evas_Object *_bd_netwm_create(E_Dialog *dia, void *data);
13 static void _bd_go(void *data, void *data2);
14 static void _create_data(E_Dialog *cfd, E_Border *bd);
15 static void _free_data(E_Dialog *cfd, E_Config_Dialog_Data *cfdata);
17 struct _E_Config_Dialog_Data
68 e_int_border_prop(E_Border *bd)
72 if (bd->border_prop_dialog) return;
74 dia = e_dialog_new(bd->zone->container, "E", "_window_props");
75 e_object_del_attach_func_set(E_OBJECT(dia), _bd_cb_dialog_del);
77 _create_data(dia, bd);
79 _bd_go(dia, (void *)0);
81 e_dialog_button_add(dia, _("Close"), NULL, _bd_cb_dialog_close, dia);
82 e_win_centered_set(dia->win, 1);
84 e_dialog_border_icon_set(dia, "preferences-system-windows");
85 e_dialog_resizable_set(dia, 1);
89 _create_data(E_Dialog *cfd, E_Border *bd)
91 E_Config_Dialog_Data *cfdata;
94 cfdata = E_NEW(E_Config_Dialog_Data, 1);
96 bd->border_prop_dialog = cfd;
98 #define IFDUP(prop, dest) \
99 if (cfdata->border->prop) \
100 cfdata->dest = strdup(cfdata->border->prop)
102 IFDUP(client.icccm.title, icccm.title);
103 IFDUP(client.icccm.name, icccm.name);
104 IFDUP(client.icccm.class, icccm.class);
105 IFDUP(client.icccm.icon_name, icccm.icon_name);
106 IFDUP(client.icccm.machine, icccm.machine);
107 IFDUP(client.icccm.window_role, icccm.role);
109 if (cfdata->border->client.icccm.min_w >= 0)
111 snprintf(buf, sizeof(buf), _("%i×%i"),
112 cfdata->border->client.icccm.min_w,
113 cfdata->border->client.icccm.min_h);
114 cfdata->icccm.min = strdup(buf);
116 if (cfdata->border->client.icccm.max_w >= 0)
118 snprintf(buf, sizeof(buf), _("%i×%i"),
119 cfdata->border->client.icccm.max_w,
120 cfdata->border->client.icccm.max_h);
121 cfdata->icccm.max = strdup(buf);
123 if (cfdata->border->client.icccm.base_w >= 0)
125 snprintf(buf, sizeof(buf), _("%i×%i"),
126 cfdata->border->client.icccm.base_w,
127 cfdata->border->client.icccm.base_h);
128 cfdata->icccm.base = strdup(buf);
130 if (cfdata->border->client.icccm.step_w >= 0)
132 snprintf(buf, sizeof(buf), _("%i,%i"),
133 cfdata->border->client.icccm.step_w,
134 cfdata->border->client.icccm.step_h);
135 cfdata->icccm.step = strdup(buf);
137 if ((cfdata->border->client.icccm.min_aspect > 0.0) &&
138 (cfdata->border->client.icccm.max_aspect > 0.0))
140 if (cfdata->border->client.icccm.min_aspect == cfdata->border->client.icccm.max_aspect)
141 snprintf(buf, sizeof(buf), _("%1.3f"),
142 cfdata->border->client.icccm.min_aspect);
144 snprintf(buf, sizeof(buf), _("%1.3f–%1.3f"),
145 cfdata->border->client.icccm.min_aspect,
146 cfdata->border->client.icccm.max_aspect);
147 cfdata->icccm.aspect = strdup(buf);
149 if (cfdata->border->client.icccm.initial_state != ECORE_X_WINDOW_STATE_HINT_NONE)
151 switch (cfdata->border->client.icccm.initial_state)
153 case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN:
154 snprintf(buf, sizeof(buf), _("Withdrawn"));
157 case ECORE_X_WINDOW_STATE_HINT_NORMAL:
158 snprintf(buf, sizeof(buf), _("Normal"));
161 case ECORE_X_WINDOW_STATE_HINT_ICONIC:
162 snprintf(buf, sizeof(buf), _("Iconic"));
169 cfdata->icccm.initial_state = strdup(buf);
171 if (cfdata->border->client.icccm.state != ECORE_X_WINDOW_STATE_HINT_NONE)
173 switch (cfdata->border->client.icccm.state)
175 case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN:
176 snprintf(buf, sizeof(buf), _("Withdrawn"));
179 case ECORE_X_WINDOW_STATE_HINT_NORMAL:
180 snprintf(buf, sizeof(buf), _("Normal"));
183 case ECORE_X_WINDOW_STATE_HINT_ICONIC:
184 snprintf(buf, sizeof(buf), _("Iconic"));
191 cfdata->icccm.state = strdup(buf);
193 snprintf(buf, sizeof(buf), "0x%08x",
194 cfdata->border->client.win);
195 cfdata->icccm.window_id = strdup(buf);
196 if (cfdata->border->client.icccm.window_group != 0)
198 snprintf(buf, sizeof(buf), "0x%08x",
199 cfdata->border->client.icccm.window_group);
200 cfdata->icccm.window_group = strdup(buf);
202 if (cfdata->border->client.icccm.transient_for != 0)
204 snprintf(buf, sizeof(buf), "0x%08x",
205 cfdata->border->client.icccm.transient_for);
206 cfdata->icccm.transient_for = strdup(buf);
208 if (cfdata->border->client.icccm.client_leader != 0)
210 snprintf(buf, sizeof(buf), "0x%08x",
211 cfdata->border->client.icccm.client_leader);
212 cfdata->icccm.client_leader = strdup(buf);
214 switch (cfdata->border->client.icccm.gravity)
216 case ECORE_X_GRAVITY_FORGET:
217 snprintf(buf, sizeof(buf), _("Forget/Unmap"));
220 case ECORE_X_GRAVITY_NW:
221 snprintf(buf, sizeof(buf), _("Northwest"));
224 case ECORE_X_GRAVITY_N:
225 snprintf(buf, sizeof(buf), _("North"));
228 case ECORE_X_GRAVITY_NE:
229 snprintf(buf, sizeof(buf), _("Northeast"));
232 case ECORE_X_GRAVITY_W:
233 snprintf(buf, sizeof(buf), _("West"));
236 case ECORE_X_GRAVITY_CENTER:
237 snprintf(buf, sizeof(buf), _("Center"));
240 case ECORE_X_GRAVITY_E:
241 snprintf(buf, sizeof(buf), _("East"));
244 case ECORE_X_GRAVITY_SW:
245 snprintf(buf, sizeof(buf), _("Southwest"));
248 case ECORE_X_GRAVITY_S:
249 snprintf(buf, sizeof(buf), _("South"));
252 case ECORE_X_GRAVITY_SE:
253 snprintf(buf, sizeof(buf), _("Southeast"));
256 case ECORE_X_GRAVITY_STATIC:
257 snprintf(buf, sizeof(buf), _("Static"));
264 cfdata->icccm.gravity = strdup(buf);
265 if (cfdata->border->client.icccm.command.argv)
270 for (i = 0; i < cfdata->border->client.icccm.command.argc; i++)
272 if ((sizeof(buf) - strlen(buf)) <
273 (strlen(cfdata->border->client.icccm.command.argv[i]) - 2))
275 strcat(buf, cfdata->border->client.icccm.command.argv[i]);
278 cfdata->icccm.command = strdup(buf);
281 cfdata->icccm.take_focus = cfdata->border->client.icccm.take_focus;
282 cfdata->icccm.accepts_focus = cfdata->border->client.icccm.accepts_focus;
283 cfdata->icccm.urgent = cfdata->border->client.icccm.urgent;
284 cfdata->icccm.delete_request = cfdata->border->client.icccm.delete_request;
285 cfdata->icccm.request_pos = cfdata->border->client.icccm.request_pos;
287 IFDUP(client.netwm.name, netwm.name);
288 IFDUP(client.netwm.icon_name, netwm.icon_name);
289 cfdata->netwm.modal = cfdata->border->client.netwm.state.modal;
290 cfdata->netwm.sticky = cfdata->border->client.netwm.state.sticky;
291 cfdata->netwm.shaded = cfdata->border->client.netwm.state.shaded;
292 cfdata->netwm.skip_taskbar = cfdata->border->client.netwm.state.skip_taskbar;
293 cfdata->netwm.skip_pager = cfdata->border->client.netwm.state.skip_pager;
294 cfdata->netwm.hidden = cfdata->border->client.netwm.state.hidden;
295 cfdata->netwm.fullscreen = cfdata->border->client.netwm.state.fullscreen;
296 switch (cfdata->border->client.netwm.state.stacking)
299 cfdata->netwm.stacking = strdup(_("None"));
303 cfdata->netwm.stacking = strdup(_("Above"));
307 cfdata->netwm.stacking = strdup(_("Below"));
315 _free_data(E_Dialog *cfd, E_Config_Dialog_Data *cfdata)
318 cfdata->border->border_prop_dialog = NULL;
320 /* Free the cfdata */
321 #define IFREE(x) E_FREE(cfdata->x)
325 IFREE(icccm.icon_name);
326 IFREE(icccm.machine);
333 IFREE(icccm.initial_state);
335 IFREE(icccm.window_id);
336 IFREE(icccm.window_group);
337 IFREE(icccm.transient_for);
338 IFREE(icccm.client_leader);
339 IFREE(icccm.gravity);
340 IFREE(icccm.command);
343 IFREE(netwm.icon_name);
344 IFREE(netwm.stacking);
351 _bd_cb_dialog_del(void *obj)
357 _free_data(dia, dia->data);
361 _bd_cb_dialog_close(void *data __UNUSED__, E_Dialog *dia)
364 _free_data(dia, dia->data);
365 e_object_del(E_OBJECT(dia));
369 _bd_go(void *data, void *data2)
372 Evas_Object *c, *o, *ob;
378 if (dia->content_object)
379 evas_object_del(dia->content_object);
381 c = e_widget_list_add(e_win_evas_get(dia->win), 0, 0);
385 o = _bd_icccm_create(dia, NULL);
386 e_dialog_title_set(dia, _("ICCCM Properties"));
387 e_widget_list_object_append(c, o, 1, 1, 0.0);
388 ob = e_widget_button_add(e_win_evas_get(dia->win), _("NetWM"), "go-next",
389 _bd_go, dia, (void *)1);
393 o = _bd_netwm_create(dia, NULL);
394 e_dialog_title_set(dia, _("NetWM Properties"));
395 e_widget_list_object_append(c, o, 1, 1, 0.0);
396 ob = e_widget_button_add(e_win_evas_get(dia->win), _("ICCCM"), "go-next",
397 _bd_go, dia, (void *)0);
400 e_widget_list_object_append(c, ob, 0, 0, 1.0);
402 e_widget_size_min_get(c, &w, &h);
403 e_dialog_content_set(dia, c, w, h);
407 #define STR_ENTRY(label, x, y, val) \
410 ob = e_widget_label_add(evas, label); \
411 if (!cfdata->val) e_widget_disabled_set(ob, 1); \
412 e_widget_table_object_append(o, ob, x, y, 1, 1, 1, 1, 0, 1); \
413 ob = e_widget_entry_add(evas, & (cfdata->val), NULL, NULL, NULL); \
414 if (!cfdata->val) e_widget_disabled_set(ob, 1); \
415 e_widget_entry_readonly_set(ob, 1); \
416 e_widget_disabled_set(ob, 1); \
417 e_widget_size_min_get(ob, &mw, &mh); \
418 e_widget_size_min_set(ob, 160, mh); \
419 e_widget_table_object_append(o, ob, x + 1, y, 1, 1, 1, 1, 1, 1); \
421 #define CHK_ENTRY(label, x, y, val) \
423 ob = e_widget_label_add(evas, label); \
424 e_widget_table_object_append(o, ob, x, y, 1, 1, 1, 1, 0, 1); \
425 ob = e_widget_check_add(evas, "", & (cfdata->val)); \
426 e_widget_disabled_set(ob, 1); \
427 e_widget_table_object_append(o, ob, x + 1, y, 1, 1, 1, 1, 1, 1); \
431 _bd_icccm_create(E_Dialog *dia, void *data __UNUSED__)
434 Evas_Object *o, *ob, *otb;
435 E_Config_Dialog_Data *cfdata;
437 if (!dia) return NULL;
440 if (dia->content_object)
441 evas_object_del(dia->content_object);
443 evas = e_win_evas_get(dia->win);
444 otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale);
446 o = e_widget_table_add(evas, 0);
447 STR_ENTRY(_("Title"), 0, 0, icccm.title);
448 STR_ENTRY(_("Name"), 0, 1, icccm.name);
449 STR_ENTRY(_("Class"), 0, 2, icccm.class);
450 STR_ENTRY(_("Icon Name"), 0, 3, icccm.icon_name);
451 STR_ENTRY(_("Machine"), 0, 4, icccm.machine);
452 STR_ENTRY(_("Role"), 0, 5, icccm.role);
453 e_widget_toolbook_page_append(otb, NULL, _("General"), o, 1, 1, 1, 1, 0.5, 0.0);
455 o = e_widget_table_add(evas, 0);
456 STR_ENTRY(_("Minimum Size"), 0, 6, icccm.min);
457 STR_ENTRY(_("Maximum Size"), 0, 7, icccm.max);
458 STR_ENTRY(_("Base Size"), 0, 8, icccm.base);
459 STR_ENTRY(_("Resize Steps"), 0, 9, icccm.step);
460 e_widget_toolbook_page_append(otb, NULL, _("Sizing"), o, 1, 1, 1, 1, 0.5, 0.0);
462 o = e_widget_table_add(evas, 0);
463 STR_ENTRY(_("Aspect Ratio"), 2, 0, icccm.aspect);
464 STR_ENTRY(_("Initial State"), 2, 1, icccm.initial_state);
465 STR_ENTRY(_("State"), 2, 2, icccm.state);
466 STR_ENTRY(_("Window ID"), 2, 3, icccm.window_id);
467 STR_ENTRY(_("Window Group"), 2, 4, icccm.window_group);
468 STR_ENTRY(_("Transient For"), 2, 5, icccm.transient_for);
469 STR_ENTRY(_("Client Leader"), 2, 6, icccm.client_leader);
470 STR_ENTRY(_("Gravity"), 2, 7, icccm.gravity);
471 STR_ENTRY(_("Command"), 2, 8, icccm.command);
472 e_widget_toolbook_page_append(otb, NULL, _("States"), o, 1, 1, 1, 1, 0.5, 0.0);
474 o = e_widget_table_add(evas, 0);
475 CHK_ENTRY(_("Take Focus"), 0, 11, icccm.take_focus);
476 CHK_ENTRY(_("Accepts Focus"), 0, 12, icccm.accepts_focus);
477 CHK_ENTRY(_("Urgent"), 0, 13, icccm.urgent);
478 CHK_ENTRY(_("Request Delete"), 2, 11, icccm.delete_request);
479 CHK_ENTRY(_("Request Position"), 2, 12, icccm.request_pos);
480 e_widget_toolbook_page_append(otb, NULL, _("Settings"), o, 1, 1, 1, 1, 0.5, 0.0);
481 e_widget_toolbook_page_show(otb, 0);
487 _bd_netwm_create(E_Dialog *dia, void *data __UNUSED__)
490 Evas_Object *o, *ob, *otb;
491 E_Config_Dialog_Data *cfdata;
493 if (!dia) return NULL;
496 if (dia->content_object)
497 evas_object_del(dia->content_object);
499 evas = e_win_evas_get(dia->win);
500 otb = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale);
501 o = e_widget_table_add(evas, 0);
502 STR_ENTRY(_("Name"), 0, 1, netwm.name);
503 STR_ENTRY(_("Icon Name"), 0, 2, netwm.icon_name);
504 STR_ENTRY(_("Stacking"), 0, 3, netwm.stacking);
505 e_widget_toolbook_page_append(otb, NULL, _("General"), o, 1, 1, 1, 1, 0.5, 0.0);
507 o = e_widget_table_add(evas, 0);
508 CHK_ENTRY(_("Modal"), 0, 4, netwm.modal);
509 CHK_ENTRY(_("Sticky"), 0, 5, netwm.sticky);
510 CHK_ENTRY(_("Shaded"), 0, 6, netwm.shaded);
511 CHK_ENTRY(_("Skip Taskbar"), 0, 7, netwm.skip_taskbar);
512 CHK_ENTRY(_("Skip Pager"), 0, 8, netwm.skip_pager);
513 CHK_ENTRY(_("Hidden"), 0, 9, netwm.hidden);
514 CHK_ENTRY(_("Fullscreen"), 0, 10, netwm.fullscreen);
515 e_widget_toolbook_page_append(otb, NULL, _("Settings"), o, 1, 1, 1, 1, 0.5, 0.0);
516 e_widget_toolbook_page_show(otb, 0);