TransactionManager fix for bug #11590: eliminate NS_COMFALSE

Modified all nsITransactionListener::Will* methods and implementations
to use an aInterrupt argument.

    mozilla/editor/base/nsEditorTxnLog.cpp
    mozilla/editor/base/nsEditorTxnLog.h
    mozilla/editor/txmgr/public/nsITransactionListener.h
    mozilla/editor/txmgr/src/nsTransactionItem.cpp
    mozilla/editor/txmgr/src/nsTransactionManager.cpp
    mozilla/editor/txmgr/src/nsTransactionManager.h

r=brade@netscape.com
This commit is contained in:
kin%netscape.com 1999-11-11 19:35:40 +00:00
Родитель 97427cebe7
Коммит 6496c7f512
8 изменённых файлов: 81 добавлений и 268 удалений

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

@ -89,7 +89,7 @@ nsEditorTxnLog::QueryInterface(REFNSIID aIID, void** aInstancePtr)
}
NS_IMETHODIMP
nsEditorTxnLog::WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -127,7 +127,7 @@ nsEditorTxnLog::DidDo(nsITransactionManager *aTxMgr, nsITransaction *aTransactio
}
NS_IMETHODIMP
nsEditorTxnLog::WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -183,7 +183,7 @@ nsEditorTxnLog::DidUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransact
}
NS_IMETHODIMP
nsEditorTxnLog::WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -239,7 +239,7 @@ nsEditorTxnLog::DidRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransact
}
NS_IMETHODIMP
nsEditorTxnLog::WillBeginBatch(nsITransactionManager *aTxMgr)
nsEditorTxnLog::WillBeginBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -273,7 +273,7 @@ nsEditorTxnLog::DidBeginBatch(nsITransactionManager *aTxMgr, nsresult aResult)
}
NS_IMETHODIMP
nsEditorTxnLog::WillEndBatch(nsITransactionManager *aTxMgr)
nsEditorTxnLog::WillEndBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -307,7 +307,7 @@ nsEditorTxnLog::DidEndBatch(nsITransactionManager *aTxMgr, nsresult aResult)
}
NS_IMETHODIMP
nsEditorTxnLog::WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction)
nsEditorTxnLog::WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);

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

@ -54,17 +54,17 @@ public:
NS_DECL_ISUPPORTS
/* nsITransactionListener method implementations. */
NS_IMETHOD WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aDoResult);
NS_IMETHOD WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aUndoResult);
NS_IMETHOD WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aRedoResult);
NS_IMETHOD WillBeginBatch(nsITransactionManager *aTxMgr);
NS_IMETHOD WillBeginBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt);
NS_IMETHOD DidBeginBatch(nsITransactionManager *aTxMgr, nsresult aResult);
NS_IMETHOD WillEndBatch(nsITransactionManager *aTxMgr);
NS_IMETHOD WillEndBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt);
NS_IMETHOD DidEndBatch(nsITransactionManager *aTxMgr, nsresult aResult);
NS_IMETHOD WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction);
NS_IMETHOD WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool aDidMerge, nsresult aMergeResult);

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

