1 /* ############## bad */
11 #include <stdlib.h> /* malloc(), free() */
14 #include "Ecore_Config.h"
15 #include "ecore_config_util.h"
16 #include "ecore_config_ipc.h"
19 #include "ecore_config_private.h"
21 static Ecore_Config_Server *__ecore_config_servers;
22 Ecore_Timer *ipc_timer = NULL;
25 _ecore_config_server_convert(void *srv)
27 Ecore_Config_Server *srv_tmp;
29 srv_tmp = __ecore_config_servers;
32 if (srv_tmp->server == srv)
34 srv_tmp = srv_tmp->next;
37 return __ecore_config_server_global;
40 /*****************************************************************************/
41 /* INTERFACE FOR IPC MODULES */
42 /*****************************/
45 _ecore_config_ipc_prop_list(Ecore_Config_Server * srv, const long serial)
47 Ecore_Config_Bundle *theme;
52 theme = ecore_config_bundle_by_serial_get(srv, serial);
53 e = theme ? theme->data : NULL;
54 s = estring_new(8192);
58 /* ignore system properties in listings, unless they have been overridden */
59 if (e->flags & ECORE_CONFIG_FLAG_SYSTEM && !(e->flags & ECORE_CONFIG_FLAG_MODIFIED))
64 estring_appendf(s, "%s%s: %s", f ? "\n" : "", e->key,
65 ecore_config_type_get(e));
66 if (e->flags & ECORE_CONFIG_FLAG_BOUNDS)
68 if (e->type == ECORE_CONFIG_FLT)
69 estring_appendf(s, ", range %le..%le",
70 (float)e->lo / ECORE_CONFIG_FLOAT_PRECISION,
71 (float)e->hi / ECORE_CONFIG_FLOAT_PRECISION);
73 estring_appendf(s, ", range %d..%d", e->lo, e->hi);
75 if (e->type == ECORE_CONFIG_THM)
76 estring_appendf(s, ", group %s", e->data ? e->data : "Main");
81 return estring_disown(s);
85 _ecore_config_ipc_prop_desc(Ecore_Config_Server * srv, const long serial,
89 Ecore_Config_Bundle *theme;
92 theme = ecore_config_bundle_by_serial_get(srv, serial);
93 e = ecore_config_get(key);
97 estring *s = estring_new(512);
99 estring_appendf(s, "%s: %s", e->key, ecore_config_type_get(e));
100 if (e->flags & ECORE_CONFIG_FLAG_BOUNDS)
101 estring_appendf(s, ", range %d..%d", e->lo, e->hi);
102 return estring_disown(s);
105 return strdup("<undefined>");
109 _ecore_config_ipc_prop_get(Ecore_Config_Server * srv, const long serial,
114 Ecore_Config_Bundle *theme;
117 theme = ecore_config_bundle_by_serial_get(srv, serial);
118 if ((ret = ecore_config_as_string_get( /*theme, */ key)))
121 return strdup("<undefined>");
125 _ecore_config_ipc_prop_set(Ecore_Config_Server * srv, const long serial,
126 const char *key, const char *val)
130 Ecore_Config_Bundle *theme;
132 theme = ecore_config_bundle_by_serial_get(srv, serial);
133 ret = ecore_config_set(key, (char *)val);
134 E(1, "ipc.prop.set(%s->%s,\"%s\") => %d\n", theme ? theme->identifier : "",
138 return ECORE_CONFIG_ERR_NOTSUPP;
142 /*****************************************************************************/
145 _ecore_config_ipc_bundle_list(Ecore_Config_Server * srv)
147 Ecore_Config_Bundle *ns;
151 ns = ecore_config_bundle_1st_get(srv);
152 s = estring_new(8192);
155 return strdup("<no_bundles_created>");
159 estring_appendf(s, "%s%d: %s", f ? "\n" : "",
160 ecore_config_bundle_serial_get(ns),
161 ecore_config_bundle_label_get(ns));
163 ns = ecore_config_bundle_next_get(ns);
166 return estring_disown(s);
170 _ecore_config_ipc_bundle_new(Ecore_Config_Server * srv, const char *label)
172 if (ecore_config_bundle_new(srv, label))
173 return ECORE_CONFIG_ERR_SUCC;
174 return ECORE_CONFIG_ERR_FAIL;
178 _ecore_config_ipc_bundle_label_get(Ecore_Config_Server * srv, const long serial)
180 Ecore_Config_Bundle *ns;
183 ns = ecore_config_bundle_by_serial_get(srv, serial);
184 label = ecore_config_bundle_label_get(ns);
185 return strdup(label ? label : "<no such bundle>");
189 _ecore_config_ipc_bundle_label_set(Ecore_Config_Server * srv, const long serial,
192 Ecore_Config_Bundle *ns;
194 ns = ecore_config_bundle_by_serial_get(srv, serial);
195 if (!(ns->identifier = malloc(sizeof(label))))
196 return ECORE_CONFIG_ERR_OOM;
197 memcpy(ns->identifier, label, sizeof(label));
198 return ECORE_CONFIG_ERR_SUCC;
202 _ecore_config_ipc_bundle_label_find(Ecore_Config_Server * srv,
205 Ecore_Config_Bundle *ns;
207 ns = ecore_config_bundle_by_label_get(srv, label);
208 return ns ? ecore_config_bundle_serial_get(ns) : -1;
212 _ecore_config_ipc_poll(void *data __UNUSED__)
214 Ecore_Config_Server *s;
216 s = __ecore_config_servers;
219 _ecore_config_ipc_ecore_poll(&s->server);
227 _ecore_config_ipc_exit(void)
229 Ecore_Config_Server *l;
232 ecore_timer_del(ipc_timer);
234 l = __ecore_config_servers;
237 _ecore_config_ipc_ecore_exit(&l->server);
243 return ECORE_CONFIG_ERR_SUCC;
246 Ecore_Config_Server *
247 _ecore_config_ipc_init(const char *pipe_name)
250 Ecore_Config_Server *list;
251 Ecore_Config_Server *ret_srv;
257 list = malloc(sizeof(Ecore_Config_Server));
258 memset(list, 0, sizeof(Ecore_Config_Server));
259 if ((ret = _ecore_config_ipc_ecore_init(pipe_name, &list->server)) != ECORE_CONFIG_ERR_SUCC)
261 E(2, "_ecore_config_ipc_init: failed to register %s, code %d\n",
265 E(2, "_ecore_config_ipc_init: registered \"%s\"...\n", pipe_name);
267 list->name = strdup(pipe_name);
268 list->next = __ecore_config_servers;
270 __ecore_config_servers = list;
275 ipc_timer = ecore_timer_add(100, _ecore_config_ipc_poll, NULL);
279 /*****************************************************************************/