Example usage for com.google.gwt.user.client Event ONLOSECAPTURE

List of usage examples for com.google.gwt.user.client Event ONLOSECAPTURE

Introduction

In this page you can find the example usage for com.google.gwt.user.client Event ONLOSECAPTURE.

Prototype

int ONLOSECAPTURE

To view the source code for com.google.gwt.user.client Event ONLOSECAPTURE.

Click Source Link

Document

Fired when an element that has mouse capture loses it.

Usage

From source file:asquare.gwt.debug.client.DebugUtil.java

License:Apache License

/**
 * Renders an event bitmask as a human readable String. 
 * /*from w w w  .j  av a 2s . c  o m*/
 * @param eventMask
 * @return a String describing the events, or "" if <code>eventMask</code> is <code>0</code>
 */
public static String prettyPrintEventMask(int eventMask) {
    StringBuffer result = new StringBuffer();
    if ((eventMask & Event.ONBLUR) != 0) {
        result.append("blur ");
    }
    if ((eventMask & Event.ONCHANGE) != 0) {
        result.append("change ");
    }
    if ((eventMask & Event.ONCLICK) != 0) {
        result.append("click ");
    }
    if ((eventMask & Event.ONCONTEXTMENU) != 0) {
        result.append("contextmenu ");
    }
    if ((eventMask & Event.ONDBLCLICK) != 0) {
        result.append("dblclick ");
    }
    if ((eventMask & Event.ONERROR) != 0) {
        result.append("error ");
    }
    if ((eventMask & Event.ONFOCUS) != 0) {
        result.append("focus ");
    }
    if ((eventMask & Event.ONKEYDOWN) != 0) {
        result.append("keydown ");
    }
    if ((eventMask & Event.ONKEYPRESS) != 0) {
        result.append("keypress ");
    }
    if ((eventMask & Event.ONKEYUP) != 0) {
        result.append("keyup ");
    }
    if ((eventMask & Event.ONLOAD) != 0) {
        result.append("load ");
    }
    if ((eventMask & Event.ONLOSECAPTURE) != 0) {
        result.append("losecapture ");
    }
    if ((eventMask & Event.ONMOUSEDOWN) != 0) {
        result.append("mousedown ");
    }
    if ((eventMask & Event.ONMOUSEMOVE) != 0) {
        result.append("mousemove ");
    }
    if ((eventMask & Event.ONMOUSEOUT) != 0) {
        result.append("mouseout ");
    }
    if ((eventMask & Event.ONMOUSEOVER) != 0) {
        result.append("mouseover ");
    }
    if ((eventMask & Event.ONMOUSEUP) != 0) {
        result.append("mouseup ");
    }
    if ((eventMask & Event.ONSCROLL) != 0) {
        result.append("scroll ");
    }
    return result.toString();
}

From source file:asquare.gwt.debug.client.DebugUtil.java

License:Apache License

/**
 * Creates a human readable String describing the specified event.
 * /*  w w  w.j a va 2  s.c o m*/
 * @param event an {@link Event}
 * @return a String describing the <code>event</code>, or
 *         <code>"null"</code> if <code>event</code> is null
 */
public static String prettyPrintEvent(Event event) {
    if (event == null)
        return String.valueOf(event);

    switch (DOM.eventGetType(event)) {
    case Event.ONKEYDOWN:
        return "event[type=onKeyDown," + createKeyString(event) + "]";

    case Event.ONKEYUP:
        return "event[type=onKeyUp," + createKeyString(event) + "]";

    case Event.ONKEYPRESS:
        return "event[type=onKeyPress," + createKeyString(event) + "]";

    case Event.ONCHANGE:
        return "event[type=onChange,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONFOCUS:
        return "event[type=onFocus,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONBLUR:
        return "event[type=onBlur,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONCLICK:
        return "event[type=onClick,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONDBLCLICK:
        return "event[type=onDblClick,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONERROR:
        return "event[type=onError,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONLOAD:
        return "event[type=onLoad,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONLOSECAPTURE:
        return "event[type=onLoseCapture,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    case Event.ONMOUSEDOWN:
        return "event[type=onMouseDown," + createMouseString(event) + "]";

    case Event.ONMOUSEUP:
        return "event[type=onMouseUp," + createMouseString(event) + "]";

    case Event.ONMOUSEOVER:
        return "event[type=onMouseOver," + createMouseString(event) + "]";

    case Event.ONMOUSEOUT:
        return "event[type=onMouseOut," + createMouseString(event) + "]";

    case Event.ONMOUSEMOVE:
        return "event[type=onMouseMove," + createMouseString(event) + "]";

    case Event.ONMOUSEWHEEL:
        return "event[type=onMouseWheel," + createMouseString(event) + "]";

    case Event.ONSCROLL:
        return "event[type=onScroll,target=" + getTagName(DOM.eventGetTarget(event)) + "]";

    default:
        return DOM.eventToString(event);
    }
}

