int main (int argc, char **argv) { GdkDeviceManager *manager; GList *devices, *l; gtk_init (&argc, &argv); monitors = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); manager = gdk_display_get_device_manager (gdk_display_get_default ()); g_signal_connect (manager, "device-added", G_CALLBACK (device_added_cb), NULL); g_signal_connect (manager, "device-removed", G_CALLBACK (device_removed_cb), NULL); g_signal_connect (manager, "device-changed", G_CALLBACK (device_changed_cb), NULL); devices = gdk_device_manager_list_devices (manager, GDK_DEVICE_TYPE_SLAVE); for (l = devices; l != NULL; l = l->next) { GdkDevice *device = l->data; device_added_cb (manager, device, NULL); } gtk_main (); return 0; }
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 void device_changed_cb (GdkDeviceManager *manager, GdkDevice *device, gpointer user_data) { if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_FLOATING) device_removed_cb (manager, device, NULL); else device_added_cb (manager, device, NULL); }