mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 03:45:35 +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:
parent
f759b0388d
commit
beff888014
1 changed files with 1 additions and 128 deletions
|
@ -15,6 +15,7 @@
|
||||||
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified
|
* Martin Oberhuber (Wind River) - fixed copyright headers and beautified
|
||||||
* Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED
|
* 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) - [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;
|
package org.eclipse.tm.internal.terminal.view;
|
||||||
|
|
||||||
|
@ -22,8 +23,6 @@ import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.core.runtime.Preferences;
|
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.IMenuListener;
|
||||||
import org.eclipse.jface.action.IMenuManager;
|
import org.eclipse.jface.action.IMenuManager;
|
||||||
import org.eclipse.jface.action.IToolBarManager;
|
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.resource.JFaceResources;
|
||||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
import org.eclipse.jface.window.ApplicationWindow;
|
|
||||||
import org.eclipse.jface.window.Window;
|
import org.eclipse.jface.window.Window;
|
||||||
import org.eclipse.swt.dnd.TextTransfer;
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
import org.eclipse.swt.events.MenuEvent;
|
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.Logger;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
|
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
|
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
|
||||||
import org.eclipse.ui.IActionBars;
|
|
||||||
import org.eclipse.ui.IMemento;
|
import org.eclipse.ui.IMemento;
|
||||||
import org.eclipse.ui.IViewReference;
|
import org.eclipse.ui.IViewReference;
|
||||||
import org.eclipse.ui.IViewSite;
|
import org.eclipse.ui.IViewSite;
|
||||||
import org.eclipse.ui.IWorkbenchActionConstants;
|
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
import org.eclipse.ui.PartInitException;
|
import org.eclipse.ui.PartInitException;
|
||||||
import org.eclipse.ui.actions.ActionFactory;
|
|
||||||
import org.eclipse.ui.actions.RetargetAction;
|
|
||||||
import org.eclipse.ui.part.ViewPart;
|
import org.eclipse.ui.part.ViewPart;
|
||||||
|
|
||||||
public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener {
|
public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener {
|
||||||
|
@ -109,8 +103,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
|
|
||||||
protected TerminalAction fActionToggleCommandInputField;
|
protected TerminalAction fActionToggleCommandInputField;
|
||||||
|
|
||||||
protected TerminalMenuHandlerEdit fMenuHandlerEdit;
|
|
||||||
|
|
||||||
protected TerminalPropertyChangeHandler fPropertyChangeHandler;
|
protected TerminalPropertyChangeHandler fPropertyChangeHandler;
|
||||||
|
|
||||||
protected boolean fMenuAboutToShow;
|
protected boolean fMenuAboutToShow;
|
||||||
|
@ -431,7 +423,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
setPartName(findUniqueTitle(ViewMessages.PROP_TITLE));
|
setPartName(findUniqueTitle(ViewMessages.PROP_TITLE));
|
||||||
setupControls(wndParent);
|
setupControls(wndParent);
|
||||||
setupActions();
|
setupActions();
|
||||||
setupMenus();
|
|
||||||
setupLocalToolBars();
|
setupLocalToolBars();
|
||||||
setupContextMenus();
|
setupContextMenus();
|
||||||
setupListeners(wndParent);
|
setupListeners(wndParent);
|
||||||
|
@ -445,14 +436,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
TerminalViewPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
|
TerminalViewPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
|
||||||
|
|
||||||
JFaceResources.getFontRegistry().removeListener(fPropertyChangeHandler);
|
JFaceResources.getFontRegistry().removeListener(fPropertyChangeHandler);
|
||||||
MenuManager menuMgr = getEditMenuManager();
|
|
||||||
Menu menu = menuMgr.getMenu();
|
|
||||||
|
|
||||||
menuMgr.removeMenuListener(fMenuHandlerEdit);
|
|
||||||
|
|
||||||
if (menu != null)
|
|
||||||
menu.removeMenuListener(fMenuHandlerEdit);
|
|
||||||
|
|
||||||
fCtlTerminal.disposeTerminal();
|
fCtlTerminal.disposeTerminal();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
@ -525,36 +508,7 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
fActionEditClearAll = new TerminalActionClearAll(this);
|
fActionEditClearAll = new TerminalActionClearAll(this);
|
||||||
fActionEditSelectAll = new TerminalActionSelectAll(this);
|
fActionEditSelectAll = new TerminalActionSelectAll(this);
|
||||||
fActionToggleCommandInputField = new TerminalActionToggleCommandInputField(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() {
|
protected void setupLocalToolBars() {
|
||||||
IToolBarManager toolBarMgr = getViewSite().getActionBars().getToolBarManager();
|
IToolBarManager toolBarMgr = getViewSite().getActionBars().getToolBarManager();
|
||||||
|
|
||||||
|
@ -578,7 +532,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
contextMenuHandler = new TerminalContextMenuHandler();
|
contextMenuHandler = new TerminalContextMenuHandler();
|
||||||
|
|
||||||
ctlText.setMenu(menu);
|
ctlText.setMenu(menu);
|
||||||
menuMgr.setRemoveAllWhenShown(true);
|
|
||||||
menuMgr.addMenuListener(contextMenuHandler);
|
menuMgr.addMenuListener(contextMenuHandler);
|
||||||
menu.addMenuListener(contextMenuHandler);
|
menu.addMenuListener(contextMenuHandler);
|
||||||
}
|
}
|
||||||
|
@ -603,86 +556,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi
|
||||||
JFaceResources.getFontRegistry().addListener(fPropertyChangeHandler);
|
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 {
|
protected class TerminalContextMenuHandler implements MenuListener, IMenuListener {
|
||||||
public void menuHidden(MenuEvent event) {
|
public void menuHidden(MenuEvent event) {
|
||||||
fMenuAboutToShow = false;
|
fMenuAboutToShow = false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue