2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
9 /* ############## bad */
16 #include <sys/param.h>
19 #include <stdlib.h> /* malloc(), free() */
22 #include "Ecore_Config.h"
23 #include "ecore_config_util.h"
24 #include "ecore_config_ipc.h"
26 #include "ecore_config_private.h"
28 static Ecore_Config_Server *__ecore_config_servers;
29 Ecore_Timer *ipc_timer = NULL;
32 _ecore_config_server_convert(void *srv)
34 Ecore_Config_Server *srv_tmp;
36 srv_tmp = __ecore_config_servers;
39 if (srv_tmp->server == srv)
41 srv_tmp = srv_tmp->next;
44 return __ecore_config_server_global;
47 /*****************************************************************************/
48 /* INTERFACE FOR IPC MODULES */
49 /*****************************/
52 _ecore_config_ipc_prop_list(Ecore_Config_Server * srv, const long serial)
54 Ecore_Config_Bundle *theme;
59 theme = ecore_config_bundle_by_serial_get(srv, serial);
60 e = theme ? theme->data : NULL;
61 s = estring_new(8192);
65 /* ignore system properties in listings, unless they have been overridden */
66 if (e->flags & ECORE_CONFIG_FLAG_SYSTEM && !(e->flags & ECORE_CONFIG_FLAG_MODIFIED))
71 estring_appendf(s, "%s%s: %s", f ? "\n" : "", e->key,
72 ecore_config_type_get(e));
73 if (e->flags & ECORE_CONFIG_FLAG_BOUNDS)
75 if (e->type == ECORE_CONFIG_FLT)
76 estring_appendf(s, ", range %le..%le",
77 (float)e->lo / ECORE_CONFIG_FLOAT_PRECISION,
78 (float)e->hi / ECORE_CONFIG_FLOAT_PRECISION);
80 estring_appendf(s, ", range %d..%d", e->lo, e->hi);
82 if (e->type == ECORE_CONFIG_THM)
83 estring_appendf(s, ", group %s", e->data ? e->data : "Main");
88 return estring_disown(s);
92 _ecore_config_ipc_prop_desc(Ecore_Config_Server * srv, const long serial,
98 e = ecore_config_get(key);
101 estring *s = estring_new(512);
103 estring_appendf(s, "%s: %s", e->key, ecore_config_type_get(e));
104 if (e->flags & ECORE_CONFIG_FLAG_BOUNDS)
105 estring_appendf(s, ", range %d..%d", e->lo, e->hi);
106 return estring_disown(s);
109 return strdup("<undefined>");
113 _ecore_config_ipc_prop_get(Ecore_Config_Server * srv, const long serial,
119 if ((ret = ecore_config_as_string_get(key)))
122 return strdup("<undefined>");
126 _ecore_config_ipc_prop_set(Ecore_Config_Server * srv, const long serial,
127 const char *key, const char *val)
131 Ecore_Config_Bundle *theme;
133 theme = ecore_config_bundle_by_serial_get(srv, serial);
134 ret = ecore_config_set(key, (char *)val);
135 ERR("ipc.prop.set(%s->%s,\"%s\") => %d\n", theme ? theme->identifier : "",
139 return ECORE_CONFIG_ERR_NOTSUPP;
143 /*****************************************************************************/
146 _ecore_config_ipc_bundle_list(Ecore_Config_Server * srv)
148 Ecore_Config_Bundle *ns;
152 ns = ecore_config_bundle_1st_get(srv);
153 s = estring_new(8192);
156 return strdup("<no_bundles_created>");
160 estring_appendf(s, "%s%d: %s", f ? "\n" : "",
161 ecore_config_bundle_serial_get(ns),
162 ecore_config_bundle_label_get(ns));
164 ns = ecore_config_bundle_next_get(ns);
167 return estring_disown(s);
171 _ecore_config_ipc_bundle_new(Ecore_Config_Server * srv, const char *label)
173 if (ecore_config_bundle_new(srv, label))
174 return ECORE_CONFIG_ERR_SUCC;
175 return ECORE_CONFIG_ERR_FAIL;
179 _ecore_config_ipc_bundle_label_get(Ecore_Config_Server * srv, const long serial)
181 Ecore_Config_Bundle *ns;
184 ns = ecore_config_bundle_by_serial_get(srv, serial);
185 label = ecore_config_bundle_label_get(ns);
186 return strdup(label ? label : "<no such bundle>");
190 _ecore_config_ipc_bundle_label_set(Ecore_Config_Server * srv, const long serial,
193 Ecore_Config_Bundle *ns;
195 ns = ecore_config_bundle_by_serial_get(srv, serial);
196 if (!(ns->identifier = malloc(sizeof(label))))
197 return ECORE_CONFIG_ERR_OOM;
198 memcpy(ns->identifier, label, sizeof(label));
199 return ECORE_CONFIG_ERR_SUCC;
203 _ecore_config_ipc_bundle_label_find(Ecore_Config_Server * srv,
206 Ecore_Config_Bundle *ns;
208 ns = ecore_config_bundle_by_label_get(srv, label);
209 return ns ? ecore_config_bundle_serial_get(ns) : -1;
213 _ecore_config_ipc_poll(void *data __UNUSED__)
215 Ecore_Config_Server *s;
217 s = __ecore_config_servers;
220 _ecore_config_ipc_ecore_poll(&s->server);
228 _ecore_config_ipc_exit(void)
230 Ecore_Config_Server *l;
233 ecore_timer_del(ipc_timer);
235 l = __ecore_config_servers;
238 _ecore_config_ipc_ecore_exit(&l->server);
244 return ECORE_CONFIG_ERR_SUCC;
247 Ecore_Config_Server *
248 _ecore_config_ipc_init(const char *pipe_name)
251 Ecore_Config_Server *list;
252 Ecore_Config_Server *ret_srv;
258 list = malloc(sizeof(Ecore_Config_Server));
259 memset(list, 0, sizeof(Ecore_Config_Server));
260 if ((ret = _ecore_config_ipc_ecore_init(pipe_name, &list->server)) != ECORE_CONFIG_ERR_SUCC)
262 ERR("_ecore_config_ipc_init: failed to register %s, code %d",
266 ERR("_ecore_config_ipc_init: registered \"%s\"...", pipe_name);
268 list->name = strdup(pipe_name);
269 list->next = __ecore_config_servers;
271 __ecore_config_servers = list;
276 ipc_timer = ecore_timer_add(100, _ecore_config_ipc_poll, NULL);
280 /*****************************************************************************/