@ -89,7 +89,7 @@ nsEditorTxnLog::QueryInterface(REFNSIID aIID, void** aInstancePtr)
}
NS_IMETHODIMP
nsEditorTxnLog::WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -127,7 +127,7 @@ nsEditorTxnLog::DidDo(nsITransactionManager *aTxMgr, nsITransaction *aTransactio
}
NS_IMETHODIMP
nsEditorTxnLog::WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -183,7 +183,7 @@ nsEditorTxnLog::DidUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransact
}
NS_IMETHODIMP
nsEditorTxnLog::WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction)
nsEditorTxnLog::WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -239,7 +239,7 @@ nsEditorTxnLog::DidRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransact
}
NS_IMETHODIMP
nsEditorTxnLog::WillBeginBatch(nsITransactionManager *aTxMgr)
nsEditorTxnLog::WillBeginBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -273,7 +273,7 @@ nsEditorTxnLog::DidBeginBatch(nsITransactionManager *aTxMgr, nsresult aResult)
}
NS_IMETHODIMP
nsEditorTxnLog::WillEndBatch(nsITransactionManager *aTxMgr)
nsEditorTxnLog::WillEndBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt)
{
LOCK_LOG(this);
@ -307,7 +307,7 @@ nsEditorTxnLog::DidEndBatch(nsITransactionManager *aTxMgr, nsresult aResult)
}
NS_IMETHODIMP
nsEditorTxnLog::WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction)
nsEditorTxnLog::WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool *aInterrupt)
{
LOCK_LOG(this);

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

@ -54,17 +54,17 @@ public:
NS_DECL_ISUPPORTS
/* nsITransactionListener method implementations. */
NS_IMETHOD WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidDo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aDoResult);
NS_IMETHOD WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidUndo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aUndoResult);
NS_IMETHOD WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction);
NS_IMETHOD WillRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidRedo(nsITransactionManager *aTxMgr, nsITransaction *aTransaction, nsresult aRedoResult);
NS_IMETHOD WillBeginBatch(nsITransactionManager *aTxMgr);
NS_IMETHOD WillBeginBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt);
NS_IMETHOD DidBeginBatch(nsITransactionManager *aTxMgr, nsresult aResult);
NS_IMETHOD WillEndBatch(nsITransactionManager *aTxMgr);
NS_IMETHOD WillEndBatch(nsITransactionManager *aTxMgr, PRBool *aInterrupt);
NS_IMETHOD DidEndBatch(nsITransactionManager *aTxMgr, nsresult aResult);
NS_IMETHOD WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction);
NS_IMETHOD WillMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool *aInterrupt);
NS_IMETHOD DidMerge(nsITransactionManager *aTxMgr, nsITransaction *aTopTransaction, nsITransaction *aTransaction, PRBool aDidMerge, nsresult aMergeResult);

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

