Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 168134 Details for
Bug 273450
Wrong dialogs when closing Compare With Each Other... editor
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch with tips suggested by Tomasz
patch273450_20100512.txt (text/plain), 21.76 KB, created by
Szymon Ptaszkiewicz
on 2010-05-12 09:18:00 EDT
(
hide
)
Description:
Patch with tips suggested by Tomasz
Filename:
MIME Type:
Creator:
Szymon Ptaszkiewicz
Created:
2010-05-12 09:18:00 EDT
Size:
21.76 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.compare >Index: compare/org/eclipse/compare/CompareEditorInput.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java,v >retrieving revision 1.117 >diff -u -r1.117 CompareEditorInput.java >--- compare/org/eclipse/compare/CompareEditorInput.java 9 Apr 2010 13:06:32 -0000 1.117 >+++ compare/org/eclipse/compare/CompareEditorInput.java 12 May 2010 13:08:53 -0000 >@@ -11,10 +11,11 @@ > package org.eclipse.compare; > > import java.lang.reflect.InvocationTargetException; >-import java.util.ArrayList; > import java.util.ResourceBundle; > >+import org.eclipse.compare.contentmergeviewer.ContentMergeViewer; > import org.eclipse.compare.contentmergeviewer.IFlushable; >+import org.eclipse.compare.contentmergeviewer.IFlushable2; > import org.eclipse.compare.internal.BinaryCompareViewer; > import org.eclipse.compare.internal.ChangePropertyAction; > import org.eclipse.compare.internal.CompareContentViewerSwitchingPane; >@@ -177,7 +178,10 @@ > * @since 3.3 > */ > public static final String PROP_SELECTED_EDITION= ICompareUIConstants.PROP_SELECTED_EDITION; >- >+ >+ public static final int LEFT_SIDE = 1; >+ public static final int RIGHT_SIDE = 2; >+ > private static final String COMPARE_EDITOR_IMAGE_NAME= "eview16/compare_view.gif"; //$NON-NLS-1$ > private static Image fgTitleImage; > >@@ -193,8 +197,8 @@ > private String fTitle; > private ListenerList fListenerList= new ListenerList(); > private CompareNavigator fNavigator; >- private boolean fDirty= false; >- private ArrayList fDirtyViewers= new ArrayList(); >+ private ContentMergeViewer fLeftDirtyViewer = null; >+ private ContentMergeViewer fRightDirtyViewer = null; > private IPropertyChangeListener fDirtyStateListener; > > boolean fStructureCompareOnSingleClick= true; >@@ -1016,18 +1020,36 @@ > } > > /** >- * Returns <code>true</code> if there are unsaved changes. >- * The value returned is the value of the <code>DIRTY_STATE</code> property of this input object. >- >- * Returns <code>true</code> if this input has unsaved changes, >- * that is if <code>setDirty(true)</code> has been called. >- * Subclasses don't have to override if the functionality provided by <code>setDirty</code> >- * is sufficient. >- * >+ * Returns <code>true</code> if there are unsaved changes in either left or >+ * right side. The value returned is the value of the >+ * <code>DIRTY_STATE</code> property of this input object. >+ * >+ * Returns <code>true</code> if left or right side has unsaved changes >+ * Subclasses don't have to override if the functionality provided by >+ * <code>setDirty</code> is sufficient. >+ * > * @return <code>true</code> if there are changes that need to be saved > */ > public boolean isSaveNeeded() { >- return fDirty || fDirtyViewers.size() > 0; >+ return isLeftSaveNeeded() || isRightSaveNeeded(); >+ } >+ >+ /** >+ * Returns <code>true</code> if there are unsaved changes for left side. >+ * >+ * @return <code>true</code> if there are changes that need to be saved >+ */ >+ protected boolean isLeftSaveNeeded() { >+ return fLeftDirtyViewer != null; >+ } >+ >+ /** >+ * Returns <code>true</code> if there are unsaved changes for right side. >+ * >+ * @return <code>true</code> if there are changes that need to be saved >+ */ >+ protected boolean isRightSaveNeeded() { >+ return fRightDirtyViewer != null; > } > > /** >@@ -1044,31 +1066,70 @@ > } > > /** >- * Sets the dirty state of this input to the given >- * value and sends out a <code>PropertyChangeEvent</code> if the new value differs from the old value. >- * >- * @param dirty the dirty state for this compare input >+ * Sets the dirty state of this input to the given value and sends out a >+ * <code>PropertyChangeEvent</code> if the new value differs from the old >+ * value. Direct calling this method with parameter dirty equal to >+ * <code>false</code> when there are unsaved changes in viewers, results in >+ * inconsistent state. The dirty state of compare input should be based only >+ * on the information if there are changes in viewers for left or right >+ * side. >+ * >+ * @param dirty >+ * the dirty state for this compare input > */ > public void setDirty(boolean dirty) { >- boolean oldDirty = fDirty || fDirtyViewers.size() > 0; >- fDirty= dirty; >- if (!fDirty) >- fDirtyViewers.clear(); >- if (oldDirty != dirty) >- Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(dirty)); >+ boolean oldDirty = isSaveNeeded(); >+ boolean newDirty = dirty || isSaveNeeded(); >+ if (!newDirty) { >+ fLeftDirtyViewer = null; >+ fRightDirtyViewer = null; >+ } >+ if (oldDirty != isSaveNeeded()) { >+ Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(isSaveNeeded())); >+ } > } > >+ /** >+ * Method adds or removes viewers that changed left or right side of this >+ * compare input. Any modification of any of the list of viewers may result >+ * in dirty state change. >+ * >+ * @param source >+ * the object that fired <code>PropertyChangeEvent</code> >+ * modifying the dirty state >+ * @param dirty >+ * value that describes if the changes were added or removed >+ */ > private void setDirty(Object source, boolean dirty) { > Assert.isNotNull(source); >- boolean oldDirty= fDirty || fDirtyViewers.size() > 0; >- if (dirty) >- fDirtyViewers.add(source); >- else >- fDirtyViewers.remove(source); >- boolean newDirty= fDirty || fDirtyViewers.size() > 0; >- if (DEBUG) System.out.println("setDirty("+source+", "+dirty+"): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ >- if (oldDirty != newDirty) >+ boolean oldDirty = isSaveNeeded(); >+ ContentMergeViewer cmv = (ContentMergeViewer) source; >+ if (dirty) { >+ if (cmv.isLeftDirty()) { >+ if (fLeftDirtyViewer == null) { >+ fLeftDirtyViewer = cmv; >+ } >+ } >+ if (cmv.isRightDirty()) { >+ if (fRightDirtyViewer == null) { >+ fRightDirtyViewer = cmv; >+ } >+ } >+ } else { >+ if (!cmv.isLeftDirty()) { >+ fLeftDirtyViewer = null; >+ } >+ if (!cmv.isRightDirty()) { >+ fRightDirtyViewer = null; >+ } >+ } >+ boolean newDirty = isSaveNeeded(); >+ if (DEBUG) { >+ System.out.println("setDirty(" + source + ", " + dirty + "): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ >+ } >+ if (oldDirty != newDirty) { > Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(newDirty)); >+ } > } > > /* (non Javadoc) >@@ -1129,7 +1190,23 @@ > flushViewer(fStructurePane2, monitor); > flushViewer(fContentInputPane, monitor); > } >- >+ >+ protected void flushLeftViewers(IProgressMonitor monitor) { >+ // flush changes in left dirty viewer >+ flushViewer(fStructureInputPane, monitor, LEFT_SIDE); >+ flushViewer(fStructurePane1, monitor, LEFT_SIDE); >+ flushViewer(fStructurePane2, monitor, LEFT_SIDE); >+ flushViewer(fContentInputPane, monitor, LEFT_SIDE); >+ } >+ >+ protected void flushRightViewers(IProgressMonitor monitor) { >+ // flush changes in right dirty viewer >+ flushViewer(fStructureInputPane, monitor, RIGHT_SIDE); >+ flushViewer(fStructurePane1, monitor, RIGHT_SIDE); >+ flushViewer(fStructurePane2, monitor, RIGHT_SIDE); >+ flushViewer(fContentInputPane, monitor, RIGHT_SIDE); >+ } >+ > private static void flushViewer(CompareViewerPane pane, IProgressMonitor pm) { > if (pane != null) { > IFlushable flushable = (IFlushable)Utilities.getAdapter(pane, IFlushable.class); >@@ -1138,6 +1215,14 @@ > } > } > >+ private static void flushViewer(CompareViewerPane pane, IProgressMonitor pm, int side) { >+ if (pane != null) { >+ IFlushable2 flushable = (IFlushable2)Utilities.getAdapter(pane, IFlushable2.class); >+ if (flushable != null) >+ flushable.flush(side, pm); >+ } >+ } >+ > /* (non-Javadoc) > * @see org.eclipse.compare.ICompareContainer#addCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInput, org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener) > */ >Index: compare/org/eclipse/compare/CompareViewerSwitchingPane.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java,v >retrieving revision 1.35 >diff -u -r1.35 CompareViewerSwitchingPane.java >--- compare/org/eclipse/compare/CompareViewerSwitchingPane.java 4 Mar 2010 16:26:05 -0000 1.35 >+++ compare/org/eclipse/compare/CompareViewerSwitchingPane.java 12 May 2010 13:08:53 -0000 >@@ -11,6 +11,7 @@ > package org.eclipse.compare; > > import org.eclipse.compare.contentmergeviewer.IFlushable; >+import org.eclipse.compare.contentmergeviewer.IFlushable2; > import org.eclipse.compare.internal.CompareMessages; > import org.eclipse.compare.internal.NullViewer; > import org.eclipse.compare.internal.Utilities; >@@ -354,6 +355,14 @@ > return flushable; > } > } >+ if (adapter == IFlushable2.class) { >+ Viewer v= getViewer(); >+ if (v != null) { >+ IFlushable2 flushable = (IFlushable2)Utilities.getAdapter(v, IFlushable2.class); >+ if (flushable != null) >+ return flushable; >+ } >+ } > return super.getAdapter(adapter); > } > >Index: compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java,v >retrieving revision 1.79 >diff -u -r1.79 ContentMergeViewer.java >--- compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java 28 Apr 2010 13:46:45 -0000 1.79 >+++ compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java 12 May 2010 13:08:53 -0000 >@@ -102,7 +102,7 @@ > * @see TextMergeViewer > */ > public abstract class ContentMergeViewer extends ContentViewer >- implements IPropertyChangeNotifier, IFlushable { >+ implements IPropertyChangeNotifier, IFlushable, IFlushable2 { > > /* package */ static final int HORIZONTAL= 1; > /* package */ static final int VERTICAL= 2; >@@ -1168,9 +1168,8 @@ > protected void setLeftDirty(boolean dirty) { > if (isLeftDirty() != dirty) { > fIsLeftDirty = dirty; >- // Only fire the event if the combined dirty state has changed >- if (!isRightDirty()) >- fireDirtyState(dirty); >+ // Always fire the event if the dirty state has changed >+ fireDirtyState(dirty); > } > } > >@@ -1186,9 +1185,8 @@ > protected void setRightDirty(boolean dirty) { > if (isRightDirty() != dirty) { > fIsRightDirty = dirty; >- // Only fire the event if the combined dirty state has changed >- if (!isLeftDirty()) >- fireDirtyState(dirty); >+ // Always fire the event if the dirty state has changed >+ fireDirtyState(dirty); > } > } > >@@ -1216,47 +1214,63 @@ > flushContent(getInput(), monitor); > } > >- /** >- * Flush the modified content back to input elements via the content provider. >- * The provided input may be the current input of the viewer or it may be >- * the previous input (i.e. this method may be called to flush modified content >- * during an input change). >- * @param input the compare input >- * @param monitor a progress monitor or <code>null</code> if the method >- * was call from a place where a progress monitor was not available. >- * @since 3.3 >- */ >- protected void flushContent(Object input, IProgressMonitor monitor) { >- >- // write back modified contents >- IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); >- >- boolean leftEmpty= content.getLeftContent(input) == null; >- boolean rightEmpty= content.getRightContent(input) == null; >+ public final void flush(int side, IProgressMonitor monitor) { >+ if (side == CompareEditorInput.LEFT_SIDE) { >+ flushLeftSide(getInput(), monitor); >+ } else if (side == CompareEditorInput.RIGHT_SIDE) { >+ flushRightSide(getInput(), monitor); >+ } >+ } >+ >+ protected void flushLeftSide(Object input, IProgressMonitor monitor) { >+ IMergeViewerContentProvider content = (IMergeViewerContentProvider) getContentProvider(); >+ >+ boolean rightEmpty = content.getRightContent(input) == null; > > if (getCompareConfiguration().isLeftEditable() && isLeftDirty()) { >- byte[] bytes= getContents(true); >+ byte[] bytes = getContents(true); > if (rightEmpty && bytes != null && bytes.length == 0) >- bytes= null; >+ bytes = null; > setLeftDirty(false); > content.saveLeftContent(input, bytes); > } >- >+ } >+ >+ protected void flushRightSide(Object input, IProgressMonitor monitor) { >+ IMergeViewerContentProvider content = (IMergeViewerContentProvider) getContentProvider(); >+ >+ boolean leftEmpty = content.getLeftContent(input) == null; >+ > if (getCompareConfiguration().isRightEditable() && isRightDirty()) { >- byte[] bytes= getContents(false); >+ byte[] bytes = getContents(false); > if (leftEmpty && bytes != null && bytes.length == 0) >- bytes= null; >+ bytes = null; > setRightDirty(false); > content.saveRightContent(input, bytes); > } > } > > /** >+ * Flush the modified content back to input elements via the content provider. >+ * The provided input may be the current input of the viewer or it may be >+ * the previous input (i.e. this method may be called to flush modified content >+ * during an input change). >+ * @param input the compare input >+ * @param monitor a progress monitor or <code>null</code> if the method >+ * was call from a place where a progress monitor was not available. >+ * @since 3.3 >+ */ >+ protected void flushContent(Object input, IProgressMonitor monitor) { >+ flushLeftSide(input, monitor); >+ flushRightSide(input, monitor); >+ } >+ >+ /** > * Return the dirty state of the right side of this viewer. > * @return the dirty state of the right side of this viewer > * @since 3.3 > */ >- protected boolean isRightDirty() { >+ public boolean isRightDirty() { > return fIsRightDirty; > } > >@@ -1265,7 +1279,7 @@ > * @return the dirty state of the left side of this viewer > * @since 3.3 > */ >- protected boolean isLeftDirty() { >+ public boolean isLeftDirty() { > return fIsLeftDirty; > } > >Index: compare/org/eclipse/compare/contentmergeviewer/IFlushable2.java >=================================================================== >RCS file: compare/org/eclipse/compare/contentmergeviewer/IFlushable2.java >diff -N compare/org/eclipse/compare/contentmergeviewer/IFlushable2.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ compare/org/eclipse/compare/contentmergeviewer/IFlushable2.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,7 @@ >+package org.eclipse.compare.contentmergeviewer; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+ >+public interface IFlushable2 { >+ void flush(int side, IProgressMonitor monitor); >+} >Index: compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java,v >retrieving revision 1.270 >diff -u -r1.270 TextMergeViewer.java >--- compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java 22 Mar 2010 12:43:53 -0000 1.270 >+++ compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java 12 May 2010 13:08:56 -0000 >@@ -4838,15 +4838,9 @@ > return fMerger.virtualToRealPosition(contributor, v); > } > >- /* (non-Javadoc) >- * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#flushContent(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) >- */ >- protected void flushContent(Object oldInput, IProgressMonitor monitor) { >- >- // check and handle any shared buffers >+ protected void flushLeftSide(Object oldInput, IProgressMonitor monitor){ > IMergeViewerContentProvider content= getMergeContentProvider(); > Object leftContent = content.getLeftContent(oldInput); >- Object rightContent = content.getRightContent(oldInput); > > if (leftContent != null && getCompareConfiguration().isLeftEditable() && isLeftDirty()) { > if (fLeftContributor.hasSharedDocument(leftContent)) { >@@ -4854,6 +4848,11 @@ > setLeftDirty(false); > } > } >+ } >+ >+ protected void flushRightSide(Object oldInput, IProgressMonitor monitor){ >+ IMergeViewerContentProvider content= getMergeContentProvider(); >+ Object rightContent = content.getRightContent(oldInput); > > if (rightContent != null && getCompareConfiguration().isRightEditable() && isRightDirty()) { > if (fRightContributor.hasSharedDocument(rightContent)) { >@@ -4861,7 +4860,17 @@ > setRightDirty(false); > } > } >- >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#flushContent(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ protected void flushContent(Object oldInput, IProgressMonitor monitor) { >+ flushLeftSide(oldInput, monitor); >+ flushRightSide(oldInput, monitor); >+ >+ IMergeViewerContentProvider content = getMergeContentProvider(); >+ > if (!(content instanceof MergeViewerContentProvider) || isLeftDirty() || isRightDirty()) { > super.flushContent(oldInput, monitor); > } >#P org.eclipse.team.ui >Index: src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java,v >retrieving revision 1.9 >diff -u -r1.9 LocalResourceSaveableComparison.java >--- src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java 12 Sep 2007 19:40:21 -0000 1.9 >+++ src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java 12 May 2010 13:08:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2006, 2007 IBM Corporation and others. >+ * Copyright (c) 2006, 2010 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -150,7 +150,11 @@ > * @throws CoreException > */ > protected void flushViewers(IProgressMonitor monitor) throws CoreException { >- editorInput.saveChanges(monitor); >+ if (editorInput instanceof SaveablesCompareEditorInput) { >+ ((SaveablesCompareEditorInput) editorInput).saveChanges(monitor, this); >+ } else { >+ editorInput.saveChanges(monitor); >+ } > } > > /** >@@ -206,6 +210,9 @@ > public boolean isDirty() { > // We need to get the dirty state from the compare editor input > // since it is our only connection to the merge viewer >+ if (editorInput instanceof SaveablesCompareEditorInput) { >+ return ((SaveablesCompareEditorInput) editorInput).isSaveNeeded(this); >+ } > return editorInput.isSaveNeeded(); > } > >@@ -232,6 +239,18 @@ > * @see org.eclipse.ui.Saveable#getName() > */ > public String getName() { >+ // When we compare two files with each other we need to know the exact >+ // name of each of the files, not the name taken from the input. Input >+ // gives the name based on the main element of the input. The way how >+ // the main element is calculated is described in method >+ // org.eclipse.team.internal.ui.mapping.AbstractCompareInput#getMainElement() >+ // See bug 273450. >+ if (fileElement.equals(input.getLeft())) { >+ return input.getLeft().getName(); >+ } >+ if (fileElement.equals(input.getRight())) { >+ return input.getRight().getName(); >+ } > return input.getName(); > } > >Index: src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java,v >retrieving revision 1.5 >diff -u -r1.5 SaveablesCompareEditorInput.java >--- src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java 20 Apr 2010 14:55:14 -0000 1.5 >+++ src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java 12 May 2010 13:08:57 -0000 >@@ -359,6 +359,40 @@ > return super.isDirty(); > } > >+ /* package */ boolean isSaveNeeded(Saveable saveable) { >+ // Method gives information if the Saveable given as a parameter needs >+ // to be saved. Parameter arg can be either equal to fLeftSaveable or to >+ // fRightSaveable. If the parameter is null or differs from both left >+ // and right Saveable then default isSaveNeeded() is called. Default >+ // method isSaveNeeded() is not aware which Saveable we wish to check >+ // therefore it returns the state of the whole CompareEditorInput. >+ // Whenever possible this method should be called instead of default >+ // isSaveNeeded(). See bug 273450. >+ if (saveable == null) { >+ return isSaveNeeded(); >+ } >+ if (saveable.equals(fLeftSaveable)) { >+ return isLeftSaveNeeded(); >+ } >+ if (saveable.equals(fRightSaveable)) { >+ return isRightSaveNeeded(); >+ } >+ return isSaveNeeded(); >+ } >+ >+ public void saveChanges(IProgressMonitor monitor, Saveable saveable) >+ throws CoreException { >+ if (saveable == null) { >+ super.flushViewers(monitor); >+ } else if (saveable.equals(fLeftSaveable)) { >+ flushLeftViewers(monitor); >+ } else if (saveable.equals(fRightSaveable)) { >+ flushRightViewers(monitor); >+ } else { >+ super.flushViewers(monitor); >+ } >+ } >+ > /** > * Close the editor if it is not dirty. If it is still dirty, let the > * content merge viewer handle the compare input change.
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 273450
:
161445
|
161585
|
168134
|
168536
|
168537
|
168897
|
176219