touchpad: Enlarge topbutton area a bit while the touchpad is disabled
authorHans de Goede <hdegoede@redhat.com>
Wed, 17 Sep 2014 13:35:30 +0000 (15:35 +0200)
committerPeter Hutterer <peter.hutterer@who-t.net>
Fri, 19 Sep 2014 05:48:52 +0000 (15:48 +1000)
Make it easier to hit the topbutton area when the touchpad is disabled,
normally we don't want to make the topbutton area too big, so as to not
interfere with normal touchpad operation, but when disabled we have no such
worries.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/evdev-mt-touchpad-buttons.c
src/evdev-mt-touchpad.c
src/evdev-mt-touchpad.h

index fae6a13e037b0114d0df2e2aa8a14b25adbab1a9..21417ab9fd2e27fb2df68d3cbde53a4618f5c638 100644 (file)
@@ -496,7 +496,8 @@ tp_release_all_buttons(struct tp_dispatch *tp,
 
 void
 tp_init_softbuttons(struct tp_dispatch *tp,
-                   struct evdev_device *device)
+                   struct evdev_device *device,
+                   double topbutton_size_mult)
 {
        int width, height;
        const struct input_absinfo *absinfo_x, *absinfo_y;
@@ -524,14 +525,18 @@ tp_init_softbuttons(struct tp_dispatch *tp,
        tp->buttons.bottom_area.rightbutton_left_edge = width/2 + xoffset;
 
        if (tp->buttons.has_topbuttons) {
-               /* T440s has the top button line 5mm from the top,
-                  event analysis has shown events to start down to ~10mm
-                  from the top - which maps to 15% */
+               /* T440s has the top button line 5mm from the top, event
+                  analysis has shown events to start down to ~10mm from the
+                  top - which maps to 15%.  We allow the caller to enlarge the
+                  area using a multiplier for the touchpad disabled case. */
+               double topsize_mm = 10 * topbutton_size_mult;
+               double topsize_pct = .15 * topbutton_size_mult;
+
                if (yres > 1) {
                        tp->buttons.top_area.bottom_edge =
-                       yoffset + 10 * yres;
+                       yoffset + topsize_mm * yres;
                } else {
-                       tp->buttons.top_area.bottom_edge = height * .15 + yoffset;
+                       tp->buttons.top_area.bottom_edge = height * topsize_pct + yoffset;
                }
                tp->buttons.top_area.rightbutton_left_edge = width * .58 + xoffset;
                tp->buttons.top_area.leftbutton_right_edge = width * .42 + xoffset;
@@ -581,7 +586,7 @@ tp_init_buttons(struct tp_dispatch *tp,
                tp->buttons.use_clickfinger = true;
 
        if (tp->buttons.is_clickpad && !tp->buttons.use_clickfinger) {
-               tp_init_softbuttons(tp, device);
+               tp_init_softbuttons(tp, device, 1.0);
        } else {
                tp->buttons.bottom_area.top_edge = INT_MAX;
                tp->buttons.top_area.bottom_edge = INT_MIN;
index 70a4e40fe7fc2924794fecdfcdd1b152342c6a86..869233308aab5814b6f2661244ec729e524d82e8 100644 (file)
@@ -645,6 +645,8 @@ tp_suspend(struct tp_dispatch *tp, struct evdev_device *device)
         */
        if (tp->buttons.has_topbuttons) {
                evdev_notify_suspended_device(device);
+               /* Enlarge topbutton area while suspended */
+               tp_init_softbuttons(tp, device, 1.5);
        } else {
                evdev_device_suspend(device);
        }
@@ -656,6 +658,8 @@ tp_resume(struct tp_dispatch *tp, struct evdev_device *device)
        if (tp->buttons.has_topbuttons) {
                /* tap state-machine is offline while suspended, reset state */
                tp_clear_state(tp, device);
+               /* restore original topbutton area size */
+               tp_init_softbuttons(tp, device, 1.0);
                evdev_notify_resumed_device(device);
        } else {
                evdev_device_resume(device);
index 3d3932b5b1c3820b5a10e5d28af7cb88060b1de4..107195f332fee2dbae3ebe5607e0cecaa12b1e2c 100644 (file)
@@ -245,7 +245,9 @@ int
 tp_init_buttons(struct tp_dispatch *tp, struct evdev_device *device);
 
 void
-tp_init_softbuttons(struct tp_dispatch *tp, struct evdev_device *device);
+tp_init_softbuttons(struct tp_dispatch *tp,
+                   struct evdev_device *device,
+                   double topbutton_size_mult);
 
 void
 tp_destroy_buttons(struct tp_dispatch *tp);