Browse Source

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.
tags/8.1.0.beta1
Pekka Hyvönen 7 years ago
parent
commit
394299cd4c

+ 6
- 22
client/src/main/java/com/vaadin/client/ui/VButton.java View File

@@ -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 <code>draggable</code> 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)

+ 0
- 11
client/src/main/java/com/vaadin/client/ui/button/ButtonConnector.java View File

@@ -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);
}
}

+ 7
- 3
uitest/src/main/java/com/vaadin/tests/dnd/DraggableButton.java View File

@@ -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<Button> dragSourceExtension = new DragSourceExtension<>(
draggableButton);
dragSourceExtension.setDataTransferText(
@@ -44,7 +47,8 @@ public class DraggableButton extends AbstractTestUIWithLog {
.addDropListener(event -> log(event.getDataTransferText()));

Layout layout = new HorizontalLayout();
layout.addComponents(draggableButton, dropTarget);
layout.addComponents(draggableButton, dropTarget, new Button(
"another button", event -> log("click on another button")));
addComponent(layout);

// Add styling
@@ -62,6 +66,6 @@ public class DraggableButton extends AbstractTestUIWithLog {

@Override
protected String getTestDescription() {
return "Test if Button is draggable";
return "Test if Button is draggable, and it won't steal all other clicks";
}
}

Loading…
Cancel
Save