From source file:com.cgxlib.xq.client.plugins.Events.java

License:Apache License

/**
 * Execute all handlers and behaviors attached to the matched elements for the given event types.
 * <p/>/*from  ww w .  j a v  a2  s . co  m*/
 * Different event types can be passed joining these using the or bit wise operator.
 * <p/>
 * For keyboard events you can pass a second parameter which represents the key-code of the pushed
 * key.
 * <p/>
 * Example: fire(Event.ONCLICK | Event.ONFOCUS) Example: fire(Event.ONKEYDOWN. 'a');
 */
public Events trigger(int eventbits, int... keys) {
    if ((eventbits | Event.ONBLUR) == Event.ONBLUR)
        dispatchEvent(document.createBlurEvent());
    if ((eventbits | Event.ONCHANGE) == Event.ONCHANGE)
        dispatchEvent(document.createChangeEvent());
    if ((eventbits | Event.ONCLICK) == Event.ONCLICK)
        dispatchEvent(document.createClickEvent(0, 0, 0, 0, 0, false, false, false, false));
    if ((eventbits | Event.ONDBLCLICK) == Event.ONDBLCLICK)
        dispatchEvent(document.createDblClickEvent(0, 0, 0, 0, 0, false, false, false, false));
    if ((eventbits | Event.ONFOCUS) == Event.ONFOCUS)
        dispatchEvent(document.createFocusEvent());
    if ((eventbits | Event.ONKEYDOWN) == Event.ONKEYDOWN)
        dispatchEvent(document.createKeyDownEvent(false, false, false, false, keys[0]));
    if ((eventbits | Event.ONKEYPRESS) == Event.ONKEYPRESS)
        dispatchEvent(document.createKeyPressEvent(false, false, false, false, keys[0], 0));
    if ((eventbits | Event.ONKEYUP) == Event.ONKEYUP)
        dispatchEvent(document.createKeyUpEvent(false, false, false, false, keys[0]));
    if ((eventbits | Event.ONLOSECAPTURE) == Event.ONLOSECAPTURE)
        triggerHtmlEvent("losecapture");
    if ((eventbits | Event.ONMOUSEDOWN) == Event.ONMOUSEDOWN)
        dispatchEvent(document.createMouseDownEvent(0, 0, 0, 0, 0, false, false, false, false,
                NativeEvent.BUTTON_LEFT));
    if ((eventbits | Event.ONMOUSEMOVE) == Event.ONMOUSEMOVE)
        dispatchEvent(document.createMouseMoveEvent(0, 0, 0, 0, 0, false, false, false, false,
                NativeEvent.BUTTON_LEFT));
    if ((eventbits | Event.ONMOUSEOUT) == Event.ONMOUSEOUT)
        dispatchEvent(document.createMouseOutEvent(0, 0, 0, 0, 0, false, false, false, false,
                NativeEvent.BUTTON_LEFT, null));
    if ((eventbits | Event.ONMOUSEOVER) == Event.ONMOUSEOVER)
        dispatchEvent(document.createMouseOverEvent(0, 0, 0, 0, 0, false, false, false, false,
                NativeEvent.BUTTON_LEFT, null));
    if ((eventbits | Event.ONMOUSEUP) == Event.ONMOUSEUP)
        dispatchEvent(document.createMouseUpEvent(0, 0, 0, 0, 0, false, false, false, false,
                NativeEvent.BUTTON_LEFT));
    if ((eventbits | Event.ONSCROLL) == Event.ONSCROLL)
        dispatchEvent(document.createScrollEvent());
    if ((eventbits | Event.ONERROR) == Event.ONERROR)
        dispatchEvent(document.createErrorEvent());
    if ((eventbits | Event.ONMOUSEWHEEL) == Event.ONMOUSEWHEEL)
        dispatchEvent(document.createMouseEvent("mousewheel", true, true, 0, 0, 0, 0, 0, false, false, false,
                false, NativeEvent.BUTTON_LEFT, null));
    return this;
}

