package org.freehep.swing.popup; import java.awt.Component; import java.awt.Point; import java.awt.Window; import java.awt.event.MouseEvent; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; /** * * @author tonyj */ public class GlobalPopupListener extends PopupListener { public GlobalPopupListener() { super(null); } protected void maybeShowPopup(MouseEvent me) { JPopupMenu popup = new JPopupMenu(); if (popup.isPopupTrigger(me)) { Component source = me.getComponent(); Window w = (Window) (source instanceof Window ? source : SwingUtilities.getAncestorOfClass(Window.class,source)); if (w != null) // FreeHEP-455 { Point p = SwingUtilities.convertPoint(source,me.getPoint(),w); processPopupEvent(popup,w,p.x,p.y); } } } private void processPopupEvent(JPopupMenu menu, Component source, int x, int y) { Component target = SwingUtilities.getDeepestComponentAt(source,x,y); for (Component c = target; c != null; c = c.getParent()) { if (c instanceof HasPopupItems) { Point p = SwingUtilities.convertPoint(source,x,y,c); menu = ((HasPopupItems) c).modifyPopupMenu(menu,target,p); } } if (menu != null && menu.getComponentCount() > 0) { menu.show(source,x,y); } } }