summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mtouch.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/mtouch.c b/src/mtouch.c
index 8a83d64..ec5eac9 100644
--- a/src/mtouch.c
+++ b/src/mtouch.c
@@ -32,26 +32,37 @@ int configure_mtouch(struct MTouch *mt, int fd)
32 return 0; 32 return 0;
33} 33}
34 34
35
35int open_mtouch(struct MTouch *mt, int fd) 36int open_mtouch(struct MTouch *mt, int fd)
36{ 37{
37 mtdev_open(&mt->dev, fd); 38 int ret;
39 ret = mtdev_open(&mt->dev, fd);
40 if (ret)
41 goto error;
38 init_hwstate(&mt->hs, &mt->caps); 42 init_hwstate(&mt->hs, &mt->caps);
39 init_mtstate(&mt->prev_state); 43 init_mtstate(&mt->prev_state);
40 init_mtstate(&mt->state); 44 init_mtstate(&mt->state);
41 init_memory(&mt->mem); 45 init_memory(&mt->mem);
42 if (use_grab) { 46 if (use_grab) {
43 int rc; 47 SYSCALL(ret = ioctl(fd, EVIOCGRAB, 1));
44 SYSCALL(rc = ioctl(fd, EVIOCGRAB, (pointer)1)); 48 if (ret)
45 return rc; 49 goto close;
46 } 50 }
47 return 0; 51 return 0;
52 close:
53 mtdev_close(&mt->dev);
54 error:
55 return ret;
48} 56}
49 57
58
50int close_mtouch(struct MTouch *mt, int fd) 59int close_mtouch(struct MTouch *mt, int fd)
51{ 60{
61 int ret;
52 if (use_grab) { 62 if (use_grab) {
53 int rc; 63 SYSCALL(ret = ioctl(fd, EVIOCGRAB, 0));
54 SYSCALL(rc = ioctl(fd, EVIOCGRAB, (pointer)0)); 64 if (ret)
65 xf86Msg(X_WARNING, "mtouch: ungrab failed\n");
55 } 66 }
56 mtdev_close(&mt->dev); 67 mtdev_close(&mt->dev);
57 return 0; 68 return 0;