From cc4af8eeb0e8f755ecb22982a3a5fb7c72650470 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Wed, 7 Jul 2010 12:15:20 +0000 Subject: [PATCH] Added click listener for sub windows (#5038) Extended test case to test sub windows svn changeset:14139/svn branch:6.4 --- .../terminal/gwt/client/ui/VWindow.java | 31 +++++++++++++++++-- .../components/window/WindowClickEvents.html | 16 +++++++++- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VWindow.java b/src/com/vaadin/terminal/gwt/client/ui/VWindow.java index 288f2fe32c..1c186115b8 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VWindow.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VWindow.java @@ -8,6 +8,9 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.Set; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DeferredCommand; @@ -148,6 +151,16 @@ public class VWindow extends VOverlay implements Container, ScrollListener { private Element wrapper, wrapper2; + private ClickEventHandler clickEventHandler = new ClickEventHandler(this, + VPanel.CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return addDomHandler(handler, type); + } + }; + private boolean visibilityChangesDisabled; public VWindow() { @@ -278,6 +291,8 @@ public class VWindow extends VOverlay implements Container, ScrollListener { } visibilityChangesDisabled = false; + clickEventHandler.handleEventHandlerRegistration(client); + immediate = uidl.hasAttribute("immediate"); setClosable(!uidl.getBooleanAttribute("readonly")); @@ -793,6 +808,8 @@ public class VWindow extends VOverlay implements Container, ScrollListener { @Override public void onBrowserEvent(final Event event) { + boolean bubble = true; + if (event != null) { final int type = event.getTypeInt(); @@ -810,15 +827,15 @@ public class VWindow extends VOverlay implements Container, ScrollListener { if (resizing || resizeBox == target) { onResizeEvent(event); - event.cancelBubble(true); + bubble = false; } else if (target == closeBox) { if (type == Event.ONCLICK && isClosable()) { onCloseClick(); - event.cancelBubble(true); + bubble = false; } } else if (dragging || !DOM.isOrHasChild(contents, target)) { onDragEvent(event); - event.cancelBubble(true); + bubble = false; } else if (type == Event.ONCLICK) { // clicked inside window, ensure to be on top @@ -832,6 +849,14 @@ public class VWindow extends VOverlay implements Container, ScrollListener { Util.focus(contentPanel.getElement()); } } + + if (!bubble) { + event.cancelBubble(true); + } else { + // Super.onBrowserEvent takes care of Handlers added by the + // ClickEventHandler + super.onBrowserEvent(event); + } } private void onCloseClick() { diff --git a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html b/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html index 88e5536ad4..b465b13c93 100644 --- a/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html +++ b/tests/src/com/vaadin/tests/components/window/WindowClickEvents.html @@ -31,7 +31,21 @@ vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0] Click using left on Main window layout - + + mouseClick + vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VWindow[0]/ScrollPanel[0]/VVerticalLayout[0] + 188,16 + + + assertText + vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VLabel[0] + Click using left on Sub window + + + assertText + vaadin=runcomvaadintestscomponentswindowWindowClickEvents::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0] + Click using left on Sub window layout + -- 2.39.5