From source file:com.haulmont.cuba.web.toolkit.ui.client.jqueryfileupload.CubaFileUploadProgressWindow.java

License:Apache License

protected void constructDOM() {
    setStyleName(CLASSNAME);//ww  w . jav  a 2  s.  co m

    topTabStop = DOM.createDiv();
    topTabStop.setTabIndex(0);

    header = DOM.createDiv();
    header.setClassName(CLASSNAME + "-outerheader");

    headerText = DOM.createDiv();
    headerText.setClassName(CLASSNAME + "-header");

    contents = DOM.createDiv();
    contents.setClassName(CLASSNAME + "-contents");

    footer = DOM.createDiv();
    footer.setClassName(CLASSNAME + "-footer");

    resizeBox = DOM.createDiv();
    resizeBox.setClassName(CLASSNAME + "-resizebox");

    closeBox = DOM.createDiv();
    closeBox.setClassName(CLASSNAME + "-closebox");
    closeBox.setTabIndex(0);

    DOM.appendChild(footer, resizeBox);

    bottomTabStop = DOM.createDiv();
    bottomTabStop.setTabIndex(0);

    wrapper = DOM.createDiv();
    wrapper.setClassName(CLASSNAME + "-wrap");

    DOM.appendChild(wrapper, topTabStop);
    DOM.appendChild(wrapper, header);
    DOM.appendChild(header, closeBox);
    DOM.appendChild(header, headerText);
    DOM.appendChild(wrapper, contents);
    DOM.appendChild(wrapper, footer);
    DOM.appendChild(wrapper, bottomTabStop);
    DOM.appendChild(super.getContainerElement(), wrapper);

    sinkEvents(Event.ONDBLCLICK | Event.MOUSEEVENTS | Event.TOUCHEVENTS | Event.ONCLICK | Event.ONLOSECAPTURE);

    currentFileLabel = new VLabel();
    currentFileLabel.addStyleName("upload-file-label");
    currentFileLabel.setWidth("100%");

    progressBar = new VProgressBar();
    progressBar.addStyleName("upload-progressbar");
    progressBar.setIndeterminate(false);
    progressBar.setState(0);
    progressBar.setWidth("100%");

    cancelButton = new VButton();
    cancelButton.addStyleName("upload-cancel-button");
    cancelButton.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            closeWindow();
        }
    });

    contentPanel = new SimpleFocusablePanel();
    contentPanel.setStyleName("content-pane");
    contentPanel.addKeyDownHandler(this);
    contentPanel.addKeyUpHandler(this);

    setWidget(contentPanel);

    final FlowPanel verticalPanel = new FlowPanel();
    verticalPanel.setStyleName("vertical-panel");
    verticalPanel.addStyleName("v-widget");
    verticalPanel.addStyleName("v-has-width");
    verticalPanel.addStyleName("v-has-height");

    verticalPanel.add(currentFileLabel);
    verticalPanel.add(progressBar);
    verticalPanel.add(cancelButton);

    contentPanel.setWidget(verticalPanel);

    // do some calculations for window layout
    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
        @Override
        public void execute() {
            Style contentStyle = contents.getStyle();

            ComputedStyle headerCs = new ComputedStyle(header);
            String headerHeight = headerCs.getProperty("height");
            contentStyle.setProperty("paddingTop", headerHeight);
            contentStyle.setProperty("marginTop", "-" + headerHeight);

            ComputedStyle footerCs = new ComputedStyle(footer);
            String footerHeight = footerCs.getProperty("height");
            contentStyle.setProperty("paddingBottom", footerHeight);
            contentStyle.setProperty("marginBottom", "-" + footerHeight);
        }
    });

    // Make the closebox accessible for assistive devices
    Roles.getButtonRole().set(closeBox);
    Roles.getButtonRole().setAriaLabelProperty(closeBox, "close button");

    // Provide the title to assistive devices
    AriaHelper.ensureHasId(headerText);
    Roles.getDialogRole().setAriaLabelledbyProperty(getElement(), Id.of(headerText));

    // Handlers to Prevent tab to leave the window
    // and backspace to cause browser navigation
    topEventBlocker = new Event.NativePreviewHandler() {
        @Override
        public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
            NativeEvent nativeEvent = event.getNativeEvent();
            if (nativeEvent.getEventTarget().cast() == topTabStop
                    && nativeEvent.getKeyCode() == KeyCodes.KEY_TAB && nativeEvent.getShiftKey()) {
                nativeEvent.preventDefault();
            }
            if (nativeEvent.getEventTarget().cast() == topTabStop
                    && nativeEvent.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
                nativeEvent.preventDefault();
            }
        }
    };

    bottomEventBlocker = new Event.NativePreviewHandler() {
        @Override
        public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
            NativeEvent nativeEvent = event.getNativeEvent();
            if (nativeEvent.getEventTarget().cast() == bottomTabStop
                    && nativeEvent.getKeyCode() == KeyCodes.KEY_TAB && !nativeEvent.getShiftKey()) {
                nativeEvent.preventDefault();
            }
            if (nativeEvent.getEventTarget().cast() == bottomTabStop
                    && nativeEvent.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
                nativeEvent.preventDefault();
            }
        }
    };
}

