Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Disabling context menu

    I'm trying to disable the right-click context menu for all windows/controls by default.

    I am able to create an addShowContextMenuHandler to Window.setDefaultProperties to trap this and call event.cancel(). This works for all controls that are enabled. However, I also want to do this for disabled controls because I don't want the browser context menu to be displayed. I also tried adding an addRightMouseDownHandler but this isn't called for disable controls either.

    How can I do this?

    Version:
    Isomorphic SmartClient Framework (v8.2p_2012-08-08/PowerEdition Deployment 2012-08-08)

    In the sample code below, the context menu does not appear for the enabled button, but it does for the disabled button.

    Code:
    public class Showcase implements EntryPoint {
    
    	public class TestWindow extends Window {
    		
    		TestWindow() {
    			super();
    			this.setIsModal( true );
    			this.setWidth(500);
    			this.setHeight(100);
    			final HLayout mainLayout = new HLayout();
    			
    			IButton enabled = new IButton("enabled");
    			IButton disabled = new IButton("disabled");
    			disabled.disable();
    			
    			mainLayout.addMember(enabled);
    			mainLayout.addMember(disabled);
    			
    			this.addItem(mainLayout);
    		}
    	}
        public Showcase() {
        	super();
        	Showcase.setDefaultWindowProperties();
        }
      
        public void onModuleLoad() {
        	Canvas myCanvas = new Canvas();  
        	TestWindow tw = new TestWindow();
        	tw.show();
        	
            myCanvas.draw();  
        }  
      
        /**
    	 * Configures the default properties for all Windows in the product.
    	 * E.g. Window opacity, default context menu, etc.
    	 */
    	private static void setDefaultWindowProperties() {
    		final int opacity = 100;
    		
    		Window windowProperties = new Window();
    		windowProperties.addShowContextMenuHandler( new ShowContextMenuHandler() {
    
    			@Override
    			public void onShowContextMenu( ShowContextMenuEvent event ) {
    				event.cancel();
    			}
    			
    		});
    		windowProperties.addRightMouseDownHandler( new RightMouseDownHandler() {
    
    			@Override
    			public void onRightMouseDown( RightMouseDownEvent event ) {
    				event.cancel();				
    			}
    			
    		});
    		windowProperties.setEdgeOpacity( opacity );
    		Window.setDefaultProperties( windowProperties );
    	}
    
    }

    #2
    We would highly recommend not doing this. Some assistive technologies depend on context menu items.

    If you really want to proceed, you could use core GWT's EventPreview API to cancel all context menu events.

    Comment

    Working...
    X