1 /***************************************************************************
4 * Copyright (C) 2011 Ryan Bourgeois <bluedragonx@gmail.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 **************************************************************************/
24 void mconfig_defaults(struct MConfig* cfg)
27 cfg->touch_down = DEFAULT_TOUCH_DOWN;
28 cfg->touch_up = DEFAULT_TOUCH_UP;
29 cfg->ignore_thumb = DEFAULT_IGNORE_THUMB;
30 cfg->ignore_palm = DEFAULT_IGNORE_PALM;
31 cfg->disable_on_palm = DEFAULT_DISABLE_ON_PALM;
32 cfg->disable_on_thumb = DEFAULT_DISABLE_ON_THUMB;
33 cfg->thumb_ratio = DEFAULT_THUMB_RATIO;
34 cfg->thumb_size = DEFAULT_THUMB_SIZE;
35 cfg->palm_size = DEFAULT_PALM_SIZE;
36 cfg->bottom_edge = DEFAULT_BOTTOM_EDGE;
39 cfg->trackpad_disable = DEFAULT_TRACKPAD_DISABLE;
40 cfg->button_enable = DEFAULT_BUTTON_ENABLE;
41 cfg->button_integrated = DEFAULT_BUTTON_INTEGRATED;
42 cfg->button_expire = DEFAULT_BUTTON_EXPIRE;
43 cfg->button_zones = DEFAULT_BUTTON_ZONES;
44 cfg->button_1touch = DEFAULT_BUTTON_1TOUCH;
45 cfg->button_2touch = DEFAULT_BUTTON_2TOUCH;
46 cfg->button_3touch = DEFAULT_BUTTON_3TOUCH;
47 cfg->tap_1touch = DEFAULT_TAP_1TOUCH;
48 cfg->tap_2touch = DEFAULT_TAP_2TOUCH;
49 cfg->tap_3touch = DEFAULT_TAP_3TOUCH;
50 cfg->tap_4touch = DEFAULT_TAP_4TOUCH;
51 cfg->tap_timeout = DEFAULT_TAP_TIMEOUT;
52 cfg->tap_hold = DEFAULT_TAP_HOLD;
53 cfg->tap_dist = DEFAULT_TAP_DIST;
54 cfg->gesture_hold = DEFAULT_GESTURE_HOLD;
55 cfg->gesture_wait = DEFAULT_GESTURE_WAIT;
56 cfg->scroll_dist = DEFAULT_SCROLL_DIST;
57 cfg->scroll_up_btn = DEFAULT_SCROLL_UP_BTN;
58 cfg->scroll_dn_btn = DEFAULT_SCROLL_DN_BTN;
59 cfg->scroll_lt_btn = DEFAULT_SCROLL_LT_BTN;
60 cfg->scroll_rt_btn = DEFAULT_SCROLL_RT_BTN;
61 cfg->swipe_dist = DEFAULT_SWIPE_DIST;
62 cfg->swipe_up_btn = DEFAULT_SWIPE_UP_BTN;
63 cfg->swipe_dn_btn = DEFAULT_SWIPE_DN_BTN;
64 cfg->swipe_lt_btn = DEFAULT_SWIPE_LT_BTN;
65 cfg->swipe_rt_btn = DEFAULT_SWIPE_RT_BTN;
66 cfg->swipe4_dist = DEFAULT_SWIPE4_DIST;
67 cfg->swipe4_up_btn = DEFAULT_SWIPE4_UP_BTN;
68 cfg->swipe4_dn_btn = DEFAULT_SWIPE4_DN_BTN;
69 cfg->swipe4_lt_btn = DEFAULT_SWIPE4_LT_BTN;
70 cfg->swipe4_rt_btn = DEFAULT_SWIPE4_RT_BTN;
71 cfg->scale_dist = DEFAULT_SCALE_DIST;
72 cfg->scale_up_btn = DEFAULT_SCALE_UP_BTN;
73 cfg->scale_dn_btn = DEFAULT_SCALE_DN_BTN;
74 cfg->rotate_dist = SQRVAL(DEFAULT_ROTATE_DIST);
75 cfg->rotate_lt_btn = DEFAULT_ROTATE_LT_BTN;
76 cfg->rotate_rt_btn = DEFAULT_ROTATE_RT_BTN;
77 cfg->drag_enable = DEFAULT_DRAG_ENABLE;
78 cfg->drag_timeout = DEFAULT_DRAG_TIMEOUT;
79 cfg->sensitivity = DEFAULT_SENSITIVITY;
82 void mconfig_init(struct MConfig* cfg,
83 const struct Capabilities* caps)
85 cfg->touch_minor = caps->has_abs[MTDEV_TOUCH_MINOR];
86 cfg->pad_width = get_cap_xsize(caps);
87 cfg->pad_height = get_cap_ysize(caps);
89 if (caps->has_abs[MTDEV_TOUCH_MAJOR] && caps->has_abs[MTDEV_WIDTH_MAJOR]) {
90 cfg->touch_type = MCFG_SCALE;
91 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
92 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
93 xf86Msg(X_INFO, "Touchpad supports regular and approaching touches.\n");
94 xf86Msg(X_INFO, " touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
96 else if (caps->has_abs[MTDEV_TOUCH_MAJOR]) {
97 cfg->touch_type = MCFG_SIZE;
98 cfg->touch_min = caps->abs[MTDEV_TOUCH_MAJOR].minimum;
99 cfg->touch_max = caps->abs[MTDEV_TOUCH_MAJOR].maximum;
100 xf86Msg(X_INFO, "Touchpad supports regular touches.\n");
101 xf86Msg(X_INFO, " touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
103 else if (caps->has_abs[MTDEV_PRESSURE]) {
104 cfg->touch_type = MCFG_PRESSURE;
105 cfg->touch_min = caps->abs[MTDEV_PRESSURE].minimum;
106 cfg->touch_max = caps->abs[MTDEV_PRESSURE].maximum;
107 xf86Msg(X_INFO, "Touchpad is pressure based.\n");
108 xf86Msg(X_INFO, " touch_min = %d, touch_max = %d\n", cfg->touch_min, cfg->touch_max);
111 cfg->touch_type = MCFG_NONE;
112 xf86Msg(X_WARNING, "Touchpad has minimal capabilities. Some features will be unavailable.\n");
115 if (cfg->touch_minor)
116 xf86Msg(X_INFO, "Touchpad supports minor touch widths.\n");
119 void mconfig_configure(struct MConfig* cfg,
123 cfg->touch_down = CLAMPVAL(xf86SetIntOption(opts, "FingerHigh", DEFAULT_TOUCH_DOWN), 0, 100);
124 cfg->touch_up = CLAMPVAL(xf86SetIntOption(opts, "FingerLow", DEFAULT_TOUCH_UP), 0, 100);
125 cfg->ignore_thumb = xf86SetBoolOption(opts, "IgnoreThumb", DEFAULT_IGNORE_THUMB);
126 cfg->ignore_palm = xf86SetBoolOption(opts, "IgnorePalm", DEFAULT_IGNORE_PALM);
127 cfg->disable_on_thumb = xf86SetBoolOption(opts, "DisableOnThumb", DEFAULT_DISABLE_ON_THUMB);
128 cfg->disable_on_palm = xf86SetBoolOption(opts, "DisableOnPalm", DEFAULT_DISABLE_ON_PALM);
129 cfg->thumb_ratio = CLAMPVAL(xf86SetIntOption(opts, "ThumbRatio", DEFAULT_THUMB_RATIO), 0, 100);
130 cfg->thumb_size = CLAMPVAL(xf86SetIntOption(opts, "ThumbSize", DEFAULT_THUMB_SIZE), 0, 100);
131 cfg->palm_size = CLAMPVAL(xf86SetIntOption(opts, "PalmSize", DEFAULT_PALM_SIZE), 0, 100);
132 cfg->bottom_edge = CLAMPVAL(xf86SetIntOption(opts, "BottomEdge", DEFAULT_BOTTOM_EDGE), 0, 100);
134 // Configure Gestures
135 cfg->trackpad_disable = CLAMPVAL(xf86SetIntOption(opts, "TrackpadDisable", DEFAULT_TRACKPAD_DISABLE), 0, 3);
136 cfg->button_enable = xf86SetBoolOption(opts, "ButtonEnable", DEFAULT_BUTTON_ENABLE);
137 cfg->button_integrated = xf86SetBoolOption(opts, "ButtonIntegrated", DEFAULT_BUTTON_INTEGRATED);
138 cfg->button_expire = MAXVAL(xf86SetIntOption(opts, "ButtonTouchExpire", DEFAULT_BUTTON_EXPIRE), 0);
139 cfg->button_zones = xf86SetBoolOption(opts, "ButtonZonesEnable", DEFAULT_BUTTON_ZONES);
140 cfg->button_1touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger1", DEFAULT_BUTTON_1TOUCH), 0, 32);
141 cfg->button_2touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger2", DEFAULT_BUTTON_2TOUCH), 0, 32);
142 cfg->button_3touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger3", DEFAULT_BUTTON_3TOUCH), 0, 32);
143 cfg->button_move = xf86SetBoolOption(opts, "ButtonMoveEmulate", DEFAULT_BUTTON_MOVE);
144 cfg->tap_1touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton1", DEFAULT_TAP_1TOUCH), 0, 32);
145 cfg->tap_2touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton2", DEFAULT_TAP_2TOUCH), 0, 32);
146 cfg->tap_3touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton3", DEFAULT_TAP_3TOUCH), 0, 32);
147 cfg->tap_4touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton4", DEFAULT_TAP_4TOUCH), 0, 32);
148 cfg->tap_hold = MAXVAL(xf86SetIntOption(opts, "ClickTime", DEFAULT_TAP_HOLD), 1);
149 cfg->tap_timeout = MAXVAL(xf86SetIntOption(opts, "MaxTapTime", DEFAULT_TAP_TIMEOUT), 1);
150 cfg->tap_dist = MAXVAL(xf86SetIntOption(opts, "MaxTapMove", DEFAULT_TAP_DIST), 1);
151 cfg->gesture_hold = MAXVAL(xf86SetIntOption(opts, "GestureClickTime", DEFAULT_GESTURE_HOLD), 1);
152 cfg->gesture_wait = MAXVAL(xf86SetIntOption(opts, "GestureWaitTime", DEFAULT_GESTURE_WAIT), 0);
153 cfg->scroll_dist = MAXVAL(xf86SetIntOption(opts, "ScrollDistance", DEFAULT_SCROLL_DIST), 1);
154 cfg->scroll_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollUpButton", DEFAULT_SCROLL_UP_BTN), 0, 32);
155 cfg->scroll_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollDownButton", DEFAULT_SCROLL_DN_BTN), 0, 32);
156 cfg->scroll_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollLeftButton", DEFAULT_SCROLL_LT_BTN), 0, 32);
157 cfg->scroll_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollRightButton", DEFAULT_SCROLL_RT_BTN), 0, 32);
158 cfg->swipe_dist = MAXVAL(xf86SetIntOption(opts, "SwipeDistance", DEFAULT_SWIPE_DIST), 1);
159 cfg->swipe_up_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeUpButton", DEFAULT_SWIPE_UP_BTN), 0, 32);
160 cfg->swipe_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeDownButton", DEFAULT_SWIPE_DN_BTN), 0, 32);
161 cfg->swipe_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeLeftButton", DEFAULT_SWIPE_LT_BTN), 0, 32);
162 cfg->swipe_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeRightButton", DEFAULT_SWIPE_RT_BTN), 0, 32);
163 cfg->swipe4_dist = MAXVAL(xf86SetIntOption(opts, "Swipe4Distance", DEFAULT_SWIPE4_DIST), 1);
164 cfg->swipe4_up_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4UpButton", DEFAULT_SWIPE4_UP_BTN), 0, 32);
165 cfg->swipe4_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4DownButton", DEFAULT_SWIPE4_DN_BTN), 0, 32);
166 cfg->swipe4_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4LeftButton", DEFAULT_SWIPE4_LT_BTN), 0, 32);
167 cfg->swipe4_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4RightButton", DEFAULT_SWIPE4_RT_BTN), 0, 32);
168 cfg->scale_dist = MAXVAL(xf86SetIntOption(opts, "ScaleDistance", DEFAULT_SCALE_DIST), 1);
169 cfg->scale_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleUpButton", DEFAULT_SCALE_UP_BTN), 0, 32);
170 cfg->scale_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleDownButton", DEFAULT_SCALE_DN_BTN), 0, 32);
171 cfg->rotate_dist = MAXVAL(xf86SetIntOption(opts, "RotateDistance", DEFAULT_ROTATE_DIST), 1);
172 cfg->rotate_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateLeftButton", DEFAULT_ROTATE_LT_BTN), 0, 32);
173 cfg->rotate_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateRightButton", DEFAULT_ROTATE_RT_BTN), 0, 23);
174 cfg->drag_enable = xf86SetBoolOption(opts, "TapDragEnable", DEFAULT_DRAG_ENABLE);
175 cfg->drag_timeout = MAXVAL(xf86SetIntOption(opts, "TapDragTime", DEFAULT_DRAG_TIMEOUT), 1);
176 cfg->drag_wait = MAXVAL(xf86SetIntOption(opts, "TapDragWait", DEFAULT_DRAG_WAIT), 0);
177 cfg->drag_dist = MAXVAL(xf86SetIntOption(opts, "TapDragDist", DEFAULT_DRAG_DIST), 0);
178 cfg->axis_x_invert = xf86SetBoolOption(opts, "AxisXInvert", DEFAULT_AXIS_X_INVERT);
179 cfg->axis_y_invert = xf86SetBoolOption(opts, "AxisYInvert", DEFAULT_AXIS_Y_INVERT);
180 cfg->sensitivity = MAXVAL(xf86SetRealOption(opts, "Sensitivity", DEFAULT_SENSITIVITY), 0);