From source file:com.haulmont.cuba.web.toolkit.ui.client.jqueryfileupload.CubaFileUploadProgressWindow.java

License:Apache License

private void onResizeEvent(Event event) {
    if (resizable && WidgetUtil.isTouchEventOrLeftMouseButton(event)) {
        switch (event.getTypeInt()) {
        case Event.ONMOUSEDOWN:
        case Event.ONTOUCHSTART:
            showResizingCurtain();//from www .j av a  2 s . c om
            if (BrowserInfo.get().isIE()) {
                resizeBox.getStyle().setVisibility(Style.Visibility.HIDDEN);
            }
            resizing = true;
            startX = WidgetUtil.getTouchOrMouseClientX(event);
            startY = WidgetUtil.getTouchOrMouseClientY(event);
            origW = getElement().getOffsetWidth();
            origH = getElement().getOffsetHeight();
            DOM.setCapture(getElement());
            event.preventDefault();
            break;
        case Event.ONMOUSEUP:
        case Event.ONTOUCHEND:
            setSize(event);
        case Event.ONTOUCHCANCEL:
            DOM.releaseCapture(getElement());
        case Event.ONLOSECAPTURE:
            hideResizingCurtain();
            if (BrowserInfo.get().isIE()) {
                resizeBox.getStyle().clearVisibility();
            }
            resizing = false;
            break;
        case Event.ONMOUSEMOVE:
        case Event.ONTOUCHMOVE:
            if (resizing) {
                setSize(event);
                event.preventDefault();
            }
            break;
        default:
            event.preventDefault();
            break;
        }
    }
}

From source file:com.haulmont.cuba.web.toolkit.ui.client.jqueryfileupload.CubaFileUploadProgressWindow.java

License:Apache License

private void onDragEvent(Event event) {
    if (!WidgetUtil.isTouchEventOrLeftMouseButton(event)) {
        return;/*from   ww  w .  ja  v a 2  s  .co m*/
    }

    switch (DOM.eventGetType(event)) {
    case Event.ONTOUCHSTART:
        if (event.getTouches().length() > 1) {
            return;
        }
    case Event.ONMOUSEDOWN:
        beginMovingWindow(event);
        break;
    case Event.ONMOUSEUP:
    case Event.ONTOUCHEND:
    case Event.ONTOUCHCANCEL:
    case Event.ONLOSECAPTURE:
        stopMovingWindow();
        break;
    case Event.ONMOUSEMOVE:
    case Event.ONTOUCHMOVE:
        moveWindow(event);
        break;
    default:
        break;
    }
}

From source file:com.travelsky.ebuild.hawkeye.client.ui.widget.AbstractCustomButton.java

License:Apache License

