As we only can filter USB devices by their Classes and sometimes it is not enough (eg: I do not want to have Keyboard and Mouse, but I want to have Joysticks, being all of them part of HID Class), let's expose the libusb device associated to the SpiceUsbDevice, so the applications can have access to whatever information they need, directly from the libusb device, to refine their filters. --- Changes since v1: - The approach is completely different. In the first version of the patch I've added a new API to get, specifically, class, subclass and protocol of a libusb device. Discussing this approach with Marc-André and taking into consideration that, from Boxes, we could refine the filter once we have access to the libusb device I've decided to keep it simple in the spice-gtk and give more freedom to the applications access whatever they need from their side. --- gtk/map-file | 1 + gtk/spice-glib-sym-file | 1 + gtk/usb-device-manager.c | 25 +++++++++++++++++++++++++ gtk/usb-device-manager.h | 1 + 4 files changed, 28 insertions(+) diff --git a/gtk/map-file b/gtk/map-file index 9f8d04e..3e9624f 100644 --- a/gtk/map-file +++ b/gtk/map-file @@ -114,6 +114,7 @@ spice_uri_set_scheme; spice_uri_set_user; spice_uri_to_string; spice_usb_device_get_description; +spice_usb_device_get_libusb_device; spice_usb_device_get_type; spice_usb_device_manager_can_redirect_device; spice_usb_device_manager_connect_device_async; diff --git a/gtk/spice-glib-sym-file b/gtk/spice-glib-sym-file index 2189fa5..6ea8aeb 100644 --- a/gtk/spice-glib-sym-file +++ b/gtk/spice-glib-sym-file @@ -91,6 +91,7 @@ spice_uri_set_scheme spice_uri_set_user spice_uri_to_string spice_usb_device_get_description +spice_usb_device_get_libusb_device spice_usb_device_get_type spice_usb_device_manager_can_redirect_device spice_usb_device_manager_connect_device_async diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c index 5013b6c..824264c 100644 --- a/gtk/usb-device-manager.c +++ b/gtk/usb-device-manager.c @@ -706,6 +706,31 @@ static gboolean spice_usb_device_manager_get_device_descriptor( return TRUE; } + +/** + * spice_usb_device_get_libusb_device: + * @device: #SpiceUsbDevice to get the descriptor information of + * + * Returns: (transfer none): the %libusb_device associated to %SpiceUsbDevice. + * + * Since: 0.27 + **/ +gconstpointer +spice_usb_device_get_libusb_device(const SpiceUsbDevice *device G_GNUC_UNUSED) +{ +#ifdef USE_USBREDIR +#ifndef G_OS_WIN32 + const SpiceUsbDeviceInfo *info = (const SpiceUsbDeviceInfo *)device; + + g_return_val_if_fail(info != NULL, FALSE); + + return info->libdev; +#endif +#else + return NULL; +#endif +} + static gboolean spice_usb_device_manager_get_libdev_vid_pid( libusb_device *libdev, int *vid, int *pid) { diff --git a/gtk/usb-device-manager.h b/gtk/usb-device-manager.h index a7e3515..5b4cfbe 100644 --- a/gtk/usb-device-manager.h +++ b/gtk/usb-device-manager.h @@ -89,6 +89,7 @@ GType spice_usb_device_get_type(void); GType spice_usb_device_manager_get_type(void); gchar *spice_usb_device_get_description(SpiceUsbDevice *device, const gchar *format); +gconstpointer spice_usb_device_get_libusb_device(const SpiceUsbDevice *device); SpiceUsbDeviceManager *spice_usb_device_manager_get(SpiceSession *session, GError **err); -- 2.1.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel