1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 14:15:23 +02:00

bug 189774: [terminal] Ctrl+V does not work in the command input field.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=189774
This commit is contained in:
Michael Scharf 2007-11-14 20:26:13 +00:00
parent 47965c8123
commit 27406bb70a

View file

@ -15,6 +15,7 @@
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified
* Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED
* Michael Scharf (Wind River) - [209656] ClassCastException in TerminalView under Eclipse-3.4M3
* Michael Scharf (Wind River) - [189774] Ctrl+V does not work in the command input field.
*******************************************************************************/
package org.eclipse.tm.internal.terminal.view;
@ -22,8 +23,6 @@ import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
@ -32,7 +31,6 @@ import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.events.MenuEvent;
@ -61,15 +59,11 @@ import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo;
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.RetargetAction;
import org.eclipse.ui.part.ViewPart;
public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener {
@ -109,8 +103,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
protected TerminalAction fActionToggleCommandInputField;
protected TerminalMenuHandlerEdit fMenuHandlerEdit;
protected TerminalPropertyChangeHandler fPropertyChangeHandler;
protected boolean fMenuAboutToShow;
@ -431,7 +423,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
setPartName(findUniqueTitle(ViewMessages.PROP_TITLE));
setupControls(wndParent);
setupActions();
setupMenus();
setupLocalToolBars();
setupContextMenus();
setupListeners(wndParent);
@ -445,14 +436,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
TerminalViewPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
JFaceResources.getFontRegistry().removeListener(fPropertyChangeHandler);
MenuManager menuMgr = getEditMenuManager();
Menu menu = menuMgr.getMenu();
menuMgr.removeMenuListener(fMenuHandlerEdit);
if (menu != null)
menu.removeMenuListener(fMenuHandlerEdit);
fCtlTerminal.disposeTerminal();
super.dispose();
}
@ -525,36 +508,7 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
fActionEditClearAll = new TerminalActionClearAll(this);
fActionEditSelectAll = new TerminalActionSelectAll(this);
fActionToggleCommandInputField = new TerminalActionToggleCommandInputField(this);
IActionBars actionBars = getViewSite().getActionBars();
actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), fActionEditCopy);
actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), fActionEditCut);
actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), fActionEditPaste);
actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), fActionEditSelectAll);
}
protected void setupMenus() {
MenuManager menuMgr = getEditMenuManager();
Menu menu = menuMgr.getMenu();
fMenuHandlerEdit = new TerminalMenuHandlerEdit();
menuMgr.addMenuListener(fMenuHandlerEdit);
menu.addMenuListener(fMenuHandlerEdit);
}
/**
* @return the Edit Menu
*/
private MenuManager getEditMenuManager() {
ApplicationWindow workbenchWindow = (ApplicationWindow) TerminalViewPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
MenuManager menuMgr = workbenchWindow.getMenuBarManager();
menuMgr = (MenuManager) menuMgr.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);
return menuMgr;
}
protected void setupLocalToolBars() {
IToolBarManager toolBarMgr = getViewSite().getActionBars().getToolBarManager();
@ -578,7 +532,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
contextMenuHandler = new TerminalContextMenuHandler();
ctlText.setMenu(menu);
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(contextMenuHandler);
menu.addMenuListener(contextMenuHandler);
}
@ -603,86 +556,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
JFaceResources.getFontRegistry().addListener(fPropertyChangeHandler);
}
// Inner classes
/**
* Because it is too expensive to update the cut/copy/pase/selectAll actions
* each time the selection in the terminal view has changed, we update them,
* when the menu is shown.
* <p>
* TODO: this might be dangerous because those actions might be shown in the toolbar
* and might not update...
*
*/
protected class TerminalMenuHandlerEdit implements MenuListener, IMenuListener {
AcceleratorDisabler fAcceleratorDisablerCopy=new AcceleratorDisabler();
AcceleratorDisabler fAcceleratorDisablerPaste=new AcceleratorDisabler();
AcceleratorDisabler fAcceleratorDisablerSelectAll=new AcceleratorDisabler();
/**
* @author scharf
* 209656: [terminal] ClassCastException in TerminalView under Eclipse-3.4M3
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=209656
*
*
* TODO: eliminate this code.
*/
class AcceleratorDisabler {
String fActionDefinitionId;
int fAccelerator;
ActionContributionItem fActionContributionItem;
public void menuAboutToShow(IContributionItem contribution) {
fActionContributionItem=null;
if(contribution instanceof ActionContributionItem) {
ActionContributionItem item = (ActionContributionItem) contribution;
if(item.getAction() instanceof RetargetAction) {
RetargetAction action = (RetargetAction) item.getAction();
fActionDefinitionId = action.getActionDefinitionId();
fAccelerator = action.getAccelerator();
action.setActionDefinitionId(null);
action.enableAccelerator(false);
item.update();
fActionContributionItem=item;
}
}
}
public void menuHidden() {
if(fActionContributionItem!=null) {
RetargetAction action = (RetargetAction) fActionContributionItem.getAction();
action.setActionDefinitionId(fActionDefinitionId);
action.setAccelerator(fAccelerator);
action.enableAccelerator(true);
fActionContributionItem.update();
fActionContributionItem=null;
}
}
}
protected TerminalMenuHandlerEdit() {
}
public void menuAboutToShow(IMenuManager menuMgr) {
fMenuAboutToShow = true;
updateEditCopy();
updateEditCut();
updateEditPaste();
updateEditSelectAll();
fAcceleratorDisablerCopy.menuAboutToShow(menuMgr.find(ActionFactory.COPY.getId()));
fAcceleratorDisablerPaste.menuAboutToShow(menuMgr.find(ActionFactory.PASTE.getId()));
fAcceleratorDisablerSelectAll.menuAboutToShow(menuMgr.find(ActionFactory.SELECT_ALL.getId()));
}
public void menuShown(MenuEvent event) {
// do nothing
}
public void menuHidden(MenuEvent event) {
fMenuAboutToShow = false;
updateEditCopy();
updateEditCut();
fAcceleratorDisablerCopy.menuHidden();
fAcceleratorDisablerPaste.menuHidden();
fAcceleratorDisablerSelectAll.menuHidden();
}
}
protected class TerminalContextMenuHandler implements MenuListener, IMenuListener {
public void menuHidden(MenuEvent event) {
fMenuAboutToShow = false;