diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mtouch.c | 23 |
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 | |||
| 35 | int open_mtouch(struct MTouch *mt, int fd) | 36 | int 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 | |||
| 50 | int close_mtouch(struct MTouch *mt, int fd) | 59 | int 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; |
