### Eclipse Workspace Patch 1.0 #P org.eclipse.jface Index: src/org/eclipse/jface/action/ActionContributionItem.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java,v retrieving revision 1.93 diff -u -r1.93 ActionContributionItem.java --- src/org/eclipse/jface/action/ActionContributionItem.java 3 Dec 2007 14:49:30 -0000 1.93 +++ src/org/eclipse/jface/action/ActionContributionItem.java 24 Feb 2008 22:12:25 -0000 @@ -27,7 +27,7 @@ import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Point; + import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -333,6 +333,7 @@ } ti.setData(this); ti.addListener(SWT.Selection, getToolItemListener()); + ti.addListener(SWT.MenuDetect, getToolItemListener()); ti.addListener(SWT.Dispose, getToolItemListener()); widget = ti; @@ -451,6 +452,12 @@ .getSelection()); } break; + case SWT.MenuDetect: + if (event.detail == SWT.ARROW) { + ToolItem ti = (ToolItem) event.widget; + handleWidgetSelection(event, ti.getSelection()); + } + break; } } }; @@ -526,14 +533,15 @@ // dummy.dispose(); if (mc != null) { Menu m = mc.getMenu(ti.getParent()); + ti.setMenu(m); if (m != null) { // position the menu below the drop down item - Point point = ti.getParent().toDisplay( - new Point(e.x, e.y)); - m.setLocation(point.x, point.y); // waiting + //Point point = ti.getParent().toDisplay( + // new Point(e.x, e.y)); + //m.setLocation(point.x, point.y); // waiting // for SWT // 0.42 - m.setVisible(true); + //m.setVisible(true); return; // we don't fire the action } } #P org.eclipse.ui.workbench Index: Eclipse UI/org/eclipse/ui/internal/PartPane.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartPane.java,v retrieving revision 1.89 diff -u -r1.89 PartPane.java --- Eclipse UI/org/eclipse/ui/internal/PartPane.java 27 Aug 2007 19:32:06 -0000 1.89 +++ Eclipse UI/org/eclipse/ui/internal/PartPane.java 24 Feb 2008 22:12:27 -0000 @@ -536,6 +536,10 @@ } + public Menu getViewMenu() { + return null; + } + public boolean isBusy() { return busy; } Index: Eclipse UI/org/eclipse/ui/internal/PerspectiveBarNewContributionItem.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveBarNewContributionItem.java,v retrieving revision 1.9 diff -u -r1.9 PerspectiveBarNewContributionItem.java --- Eclipse UI/org/eclipse/ui/internal/PerspectiveBarNewContributionItem.java 25 Feb 2005 20:52:16 -0000 1.9 +++ Eclipse UI/org/eclipse/ui/internal/PerspectiveBarNewContributionItem.java 24 Feb 2008 22:12:27 -0000 @@ -15,12 +15,9 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.MenuDetectEvent; +import org.eclipse.swt.events.MenuDetectListener; import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.IWorkbenchWindow; @@ -72,23 +69,31 @@ toolItem.setText(""); //$NON-NLS-1$ toolItem.setToolTipText(WorkbenchMessages.PerspectiveBarNewContributionItem_toolTip); - toolItem.addSelectionListener(new SelectionAdapter() { - - public void widgetSelected(SelectionEvent event) { + toolItem.addMenuDetectListener(new MenuDetectListener() { + + public void menuDetected(MenuDetectEvent event) { menuManager.update(true); - Point point = new Point(event.x, event.y); - if (event.widget instanceof ToolItem) { - ToolItem toolItem = (ToolItem) event.widget; - Rectangle rectangle = toolItem.getBounds(); - point = new Point(rectangle.x, rectangle.y - + rectangle.height); - } - Menu menu = menuManager.createContextMenu(parent); - point = parent.toDisplay(point); - menu.setLocation(point.x, point.y); - menu.setVisible(true); - } - }); + toolItem.setMenu(menuManager.createContextMenu(parent)); + } + + }); +// toolItem.addSelectionListener(new SelectionAdapter() { +// +// public void widgetSelected(SelectionEvent event) { +// menuManager.update(true); +// Point point = new Point(event.x, event.y); +// if (event.widget instanceof ToolItem) { +// ToolItem toolItem = (ToolItem) event.widget; +// Rectangle rectangle = toolItem.getBounds(); +// point = new Point(rectangle.x, rectangle.y +// + rectangle.height); +// } +// Menu menu = menuManager.createContextMenu(parent); +// point = parent.toDisplay(point); +// menu.setLocation(point.x, point.y); +// menu.setVisible(true); +// } +// }); } } } Index: Eclipse UI/org/eclipse/ui/internal/ViewPane.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java,v retrieving revision 1.108 diff -u -r1.108 ViewPane.java --- Eclipse UI/org/eclipse/ui/internal/ViewPane.java 10 Sep 2007 18:04:05 -0000 1.108 +++ Eclipse UI/org/eclipse/ui/internal/ViewPane.java 24 Feb 2008 22:12:28 -0000 @@ -433,6 +433,20 @@ aMenu.setVisible(true); } + public Menu getViewMenu() { + if (!hasViewMenu()) { + return null; + } + + // If this is a fast view, it may have been minimized. Do nothing in this case. + if (isFastView() && (page.getActiveFastView() != getViewReference())) { + return null; + } + + Menu aMenu = isvMenuMgr.createContextMenu(getControl().getParent()); + return aMenu; + } + public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); //$NON-NLS-1$ Index: Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java,v retrieving revision 1.61 diff -u -r1.61 PerspectiveSwitcher.java --- Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java 10 Jan 2008 19:16:15 -0000 1.61 +++ Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java 24 Feb 2008 22:12:28 -0000 @@ -33,6 +33,8 @@ import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.MenuDetectEvent; +import org.eclipse.swt.events.MenuDetectListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -771,13 +773,11 @@ } }); - coolItem.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.ARROW) { - if (perspectiveBar != null) { - perspectiveBar.handleChevron(e); - } - } + coolItem.addMenuDetectListener(new MenuDetectListener() { + public void menuDetected(MenuDetectEvent e) { + if (perspectiveBar != null) { + coolItem.setMenu(perspectiveBar.handleChevron(e)); + } } }); coolItem.setMinimumSize(0, 0); Index: Eclipse UI/org/eclipse/ui/internal/PerspectiveBarManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveBarManager.java,v retrieving revision 1.26 diff -u -r1.26 PerspectiveBarManager.java --- Eclipse UI/org/eclipse/ui/internal/PerspectiveBarManager.java 15 Feb 2008 19:01:07 -0000 1.26 +++ Eclipse UI/org/eclipse/ui/internal/PerspectiveBarManager.java 24 Feb 2008 22:12:27 -0000 @@ -13,6 +13,7 @@ import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MenuDetectEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; @@ -44,12 +45,12 @@ private CoolBar coolBar; private Menu chevronMenu = null; - public void handleChevron(SelectionEvent event) { + public Menu handleChevron(MenuDetectEvent event) { CoolItem item = (CoolItem) event.widget; //ToolBar toolbar = (ToolBar)getControl(); Control control = getControl(); if (!(control instanceof ToolBar)) { - return; // currently we only deal with toolbar items + return null; // currently we only deal with toolbar items } /* Retrieve the current bounding rectangle for the selected cool item. */ Rectangle itemBounds = item.getBounds(); @@ -134,9 +135,10 @@ * coordinates in order to pass them to Menu.setLocation (i.e. was * relative to CoolBar). */ - pt = coolBar.toDisplay(new Point(event.x, event.y)); - chevronMenu.setLocation(pt.x, pt.y); - chevronMenu.setVisible(true); + return chevronMenu; +// pt = coolBar.toDisplay(new Point(event.x, event.y)); +// chevronMenu.setLocation(pt.x, pt.y); +// chevronMenu.setVisible(true); } /* (non-Javadoc) Index: Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultTabFolder.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultTabFolder.java,v retrieving revision 1.22 diff -u -r1.22 DefaultTabFolder.java --- Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultTabFolder.java 20 Dec 2006 20:52:07 -0000 1.22 +++ Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultTabFolder.java 24 Feb 2008 22:12:28 -0000 @@ -16,8 +16,8 @@ import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabFolderEvent; import org.eclipse.swt.custom.CTabItem; -import org.eclipse.swt.events.MouseAdapter; -import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MenuDetectEvent; +import org.eclipse.swt.events.MenuDetectListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; @@ -30,6 +30,7 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.internal.IWorkbenchGraphicConstants; @@ -38,6 +39,7 @@ import org.eclipse.ui.internal.dnd.DragUtil; import org.eclipse.ui.internal.presentations.PaneFolder; import org.eclipse.ui.internal.presentations.PaneFolderButtonListener; +import org.eclipse.ui.internal.presentations.PresentablePart; import org.eclipse.ui.internal.presentations.util.AbstractTabFolder; import org.eclipse.ui.internal.presentations.util.AbstractTabItem; import org.eclipse.ui.internal.presentations.util.PartInfo; @@ -113,17 +115,31 @@ ToolBar actualToolBar = new ToolBar(paneFolder.getControl(), SWT.FLAT | SWT.NO_BACKGROUND); viewToolBar = actualToolBar; - ToolItem pullDownButton = new ToolItem(actualToolBar, SWT.PUSH); + final ToolItem pullDownButton = new ToolItem(actualToolBar, SWT.PUSH); Image hoverImage = WorkbenchImages .getImage(IWorkbenchGraphicConstants.IMG_LCL_RENDERED_VIEW_MENU); pullDownButton.setDisabledImage(hoverImage); pullDownButton.setImage(hoverImage); pullDownButton.setToolTipText(WorkbenchMessages.Menu); - actualToolBar.addMouseListener(new MouseAdapter() { - public void mouseDown(MouseEvent e) { - fireEvent(TabFolderEvent.EVENT_PANE_MENU, getSelection(), getPaneMenuLocation()); - } - }); +// actualToolBar.addMouseListener(new MouseAdapter() { +// public void mouseDown(MouseEvent e) { +// fireEvent(TabFolderEvent.EVENT_PANE_MENU, getSelection(), getPaneMenuLocation()); +// } +// }); + pullDownButton.addMenuDetectListener(new MenuDetectListener() { + public void menuDetected(MenuDetectEvent e) { + Menu menu = null; + Object data = getSelection().getData(); + if (data instanceof PresentablePart) { + PresentablePart part = (PresentablePart) data; + part.setFocus(); + if (part.getMenu() != null) { + menu = part.getMenu().getMenu(); + } + } + pullDownButton.setMenu(menu); + } + }); pullDownButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fireEvent(TabFolderEvent.EVENT_PANE_MENU, getSelection(), getPaneMenuLocation()); Index: Eclipse UI/org/eclipse/ui/presentations/IPartMenu.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/presentations/IPartMenu.java,v retrieving revision 1.6 diff -u -r1.6 IPartMenu.java --- Eclipse UI/org/eclipse/ui/presentations/IPartMenu.java 16 Mar 2007 18:00:37 -0000 1.6 +++ Eclipse UI/org/eclipse/ui/presentations/IPartMenu.java 24 Feb 2008 22:12:28 -0000 @@ -11,6 +11,7 @@ package org.eclipse.ui.presentations; import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Menu; /** * Interface to a menu created by a part that will be displayed in a presentation. @@ -27,4 +28,7 @@ * @since 3.0 */ public void showMenu(Point location); + + public Menu getMenu(); + } Index: Eclipse UI/org/eclipse/ui/internal/presentations/PresentablePart.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/PresentablePart.java,v retrieving revision 1.13 diff -u -r1.13 PresentablePart.java --- Eclipse UI/org/eclipse/ui/internal/presentations/PresentablePart.java 27 Aug 2007 19:32:06 -0000 1.13 +++ Eclipse UI/org/eclipse/ui/internal/presentations/PresentablePart.java 24 Feb 2008 22:12:28 -0000 @@ -22,6 +22,7 @@ import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; @@ -312,6 +313,9 @@ public void showMenu(Point location) { part.showViewMenu(location); } + public Menu getMenu() { + return part.getViewMenu(); + } }; }