diff options
author | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2008-09-23 14:54:23 +0000 |
---|---|---|
committer | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2008-09-23 14:54:23 +0000 |
commit | da211e9ba293f74a94d792489da5c58eadf7a754 (patch) | |
tree | cc2babdb3a9d653fbf2df729b01724d2e38c92d5 | |
parent | 35bad2d96724bff42ef73e674dcb7751533e7a03 (diff) | |
download | vaadin-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.java | 21 |
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); } |