static void _sub_path_process(Elm_App_Client *eo, Eldbus_Message_Iter *obj_iter, Elm_App_Client_Data *data, Eina_Bool loading_list) { const char *obj_path; Eldbus_Message_Iter *array_iface, *iface; eldbus_message_iter_arguments_get(obj_iter, "oa{sa{sv}}", &obj_path, &array_iface); while (eldbus_message_iter_get_and_next(array_iface, '{', &iface)) { const char *iface_name; Eldbus_Message_Iter *array_props; Elm_App_Client_View *view; eldbus_message_iter_arguments_get(iface, "sa{sv}", &iface_name, &array_props); if (strcmp(iface_name, "org.enlightenment.ApplicationView1")) continue; view = eina_hash_find(data->views, obj_path); if (view) continue; view = eo_add(ELM_APP_CLIENT_VIEW_CLASS, eo, elm_app_client_view_path_set(obj_path)); eina_hash_add(data->views, obj_path, view); if (!loading_list) eo_do(eo, eo_event_callback_call(ELM_APP_CLIENT_EVENT_VIEW_CREATED, view)); } }
EAPI void eldbus_message_iter_dict_iterate(Eldbus_Message_Iter *array, const char *signature, Eldbus_Dict_Cb_Get cb, const void *data) { Eldbus_Message_Iter *entry; char *iter_sig; unsigned len; EINA_SAFETY_ON_FALSE_RETURN(array); EINA_SAFETY_ON_NULL_RETURN(signature); iter_sig = eldbus_message_iter_signature_get(array); len = strlen(iter_sig + 1); if (strncmp(signature, iter_sig + 1, len - 1)) { ERR("Unexpected signature, expected is: %s", iter_sig); free(iter_sig); return; } free(iter_sig); while (eldbus_message_iter_get_and_next(array, 'e', &entry)) { const void *key; Eldbus_Message_Iter *var; if (!eldbus_message_iter_arguments_get(entry, signature, &key, &var)) continue; cb((void *)data, key, var); } }
static void _warning_level_from_variant(Eldbus_Message_Iter *variant) { unsigned int val; if (!eldbus_message_iter_get_and_next(variant, 'u', &val)) { ERR("Error getting WarningLevel."); return; } _ecore_battery_level = val; _battery_eval(); }
static void _dump_serializable(struct wkb_ibus_serializable *s) { Eldbus_Message_Iter *entry, *iter; const char *str; DBG("Serializable:"); DBG("\tText...: %s", s->text); while (eldbus_message_iter_get_and_next(s->dict, 'v', &entry)) { eldbus_message_iter_arguments_get(entry, "sv", &str, &iter); DBG("\t\tEntry.: '%s':'%s'", str, eldbus_message_iter_signature_get(iter)); } }
static Eina_Array * _wkb_ibus_attr_list_from_message_iter(Eldbus_Message_Iter *iter) { struct wkb_ibus_serializable ignore = { 0 }; Eldbus_Message_Iter *iter_array, *iter_attr; struct wkb_ibus_attr *attr = NULL; Eina_Array *attr_list = NULL; DBG("Message iter signature '%s'", eldbus_message_iter_signature_get(iter)); eldbus_message_iter_arguments_get(iter, "(sa{sv}av)", &iter_attr); if (!eldbus_message_iter_arguments_get(iter_attr, "sa{sv}av", &ignore.text, &ignore.dict, &iter_array)) { ERR("Error deserializing IBusAttrList"); goto end; } if (!iter_array) { INF("AttrList has no attribute"); goto end; } while (eldbus_message_iter_get_and_next(iter_array, 'v', &iter_attr)) { if (!(attr = wkb_ibus_attr_from_message_iter(iter_attr))) { _free_eina_array(attr_list, (_free_func) free); attr_list = NULL; goto end; } if (!attr_list) attr_list = eina_array_new(10); DBG("Appending new attribute: %p", attr); eina_array_push(attr_list, attr); } end: return attr_list; }
Eina_Array * wkb_ibus_properties_from_message_iter(Eldbus_Message_Iter *iter) { struct wkb_ibus_serializable ignore = { 0 }; struct wkb_ibus_property *property = NULL; Eina_Array *properties = NULL; Eldbus_Message_Iter *iter_props, *props, *prop; DBG("Message iter signature '%s'", eldbus_message_iter_signature_get(iter)); eldbus_message_iter_arguments_get(iter, "(sa{sv}av)", &iter_props); if (!eldbus_message_iter_arguments_get(iter_props, "sa{sv}av", &ignore.text, &ignore.dict, &props)) { ERR("Error deserializing IBusPropList"); goto end; } if (!props) { INF("PropList has no property"); goto end; } while (eldbus_message_iter_get_and_next(props, 'v', &prop)) { if (!(property = wkb_ibus_property_from_message_iter(prop))) { wkb_ibus_properties_free(properties); properties = NULL; goto end; } if (!properties) properties = eina_array_new(10); DBG("Appending new property %p", property); eina_array_push(properties, property); } end: return properties; }
struct wkb_ibus_lookup_table * wkb_ibus_lookup_table_from_message_iter(Eldbus_Message_Iter *iter) { struct wkb_ibus_serializable ignore = { 0 }; struct wkb_ibus_lookup_table *table = calloc(1, sizeof(*table)); struct wkb_ibus_text *text = NULL; Eldbus_Message_Iter *iter_table, *candidates, *labels, *t; EINA_SAFETY_ON_NULL_RETURN_VAL(table, NULL); DBG("Message iter signature '%s'", eldbus_message_iter_signature_get(iter)); eldbus_message_iter_arguments_get(iter, "(sa{sv}uubbiavav)", &iter_table); if (!eldbus_message_iter_arguments_get(iter_table, "sa{sv}uubbiavav", &ignore.text, &ignore.dict, &table->page_size, &table->cursor_pos, &table->cursor_visible, &table->round, &table->orientation, &candidates, &labels)) { ERR("Error deserializing IBusLookupTable"); free(table); table = NULL; goto end; } DBG("Lookup table:"); DBG("\tPage size.......: '%d'", table->page_size); DBG("\tCursor position.: '%d'", table->cursor_pos); DBG("\tCursor visible..: '%d'", table->cursor_visible); DBG("\tRound...........: '%d'", table->round); DBG("\tOrientation.....: '%d'", table->orientation); DBG("\tCandidates......: '%p'", candidates); DBG("\tLabels..........: '%p'", labels); if (!candidates) { INF("Lookup table has no candidates"); goto labels; } while (eldbus_message_iter_get_and_next(candidates, 'v', &t)) { if (!(text = wkb_ibus_text_from_message_iter(t))) { wkb_ibus_lookup_table_free(table); table = NULL; goto end; } if (!table->candidates) table->candidates = eina_array_new(10); DBG("Appending new candidate %s", text->text); eina_array_push(table->candidates, text); } labels: if (!labels) { INF("Lookup table has no labels"); goto end; } while (eldbus_message_iter_get_and_next(labels, 'v', &t)) { if (!(text = wkb_ibus_text_from_message_iter(t))) { wkb_ibus_lookup_table_free(table); table = NULL; goto end; } if (!table->labels) table->labels = eina_array_new(10); DBG("Appending new label %s", text->text); eina_array_push(table->labels, text); } end: return table; }