input: add DEVICE_INPUT_TYPE_ALL enum type handling
authorYunhee Seo <yuni.seo@samsung.com>
Wed, 18 Jan 2023 02:12:43 +0000 (11:12 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 25 Jan 2023 11:44:18 +0000 (20:44 +0900)
Add DEVICE_INPUT_TYPE_ALL handling code which was omitted.
With this, it is possible to get all kinds of device ids.

Change-Id: I24a6f4706214fb2963ac6e7a4ad3ae8a4ff58ffb
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
src/input/input-device-manager.c

index 8b28805..695ccb8 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <glib.h>
 
+#include <device/input-internal.h>
 #include <libsyscommon/list.h>
 
 #include "shared/log.h"
@@ -100,25 +101,36 @@ int input_devman_find_default_device(int input_device_type, int *input_device_id
        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;
 }