2010-07-30 6 views
0

J'essaie de capturer des clics-droit sur un widget, pour faire apparaître mon propre menu contextuel à la place du navigateur. Il existe quelques références à ce sujet, mais la plus populaire, here, est un peu datée, bien que certains commentaires contiennent des extraits de code plus récents.Pourquoi cette capture par clic droit dans GWT ne fonctionne-t-elle pas dans IE?

J'ai assemblé des morceaux et je l'ai fait fonctionner dans Chrome et FF mais pas IE. Dans IE, il n'affiche pas le menu contextuel du navigateur par défaut, mais il n'affiche pas mon menu. Je commence juste à GWT donc je suppose que je ne fais pas quelque chose de bien avec les bons types de gestionnaires ou d'événements. J'utilise aussi le module gwt-graphics, d'où vient la classe Rectangle que j'étends, au cas où cela serait pertinent.

Voici mon code:

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

} 
} 

Répondre

0

Vous avez cette réponse sur la liste des groupes Google GWT, qui a travaillé:

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