From 394299cd4cd5cddb08578aa758f927d3b40e3403 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pekka=20Hyv=C3=B6nen?= Date: Wed, 17 May 2017 14:19:50 +0300 Subject: [PATCH] Fix Button as a Html5 DragSource (#9346) * Fix Button as a Html5 DragSourcei It was completely broken, not being clickable, and also preventing anything else from being clicked. --- .../java/com/vaadin/client/ui/VButton.java | 28 ++++--------------- .../client/ui/button/ButtonConnector.java | 11 -------- .../com/vaadin/tests/dnd/DraggableButton.java | 10 +++++-- 3 files changed, 13 insertions(+), 36 deletions(-) diff --git a/client/src/main/java/com/vaadin/client/ui/VButton.java b/client/src/main/java/com/vaadin/client/ui/VButton.java index 3bb6c5a1e8..611eb692cc 100644 --- a/client/src/main/java/com/vaadin/client/ui/VButton.java +++ b/client/src/main/java/com/vaadin/client/ui/VButton.java @@ -207,7 +207,7 @@ public class VButton extends FocusWidget implements ClickHandler { clickPending = true; setFocus(true); DOM.setCapture(getElement()); - isCapturing = isCapturingEnabled(); + isCapturing = true; addStyleName(CLASSNAME_PRESSED); } break; @@ -225,7 +225,7 @@ public class VButton extends FocusWidget implements ClickHandler { break; case Event.ONMOUSEMOVE: clickPending = false; - if (isCapturing) { + if (isCapturing && !isDraggable()) { // Prevent dragging (on other browsers); DOM.eventPreventDefault(event); } @@ -421,29 +421,13 @@ public class VButton extends FocusWidget implements ClickHandler { } /** - * Enables or disables the widget's capturing of mouse events with the mouse - * held down. - * - * @param enabled - * {@literal true} if capturing enabled, {@literal false} - * otherwise + * Returns if this button has been made draggable or not. * - * @since 8.1 - */ - public void setCapturingEnabled(boolean enabled) { - capturingEnabled = enabled; - } - - /** - * Returns if the widget's capturing of mouse events are enabled. - * - * @return {@literal true} if mouse capturing is enabled, {@literal false} + * @return {@literal true} if draggable is enabled, {@literal false} * otherwise - * - * @since 8.1 */ - public boolean isCapturingEnabled() { - return capturingEnabled; + private boolean isDraggable() { + return getElement().getPropertyBoolean("draggable"); } private static native int getHorizontalBorderAndPaddingWidth(Element elem) diff --git a/client/src/main/java/com/vaadin/client/ui/button/ButtonConnector.java b/client/src/main/java/com/vaadin/client/ui/button/ButtonConnector.java index f8e51a5dcc..b0d17465bb 100644 --- a/client/src/main/java/com/vaadin/client/ui/button/ButtonConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/button/ButtonConnector.java @@ -129,15 +129,4 @@ public class ButtonConnector extends AbstractComponentConnector } - @Override - public void onDragSourceAttached() { - // Disable mouse event capturing to make the widget draggable - getWidget().setCapturingEnabled(false); - } - - @Override - public void onDragSourceDetached() { - // Reset mouse event capturing - getWidget().setCapturingEnabled(true); - } } diff --git a/uitest/src/main/java/com/vaadin/tests/dnd/DraggableButton.java b/uitest/src/main/java/com/vaadin/tests/dnd/DraggableButton.java index b154045b54..bd6b86bd54 100644 --- a/uitest/src/main/java/com/vaadin/tests/dnd/DraggableButton.java +++ b/uitest/src/main/java/com/vaadin/tests/dnd/DraggableButton.java @@ -15,6 +15,7 @@ */ package com.vaadin.tests.dnd; +import com.vaadin.annotations.Widgetset; import com.vaadin.server.Page; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUIWithLog; @@ -25,12 +26,14 @@ import com.vaadin.ui.Layout; import com.vaadin.ui.dnd.DragSourceExtension; import com.vaadin.ui.dnd.DropTargetExtension; +@Widgetset("com.vaadin.DefaultWidgetSet") public class DraggableButton extends AbstractTestUIWithLog { @Override protected void setup(VaadinRequest request) { - Button draggableButton = new Button("Draggable Button"); + Button draggableButton = new Button("Draggable Button", + event -> log("clicked draggable button")); DragSourceExtension