/**
* @ingroup base
*
+ * Set the event source of udev monitor.
+ * The default event source of udev monitor is "udev".
+ *
+ * @param source The event source of udev monitor
+ */
+void
+libinput_udev_set_udev_monitor_event_source(const char *source);
+
+/**
+ * @ingroup base
+ *
+ * Set the buffer size of udev monitor.
+ *
+ * @param size The buffer size of udev monitor.
+ * @return 0 on success or -1 on failure.
+ */
+int
+libinput_udev_set_udev_monitor_buffer_size(int size);
+
+/**
+ * @ingroup base
+ *
* Create a new libinput context that requires the caller to manually add or
* remove devices with libinput_path_add_device() and
* libinput_path_remove_device().
static const char default_seat[] = "seat0";
static const char default_seat_name[] = "default";
+char *_udev_monitor_event_source = NULL;
+int _udev_monitor_buffer_size = 0;
+
+static char *
+_udev_get_udev_monitor_event_source(void)
+{
+ return _udev_monitor_event_source;
+}
+
+static int
+_udev_get_udev_monitor_buffer_size(void)
+{
+ return _udev_monitor_buffer_size;
+}
+
static struct udev_seat *
udev_seat_create(struct udev_input *input,
const char *device_seat,
if (input->udev_monitor || !input->seat_id)
return 0;
- char *env;
+ char *env = _udev_get_udev_monitor_event_source();
- if ((env = getenv("UDEV_MONITOR_EVENT_SOURCE")))
+ if (env)
{
- log_info(libinput, "udev: event source is %s.\n", env);
input->udev_monitor = udev_monitor_new_from_netlink(udev, env);
+ log_info(libinput, "udev: event source is %s.\n", env);
}
else
+ {
input->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
+ log_info(libinput, "udev: event source is udev (default event source).\n");
+ }
if (!input->udev_monitor) {
log_info(libinput,
return -1;
}
- env = getenv("UDEV_MONITOR_BUFFER_SIZE");
- if (env && (buf_size = atoi(env)))
+ buf_size = _udev_get_udev_monitor_buffer_size();
+
+ if (buf_size)
{
log_info(libinput,"udev: set receive buffer size = %d\n", buf_size);
udev_monitor_set_receive_buffer_size(input->udev_monitor, buf_size);
.device_change_seat = udev_device_change_seat,
};
+LIBINPUT_EXPORT void
+libinput_udev_set_udev_monitor_event_source(const char *source)
+{
+ if (source)
+ {
+ if (_udev_monitor_event_source)
+ {
+ free(_udev_monitor_event_source);
+ _udev_monitor_event_source = NULL;
+ }
+
+ _udev_monitor_event_source = strdup(source);
+ }
+}
+
+LIBINPUT_EXPORT int
+libinput_udev_set_udev_monitor_buffer_size(int size)
+{
+ if (0 >= size)
+ return -1;
+
+ _udev_monitor_buffer_size = size;
+ return 0;
+}
+
LIBINPUT_EXPORT struct libinput *
libinput_udev_create_context(const struct libinput_interface *interface,
void *user_data,
}
input->udev = udev_ref(udev);
+ _udev_monitor_event_source = strdup("udev");
return &input->base;
}