udev-seat: skip addition of unconfigured device by event source
authorSung-Jin Park <sj76.park@samsung.com>
Tue, 27 Oct 2020 12:07:50 +0000 (21:07 +0900)
committerduna.oh <duna.oh@samsung.com>
Fri, 27 Jan 2023 05:45:59 +0000 (14:45 +0900)
Change-Id: Id7f36e62ca6f566d8b2023daa39480c6d6a9a568
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/udev-seat.c

index 353732e..9fae9b5 100644 (file)
@@ -36,6 +36,7 @@ static const char default_seat_name[] = "default";
 
 char *_udev_monitor_event_source = NULL;
 int _udev_monitor_buffer_size = 0;
+int _udev_monitor_skip_unconfigured_device = 1; //default : skip
 
 static char *
 _udev_get_udev_monitor_event_source(void)
@@ -232,12 +233,15 @@ udev_input_add_devices(struct udev_input *input, struct udev *udev)
                /* Skip unconfigured device. udev will send an event
                 * when device is fully configured  */
                if (!udev_device_get_is_initialized(device)) {
-                       log_debug(&input->base,
-                                 "%-7s - skip unconfigured input device '%s'\n",
-                                 sysname,
-                                 udev_device_get_devnode(device));
-                       udev_device_unref(device);
-                       continue;
+                       /* Skip only when the skip flag has been set to non-zero. */
+                       if (_udev_monitor_skip_unconfigured_device) {
+                               log_debug(&input->base,
+                                         "%-7s - skip unconfigured input device '%s'\n",
+                                         sysname,
+                                         udev_device_get_devnode(device));
+                               udev_device_unref(device);
+                               continue;
+                       }
                }
 
                if (device_added(device, input, NULL) < 0) {
@@ -336,6 +340,16 @@ udev_input_enable(struct libinput *libinput)
                log_info(libinput, "udev: event source is udev (default event source).\n");
        }
 
+       /* Skip only when the event source of udev monitor has been set as "udev" or null. */
+       if (!env || (0 == strncmp("udev", env, 4))) {
+               _udev_monitor_skip_unconfigured_device = 1;
+               log_info(libinput, "will skip addition of unconfigured devices. (env=%s)\n", env ? env : "null");
+       }
+       else {
+               _udev_monitor_skip_unconfigured_device = 0;
+               log_info(libinput, "won't skip addition of unconfigured devices. (env=%s)\n", env);
+       }
+
        if (!input->udev_monitor) {
                log_info(libinput,
                         "udev: failed to create the udev monitor\n");
@@ -500,7 +514,8 @@ libinput_udev_create_context(const struct libinput_interface *interface,
        }
 
        input->udev = udev_ref(udev);
-       _udev_monitor_event_source = strdup("udev");
+       if (!_udev_monitor_event_source)
+               _udev_monitor_event_source = strdup("udev");
 
        return &input->base;
 }