@ -1,204 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsITransactionListener_h__
#define nsITransactionListener_h__
#include "nsISupports.h"
class nsITransaction;
class nsITransactionManager;
/*
Transaction Listener interface to outside world
*/
#define NS_ITRANSACTIONLISTENER_IID \
{ /* 58E330C4-7B48-11d2-98B9-00805F297D89 */ \
0x58e330c4, 0x7b48, 0x11d2, \
{ 0x98, 0xb9, 0x0, 0x80, 0x5f, 0x29, 0x7d, 0x89 } }
/**
* A transaction listener specific interface.
* <P>
* It's implemented by an object that tracks transactions.
*/
class nsITransactionListener : public nsISupports {
public:
static const nsIID& GetIID() { static nsIID iid = NS_ITRANSACTIONLISTENER_IID; return iid; }
/**
* Called before a transaction manager calls a transaction's
* Do() method.
* @param aManager the transaction manager doing the transaction.
* @param aTransaction the transaction being done.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillDo(nsITransactionManager *aManager,
nsITransaction *aTransaction) = 0;
/**
* Called after a transaction manager calls the Do() method of
* a transaction.
* @param aManager the transaction manager that did the transaction.
* @param aTransaction the transaction that was done.
* @param aDoResult the nsresult returned after doing the transaction.
* @result error status returned by the listener.
*/
NS_IMETHOD DidDo(nsITransactionManager *aManager,
nsITransaction *aTransaction,
nsresult aDoResult) = 0;
/**
* Called before a transaction manager calls the Undo() method of
* a transaction.
* @param aManager the transaction manager undoing the transaction.
* @param aTransaction the transaction being undone.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillUndo(nsITransactionManager *aManager,
nsITransaction *aTransaction) = 0;
/**
* Called after a transaction manager calls the Undo() method of
* a transaction.
* @param aManager the transaction manager undoing the transaction.
* @param aTransaction the transaction being undone.
* @param aUndoResult the nsresult returned after undoing the transaction.
* @result error status returned by the listener.
*/
NS_IMETHOD DidUndo(nsITransactionManager *aManager,
nsITransaction *aTransaction,
nsresult aUndoResult) = 0;
/**
* Called before a transaction manager calls the Redo() method of
* a transaction.
* @param aManager the transaction manager redoing the transaction.
* @param aTransaction the transaction being redone.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillRedo(nsITransactionManager *aManager,
nsITransaction *aTransaction) = 0;
/**
* Called after a transaction manager calls the Redo() method of
* a transaction.
* @param aManager the transaction manager redoing the transaction.
* @param aTransaction the transaction being redone.
* @param aRedoResult the nsresult returned after redoing the transaction.
* @result error status returned by the listener.
*/
NS_IMETHOD DidRedo(nsITransactionManager *aManager,
nsITransaction *aTransaction,
nsresult aRedoResult) = 0;
/**
* Called before a transaction manager begins a batch.
* @param aManager the transaction manager beginning a batch.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillBeginBatch(nsITransactionManager *aManager) = 0;
/**
* Called after a transaction manager begins a batch.
* @param aManager the transaction manager that began a batch.
* @param aResult the nsresult returned after beginning a batch.
* @result error status returned by the listener.
*/
NS_IMETHOD DidBeginBatch(nsITransactionManager *aManager,
nsresult aResult) = 0;
/**
* Called before a transaction manager ends a batch.
* @param aManager the transaction manager ending a batch.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillEndBatch(nsITransactionManager *aManager) = 0;
/**
* Called after a transaction manager ends a batch.
* @param aManager the transaction manager ending a batch.
* @param aResult the nsresult returned after ending a batch.
* @result error status returned by the listener.
*/
NS_IMETHOD DidEndBatch(nsITransactionManager *aManager,
nsresult aResult) = 0;
/**
* Called before a transaction manager tries to merge
* a transaction, that was just executed, with the
* transaction at the top of the undo stack.
* @param aManager the transaction manager ending a batch.
* @param aTopTransaction the transaction at the top of the undo stack.
* @param aTransactionToMerge the transaction to merge.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD WillMerge(nsITransactionManager *aManager,
nsITransaction *aTopTransaction,
nsITransaction *aTransactionToMerge) = 0;
/**
* Called after a transaction manager tries to merge
* a transaction, that was just executed, with the
* transaction at the top of the undo stack.
* @param aManager the transaction manager ending a batch.
* @param aTopTransaction the transaction at the top of the undo stack.
* @param aTransactionToMerge the transaction to merge.
* @param aDidMerge true if transaction was merged, else false.
* @param aMergeResult the nsresult returned after the merge attempt.
* @result error status returned by the listener. NS_OK
* should be used to indicate no error, proceed with normal control
* flow. NS_COMFALSE can be returned by the listener to
* indicate no error, interrupt normal control flow.
*/
NS_IMETHOD DidMerge(nsITransactionManager *aManager,
nsITransaction *aTopTransaction,
nsITransaction *aTransactionToMerge,
PRBool aDidMerge,
nsresult aMergeResult) = 0;
/* XXX: We should probably add pruning notification methods. */
};
#endif // nsITransactionListener_h__

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

@ -165,13 +165,15 @@ nsTransactionItem::UndoChildren(nsTransactionManager *aTxMgr)
return result;
}
result = aTxMgr->WillUndoNotify(t);
PRBool doInterrupt = PR_FALSE;
result = aTxMgr->WillUndoNotify(t, &doInterrupt);
if (NS_FAILED(result)) {
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
return NS_OK;
}
@ -254,13 +256,15 @@ nsTransactionItem::RedoChildren(nsTransactionManager *aTxMgr)
return result;
}
result = aTxMgr->WillRedoNotify(t);
PRBool doInterrupt = PR_FALSE;
result = aTxMgr->WillRedoNotify(t, &doInterrupt);
if (NS_FAILED(result)) {
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
return NS_OK;
}

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

