Skip to content
This repository was archived by the owner on Aug 28, 2025. It is now read-only.

Commit 8c2421b

Browse files
committed
Quick hack to get GfxTablet working with Gimp 2.8 on kernel 4.17
1 parent babd92a commit 8c2421b

File tree

1 file changed

+50
-19
lines changed

1 file changed

+50
-19
lines changed

driver-uinput/networktablet.c

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ int udp_socket;
2424

2525
void init_device(int fd)
2626
{
27-
struct uinput_user_dev uidev;
28-
2927
// enable synchronization
3028
if (ioctl(fd, UI_SET_EVBIT, EV_SYN) < 0)
3129
die("error: ioctl UI_SET_EVBIT EV_SYN");
@@ -52,23 +50,56 @@ void init_device(int fd)
5250
if (ioctl(fd, UI_SET_ABSBIT, ABS_PRESSURE) < 0)
5351
die("error: ioctl UI_SETEVBIT ABS_PRESSURE");
5452

55-
memset(&uidev, 0, sizeof(uidev));
56-
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "Network Tablet");
57-
uidev.id.bustype = BUS_VIRTUAL;
58-
uidev.id.vendor = 0x1;
59-
uidev.id.product = 0x1;
60-
uidev.id.version = 1;
61-
uidev.absmin[ABS_X] = 0;
62-
uidev.absmax[ABS_X] = UINT16_MAX;
63-
uidev.absmin[ABS_Y] = 0;
64-
uidev.absmax[ABS_Y] = UINT16_MAX;
65-
uidev.absmin[ABS_PRESSURE] = 0;
66-
uidev.absmax[ABS_PRESSURE] = INT16_MAX;
67-
if (write(fd, &uidev, sizeof(uidev)) < 0)
68-
die("error: write");
69-
70-
if (ioctl(fd, UI_DEV_CREATE) < 0)
71-
die("error: ioctl");
53+
{
54+
struct uinput_abs_setup abs_setup;
55+
struct uinput_setup setup;
56+
57+
memset(&abs_setup, 0, sizeof(abs_setup));
58+
abs_setup.code = ABS_X;
59+
abs_setup.absinfo.value = 0;
60+
abs_setup.absinfo.minimum = 0;
61+
abs_setup.absinfo.maximum = UINT16_MAX;
62+
abs_setup.absinfo.fuzz = 0;
63+
abs_setup.absinfo.flat = 0;
64+
abs_setup.absinfo.resolution = 400;
65+
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
66+
die("error: UI_ABS_SETUP ABS_X");
67+
68+
memset(&abs_setup, 0, sizeof(abs_setup));
69+
abs_setup.code = ABS_Y;
70+
abs_setup.absinfo.value = 0;
71+
abs_setup.absinfo.minimum = 0;
72+
abs_setup.absinfo.maximum = UINT16_MAX;
73+
abs_setup.absinfo.fuzz = 0;
74+
abs_setup.absinfo.flat = 0;
75+
abs_setup.absinfo.resolution = 400;
76+
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
77+
die("error: UI_ABS_SETUP ABS_Y");
78+
79+
memset(&abs_setup, 0, sizeof(abs_setup));
80+
abs_setup.code = ABS_PRESSURE;
81+
abs_setup.absinfo.value = 0;
82+
abs_setup.absinfo.minimum = 0;
83+
abs_setup.absinfo.maximum = INT16_MAX;
84+
abs_setup.absinfo.fuzz = 0;
85+
abs_setup.absinfo.flat = 0;
86+
abs_setup.absinfo.resolution = 0;
87+
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
88+
die("error: UI_ABS_SETUP ABS_PRESSURE");
89+
90+
memset(&setup, 0, sizeof(setup));
91+
snprintf(setup.name, UINPUT_MAX_NAME_SIZE, "Network Tablet");
92+
setup.id.bustype = BUS_VIRTUAL;
93+
setup.id.vendor = 0x1;
94+
setup.id.product = 0x1;
95+
setup.id.version = 2;
96+
setup.ff_effects_max = 0;
97+
if (ioctl(fd, UI_DEV_SETUP, &setup) < 0)
98+
die("error: UI_DEV_SETUP");
99+
100+
if (ioctl(fd, UI_DEV_CREATE) < 0)
101+
die("error: ioctl");
102+
}
72103
}
73104

74105
int prepare_socket()

0 commit comments

Comments
 (0)