コード例 #1
0
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;
}
コード例 #2
0
ファイル: usb-device-widget.c プロジェクト: dezelin/spice-gtk
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;
}
コード例 #3
0
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);
}