From: Alexander Nezhinsky <anezhins@xxxxxxxxxx> Turn shared CD devices added using command line into hot-plugged devices which are redirected according to 'auto-connect' filter rules. By default command line devices are added using 'redirect-on-connect' filter, which do not fit the shard CD connecting requirements. Signed-off-by: Alexander Nezhinsky <anezhins@xxxxxxxxxx> --- src/usb-device-manager.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c index 0961ef9..a69a346 100644 --- a/src/usb-device-manager.c +++ b/src/usb-device-manager.c @@ -889,11 +889,9 @@ static void spice_usb_device_manager_check_redir_on_connect( GTask *task; SpiceUsbDevice *device; SpiceUsbBackendDevice *bdev; + gboolean is_cd, shall_redirect; guint i; - if (priv->redirect_on_connect == NULL) - return; - for (i = 0; i < priv->devices->len; i++) { device = g_ptr_array_index(priv->devices, i); @@ -901,10 +899,23 @@ static void spice_usb_device_manager_check_redir_on_connect( continue; bdev = spice_usb_device_manager_device_to_bdev(self, device); - if (spice_usb_backend_device_check_filter( - bdev, - priv->redirect_on_connect_rules, - priv->redirect_on_connect_rules_count) == 0) { + is_cd = spice_usb_backend_device_get_libdev(bdev) == NULL; + + if (priv->redirect_on_connect) { + shall_redirect = !spice_usb_backend_device_check_filter( + bdev, + priv->redirect_on_connect_rules, + priv->redirect_on_connect_rules_count); + } else if (is_cd) { + shall_redirect = !spice_usb_backend_device_check_filter( + bdev, + priv->auto_conn_filter_rules, ++ priv->auto_conn_filter_rules_count); + } else { + shall_redirect = FALSE; + } + + if (shall_redirect) { /* Note: re-uses spice_usb_device_manager_connect_device_async's completion handling code! */ task = g_task_new(self, -- 2.20.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel