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
Родитель 1395ecc9b1
Коммит fa37dd981f
4 изменённых файлов: 56 добавлений и 0 удалений

Просмотреть файл

@ -144,6 +144,31 @@ class nsAutoTxnsConserveSelection
PRBool mOldState; 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 * some helper classes for iterating the dom tree
*****************************************************************************/ *****************************************************************************/

Просмотреть файл

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

Просмотреть файл

@ -144,6 +144,31 @@ class nsAutoTxnsConserveSelection
PRBool mOldState; 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 * some helper classes for iterating the dom tree
*****************************************************************************/ *****************************************************************************/

Просмотреть файл

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