A GWT MenuItem extends UIObject - any idea how I can add event handlers to it for example I want a special context menu for right-clicking on a MenuItem. Thanks!
Asked
Active
Viewed 211 times
1 Answers
1
You can use underlying element of the MenuItem object:
final Element element = menuItem.getElement();
Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
if (event.getTypeInt() == Event.ONMOUSEDOWN
&& event.getNativeEvent().getButton() == Event.BUTTON_RIGHT
&& event.getNativeEvent().getEventTarget().equals(element)) {
showSpecialMenu();
}
}
});
Event.sinkEvents(element, Event.ONMOUSEDOWN);
Or like this (also you will be able to prevent default context menu):
final Element element = menuItem.getElement();
Event.addNativePreviewHandler(new Event.NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
if (event.getTypeInt() == Event.ONCONTEXTMENU && event.getNativeEvent().getEventTarget().equals(element)) {
// prevent default context menu
event.getNativeEvent().stopPropagation();
event.getNativeEvent().preventDefault();
// show custom context menu
showSpecialMenu();
}
}
});
Event.sinkEvents(element, Event.ONCONTEXTMENU);
You can do both like this:
......
Event.sinkEvents(element, Event.ONCONTEXTMENU | Event.ONMOUSEDOWN);

thepun599
- 150
- 1
- 7
-
Thanks that works great for catching the event but I still see the native context menu instead of mine. – user1176505 Dec 20 '14 at 11:41
-
Strangely the second one doesn't work for me - I never see a ONCONTEXTMENU event thrown. But for my purposes having a context menu even without supressing the native menu it a big help thanks. Also I have a hyperlink within the menu item which ends up being the event target so I'm using element.toString().contains(event.getNativeEvent().getEventTarget().toString()) Thanks again – user1176505 Dec 21 '14 at 06:05
-
Hmmm. I actually never got this working because I have a hyperlink inside the MenuItem and event comes from the hyperlink but the element was the MenuItem. In GWT DEvelopment mode it worked great with element.toString().contains(event.getNativeEvent().getEventTarget().toString()) but once compiled this fails and I cannot find any way to match the right-click event to which menuItem it came from. Also the menu item getAbsoluteTop() is zero even when it's visible (see http://stackoverflow.com/questions/27644719/gwt-menuitem-in-a-submenu-has-zero-getabsolutetop-getabsoluteleft) – user1176505 Dec 25 '14 at 19:23