diff --git a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
index 30b6fc52ed8..689e852e668 100644
--- a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.ui; singleton:=true
-Bundle-Version: 6.4.200.qualifier
+Bundle-Version: 6.5.0.qualifier
Bundle-Activator: org.eclipse.cdt.ui.CUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png b/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png
new file mode 100644
index 00000000000..f11e70bb4b9
Binary files /dev/null and b/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png differ
diff --git a/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png b/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png
new file mode 100644
index 00000000000..7cb025686dd
Binary files /dev/null and b/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png differ
diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties
index 457ea7d8050..1ca78dfdc6d 100644
--- a/core/org.eclipse.cdt.ui/plugin.properties
+++ b/core/org.eclipse.cdt.ui/plugin.properties
@@ -82,6 +82,9 @@ asmEditor.description=Editor for Assembly Source Files
category.source.name=C/C++ Source
category.source.description= C/C++ Source Actions
+ActionDefinition.copyQualifiedName.name= Copy Qualified Name
+ActionDefinition.copyQualifiedName.description= Copy a fully qualified name to the system clipboard
+
ActionDefinition.sourceQuickMenu.name= Show Source Quick Menu
ActionDefinition.sourceQuickMenu.description= Shows the source quick menu
@@ -681,4 +684,6 @@ semanticHighlightingExtensionPoint = Semantic Highlighting Extension Point
UserSettingEntries.name = CDT User Setting Entries
-toolchains.preferences.name = Core Build Toolchains
\ No newline at end of file
+toolchains.preferences.name = Core Build Toolchains
+
+CopyQualifiedName.label= Cop&y Qualified Name
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml
index 6246ea0e62c..802941373be 100644
--- a/core/org.eclipse.cdt.ui/plugin.xml
+++ b/core/org.eclipse.cdt.ui/plugin.xml
@@ -1960,6 +1960,14 @@
id="org.eclipse.cdt.ui.actions.AddInclude">
+
+
+
+
+
null if no selection can be obtained or the
+ * editor is null
.
+ *
+ * @return the selection of the action's editor, or null
+ */
+ protected ITextSelection getCurrentSelection() {
+ if (fEditor != null) {
+ ISelectionProvider provider = fEditor.getSelectionProvider();
+ if (provider != null) {
+ ISelection selection = provider.getSelection();
+ if (selection instanceof ITextSelection)
+ return (ITextSelection) selection;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void run() {
+ ITextSelection textSelection = getCurrentSelection();
+
+ if (textSelection == null || !isValidSelection(textSelection)) {
+ return;
+ }
+
+ final int offset = textSelection.getOffset();
+ final int length = textSelection.getLength();
+ ITranslationUnit translationUnit = (ITranslationUnit) CDTUITools
+ .getEditorInputCElement(fEditor.getEditorInput());
+ String qualName = null;
+ try {
+ IASTTranslationUnit ast = translationUnit.getAST(null, 0);
+ if (ast != null) {
+ IASTNode enclosingNode = ast.getNodeSelector(null).findEnclosingNode(offset, length);
+ NameVisitor n = new NameVisitor();
+ enclosingNode.accept(n);
+ qualName = n.getQualifiedName();
+ }
+ } catch (CoreException e) {
+ CUIPlugin.log(e);
+ }
+
+ final Shell shell = fEditor.getEditorSite().getShell();
+
+ if (qualName == null) {
+ MessageDialog.openInformation(shell, ActionMessages.CopyQualifiedNameAction_InfoDialogTitel,
+ ActionMessages.CopyQualifiedNameAction_NoElementToQualify);
+ return;
+ }
+
+ Clipboard clipboard = new Clipboard(shell.getDisplay());
+ try {
+ clipboard.setContents(new String[] { qualName }, new Transfer[] { TextTransfer.getInstance() });
+ } catch (SWTError e) {
+ if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD) {
+ throw e;
+ }
+ if (MessageDialog.openQuestion(shell, ActionMessages.CopyQualifiedNameAction_ErrorTitle,
+ ActionMessages.CopyQualifiedNameAction_ErrorDescription)) {
+ clipboard.setContents(new String[] { qualName }, new Transfer[] { TextTransfer.getInstance() });
+ }
+ } finally {
+ clipboard.dispose();
+ }
+ }
+
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
index 7a46b6df4ec..81d8b31c120 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java
@@ -315,4 +315,10 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition
* (value "org.eclipse.cdt.ui.edit.text.c.select.last"
).
*/
public static final String SELECT_LAST = "org.eclipse.cdt.ui.edit.text.c.select.last"; //$NON-NLS-1$
+
+ /**
+ * Action definition ID of the edit -> copy qualified name
+ * (value "org.eclipse.cdt.ui.edit.text.c.copy.qualified.name"
).
+ */
+ public static final String COPY_QUALIFIED_NAME = "org.eclipse.cdt.ui.edit.text.c.copy.qualified.name"; //$NON-NLS-1$
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java
index e9aa791452d..6a3dfbfcbf4 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java
@@ -494,4 +494,11 @@ public class CdtActionConstants {
* "org.eclipse.cdt.ui.actions.ExceptionOccurrences"
).
*/
public static final String FIND_EXCEPTION_OCCURRENCES = "org.eclipse.cdt.ui.actions.ExceptionOccurrences"; //$NON-NLS-1$
+
+ /**
+ * Source menu: name of standard action to copy fully qualified names (value
+ * "org.eclipse.cdt.ui.actions.CopyQualifiedName"
).
+ * @since 6.5
+ */
+ public static final String COPY_QUALIFIED_NAME = "org.eclipse.cdt.ui.actions.CopyQualifiedName"; //$NON-NLS-1$
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java
index 9039ada687d..933b70e474b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
import org.eclipse.cdt.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.internal.ui.actions.CDTQuickMenuCreator;
+import org.eclipse.cdt.internal.ui.actions.CopyQualifiedNameAction;
import org.eclipse.cdt.internal.ui.editor.AddIncludeAction;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds;
@@ -134,7 +135,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
// private SortMembersAction fSortMembers;
private SortLinesAction fSortLines;
private FormatAllAction fFormatAll;
- // private CopyQualifiedNameAction fCopyQualifiedNameAction;
+ private CopyQualifiedNameAction fCopyQualifiedNameAction;
//
private static final String QUICK_MENU_ID = "org.eclipse.cdt.ui.edit.text.c.source.quickMenu"; //$NON-NLS-1$
@@ -172,10 +173,10 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
fSortLines.setActionDefinitionId(ICEditorActionDefinitionIds.SORT_LINES);
editor.setAction("SortLines", fSortLines); //$NON-NLS-1$
- // IAction pastAction= editor.getAction(ITextEditorActionConstants.PASTE);//IWorkbenchActionDefinitionIds.PASTE);
- // fCopyQualifiedNameAction= new CopyQualifiedNameAction(editor, null, pastAction);
- // fCopyQualifiedNameAction.setActionDefinitionId(CopyQualifiedNameAction.JAVA_EDITOR_ACTION_DEFINITIONS_ID);
- // editor.setAction("CopyQualifiedName", fCopyQualifiedNameAction); //$NON-NLS-1$
+ fCopyQualifiedNameAction = new CopyQualifiedNameAction(editor);
+ fCopyQualifiedNameAction.setActionDefinitionId(ICEditorActionDefinitionIds.COPY_QUALIFIED_NAME);
+ editor.setAction("CopyQualifiedName", fCopyQualifiedNameAction); //$NON-NLS-1$
+ editor.markAsSelectionDependentAction("CopyQualifiedName", true); //$NON-NLS-1$
//
// fOverrideMethods= new OverrideMethodsAction(editor);
// fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS);
@@ -307,6 +308,8 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
//
fFormatAll = new FormatAllAction(site);
fFormatAll.setActionDefinitionId(ICEditorActionDefinitionIds.FORMAT);
+ // fCopyQualifiedNameAction = new CopyQualifiedNameAction(site);
+ // fCopyQualifiedNameAction.setActionDefinitionId(ICEditorActionDefinitionIds.COPY_QUALIFIED_NAME);
//
// fCleanUp= new CleanUpAction(site);
// fCleanUp.setActionDefinitionId(ICEditorActionDefinitionIds.CLEAN_UP);
@@ -346,6 +349,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
// registerSelectionListener(fSelectionProvider, fSortMembers);
registerSelectionListener(fSelectionProvider, fAddTaskAction);
// registerSelectionListener(fSelectionProvider, fCleanUp);
+ // registerSelectionListener(fSelectionProvider, fCopyQualifiedNameAction);
selectionChanged(new SelectionChangedEvent(fSelectionProvider, selection));
registerSelectionListener(fSelectionProvider, this);
@@ -430,6 +434,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
added += addEditorAction(source, ITextEditorActionConstants.SHIFT_LEFT);
added += addEditorAction(source, "Indent"); //$NON-NLS-1$
added += addEditorAction(source, "Format"); //$NON-NLS-1$
+ added += addAction(source, fCopyQualifiedNameAction);
source.add(new Separator(GROUP_ORGANIZE));
added += addAction(source, fAddInclude);
added += addAction(source, fOrganizeIncludes);
@@ -456,6 +461,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
// added+= addAction(source, fAddCppDocStub);
source.add(new Separator(GROUP_EDIT));
added += addAction(source, fFormatAll);
+ added += addAction(source, fCopyQualifiedNameAction);
source.add(new Separator(GROUP_ORGANIZE));
added += addAction(source, fAddInclude);
added += addAction(source, fOrganizeIncludes);
@@ -515,7 +521,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange
actionBar.setGlobalActionHandler(IDEActionFactory.ADD_TASK.getId(), fAddTaskAction);
actionBar.setGlobalActionHandler(CdtActionConstants.FORMAT, fFormatAll);
} else {
- // actionBar.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, fCopyQualifiedNameAction);
+ actionBar.setGlobalActionHandler(CdtActionConstants.COPY_QUALIFIED_NAME, fCopyQualifiedNameAction);
}
}