static void list_devices (GList *devices) { GList *l; for (l = devices; l ; l = l->next) { GsdWacomDevice *device; GsdWacomDeviceType type; char *loc; device = l->data; g_signal_connect (G_OBJECT (device), "notify::last-stylus", G_CALLBACK (last_stylus_changed), NULL); g_print ("Device '%s' (type: %s)\n", gsd_wacom_device_get_name (device), gsd_wacom_device_type_to_string (gsd_wacom_device_get_device_type (device))); g_print ("\tReversible: %s\n", BOOL_AS_STR (gsd_wacom_device_reversible (device))); g_print ("\tScreen Tablet: %s\n", BOOL_AS_STR (gsd_wacom_device_is_screen_tablet (device))); g_print ("\tUnknown (fallback) device: %s\n", BOOL_AS_STR(gsd_wacom_device_is_fallback (device))); loc = get_loc (gsd_wacom_device_get_settings (device)); g_print ("\tGeneric settings: %s\n", loc); g_free (loc); type = gsd_wacom_device_get_device_type (device); if (type == WACOM_TYPE_STYLUS || type == WACOM_TYPE_ERASER) { GList *styli, *j; GsdWacomStylus *current_stylus; g_object_get (device, "last-stylus", ¤t_stylus, NULL); styli = gsd_wacom_device_list_styli (device); for (j = styli; j; j = j->next) { GsdWacomStylus *stylus; stylus = j->data; print_stylus (stylus, current_stylus == stylus); } g_list_free (styli); } print_buttons (device); if (monitor_styli == FALSE) g_object_unref (device); } g_list_free (devices); }
static void add_page (GList *devices, GtkWidget *notebook) { GtkWidget *widget; GsdWacomDevice *stylus, *eraser, *pad; GList *l; if (devices == NULL) return; stylus = eraser = pad = NULL; for (l = devices; l ; l = l->next) { switch (gsd_wacom_device_get_device_type (l->data)) { case WACOM_TYPE_ERASER: eraser = l->data; break; case WACOM_TYPE_STYLUS: stylus = l->data; break; case WACOM_TYPE_PAD: pad = l->data; break; default: /* Nothing */ ; } } g_list_free (devices); widget = cc_wacom_page_new (NULL, stylus, eraser, pad); cc_wacom_page_set_navigation (CC_WACOM_PAGE (widget), GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), widget, NULL); gtk_widget_show (widget); }
static void list_actual_devices (void) { GdkDeviceManager *mgr; GList *list, *l, *devices; mgr = gdk_display_get_device_manager (gdk_display_get_default ()); list = gdk_device_manager_list_devices (mgr, GDK_DEVICE_TYPE_SLAVE); devices = NULL; for (l = list; l ; l = l->next) { GsdWacomDevice *device; device = gsd_wacom_device_new (l->data); if (gsd_wacom_device_get_device_type (device) == WACOM_TYPE_INVALID) { g_object_unref (device); continue; } devices = g_list_prepend (devices, device); } g_list_free (list); list_devices (devices); }
static void add_known_device (CcWacomPanel *self, GdkDevice *gdk_device) { CcWacomPanelPrivate *priv; GsdWacomDevice *device; priv = self->priv; device = gsd_wacom_device_new (gdk_device); if (gsd_wacom_device_get_device_type (device) == WACOM_TYPE_INVALID) { g_object_unref (device); return; } g_debug ("Adding device '%s' (type: '%s') to known devices list", gsd_wacom_device_get_tool_name (device), gsd_wacom_device_type_to_string (gsd_wacom_device_get_device_type (device))); g_hash_table_insert (priv->devices, (gpointer) gdk_device, device); }
static GsdWacomDevice * search_pad_device (void) { GdkDeviceManager *mgr; GList *list, *l; mgr = gdk_display_get_device_manager (gdk_display_get_default ()); list = gdk_device_manager_list_devices (mgr, GDK_DEVICE_TYPE_SLAVE); for (l = list; l ; l = l->next) { GsdWacomDevice *device; device = gsd_wacom_device_new (l->data); if (gsd_wacom_device_get_device_type (device) == WACOM_TYPE_PAD) return (device); g_object_unref (device); } g_list_free (list); return NULL; }
static void print_stylus (GsdWacomStylus *stylus, gboolean is_current) { GsdWacomDevice *device; char *loc; device = gsd_wacom_stylus_get_device (stylus); g_print ("\t%sStylus: '%s' (Type: %s, ID: 0x%x)\n", is_current ? "*** " : "", gsd_wacom_stylus_get_name (stylus), stylus_type_to_string (gsd_wacom_stylus_get_stylus_type (stylus)), gsd_wacom_stylus_get_id (stylus)); loc = get_loc (gsd_wacom_stylus_get_settings (stylus)); g_print ("\t\tSettings: %s\n", loc); g_free (loc); g_print ("\t\tIcon name: %s\n", gsd_wacom_stylus_get_icon_name (stylus)); if (gsd_wacom_device_get_device_type (device) == WACOM_TYPE_STYLUS) { int num_buttons; char *buttons; g_print ("\t\tHas Eraser: %s\n", BOOL_AS_STR(gsd_wacom_stylus_get_has_eraser (stylus))); num_buttons = gsd_wacom_stylus_get_num_buttons (stylus); if (num_buttons < 0) num_buttons = 2; if (num_buttons > 0) buttons = g_strdup_printf ("%d buttons", num_buttons); else buttons = g_strdup ("no button"); g_print ("\t\tButtons: %s\n", buttons); g_free (buttons); } }
static void update_current_page (CcWacomPanel *self) { GHashTable *ht; GList *devices, *tablets, *l; gboolean changed; CcWacomPanelPrivate *priv; priv = self->priv; changed = FALSE; ht = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); devices = g_hash_table_get_values (priv->devices); for (l = devices; l; l = l->next) { Tablet *tablet; GsdWacomDevice *device; device = l->data; tablet = g_hash_table_lookup (ht, gsd_wacom_device_get_name (device)); if (tablet == NULL) { tablet = g_new0 (Tablet, 1); tablet->name = gsd_wacom_device_get_name (device); g_hash_table_insert (ht, (gpointer) tablet->name, tablet); } switch (gsd_wacom_device_get_device_type (device)) { case WACOM_TYPE_STYLUS: tablet->stylus = device; break; case WACOM_TYPE_ERASER: tablet->eraser = device; break; case WACOM_TYPE_PAD: tablet->pad = device; break; default: /* Nothing */ ; } } g_list_free (devices); /* We now have a list of Tablet structs, * see which ones are full tablets */ tablets = g_hash_table_get_values (ht); for (l = tablets; l; l = l->next) { Tablet *tablet; GtkWidget *page; tablet = l->data; if (tablet->stylus == NULL || tablet->eraser == NULL) { page = g_hash_table_lookup (priv->pages, tablet->name); if (page != NULL) { remove_page (GTK_NOTEBOOK (priv->notebook), page); g_hash_table_remove (priv->pages, tablet->name); changed = TRUE; } continue; } /* this code is called once the stylus + eraser were set up, but the pad does not exist yet */ page = g_hash_table_lookup (priv->pages, tablet->name); if (page == NULL) { page = cc_wacom_page_new (self, tablet->stylus, tablet->eraser, tablet->pad); cc_wacom_page_set_navigation (CC_WACOM_PAGE (page), GTK_NOTEBOOK (priv->notebook), TRUE); gtk_widget_show (page); gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), page, NULL); g_hash_table_insert (priv->pages, g_strdup (tablet->name), page); changed = TRUE; } else { cc_wacom_page_update_tools (CC_WACOM_PAGE (page), tablet->stylus, tablet->eraser, tablet->pad); } } g_list_free (tablets); g_hash_table_destroy (ht); if (changed == TRUE) { int num_pages; num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); if (num_pages > 1) gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), WACOM_PAGE); } }