Fix for bug #75305: Doing Undo and Redo crashes browser

Added nsAutoUpdateViewBatch class, and use it in
nsPlaintexteditor::Undo()/Redo().

    editor/base/nsEditorUtils.h
    editor/base/nsPlaintextEditor.cpp

r=jfrancis@netscape.com   sr=sfraser@netscape.com
This commit is contained in:
kin%netscape.com 2001-05-11 13:59:11 +00:00
parent 91d049b213
commit 729a670d51
4 changed files with 56 additions and 0 deletions

View File

@ -144,6 +144,31 @@ class nsAutoTxnsConserveSelection
PRBool mOldState;
};
/***************************************************************************
* stack based helper class for batching reflow and paint requests.
*/
class nsAutoUpdateViewBatch
{
public:
nsAutoUpdateViewBatch(nsEditor *ed) : mEd(ed)
{
NS_ASSERTION(mEd, "null mEd pointer!");
if (mEd)
mEd->BeginUpdateViewBatch();
}
~nsAutoUpdateViewBatch()
{
if (mEd)
mEd->EndUpdateViewBatch();
}
protected:
nsEditor *mEd;
};
/******************************************************************************
* some helper classes for iterating the dom tree
*****************************************************************************/

View File

@ -1301,6 +1301,8 @@ nsPlaintextEditor::SetWrapWidth(PRInt32 aWrapColumn)
NS_IMETHODIMP
nsPlaintextEditor::Undo(PRUint32 aCount)
{
nsAutoUpdateViewBatch beginViewBatching(this);
ForceCompositionEnd();
nsresult result = NS_OK;
@ -1327,6 +1329,7 @@ nsPlaintextEditor::Redo(PRUint32 aCount)
{
nsresult result = NS_OK;
nsAutoUpdateViewBatch beginViewBatching(this);
nsAutoRules beginRulesSniffing(this, kOpRedo, nsIEditor::eNone);
nsTextRulesInfo ruleInfo(nsTextEditRules::kRedo);

View File

@ -144,6 +144,31 @@ class nsAutoTxnsConserveSelection
PRBool mOldState;
};
/***************************************************************************
* stack based helper class for batching reflow and paint requests.
*/
class nsAutoUpdateViewBatch
{
public:
nsAutoUpdateViewBatch(nsEditor *ed) : mEd(ed)
{
NS_ASSERTION(mEd, "null mEd pointer!");
if (mEd)
mEd->BeginUpdateViewBatch();
}
~nsAutoUpdateViewBatch()
{
if (mEd)
mEd->EndUpdateViewBatch();
}
protected:
nsEditor *mEd;
};
/******************************************************************************
* some helper classes for iterating the dom tree
*****************************************************************************/

View File

@ -1301,6 +1301,8 @@ nsPlaintextEditor::SetWrapWidth(PRInt32 aWrapColumn)
NS_IMETHODIMP
nsPlaintextEditor::Undo(PRUint32 aCount)
{
nsAutoUpdateViewBatch beginViewBatching(this);
ForceCompositionEnd();
nsresult result = NS_OK;
@ -1327,6 +1329,7 @@ nsPlaintextEditor::Redo(PRUint32 aCount)
{
nsresult result = NS_OK;
nsAutoUpdateViewBatch beginViewBatching(this);
nsAutoRules beginRulesSniffing(this, kOpRedo, nsIEditor::eNone);
nsTextRulesInfo ruleInfo(nsTextEditRules::kRedo);