}
if (emulate) {
- int pos = -1;
+ int try_zone;
+ int pos;
if (cfg->button_zones && earliest >= 0) {
pos = ms->touch[earliest].x;
+ try_zone = 1;
+ }
+ if (cfg->bottom_edge_zones) {
+ int latest_bottom = -1;
+ foreach_bit(i, ms->touch_used) {
+ if (!GETBIT(ms->touch[i].state, MT_BOTTOM_EDGE))
+ continue;
+ if (GETBIT(ms->touch[i].state, MT_PALM) && cfg->ignore_palm)
+ continue;
+ /* we deliberately don't ignore thumbs for bottom button zones */
+
+ if (latest_bottom == -1 || timercmp(&ms->touch[i].down, &ms->touch[latest_bottom].down, >))
+ latest_bottom = i;
+ }
+ if (latest_bottom >= 0) {
+ pos = ms->touch[latest_bottom].x;
+ try_zone = 1;
+ }
}
- if (pos >= 0) {
+ if (try_zone) {
int zones, left, right;
double width;
+ pos -= cfg->pad_xmin;
+
zones = 0;
if (cfg->button_1touch > 0)
zones++;
if (zones > 0) {
width = ((double)cfg->pad_width)/((double)zones);
#ifdef DEBUG_GESTURES
- xf86Msg(X_INFO, "buttons_update: pad width %d, zones %d, zone width %f, x %d\n",
- cfg->pad_width, zones, width, pos);
+ xf86Msg(X_INFO, "buttons_update: pad width %d (min %d), zones %d, zone width %f, x %d\n",
+ cfg->pad_width, cfg->pad_xmin, zones, width, pos);
#endif
for (i = 0; i < zones; i++) {
left = width*i;
{
if ((gs->move_type == GS_MOVE || !timercmp(&gs->time, &gs->move_wait, <)) && (dx != 0 || dy != 0)) {
if (trigger_drag_start(gs, cfg, dx, dy)) {
- gs->move_dx = (int)(dx*cfg->sensitivity);
- gs->move_dy = (int)(dy*cfg->sensitivity);
+ gs->move_dx = (int)(dx*cfg->sensitivity_big);
+ gs->move_dy = (int)(dy*cfg->sensitivity_big);
gs->move_type = GS_MOVE;
gs->move_dist = 0;
gs->move_dir = TR_NONE;