diff --git a/src/bin/e_int_border_prop.c b/src/bin/e_int_border_prop.c index a157044a1..3c1c25ee4 100644 --- a/src/bin/e_int_border_prop.c +++ b/src/bin/e_int_border_prop.c @@ -6,7 +6,6 @@ /* PROTOTYPES - same all the time */ static void *_create_data(E_Config_Dialog *cfd); static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); -static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); /* Actual config data we will be playing with whil the dialog is active */ @@ -31,9 +30,19 @@ struct _E_Config_Dialog_Data char *max; char *base; char *step; + + char *aspect; + char *initial_state; + char *state; + char *window_id; + char *window_group; + char *transient_for; + char *client_leader; + char *gravity; + char *command; int take_focus; - int accept_focus; + int accepts_focus; int urgent; int delete_request; int request_pos; @@ -54,7 +63,7 @@ e_int_border_prop(E_Border *bd) /* methods */ v->create_cfdata = _create_data; v->free_cfdata = _free_data; - v->basic.apply_cfdata = _basic_apply_data; + v->basic.apply_cfdata = NULL; v->basic.create_widgets = _basic_create_widgets; v->advanced.apply_cfdata = NULL; v->advanced.create_widgets = NULL; @@ -71,7 +80,7 @@ static void * _create_data(E_Config_Dialog *cfd) { E_Config_Dialog_Data *cfdata; - char buf[256]; + char buf[4096]; cfdata = E_NEW(E_Config_Dialog_Data, 1); cfdata->border = cfd->data; @@ -114,6 +123,135 @@ _create_data(E_Config_Dialog *cfd) cfdata->border->client.icccm.step_h); cfdata->icccm.step = strdup(buf); } + if ((cfdata->border->client.icccm.min_aspect > 0.0) && + (cfdata->border->client.icccm.max_aspect > 0.0)) + { + snprintf(buf, sizeof(buf), "%1.3f-%1.3f", + cfdata->border->client.icccm.min_aspect, + cfdata->border->client.icccm.max_aspect); + cfdata->icccm.aspect = strdup(buf); + } + if (cfdata->border->client.icccm.initial_state != ECORE_X_WINDOW_STATE_HINT_NONE) + { + switch (cfdata->border->client.icccm.initial_state) + { + case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN: + snprintf(buf, sizeof(buf), "Withdrawn"); + break; + case ECORE_X_WINDOW_STATE_HINT_NORMAL: + snprintf(buf, sizeof(buf), "Normal"); + break; + case ECORE_X_WINDOW_STATE_HINT_ICONIC: + snprintf(buf, sizeof(buf), "Iconic"); + break; + default: + buf[0] = 0; + break; + } + cfdata->icccm.initial_state = strdup(buf); + } + if (cfdata->border->client.icccm.state != ECORE_X_WINDOW_STATE_HINT_NONE) + { + switch (cfdata->border->client.icccm.state) + { + case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN: + snprintf(buf, sizeof(buf), "Withdrawn"); + break; + case ECORE_X_WINDOW_STATE_HINT_NORMAL: + snprintf(buf, sizeof(buf), "Normal"); + break; + case ECORE_X_WINDOW_STATE_HINT_ICONIC: + snprintf(buf, sizeof(buf), "Iconic"); + break; + default: + buf[0] = 0; + break; + } + cfdata->icccm.state = strdup(buf); + } + snprintf(buf, sizeof(buf), "0x%08x", + cfdata->border->client.win); + cfdata->icccm.window_id = strdup(buf); + if (cfdata->border->client.icccm.window_group != 0) + { + snprintf(buf, sizeof(buf), "0x%08x", + cfdata->border->client.icccm.window_group); + cfdata->icccm.window_group = strdup(buf); + } + if (cfdata->border->client.icccm.transient_for != 0) + { + snprintf(buf, sizeof(buf), "0x%08x", + cfdata->border->client.icccm.transient_for); + cfdata->icccm.transient_for = strdup(buf); + } + if (cfdata->border->client.icccm.client_leader != 0) + { + snprintf(buf, sizeof(buf), "0x%08x", + cfdata->border->client.icccm.client_leader); + cfdata->icccm.client_leader = strdup(buf); + } + switch (cfdata->border->client.icccm.gravity) + { + case ECORE_X_GRAVITY_FORGET: + snprintf(buf, sizeof(buf), "Forget/Unmap"); + break; + case ECORE_X_GRAVITY_NW: + snprintf(buf, sizeof(buf), "Northwest"); + break; + case ECORE_X_GRAVITY_N: + snprintf(buf, sizeof(buf), "North"); + break; + case ECORE_X_GRAVITY_NE: + snprintf(buf, sizeof(buf), "Northeast"); + break; + case ECORE_X_GRAVITY_W: + snprintf(buf, sizeof(buf), "West"); + break; + case ECORE_X_GRAVITY_CENTER: + snprintf(buf, sizeof(buf), "Center"); + break; + case ECORE_X_GRAVITY_E: + snprintf(buf, sizeof(buf), "East"); + break; + case ECORE_X_GRAVITY_SW: + snprintf(buf, sizeof(buf), "Sowthwest"); + break; + case ECORE_X_GRAVITY_S: + snprintf(buf, sizeof(buf), "South"); + break; + case ECORE_X_GRAVITY_SE: + snprintf(buf, sizeof(buf), "Southeast"); + break; + case ECORE_X_GRAVITY_STATIC: + snprintf(buf, sizeof(buf), "Static"); + break; + default: + buf[0] = 0; + break; + } + cfdata->icccm.gravity = strdup(buf); + if (cfdata->border->client.icccm.command.argv) + { + int i; + + buf[0] = 0; + for (i = 0; i < cfdata->border->client.icccm.command.argc; i++) + { + if ((sizeof(buf) - strlen(buf)) < + (strlen(cfdata->border->client.icccm.command.argv[i]) - 2)) + break; + strcat(buf, cfdata->border->client.icccm.command.argv[i]); + strcat(buf, " "); + } + cfdata->icccm.command = strdup(buf); + } + + cfdata->icccm.take_focus = cfdata->border->client.icccm.take_focus; + cfdata->icccm.accepts_focus = cfdata->border->client.icccm.accepts_focus; + cfdata->icccm.urgent = cfdata->border->client.icccm.urgent; + cfdata->icccm.delete_request = cfdata->border->client.icccm.delete_request; + cfdata->icccm.request_pos = cfdata->border->client.icccm.request_pos; + return cfdata; } @@ -132,16 +270,18 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) IFREE(icccm.max); IFREE(icccm.base); IFREE(icccm.step); + IFREE(icccm.aspect); + IFREE(icccm.initial_state); + IFREE(icccm.state); + IFREE(icccm.window_id); + IFREE(icccm.window_group); + IFREE(icccm.transient_for); + IFREE(icccm.client_leader); + IFREE(icccm.gravity); + IFREE(icccm.command); free(cfdata); } -/**--APPLY--**/ -static int -_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) -{ - return 1; /* Apply was OK */ -} - /**--GUI--**/ static Evas_Object * _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) @@ -160,23 +300,46 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf ob = e_widget_entry_add(evas, &(cfdata->val)); \ if (!cfdata->val) e_widget_disabled_set(ob, 1); \ e_widget_min_size_get(ob, &mw, &mh); \ - e_widget_min_size_set(ob, 80, mh); \ + e_widget_min_size_set(ob, 160, mh); \ + e_widget_frametable_object_append(of, ob, x + 1, y, 1, 1, 1, 1, 1, 1); \ + } +#define CHK_ENTRY(label, x, y, val) \ + { \ + ob = e_widget_label_add(evas, label); \ + e_widget_frametable_object_append(of, ob, x, y, 1, 1, 1, 1, 1, 1); \ + ob = e_widget_check_add(evas, "", &(cfdata->val)); \ e_widget_frametable_object_append(of, ob, x + 1, y, 1, 1, 1, 1, 1, 1); \ } of = e_widget_frametable_add(evas, _("ICCCM"), 0); - STR_ENTRY(_("Title"), 0, 0, icccm.title); - STR_ENTRY(_("Name"), 0, 1, icccm.name); - STR_ENTRY(_("Class"), 0, 2, icccm.class); - STR_ENTRY(_("Icon Name"), 0, 3, icccm.icon_name); - STR_ENTRY(_("Machine"), 0, 4, icccm.machine); - STR_ENTRY(_("Role"), 0, 5, icccm.role); + STR_ENTRY(_("Title"), 0, 0, icccm.title); + STR_ENTRY(_("Name"), 0, 1, icccm.name); + STR_ENTRY(_("Class"), 0, 2, icccm.class); + STR_ENTRY(_("Icon Name"), 0, 3, icccm.icon_name); + STR_ENTRY(_("Machine"), 0, 4, icccm.machine); + STR_ENTRY(_("Role"), 0, 5, icccm.role); - STR_ENTRY(_("Minimum Size"), 0, 6, icccm.min); - STR_ENTRY(_("Maximum Size"), 0, 7, icccm.max); - STR_ENTRY(_("Base Size"), 0, 8, icccm.base); - STR_ENTRY(_("Resize Steps"), 0, 9, icccm.step); + STR_ENTRY(_("Minimum Size"), 0, 6, icccm.min); + STR_ENTRY(_("Maximum Size"), 0, 7, icccm.max); + STR_ENTRY(_("Base Size"), 0, 8, icccm.base); + STR_ENTRY(_("Resize Steps"), 0, 9, icccm.step); + + STR_ENTRY(_("Aspect Ratio"), 0, 10, icccm.aspect); + STR_ENTRY(_("Initial State"), 0, 11, icccm.initial_state); + STR_ENTRY(_("State"), 0, 12, icccm.state); + STR_ENTRY(_("Window ID"), 0, 13, icccm.window_id); + STR_ENTRY(_("Window Group"), 0, 14, icccm.window_group); + STR_ENTRY(_("Transient For"), 0, 15, icccm.transient_for); + STR_ENTRY(_("Client Leader"), 0, 16, icccm.client_leader); + STR_ENTRY(_("Gravity"), 0, 17, icccm.gravity); + STR_ENTRY(_("Command"), 0, 18, icccm.command); + + CHK_ENTRY(_("Take Focus"), 0, 19, icccm.take_focus); + CHK_ENTRY(_("Accepts Focus"), 0, 20, icccm.accepts_focus); + CHK_ENTRY(_("Urgent"), 0, 21, icccm.urgent); + CHK_ENTRY(_("Request Delete"), 0, 22, icccm.delete_request); + CHK_ENTRY(_("Request Position"), 0, 23, icccm.request_pos); e_widget_table_object_append(o, of, 0, 0, 1, 1, 1, 1, 1, 1);