почему этот захват правой кнопкой мыши в GWT не работает в IE? - PullRequest
0 голосов
/ 30 июля 2010

Я пытаюсь захватить щелчок правой кнопкой мыши на виджете, чтобы открыть собственное контекстное меню вместо браузера. Есть несколько ссылок на это, но самая популярная здесь немного устарела, хотя некоторые комментарии содержат более свежие фрагменты кода.

Я собрал кусочки, и у меня это работает в Chrome и FF, но не в IE. В IE он не отображает контекстное меню браузера по умолчанию, но он не отображает мое меню. Я просто вхожу в GWT, поэтому я предполагаю, что я не делаю что-то правильно с правильными обработчиками или событиями. Я также использую модуль gwt-graphics, откуда взялся класс Rectangle, который расширяется, на случай, если это уместно.

Вот мой код:

public class RectangleRightClickable extends Rectangle {

public RectangleRightClickable(int x, int y, int width, int height) {
    super(x, y, width, height);
    sinkEvents(Event.ONCONTEXTMENU);
}

public void onBrowserEvent(Event event) {
    GWT.log("onBrowserEvent");
    event.stopPropagation();
    event.preventDefault();
    GWT.log("event type : " + DOM.eventGetType(event));
    switch(DOM.eventGetType(event)) {
    case Event.ONCONTEXTMENU:
        if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) {
            GWT.log("Event.BUTTON_RIGHT", null);
            showMenu();
        }
        break;
    default:
        GWT.log(event.toString());
        break;
    }
}   

protected void showMenu() {
    final RectangleRightClickable parent = this;
    final PopupMenu popMenu = new PopupMenu();
    popMenu.addMenuItem(new Label("Add thing"));
    popMenu.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
        public void setPosition(int offsetWidth, int offsetHeight) {
            int left = parent.getX() + parent.getWidth();
            int top = parent.getY() + parent.getWidth();
            popMenu.setPopupPosition(left, top);
        }
    });

}
}

1 Ответ

0 голосов
/ 30 июля 2010

Получил этот ответ в списке групп GWT Google, который работал:

addDomHandler(new ContextMenuHandler() 
{ 
    @Override 
    public void onContextMenu(ContextMenuEvent event) 
    { 
        showMenu(); 
        event.preventDefault(); 
    } 
}, ContextMenuEvent.getType()); 
...