static GObject *spice_usb_device_widget_constructor( GType gtype, guint n_properties, GObjectConstructParam *properties) { GObject *obj; SpiceUsbDeviceWidget *self; SpiceUsbDeviceWidgetPrivate *priv; GPtrArray *devices = NULL; GError *err = NULL; GtkWidget *label; gchar *str; int i; { /* Always chain up to the parent constructor */ GObjectClass *parent_class; parent_class = G_OBJECT_CLASS(spice_usb_device_widget_parent_class); obj = parent_class->constructor(gtype, n_properties, properties); } self = SPICE_USB_DEVICE_WIDGET(obj); priv = self->priv; if (!priv->session) g_error("SpiceUsbDeviceWidget constructed without a session"); label = gtk_label_new(NULL); str = g_strdup_printf("<b>%s</b>", _("Select USB devices to redirect")); gtk_label_set_markup(GTK_LABEL (label), str); g_free(str); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(self), label, FALSE, FALSE, 0); priv->manager = spice_usb_device_manager_get(priv->session, &err); if (err) { spice_usb_device_widget_show_info_bar(self, err->message, GTK_MESSAGE_WARNING, GTK_STOCK_DIALOG_WARNING); g_clear_error(&err); return obj; } g_signal_connect(priv->manager, "device-added", G_CALLBACK(device_added_cb), self); g_signal_connect(priv->manager, "device-removed", G_CALLBACK(device_removed_cb), self); g_signal_connect(priv->manager, "device-error", G_CALLBACK(device_error_cb), self); devices = spice_usb_device_manager_get_devices(priv->manager); if (!devices) goto end; for (i = 0; i < devices->len; i++) device_added_cb(NULL, g_ptr_array_index(devices, i), self); g_ptr_array_unref(devices); end: return obj; }
static gboolean spice_usb_device_widget_update_status(gpointer user_data) { SpiceUsbDeviceWidget *self = SPICE_USB_DEVICE_WIDGET(user_data); SpiceUsbDeviceWidgetPrivate *priv = self->priv; priv->device_count = 0; gtk_container_foreach(GTK_CONTAINER(self), check_can_redirect, self); if (priv->err_msg) { spice_usb_device_widget_show_info_bar(self, priv->err_msg, GTK_MESSAGE_INFO, GTK_STOCK_DIALOG_WARNING); g_free(priv->err_msg); priv->err_msg = NULL; } else { spice_usb_device_widget_hide_info_bar(self); } if (priv->device_count == 0) spice_usb_device_widget_show_info_bar(self, _("No USB devices detected"), GTK_MESSAGE_INFO, GTK_STOCK_DIALOG_INFO); return FALSE; }