summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Chandler Paul <thatslyude@gmail.com>2014-03-10 18:25:20 -0400
committerPeter Hutterer <peter.hutterer@who-t.net>2014-04-30 12:54:00 +1000
commit8732f7b5c16aaba1df4b2429804d02c2742bdf59 (patch)
tree1288f100a9b17d0e99d1d8a05e39d5e5951ac454
parent1e08fbf8a71b5958ac1765c889b5101e62fad20f (diff)
Replace is_inside_anybutton_area with current_button_area
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 9a419ba01c53a38b4b601f4415801fca29a2b4e2)
-rw-r--r--src/synaptics.c27
-rw-r--r--src/synapticsstr.h3
2 files changed, 18 insertions, 12 deletions
diff --git a/src/synaptics.c b/src/synaptics.c
index 4b74f7c..276a0fc 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1017,7 +1017,7 @@ SynapticsReset(SynapticsPrivate * priv)
priv->finger_state = FS_UNTOUCHED;
priv->last_motion_millis = 0;
priv->clickpad_click_millis = 0;
- priv->inside_button_area = FALSE;
+ priv->last_button_area = NO_BUTTON_AREA;
priv->tap_state = TS_START;
priv->tap_button = 0;
priv->tap_button_state = TBS_BUTTON_UP;
@@ -1560,12 +1560,15 @@ is_inside_top_or_bottom_button_area(SynapticsParameters * para, int offset,
return inside_area;
}
-static Bool
-is_inside_anybutton_area(SynapticsParameters * para, int x, int y)
+static enum SoftButtonAreas
+current_button_area(SynapticsParameters * para, int x, int y)
{
- return
- is_inside_top_or_bottom_button_area(para, BOTTOM_BUTTON_AREA, x, y) ||
- is_inside_top_or_bottom_button_area(para, TOP_BUTTON_AREA, x, y);
+ if (is_inside_top_or_bottom_button_area(para, BOTTOM_BUTTON_AREA, x, y))
+ return BOTTOM_BUTTON_AREA;
+ else if (is_inside_top_or_bottom_button_area(para, TOP_BUTTON_AREA, x, y))
+ return TOP_BUTTON_AREA;
+ else
+ return NO_BUTTON_AREA;
}
static CARD32
@@ -3097,13 +3100,15 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
/* Ignore motion *starting* inside softbuttonareas */
if (priv->finger_state < FS_TOUCHED)
- priv->inside_button_area = is_inside_anybutton_area(para, hw->x, hw->y);
- /* If we already have a finger down, clear inside_button_area if it goes
+ priv->last_button_area = current_button_area(para, hw->x, hw->y);
+ /* If we already have a finger down, clear last_button_area if it goes
outside of the softbuttonareas */
- else if (priv->inside_button_area && !is_inside_anybutton_area(para, hw->x, hw->y))
- priv->inside_button_area = FALSE;
+ else if (priv->last_button_area != NO_BUTTON_AREA &&
+ current_button_area(para, hw->x, hw->y) == NO_BUTTON_AREA)
+ priv->last_button_area = NO_BUTTON_AREA;
- ignore_motion = !using_cumulative_coords && priv->inside_button_area;
+ ignore_motion =
+ !using_cumulative_coords && priv->last_button_area != NO_BUTTON_AREA;
/* these two just update hw->left, right, etc. */
update_hw_button_state(pInfo, hw, now, &delay);
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index fe4a8af..b8a3492 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -150,6 +150,7 @@ enum TouchpadModel {
};
enum SoftButtonAreas {
+ NO_BUTTON_AREA = -1,
BOTTOM_BUTTON_AREA = 0,
BOTTOM_RIGHT_BUTTON_AREA = 0,
BOTTOM_MIDDLE_BUTTON_AREA = 1,
@@ -264,7 +265,7 @@ struct _SynapticsPrivateRec {
Bool prev_up; /* Previous up button value, for double click emulation */
enum FingerState finger_state; /* previous finger state */
CARD32 last_motion_millis; /* time of the last motion */
- Bool inside_button_area; /* Inside button area (ignore motion) */
+ enum SoftButtonAreas last_button_area; /* Last button area we were in */
int clickpad_click_millis; /* Time of last clickpad click */
enum TapState tap_state; /* State of tap processing */