5 /* ############## bad */
12 #include <sys/param.h>
15 #include <stdlib.h> /* malloc(), free() */
18 #include "Ecore_Config.h"
19 #include "ecore_config_util.h"
20 #include "ecore_config_ipc.h"
22 #include "ecore_config_private.h"
24 static Ecore_Config_Server *__ecore_config_servers;
25 Ecore_Timer *ipc_timer = NULL;
28 _ecore_config_server_convert(void *srv)
30 Ecore_Config_Server *srv_tmp;
32 srv_tmp = __ecore_config_servers;
35 if (srv_tmp->server == srv)
37 srv_tmp = srv_tmp->next;
40 return __ecore_config_server_global;
43 /*****************************************************************************/
44 /* INTERFACE FOR IPC MODULES */
45 /*****************************/
48 _ecore_config_ipc_prop_list(Ecore_Config_Server * srv, const long serial)
50 Ecore_Config_Bundle *theme;
55 theme = ecore_config_bundle_by_serial_get(srv, serial);
56 e = theme ? theme->data : NULL;
57 s = estring_new(8192);
61 /* ignore system properties in listings, unless they have been overridden */
62 if (e->flags & ECORE_CONFIG_FLAG_SYSTEM && !(e->flags & ECORE_CONFIG_FLAG_MODIFIED))
67 estring_appendf(s, "%s%s: %s", f ? "\n" : "", e->key,
68 ecore_config_type_get(e));
69 if (e->flags & ECORE_CONFIG_FLAG_BOUNDS)
71 if (e->type == ECORE_CONFIG_FLT)
72 estring_appendf(s, ", range %le..%le",
73 (float)e->lo / ECORE_CONFIG_FLOAT_PRECISION,
74 (float)e->hi / ECORE_CONFIG_FLOAT_PRECISION);
76 estring_appendf(s, ", range %d..%d", e->lo, e->hi);
78 if (e->type == ECORE_CONFIG_THM)
79 estring_appendf(s, ", group %s", e->data ? e->data : "Main");
84 return estring_disown(s);
88 _ecore_config_ipc_prop_desc(Ecore_Config_Server * srv, const long serial,
94 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,
115 if ((ret = ecore_config_as_string_get(key)))
118 return strdup("<undefined>");
122 _ecore_config_ipc_prop_set(Ecore_Config_Server * srv, const long serial,
123 const char *key, const char *val)
127 Ecore_Config_Bundle *theme;
129 theme = ecore_config_bundle_by_serial_get(srv, serial);
130 ret = ecore_config_set(key, (char *)val);
131 ERR("ipc.prop.set(%s->%s,\"%s\") => %d\n", theme ? theme->identifier : "",
135 return ECORE_CONFIG_ERR_NOTSUPP;
139 /*****************************************************************************/
142 _ecore_config_ipc_bundle_list(Ecore_Config_Server * srv)
144 Ecore_Config_Bundle *ns;
148 ns = ecore_config_bundle_1st_get(srv);
149 s = estring_new(8192);
152 return strdup("<no_bundles_created>");
156 estring_appendf(s, "%s%d: %s", f ? "\n" : "",
157 ecore_config_bundle_serial_get(ns),
158 ecore_config_bundle_label_get(ns));
160 ns = ecore_config_bundle_next_get(ns);
163 return estring_disown(s);
167 _ecore_config_ipc_bundle_new(Ecore_Config_Server * srv, const char *label)
169 if (ecore_config_bundle_new(srv, label))
170 return ECORE_CONFIG_ERR_SUCC;
171 return ECORE_CONFIG_ERR_FAIL;
175 _ecore_config_ipc_bundle_label_get(Ecore_Config_Server * srv, const long serial)
177 Ecore_Config_Bundle *ns;
180 ns = ecore_config_bundle_by_serial_get(srv, serial);
181 label = ecore_config_bundle_label_get(ns);
182 return strdup(label ? label : "<no such bundle>");
186 _ecore_config_ipc_bundle_label_set(Ecore_Config_Server * srv, const long serial,
189 Ecore_Config_Bundle *ns;
191 ns = ecore_config_bundle_by_serial_get(srv, serial);
192 if (!(ns->identifier = malloc(sizeof(label))))
193 return ECORE_CONFIG_ERR_OOM;
194 memcpy(ns->identifier, label, sizeof(label));
195 return ECORE_CONFIG_ERR_SUCC;
199 _ecore_config_ipc_bundle_label_find(Ecore_Config_Server * srv,
202 Ecore_Config_Bundle *ns;
204 ns = ecore_config_bundle_by_label_get(srv, label);
205 return ns ? ecore_config_bundle_serial_get(ns) : -1;
209 _ecore_config_ipc_poll(void *data __UNUSED__)
211 Ecore_Config_Server *s;
213 s = __ecore_config_servers;
216 _ecore_config_ipc_ecore_poll(&s->server);
224 _ecore_config_ipc_exit(void)
226 Ecore_Config_Server *l;
229 ecore_timer_del(ipc_timer);
231 l = __ecore_config_servers;
234 _ecore_config_ipc_ecore_exit(&l->server);
240 return ECORE_CONFIG_ERR_SUCC;
243 Ecore_Config_Server *
244 _ecore_config_ipc_init(const char *pipe_name)
247 Ecore_Config_Server *list;
248 Ecore_Config_Server *ret_srv;
254 list = calloc(1, sizeof(Ecore_Config_Server));
255 if ((ret = _ecore_config_ipc_ecore_init(pipe_name, &list->server)) != ECORE_CONFIG_ERR_SUCC)
257 ERR("_ecore_config_ipc_init: failed to register %s, code %d",
261 ERR("_ecore_config_ipc_init: registered \"%s\"...", pipe_name);
263 list->name = strdup(pipe_name);
264 list->next = __ecore_config_servers;
266 __ecore_config_servers = list;
271 ipc_timer = ecore_timer_add(100, _ecore_config_ipc_poll, NULL);
275 /*****************************************************************************/