On Fri, Nov 9, 2012 at 11:43 AM, Aaron Westendorf <span dir="ltr"><<a href="mailto:aaron@agoragames.com" target="_blank">aaron@agoragames.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
---<br>
 src/eventcomm.c |   20 +++++++++++++++++++-<br>
 1 file changed, 19 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/eventcomm.c b/src/eventcomm.c<br>
index b1d5460..09e8a50 100644<br>
--- a/src/eventcomm.c<br>
+++ b/src/eventcomm.c<br>
@@ -652,7 +652,25 @@ EventReadHwState(InputInfoPtr pInfo,<br>
             v = (ev.value ? TRUE : FALSE);<br>
             switch (ev.code) {<br>
             case BTN_LEFT:<br>
-                hw->left = v;<br>
+                /**<br>
+                 * Filter spurious events from the kernel in cases where<br>
+                 * chassis flex causes it to send a button press event.<br>
+                 * Ignore clickpad events if nothing was pressed or using<br>
+                 * !=1 finger with click pressure. There is still a case<br>
+                 * where resting a finger on the pad and a palm press on the<br>
+                 * keyboard rest will trigger an event and that will pass<br>
+                 * pass through this filter. TBD on best course of action to<br>
+                 * filter that out, because we want to recognize press events<br>
+                 * to allow mouse movement, but not register as a click. The<br>
+                 * old FingerPress option seems like the right choice but<br>
+                 * it's been deprecated. Filtering that out could require<br>
+                 * complicated heuristics, so for now do a reasonable job<br>
+                 * by insisting that the pressure be at least the value<br>
+                 * of FingerHigh.<br>
+                 */<br>
+                if (para->clickpad!=1 || (hw->numFingers==1 && hw->z >= para->finger_high)) {<br>
+                  hw->left = v;<br>
+                }<br>
                 break;<br>
             case BTN_RIGHT:<br>
                 hw->right = v;</blockquote><div><br></div><div>It's not 100% clear to me the problem you are facing, but I think I get it. I'll try to restate to verify:</div><div><br></div><div>You are having issues where a button press is occurring when the user isn't actually using the trackpad. You see the issue in your hardware by simply bending the machine in a specific way. You hope that by filtering out button presses when no "touch" is active will resolve the issue.</div>
<div><br></div><div>If that's all correct, then this patch looks like a good approach. However, there is a problem. I own a Dell Mini 1012 netbook with a clickpad. It is trivially easy, and occurs often in normal use, to depress the clickpad button without a "touch" being seen. In fact, I believe one of my original clickpad patches had similar filtering to what you describe, but people complained that their button presses weren't working.</div>
<div><br></div><div>My first inclination is to say that we can't always fix hardware defects in software. If bending your laptop causes a spurious click, then stop bending it :). If you and others feel that this must be fixed, then I think we will either need a blacklist of machines that should *not* be filtered (including the Dell netbook), or we will need a whitelist of machines that *should* be filtered (including your laptop model).</div>
<div><br></div><div>-- Chase</div></div></div>