version 0.2.5
[expresskeys.git] / src-expresskeys / reg_events.c
1 /*
2  reg_events.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
3  
4  Copyright (C) 2005-2006 - Mats Johannesson
5  
6  Based on test.c 1996 by Frederic Lepied (xinput-1.2)
7  
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12  
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17  
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
21 */
22
23 #include "globals.h"
24
25 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
26  Function opens the X input device (which stays open until program end)
27  and starts to look for supported event types. The scope should be the
28  root window (ie everywhere) and we're only interested in motion events
29  (touch strip action) and button press/release. Having found the info
30  we ask the X server to keep us continuously notified about these events
31  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
32
33 int register_events(Display *display, XDeviceInfo *pad_info, char *name)
34 {
35         int i;
36         int count = 0;
37         XEventClass event_list[3];
38         XInputClassInfo *ip;
39         Window root_win;
40
41         root_win = RootWindow(display, screen);
42
43         pad_device = XOpenDevice(display, pad_info->id);
44         if (!pad_device) {
45                 return 0;
46         }
47
48         if (pad_device->num_classes > 0) {
49                 for (ip = pad_device->classes, i = 0; i < pad_info->num_classes; ip++, i++) {
50                         switch (ip->input_class) {
51
52                         case ButtonClass:
53                         DeviceButtonPress(pad_device, button_press_type, event_list[count]);
54                         count++;
55                         DeviceButtonRelease(pad_device, button_release_type, event_list[count]);
56                         count++;
57                         break;
58
59                         case ValuatorClass:
60                         DeviceMotionNotify(pad_device, motion_type, event_list[count]);
61                         count++;
62                         break;
63
64                         default:
65                         break;
66                         }
67                 }
68
69         if (XSelectExtensionEvent(display, root_win, event_list, count)) {
70                 return 0;
71                 }
72         }
73         return count;
74 }
75
76 /* End Code */
77