summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Englund <marc.englund@itmill.com>2010-10-06 11:31:04 +0000
committerMarc Englund <marc.englund@itmill.com>2010-10-06 11:31:04 +0000
commitf1801c0089e467c52247ba3238e66ac196fb7cc4 (patch)
tree8be56e55873d810bbaa4da9c448e3cb8bc5ad154 /src
parent26743eb8ac59a975d47fadfb7f61f9e80f69f550 (diff)
downloadvaadin-framework-f1801c0089e467c52247ba3238e66ac196fb7cc4.tar.gz
vaadin-framework-f1801c0089e467c52247ba3238e66ac196fb7cc4.zip
Improves the click-moved-button-magic by checking for mouse movement using cursor position, since onmousemove is not always triggered. Fixes #5680 The original hack & reasons described in #2077
svn changeset:15413/svn branch:6.4
Diffstat (limited to 'src')
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VButton.java14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VButton.java b/src/com/vaadin/terminal/gwt/client/ui/VButton.java
index d537997fbc..5a5eb0eda6 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VButton.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VButton.java
@@ -34,6 +34,11 @@ public class VButton extends FocusWidget implements Paintable, ClickHandler,
public static final String CLASSNAME = "v-button";
private static final String CLASSNAME_PRESSED = "v-pressed";
+ // mouse movement is checked before synthesizing click event on mouseout
+ protected static int MOVE_THRESHOLD = 3;
+ protected int mousedownX = 0;
+ protected int mousedownY = 0;
+
protected String id;
protected ApplicationConnection client;
@@ -204,6 +209,11 @@ public class VButton extends FocusWidget implements Paintable, ClickHandler,
break;
case Event.ONMOUSEDOWN:
if (event.getButton() == Event.BUTTON_LEFT) {
+ // save mouse position to detect movement before synthesizing
+ // event later
+ mousedownX = event.getClientX();
+ mousedownY = event.getClientY();
+
disallowNextClick = true;
clickPending = true;
setFocus(true);
@@ -240,7 +250,9 @@ public class VButton extends FocusWidget implements Paintable, ClickHandler,
Element to = event.getRelatedTarget();
if (getElement().isOrHasChild(DOM.eventGetTarget(event))
&& (to == null || !getElement().isOrHasChild(to))) {
- if (clickPending) {
+ if (clickPending
+ && Math.abs(mousedownX - event.getClientX()) < MOVE_THRESHOLD
+ && Math.abs(mousedownY - event.getClientY()) < MOVE_THRESHOLD) {
onClick();
break;
}