@ -135,14 +135,16 @@ nsTransactionManager::Do(nsITransaction *aTransaction)
LOCK_TX_MANAGER(this);
result = WillDoNotify(aTransaction);
PRBool doInterrupt = PR_FALSE;
result = WillDoNotify(aTransaction, &doInterrupt);
if (NS_FAILED(result)) {
UNLOCK_TX_MANAGER(this);
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
UNLOCK_TX_MANAGER(this);
return NS_OK;
}
@ -215,14 +217,16 @@ nsTransactionManager::Undo()
return result;
}
result = WillUndoNotify(t);
PRBool doInterrupt = PR_FALSE;
result = WillUndoNotify(t, &doInterrupt);
if (NS_FAILED(result)) {
UNLOCK_TX_MANAGER(this);
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
UNLOCK_TX_MANAGER(this);
return NS_OK;
}
@ -294,14 +298,16 @@ nsTransactionManager::Redo()
return result;
}
result = WillRedoNotify(t);
PRBool doInterrupt = PR_FALSE;
result = WillRedoNotify(t, &doInterrupt);
if (NS_FAILED(result)) {
UNLOCK_TX_MANAGER(this);
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
UNLOCK_TX_MANAGER(this);
return NS_OK;
}
@ -358,14 +364,16 @@ nsTransactionManager::BeginBatch()
LOCK_TX_MANAGER(this);
result = WillBeginBatchNotify();
PRBool doInterrupt = PR_FALSE;
result = WillBeginBatchNotify(&doInterrupt);
if (NS_FAILED(result)) {
UNLOCK_TX_MANAGER(this);
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
UNLOCK_TX_MANAGER(this);
return NS_OK;
}
@ -417,14 +425,16 @@ nsTransactionManager::EndBatch()
return NS_ERROR_FAILURE;
}
result = WillEndBatchNotify();
PRBool doInterrupt = PR_FALSE;
result = WillEndBatchNotify(&doInterrupt);
if (NS_FAILED(result)) {
UNLOCK_TX_MANAGER(this);
return result;
}
if (result == NS_COMFALSE) {
if (doInterrupt) {
UNLOCK_TX_MANAGER(this);
return NS_OK;
}
@ -722,7 +732,7 @@ nsTransactionManager::ClearRedoStack()
}
nsresult
nsTransactionManager::WillDoNotify(nsITransaction *aTransaction)
nsTransactionManager::WillDoNotify(nsITransaction *aTransaction, PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -737,9 +747,9 @@ nsTransactionManager::WillDoNotify(nsITransaction *aTransaction)
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillDo(this, aTransaction);
result = listener->WillDo(this, aTransaction, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -772,7 +782,7 @@ nsTransactionManager::DidDoNotify(nsITransaction *aTransaction, nsresult aDoResu
}
nsresult
nsTransactionManager::WillUndoNotify(nsITransaction *aTransaction)
nsTransactionManager::WillUndoNotify(nsITransaction *aTransaction, PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -787,9 +797,9 @@ nsTransactionManager::WillUndoNotify(nsITransaction *aTransaction)
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillUndo(this, aTransaction);
result = listener->WillUndo(this, aTransaction, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -822,7 +832,7 @@ nsTransactionManager::DidUndoNotify(nsITransaction *aTransaction, nsresult aUndo
}
nsresult
nsTransactionManager::WillRedoNotify(nsITransaction *aTransaction)
nsTransactionManager::WillRedoNotify(nsITransaction *aTransaction, PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -837,9 +847,9 @@ nsTransactionManager::WillRedoNotify(nsITransaction *aTransaction)
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillRedo(this, aTransaction);
result = listener->WillRedo(this, aTransaction, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -872,7 +882,7 @@ nsTransactionManager::DidRedoNotify(nsITransaction *aTransaction, nsresult aRedo
}
nsresult
nsTransactionManager::WillBeginBatchNotify()
nsTransactionManager::WillBeginBatchNotify(PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -887,9 +897,9 @@ nsTransactionManager::WillBeginBatchNotify()
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillBeginBatch(this);
result = listener->WillBeginBatch(this, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -922,7 +932,7 @@ nsTransactionManager::DidBeginBatchNotify(nsresult aResult)
}
nsresult
nsTransactionManager::WillEndBatchNotify()
nsTransactionManager::WillEndBatchNotify(PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -937,9 +947,9 @@ nsTransactionManager::WillEndBatchNotify()
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillEndBatch(this);
result = listener->WillEndBatch(this, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -972,7 +982,7 @@ nsTransactionManager::DidEndBatchNotify(nsresult aResult)
}
nsresult
nsTransactionManager::WillMergeNotify(nsITransaction *aTop, nsITransaction *aTransaction)
nsTransactionManager::WillMergeNotify(nsITransaction *aTop, nsITransaction *aTransaction, PRBool *aInterrupt)
{
if (!mListeners)
return NS_OK;
@ -987,9 +997,9 @@ nsTransactionManager::WillMergeNotify(nsITransaction *aTop, nsITransaction *aTra
if (!listener)
return NS_ERROR_FAILURE;
result = listener->WillMerge(this, aTop, aTransaction);
result = listener->WillMerge(this, aTop, aTransaction, aInterrupt);
if (NS_FAILED(result) || result == NS_COMFALSE)
if (NS_FAILED(result) || *aInterrupt)
break;
}
@ -1150,12 +1160,14 @@ nsTransactionManager::EndTransaction()
if (topTransaction) {
result = WillMergeNotify(topTransaction, tint);
PRBool doInterrupt = PR_FALSE;
result = WillMergeNotify(topTransaction, tint, &doInterrupt);
if (NS_FAILED(result))
return result;
if (result != NS_COMFALSE) {
if (!doInterrupt) {
result = topTransaction->Merge(&didMerge, tint);
nsresult result2 = DidMergeNotify(topTransaction, tint, didMerge, result);

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

@ -81,18 +81,19 @@ public:
virtual nsresult ClearUndoStack(void);
virtual nsresult ClearRedoStack(void);
virtual nsresult WillDoNotify(nsITransaction *aTransaction);
virtual nsresult WillDoNotify(nsITransaction *aTransaction, PRBool *aInterrupt);
virtual nsresult DidDoNotify(nsITransaction *aTransaction, nsresult aDoResult);
virtual nsresult WillUndoNotify(nsITransaction *aTransaction);
virtual nsresult WillUndoNotify(nsITransaction *aTransaction, PRBool *aInterrupt);
virtual nsresult DidUndoNotify(nsITransaction *aTransaction, nsresult aUndoResult);
virtual nsresult WillRedoNotify(nsITransaction *aTransaction);
virtual nsresult WillRedoNotify(nsITransaction *aTransaction, PRBool *aInterrupt);
virtual nsresult DidRedoNotify(nsITransaction *aTransaction, nsresult aRedoResult);
virtual nsresult WillBeginBatchNotify();
virtual nsresult WillBeginBatchNotify(PRBool *aInterrupt);
virtual nsresult DidBeginBatchNotify(nsresult aResult);
virtual nsresult WillEndBatchNotify();
virtual nsresult WillEndBatchNotify(PRBool *aInterrupt);
virtual nsresult DidEndBatchNotify(nsresult aResult);
virtual nsresult WillMergeNotify(nsITransaction *aTop,
nsITransaction *aTransaction);
nsITransaction *aTransaction,
PRBool *aInterrupt);
virtual nsresult DidMergeNotify(nsITransaction *aTop,
nsITransaction *aTransaction,
PRBool aDidMerge,