#define __INDICATOR_UTIL_H__
#include <Ecore.h>
#include <wifi.h>
+#include <system_settings.h>
+#include <runtime_info.h>
typedef enum {
INDICATOR_ERROR_NONE = 0,
*/
void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_cb);
+/**
+ * @brief Allows to register multiple callbacks using system_settings_changed_cb API.
+ *
+ * @param key key to monitor.
+ * @param cb callback.
+ * @param data user_data passed to callback function.
+ *
+ * @return 0 on success, other value on failure.
+ */
+int util_system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb cb, void *data);
+
+/**
+ * @brief Unregisters callback set with util_system_settings_set_changed_cb.
+ *
+ * @param key key to stop monitor.
+ * @param cb callback
+ */
+void util_system_settings_unset_changed_cb(system_settings_key_e key, system_settings_changed_cb cb);
+
+/**
+ * @brief Allows to register multiple callbacks using runtime_info_set_changed_cb API.
+ *
+ * @param key key to monitor.
+ * @param cb callback.
+ * @param data user data passed to callback function.
+ *
+ * @return 0 on success, other value on failure.
+ */
+int util_runtime_info_set_changed_cb(runtime_info_key_e key, runtime_info_changed_cb cb, void *data);
+
+/**
+ * @brief Unregisters callback set with util_runtime_info_set_changed_cb.
+ *
+ * @param key key to stop monitor.
+ * @param cb callback.
+ */
+void util_runtime_info_unset_changed_cb(runtime_info_key_e key, runtime_info_changed_cb cb);
+
#endif /* __INDICATOR_UTIL_H__ */
void *data;
} wifi_handler_t;
+typedef struct {
+ system_settings_key_e key;
+ system_settings_changed_cb cb;
+ void *data;
+} system_settings_handler_t;
+
+typedef struct {
+ runtime_info_key_e key;
+ runtime_info_changed_cb cb;
+ void *data;
+} runtime_info_handler_t;
+
static Eina_List *wifi_callbacks;
+static Eina_List *ss_callbacks;
+static Eina_List *ri_callbacks;
char *util_set_label_text_color(const char *txt)
{
wifi_unset_connection_state_changed_cb();
}
+static void _system_settings_cb(system_settings_key_e key, void *data)
+{
+ Eina_List *l;
+ system_settings_handler_t *hdl;
+
+ EINA_LIST_FOREACH(ss_callbacks, l, hdl) {
+ if (hdl->key == key) {
+ if (hdl->cb) hdl->cb(key, hdl->data);
+ }
+ }
+}
+
+int util_system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb cb, void *data)
+{
+ system_settings_handler_t *handler = malloc(sizeof(system_settings_handler_t));
+ if (!handler) {
+ return -1;
+ }
+
+ int err = system_settings_set_changed_cb(key, _system_settings_cb, NULL);
+ if (err != SYSTEM_SETTINGS_ERROR_NONE) {
+ free(handler);
+ return -1;
+ }
+
+ handler->key = key;
+ handler->cb = cb;
+ handler->data = data;
+
+ ss_callbacks = eina_list_append(ss_callbacks, handler);
+
+ return 0;
+}
+
+void util_system_settings_unset_changed_cb(system_settings_key_e key, system_settings_changed_cb cb)
+{
+ Eina_List *l, *l2;
+ system_settings_handler_t *hdl;
+ Eina_Bool del_key_cb = EINA_TRUE;
+
+ EINA_LIST_FOREACH_SAFE(ss_callbacks, l, l2, hdl) {
+ if (hdl->key == key) {
+ if (hdl->cb == cb) {
+ ss_callbacks = eina_list_remove_list(ss_callbacks, l);
+ free(hdl);
+ }
+ else {
+ del_key_cb = EINA_FALSE;
+ }
+ }
+ }
+ if (del_key_cb)
+ system_settings_unset_changed_cb(key);
+}
+
+static void _runtime_info_cb(runtime_info_key_e key, void *data)
+{
+ Eina_List *l;
+ runtime_info_handler_t *hdl;
+
+ EINA_LIST_FOREACH(ri_callbacks, l, hdl) {
+ if (hdl->key == key) {
+ if (hdl->cb) hdl->cb(key, hdl->data);
+ }
+ }
+}
+
+int util_runtime_info_set_changed_cb(runtime_info_key_e key, runtime_info_changed_cb cb, void *data)
+{
+ runtime_info_handler_t *handler = malloc(sizeof(runtime_info_handler_t));
+ if (!handler) {
+ return -1;
+ }
+
+ int err = runtime_info_set_changed_cb(key, _runtime_info_cb, NULL);
+ if (err != RUNTIME_INFO_ERROR_NONE) {
+ free(handler);
+ return -1;
+ }
+
+ handler->key = key;
+ handler->cb = cb;
+ handler->data = data;
+
+ ri_callbacks = eina_list_append(ri_callbacks, handler);
+
+ return 0;
+}
+
+void util_runtime_info_unset_changed_cb(runtime_info_key_e key, runtime_info_changed_cb cb)
+{
+ Eina_List *l, *l2;
+ runtime_info_handler_t *hdl;
+ Eina_Bool del_key_cb = EINA_TRUE;
+
+ EINA_LIST_FOREACH_SAFE(ri_callbacks, l, l2, hdl) {
+ if (hdl->key == key) {
+ if (hdl->cb == cb) {
+ ri_callbacks = eina_list_remove_list(ri_callbacks, l);
+ free(hdl);
+ }
+ else {
+ del_key_cb = EINA_FALSE;
+ }
+ }
+ }
+ if (del_key_cb)
+ runtime_info_unset_changed_cb(key);
+
+}
+
/* End of file */