#include <glib.h>
+#include <device/input-internal.h>
#include <libsyscommon/list.h>
#include "shared/log.h"
return -ENXIO;
}
+static void extract_input_device_ids_from_list(GList* input_device_list, GVariantBuilder* id_list)
+{
+ GList* temp_glist;
+ struct input_device_element *input_device_elem;
+
+ if (!input_device_list)
+ return;
+
+ SYS_G_LIST_FOREACH(input_device_list, temp_glist, input_device_elem)
+ g_variant_builder_add(id_list, "i", input_device_elem->id);
+}
+
GVariant *input_devman_find_device_list(int input_device_type)
{
- GList *find_input_device_list = find_input_device_list_by_device_type(input_device_type);
- GList *temp_glist1;
+ GList *find_input_device_list;
GVariantBuilder *input_device_list_builder = g_variant_builder_new(G_VARIANT_TYPE("ai"));
GVariant *id_list;
- struct input_device_element *input_device_elem;
- int num_input_ids = g_list_length(find_input_device_list);
- if (num_input_ids <= 0) {
- id_list = g_variant_new("(ai)", input_device_list_builder);
- goto out;
+ if (input_device_type == DEVICE_INPUT_TYPE_ALL) {
+ GList *all_input_device_list;
+ GList *temp_glist;
+ all_input_device_list = g_hash_table_get_values(g_input_device_list);
+ SYS_G_LIST_FOREACH(all_input_device_list, temp_glist, find_input_device_list)
+ extract_input_device_ids_from_list(find_input_device_list, input_device_list_builder);
+ } else {
+ find_input_device_list = find_input_device_list_by_device_type(input_device_type);
+ extract_input_device_ids_from_list(find_input_device_list, input_device_list_builder);
}
- SYS_G_LIST_FOREACH(find_input_device_list, temp_glist1, input_device_elem) {
- g_variant_builder_add(input_device_list_builder, "i", input_device_elem->id);
- }
id_list = g_variant_new("(ai)", input_device_list_builder);
-out:
g_variant_builder_unref(input_device_list_builder);
return id_list;
}