Tablets have not always an eraser (most of the generic tablets like Huion,
UC-Logic, etc... don't). We should not reject such tablets.
Commit 54849a9
(wacom: Only the stylus and eraser tools need to exist)
mentioned that we were not sure about eraser, and I think we should not
assume one either.
To do so, we simply ignore the eraser xinput node and rely on
libwacom to actually provide the eraser information.
If the stylus does not have the eraser tip, we may fall in the
LAYOUT_OTHER case. We have a picture of a generic Wacom pen with an
eraser, and the leaders linking the widget to the picture are scrambled.
To prevent that, gray out the eraser pressure slider so that we do not
break the layout.
https://bugzilla.gnome.org/show_bug.cgi?id=746117
120 lines
2.7 KiB
C
120 lines
2.7 KiB
C
|
|
#include "config.h"
|
|
|
|
#include <glib/gi18n.h>
|
|
#include <clutter-gtk/clutter-gtk.h>
|
|
|
|
#include "cc-wacom-page.h"
|
|
#include "gsd-wacom-device.h"
|
|
#include "clutter/clutter.h"
|
|
|
|
#define FIXED_WIDTH 675
|
|
|
|
void
|
|
cc_wacom_panel_switch_to_panel (CcWacomPanel *self, const char *panel)
|
|
{
|
|
g_message ("Should launch %s preferences here", panel);
|
|
}
|
|
|
|
GDBusProxy *
|
|
cc_wacom_panel_get_gsd_wacom_bus_proxy (CcWacomPanel *self)
|
|
{
|
|
g_message ("Should get the g-s-d wacom dbus proxy here");
|
|
|
|
return NULL;
|
|
}
|
|
|
|
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, 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 gboolean
|
|
delete_event_cb (GtkWidget *widget,
|
|
GdkEvent *event,
|
|
gpointer user_data)
|
|
{
|
|
gtk_main_quit ();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
int main (int argc, char **argv)
|
|
{
|
|
GtkWidget *window, *notebook;
|
|
GList *devices;
|
|
|
|
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
|
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
|
textdomain (GETTEXT_PACKAGE);
|
|
|
|
if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
|
|
g_critical ("Unable to initialize Clutter");
|
|
return 1;
|
|
}
|
|
|
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
|
gtk_widget_set_size_request (window, FIXED_WIDTH, -1);
|
|
g_signal_connect (G_OBJECT (window), "delete-event",
|
|
G_CALLBACK (delete_event_cb), NULL);
|
|
notebook = gtk_notebook_new ();
|
|
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
|
|
gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE);
|
|
gtk_widget_set_vexpand (notebook, TRUE);
|
|
gtk_container_set_border_width (GTK_CONTAINER (notebook), 24);
|
|
gtk_container_add (GTK_CONTAINER (window), notebook);
|
|
gtk_widget_show (notebook);
|
|
|
|
devices = gsd_wacom_device_create_fake_intuos4 ();
|
|
add_page (devices, notebook);
|
|
|
|
devices = gsd_wacom_device_create_fake_cintiq ();
|
|
add_page (devices, notebook);
|
|
|
|
devices = gsd_wacom_device_create_fake_bt ();
|
|
add_page (devices, notebook);
|
|
|
|
devices = gsd_wacom_device_create_fake_x201 ();
|
|
add_page (devices, notebook);
|
|
|
|
devices = gsd_wacom_device_create_fake_h610pro ();
|
|
add_page (devices, notebook);
|
|
|
|
gtk_widget_show (window);
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|