@Override
public void onBrowserEvent(Event event) {
    // Should not act on button if disabled.
    if (isEnabled() == false) {
        // This can happen when events are bubbled up from non-disabled children
        return;// w ww. j a  va 2  s .c o  m
    }

    int type = DOM.eventGetType(event);
    switch (type) {
    case Event.ONCLICK:
        // If clicks are currently disallowed, keep it from bubbling or being
        // passed to the superclass.
        if (!allowClick) {
            event.stopPropagation();
            return;
        }
        break;
    case Event.ONMOUSEDOWN:
        if (event.getButton() == Event.BUTTON_LEFT) {
            setFocus(true);
            onClickStart();
            DOM.setCapture(getElement());
            isCapturing = true;
            // Prevent dragging (on some browsers);
            DOM.eventPreventDefault(event);
        }
        break;
    case Event.ONMOUSEUP:
        if (isCapturing) {
            isCapturing = false;
            DOM.releaseCapture(getElement());
            if (isHovering() && event.getButton() == Event.BUTTON_LEFT) {
                onClick();
            }
        }
        break;
    case Event.ONMOUSEMOVE:
        if (isCapturing) {
            // Prevent dragging (on other browsers);
            DOM.eventPreventDefault(event);
        }
        break;
    case Event.ONMOUSEOUT:
        Element to = DOM.eventGetToElement(event);
        if (DOM.isOrHasChild(getElement(), DOM.eventGetTarget(event))
                && (to == null || !DOM.isOrHasChild(getElement(), to))) {
            if (isCapturing) {
                onClickCancel();
            }
            setHovering(false);
        }
        break;
    case Event.ONMOUSEOVER:
        if (DOM.isOrHasChild(getElement(), DOM.eventGetTarget(event))) {
            setHovering(true);
            if (isCapturing) {
                onClickStart();
            }
        }
        break;
    case Event.ONBLUR:
        if (isFocusing) {
            isFocusing = false;
            onClickCancel();
        }
        break;
    case Event.ONLOSECAPTURE:
        if (isCapturing) {
            isCapturing = false;
            onClickCancel();
        }
        break;
    }

    super.onBrowserEvent(event);

    // Synthesize clicks based on keyboard events AFTER the normal key handling.
    if ((event.getTypeInt() & Event.KEYEVENTS) != 0) {
        char keyCode = (char) DOM.eventGetKeyCode(event);
        switch (type) {
        case Event.ONKEYDOWN:
            if (keyCode == ' ') {
                isFocusing = true;
                onClickStart();
            }
            break;
        case Event.ONKEYUP:
            if (isFocusing && keyCode == ' ') {
                isFocusing = false;
                onClick();
            }
            break;
        case Event.ONKEYPRESS:
            if (keyCode == '\n' || keyCode == '\r') {
                onClickStart();
                onClick();
            }
            break;
        }
    }
}

From source file:com.vaadin.addon.spreadsheet.client.SheetEventListener.java

protected void listenToEventsOnPane(Element sheetElement) {
    Event.sinkEvents(sheetElement,
            Event.ONSCROLL | Event.ONMOUSEDOWN | Event.ONMOUSEMOVE | Event.ONMOUSEOVER | Event.ONMOUSEOUT
                    | Event.ONMOUSEUP | Event.TOUCHEVENTS | Event.ONLOSECAPTURE | Event.ONCLICK
                    | Event.ONDBLCLICK | Event.ONKEYPRESS | Event.ONKEYDOWN | Event.FOCUSEVENTS);
    Event.setEventListener(sheetElement, this);
}

From source file:com.vaadin.addon.spreadsheet.client.SheetEventListener.java

private void onSelectingCellsEvent(Event event) {
    switch (event.getTypeInt()) {
    case Event.ONTOUCHEND:
    case Event.ONTOUCHCANCEL:
        widget.onSheetMouseDown(event);/*ww  w  .j a  v a  2s  .  co m*/
    case Event.ONMOUSEUP:
    case Event.ONLOSECAPTURE:
        widget.stoppedSelectingCellsWithDrag(event);
        break;
    case Event.ONMOUSEMOVE:
        widget.onMouseMoveWhenSelectingCells(event);
        break;
    default:
        break;
    }
}

From source file:com.vaadin.client.ui.VButton.java

License:Apache License

@SuppressWarnings("deprecation")
@Override/* w  ww .j  a  va2 s  . c  o m*/
/*
 * Copy-pasted from GWT CustomButton, some minor modifications done:
 * 
 * -for IE/Opera added CLASSNAME_PRESSED
 * 
 * -event.preventDefault() removed from ONMOUSEDOWN (Firefox won't apply
 * :active styles if it is present)
 * 
 * -Tooltip event handling added
 * 
 * -onload event handler added (for icon handling)
 */
