diff options
5 files changed, 61 insertions, 21 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtPlugin.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtPlugin.java index 10cd093..48cebee 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtPlugin.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtPlugin.java @@ -211,8 +211,6 @@ public class AdtPlugin extends AbstractUIPlugin implements ILogger, ISdkLog { public void start(BundleContext context) throws Exception { super.start(context); - Display display = getDisplay(); - // set the default android console. mAndroidConsole = new MessageConsole("Android", null); //$NON-NLS-1$ ConsolePlugin.getDefault().getConsoleManager().addConsoles( @@ -221,17 +219,6 @@ public class AdtPlugin extends AbstractUIPlugin implements ILogger, ISdkLog { // get the stream to write in the android console. mAndroidConsoleStream = mAndroidConsole.newMessageStream(); mAndroidConsoleErrorStream = mAndroidConsole.newMessageStream(); - mRed = new Color(display, 0xFF, 0x00, 0x00); - - // because this can be run, in some cases, by a non ui thread, and because - // changing the console properties update the ui, we need to make this change - // in the ui thread. - display.asyncExec(new Runnable() { - @Override - public void run() { - mAndroidConsoleErrorStream.setColor(mRed); - } - }); // get the eclipse store IPreferenceStore eclipseStore = getPreferenceStore(); @@ -303,12 +290,32 @@ public class AdtPlugin extends AbstractUIPlugin implements ILogger, ISdkLog { DesignerPlugin.dispose(); - mRed.dispose(); + if (mRed != null) { + mRed.dispose(); + mRed = null; + } + synchronized (AdtPlugin.class) { sPlugin = null; } } + /** Called when the workbench has been started */ + public void workbenchStarted() { + Display display = getDisplay(); + mRed = new Color(display, 0xFF, 0x00, 0x00); + + // because this can be run, in some cases, by a non ui thread, and because + // changing the console properties update the ui, we need to make this change + // in the ui thread. + display.asyncExec(new Runnable() { + @Override + public void run() { + mAndroidConsoleErrorStream.setColor(mRed); + } + }); + } + /** * Returns the shared instance * diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java index 8d7b02e..f904f6e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java @@ -687,6 +687,16 @@ public class LayoutEditorDelegate extends CommonXmlDelegate public void delegatePostPageChange(int newPageIndex) { super.delegatePostPageChange(newPageIndex); + if (mGraphicalEditor != null) { + LayoutCanvas canvas = mGraphicalEditor.getCanvasControl(); + if (canvas != null) { + IActionBars bars = getEditor().getEditorSite().getActionBars(); + if (bars != null) { + canvas.updateGlobalActions(bars); + } + } + } + IFormPage page = getEditor().getActivePageInstance(); updateOutline(page); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java index 2154179..371852c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.editors.layout.gle2; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.Margins; import com.android.ide.common.api.Point; @@ -1213,16 +1214,30 @@ public class LayoutCanvas extends Canvas { * * @param bars the action bar for this canvas */ - public void updateGlobalActions(IActionBars bars) { + public void updateGlobalActions(@NonNull IActionBars bars) { updateMenuActionState(); - assert bars != null; - bars.setGlobalActionHandler(ActionFactory.CUT.getId(), mCutAction); - bars.setGlobalActionHandler(ActionFactory.COPY.getId(), mCopyAction); - bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), mPasteAction); - bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), mDeleteAction); - bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), mSelectAllAction); ITextEditor editor = mEditorDelegate.getEditor().getStructuredTextEditor(); + boolean graphical = getEditorDelegate().getEditor().getActivePage() == 0; + if (graphical) { + bars.setGlobalActionHandler(ActionFactory.CUT.getId(), mCutAction); + bars.setGlobalActionHandler(ActionFactory.COPY.getId(), mCopyAction); + bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), mPasteAction); + bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), mDeleteAction); + bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), mSelectAllAction); + } else { + bars.setGlobalActionHandler(ActionFactory.CUT.getId(), + editor.getAction(ActionFactory.CUT.getId())); + bars.setGlobalActionHandler(ActionFactory.COPY.getId(), + editor.getAction(ActionFactory.COPY.getId())); + bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), + editor.getAction(ActionFactory.PASTE.getId())); + bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), + editor.getAction(ActionFactory.DELETE.getId())); + bars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(), + editor.getAction(ActionFactory.SELECT_ALL.getId())); + } + IAction undoAction = editor.getAction(ActionFactory.UNDO.getId()); bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction); IAction redoAction = editor.getAction(ActionFactory.REDO.getId()); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlProperty.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlProperty.java index c846ea1..6591575 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlProperty.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlProperty.java @@ -167,6 +167,9 @@ class XmlProperty extends Property { Object s = null; try { Element element = (Element) mNode.getXmlNode(); + if (element == null) { + return false; + } String name = mDescriptor.getXmlLocalName(); String uri = mDescriptor.getNamespaceUri(); if (uri != null) { @@ -182,6 +185,9 @@ class XmlProperty extends Property { public String getStringValue() { Element element = (Element) mNode.getXmlNode(); + if (element == null) { + return null; + } String name = mDescriptor.getXmlLocalName(); String uri = mDescriptor.getNamespaceUri(); Attr attr; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/welcome/AdtStartup.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/welcome/AdtStartup.java index f6dc870..0fcf102 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/welcome/AdtStartup.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/welcome/AdtStartup.java @@ -68,6 +68,8 @@ public class AdtStartup implements IStartup { } initializeWindowCoordinator(); + + AdtPlugin.getDefault().workbenchStarted(); } private boolean isFirstTime() { |