diff options
author | Tor Norbye <tnorbye@google.com> | 2010-12-09 19:03:19 -0800 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2010-12-09 19:03:19 -0800 |
commit | 9a1f4d718be6c277b344ed361821e275858ebd11 (patch) | |
tree | 2303ff3b97eee10a881af6d7eeaefb053ff06478 /eclipse | |
parent | 74f8a034a8578859224661ba637504b642a407db (diff) | |
parent | 69b505e5c736dfdee0ddb3408e687f3269bfee16 (diff) | |
download | sdk-9a1f4d718be6c277b344ed361821e275858ebd11.zip sdk-9a1f4d718be6c277b344ed361821e275858ebd11.tar.gz sdk-9a1f4d718be6c277b344ed361821e275858ebd11.tar.bz2 |
Merge "Fix threading issue with layout reload"
Diffstat (limited to 'eclipse')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java index ce21726..0ae9c3c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java @@ -1307,6 +1307,8 @@ public class GraphicalEditorPart extends EditorPart return null; } + assert mConfigComposite.getDisplay().getThread() == Thread.currentThread(); + // attempt to get a target from the configuration selector. IAndroidTarget renderingTarget = mConfigComposite.getRenderingTarget(); if (renderingTarget != null) { @@ -1578,16 +1580,28 @@ public class GraphicalEditorPart extends EditorPart } private class ReloadListener implements ILayoutReloadListener { - /* + /** * Called when the file changes triggered a redraw of the layout */ - public void reloadLayout(ChangeFlags flags, boolean libraryChanged) { - boolean recompute = false; + public void reloadLayout(final ChangeFlags flags, final boolean libraryChanged) { + Display display = mConfigComposite.getDisplay(); + display.asyncExec(new Runnable() { + public void run() { + reloadLayoutSwt(flags, libraryChanged); + } + }); + } + + /** Reload layout. <b>Must be called on the SWT thread</b> */ + private void reloadLayoutSwt(ChangeFlags flags, boolean libraryChanged) { + assert mConfigComposite.getDisplay().getThread() == Thread.currentThread(); + boolean recompute = false; if (flags.rClass) { recompute = true; if (mEditedFile != null) { - ProjectResources projectRes = ResourceManager.getInstance().getProjectResources( + ResourceManager manager = ResourceManager.getInstance(); + ProjectResources projectRes = manager.getProjectResources( mEditedFile.getProject()); if (projectRes != null) { @@ -1602,11 +1616,7 @@ public class GraphicalEditorPart extends EditorPart // However there's no recompute, as it could not be needed // (for instance a new layout) // If a resource that's not a layout changed this will trigger a recompute anyway. - mCanvasViewer.getControl().getDisplay().asyncExec(new Runnable() { - public void run() { - mConfigComposite.updateLocales(); - } - }); + mConfigComposite.updateLocales(); } // if a resources was modified. @@ -1614,7 +1624,8 @@ public class GraphicalEditorPart extends EditorPart if (flags.resources || (libraryChanged && flags.layout)) { recompute = true; - // TODO: differentiate between single and multi resource file changed, and whether the resource change affects the cache. + // TODO: differentiate between single and multi resource file changed, and whether + // the resource change affects the cache. // force a reparse in case a value XML file changed. mConfiguredProjectRes = null; @@ -1637,15 +1648,11 @@ public class GraphicalEditorPart extends EditorPart } if (recompute) { - mCanvasViewer.getControl().getDisplay().asyncExec(new Runnable() { - public void run() { - if (mLayoutEditor.isGraphicalEditorActive()) { - recomputeLayout(); - } else { - mNeedsRecompute = true; - } - } - }); + if (mLayoutEditor.isGraphicalEditorActive()) { + recomputeLayout(); + } else { + mNeedsRecompute = true; + } } } } |