public void onBrowserEvent(Event event) {
    if (DOM.eventGetType(event) == Event.ONLOAD) {
        Util.notifyParentOfSizeChange(this, true);
    }
    // Should not act on button if disabled.
    if (!isEnabled()) {
        // This can happen when events are bubbled up from non-disabled
        // children
        return;
    }

    int type = DOM.eventGetType(event);
    switch (type) {
    case Event.ONCLICK:
        // fix for #14632 - on mobile safari 8, if we press the button long
        // enough, we might get two click events, so we are suppressing
        // second if it is too soon
        boolean isPhantomClickPossible = BrowserInfo.get().isSafari() && BrowserInfo.get().isTouchDevice()
                && BrowserInfo.get().getBrowserMajorVersion() == 8;
        long clickTime = isPhantomClickPossible ? System.currentTimeMillis() : 0;
        // If clicks are currently disallowed or phantom, keep it from
        // bubbling or being passed to the superclass.
        if (disallowNextClick || isPhantomClickPossible && (clickTime - lastClickTime < 100)) { // the maximum
                                                                                                // interval observed
                                                                                                // for phantom click
                                                                                                // is 69, with
                                                                                                // majority under
                                                                                                // 50, so we select
                                                                                                // 100 to be safe
            event.stopPropagation();
            disallowNextClick = false;
            return;
        }
        lastClickTime = clickTime;
        break;
    case Event.ONMOUSEDOWN:
        if (DOM.isOrHasChild(getElement(), DOM.eventGetTarget(event))) {
            // This was moved from mouseover, which iOS sometimes skips.
            // We're certainly hovering at this point, and we don't actually
            // need that information before this point.
            setHovering(true);
        }
        if (event.getButton() == Event.BUTTON_LEFT) {
            // save mouse position to detect movement before synthesizing
            // event later
            mousedownX = event.getClientX();
            mousedownY = event.getClientY();

            disallowNextClick = true;
            clickPending = true;
            setFocus(true);
            DOM.setCapture(getElement());
            isCapturing = true;
            addStyleName(CLASSNAME_PRESSED);

            if (BrowserInfo.get().isIE8() || BrowserInfo.get().isIE9()) {
                /*
                 * We need to prevent the default behavior on these browsers
                 * since user-select is not available.
                 */
                event.preventDefault();
            }
        }
        break;
    case Event.ONMOUSEUP:
        if (isCapturing) {
            isCapturing = false;
            DOM.releaseCapture(getElement());
            if (isHovering() && event.getButton() == Event.BUTTON_LEFT) {
                // Click ok
                disallowNextClick = false;
            }

            removeStyleName(CLASSNAME_PRESSED);

            // Explicitly prevent IE 8 from propagating mouseup events
            // upward (fixes #6753)
            if (BrowserInfo.get().isIE8()) {
                event.stopPropagation();
            }
        }
        break;
    case Event.ONMOUSEMOVE:
        clickPending = false;
        if (isCapturing) {
            // Prevent dragging (on other browsers);
            DOM.eventPreventDefault(event);
        }
        break;
    case Event.ONMOUSEOVER:
        if (isCapturing && isTargetInsideButton(event)) {
            // This means a mousedown happened on the button and a mouseup
            // has not happened yet
            setHovering(true);
            addStyleName(CLASSNAME_PRESSED);
        }
        break;
    case Event.ONMOUSEOUT:
        if (isTargetInsideButton(event)) {
            if (clickPending && Math.abs(mousedownX - event.getClientX()) < MOVE_THRESHOLD
                    && Math.abs(mousedownY - event.getClientY()) < MOVE_THRESHOLD) {
                onClick();
                break;
            }
            clickPending = false;
            setHovering(false);
            removeStyleName(CLASSNAME_PRESSED);
        }
        break;
    case Event.ONBLUR:
        if (isFocusing) {
            isFocusing = false;
        }
        break;
    case Event.ONLOSECAPTURE:
        if (isCapturing) {
            isCapturing = false;
        }
        break;
    }

    super.onBrowserEvent(event);

    // Synthesize clicks based on keyboard events AFTER the normal key
    // handling.
    if ((event.getTypeInt() & Event.KEYEVENTS) != 0) {
        switch (type) {
        case Event.ONKEYDOWN:
            // Stop propagation when the user starts pressing a button that
            // we are handling to prevent actions from getting triggered
            if (event.getKeyCode() == 32 /* space */) {
                isFocusing = true;
                event.preventDefault();
                event.stopPropagation();
            } else if (event.getKeyCode() == KeyCodes.KEY_ENTER) {
                event.stopPropagation();
            }
            break;
        case Event.ONKEYUP:
            if (isFocusing && event.getKeyCode() == 32 /* space */) {
                isFocusing = false;
                onClick();
                event.stopPropagation();
                event.preventDefault();
            }
            break;
        case Event.ONKEYPRESS:
            if (event.getKeyCode() == KeyCodes.KEY_ENTER) {
                onClick();
                event.stopPropagation();
                event.preventDefault();
            }
            break;
        }
    }
}