aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>2008-09-23 14:54:23 +0000
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>2008-09-23 14:54:23 +0000
commitda211e9ba293f74a94d792489da5c58eadf7a754 (patch)
treecc2babdb3a9d653fbf2df729b01724d2e38c92d5
parent35bad2d96724bff42ef73e674dcb7751533e7a03 (diff)
downloadvaadin-framework-da211e9ba293f74a94d792489da5c58eadf7a754.tar.gz
vaadin-framework-da211e9ba293f74a94d792489da5c58eadf7a754.zip
Fixes #2077: Button-click may be losed if button moves while clicking
svn changeset:5488/svn branch:trunk
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java
index 2d0c569daa..e2ca73e58c 100644
--- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java
+++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java
@@ -30,6 +30,8 @@ public class IButton extends Button implements Paintable {
private Icon icon;
+ private boolean clickPending;
+
public IButton() {
setStyleName(CLASSNAME);
@@ -49,6 +51,8 @@ public class IButton extends Button implements Paintable {
}
});
sinkEvents(ITooltip.TOOLTIP_EVENTS);
+ sinkEvents(Event.ONMOUSEDOWN);
+ sinkEvents(Event.ONMOUSEUP);
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
@@ -123,6 +127,23 @@ public class IButton extends Button implements Paintable {
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
+
+ // Handle special-case where the button is moved from under mouse
+ // while clicking it. In this case mouse leaves the button without
+ // moving.
+ if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {
+ clickPending = true;
+ }
+ if (DOM.eventGetType(event) == Event.ONMOUSEMOVE) {
+ clickPending = false;
+ }
+ if (DOM.eventGetType(event) == Event.ONMOUSEOUT) {
+ if (clickPending) {
+ click();
+ }
+ clickPending = false;
+ }
+
if (client != null) {
client.handleTooltipEvent(event, this);
}