diff --git a/editor/txtsvc/src/Makefile.in b/editor/txtsvc/src/Makefile.in index 2cab8d8604d6..c66781a3a402 100644 --- a/editor/txtsvc/src/Makefile.in +++ b/editor/txtsvc/src/Makefile.in @@ -52,7 +52,6 @@ LIBXUL_LIBRARY = 1 CPPSRCS = \ nsFilteredContentIterator.cpp \ nsTextServicesDocument.cpp \ - nsTSDNotifier.cpp \ $(NULL) diff --git a/editor/txtsvc/src/nsTSDNotifier.cpp b/editor/txtsvc/src/nsTSDNotifier.cpp deleted file mode 100644 index 9fcee55ddf9e..000000000000 --- a/editor/txtsvc/src/nsTSDNotifier.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla 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/MPL/ - * - * 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 the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either of the GNU General Public License Version 2 or later (the "GPL"), - * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -#include "nsString.h" -#include "nsIEditActionListener.h" -#include "nsTSDNotifier.h" -#include "nsTextServicesDocument.h" - - -nsTSDNotifier::nsTSDNotifier(nsTextServicesDocument *aDoc) : mDoc(aDoc) -{ -} - -nsTSDNotifier::~nsTSDNotifier() -{ - mDoc = 0; -} - -#define DEBUG_TSD_NOTIFIER_REFCNT 1 - -#ifdef DEBUG_TSD_NOTIFIER_REFCNT - -nsrefcnt nsTSDNotifier::AddRef(void) -{ - return ++mRefCnt; -} - -nsrefcnt nsTSDNotifier::Release(void) -{ - NS_PRECONDITION(0 != mRefCnt, "dup release"); - if (--mRefCnt == 0) { - NS_DELETEXPCOM(this); - return 0; - } - return mRefCnt; -} - -#else - -NS_IMPL_ADDREF(nsTSDNotifier) -NS_IMPL_RELEASE(nsTSDNotifier) - -#endif - -NS_IMPL_QUERY_INTERFACE1(nsTSDNotifier, nsIEditActionListener) - -NS_IMETHODIMP -nsTSDNotifier::WillInsertNode(nsIDOMNode *aNode, - nsIDOMNode *aParent, - PRInt32 aPosition) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidInsertNode(nsIDOMNode *aNode, - nsIDOMNode *aParent, - PRInt32 aPosition, - nsresult aResult) -{ - if (NS_FAILED(aResult)) - return NS_OK; - - if (!mDoc) - return NS_ERROR_FAILURE; - - return mDoc->InsertNode(aNode, aParent, aPosition); -} - -NS_IMETHODIMP -nsTSDNotifier::WillDeleteNode(nsIDOMNode *aChild) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidDeleteNode(nsIDOMNode *aChild, nsresult aResult) -{ - if (NS_FAILED(aResult)) - return NS_OK; - - if (!mDoc) - return NS_ERROR_FAILURE; - - return mDoc->DeleteNode(aChild); -} - -NS_IMETHODIMP -nsTSDNotifier::WillSplitNode(nsIDOMNode *aExistingRightNode, - PRInt32 aOffset) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidSplitNode(nsIDOMNode *aExistingRightNode, - PRInt32 aOffset, - nsIDOMNode *aNewLeftNode, - nsresult aResult) -{ - if (NS_FAILED(aResult)) - return NS_OK; - - if (!mDoc) - return NS_ERROR_FAILURE; - - return mDoc->SplitNode(aExistingRightNode, aOffset, aNewLeftNode); -} - -NS_IMETHODIMP -nsTSDNotifier::WillJoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidJoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent, - nsresult aResult) -{ - if (NS_FAILED(aResult)) - return NS_OK; - - if (!mDoc) - return NS_ERROR_FAILURE; - - return mDoc->JoinNodes(aLeftNode, aRightNode, aParent); -} - -// ------------------------------- -// stubs for unused listen methods -// ------------------------------- - -NS_IMETHODIMP -nsTSDNotifier::WillCreateNode(const nsAString& aTag, nsIDOMNode *aParent, PRInt32 aPosition) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidCreateNode(const nsAString& aTag, nsIDOMNode *aNode, nsIDOMNode *aParent, PRInt32 aPosition, nsresult aResult) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::WillInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString, nsresult aResult) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::WillDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength, nsresult aResult) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::WillDeleteSelection(nsISelection *aSelection) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsTSDNotifier::DidDeleteSelection(nsISelection *aSelection) -{ - return NS_OK; -} - - - diff --git a/editor/txtsvc/src/nsTSDNotifier.h b/editor/txtsvc/src/nsTSDNotifier.h deleted file mode 100644 index afd5bdf0e68e..000000000000 --- a/editor/txtsvc/src/nsTSDNotifier.h +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla 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/MPL/ - * - * 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 the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either of the GNU General Public License Version 2 or later (the "GPL"), - * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsTSDNotifier_h__ -#define nsTSDNotifier_h__ - -#include "nsCOMPtr.h" -#include "nsIEditActionListener.h" - -class nsTextServicesDocument; - -class nsTSDNotifier : public nsIEditActionListener -{ -private: - - nsTextServicesDocument *mDoc; - -public: - - /** The default constructor. - */ - nsTSDNotifier(nsTextServicesDocument *aDoc); - - /** The default destructor. - */ - virtual ~nsTSDNotifier(); - - /* Macro for AddRef(), Release(), and QueryInterface() */ - NS_DECL_ISUPPORTS - - /* nsIEditActionListener method implementations. */ - NS_IMETHOD WillInsertNode(nsIDOMNode *aNode, - nsIDOMNode *aParent, - PRInt32 aPosition); - NS_IMETHOD DidInsertNode(nsIDOMNode *aNode, - nsIDOMNode *aParent, - PRInt32 aPosition, - nsresult aResult); - - NS_IMETHOD WillDeleteNode(nsIDOMNode *aChild); - NS_IMETHOD DidDeleteNode(nsIDOMNode *aChild, nsresult aResult); - - NS_IMETHOD WillSplitNode(nsIDOMNode * aExistingRightNode, - PRInt32 aOffset); - NS_IMETHOD DidSplitNode(nsIDOMNode *aExistingRightNode, - PRInt32 aOffset, - nsIDOMNode *aNewLeftNode, - nsresult aResult); - - NS_IMETHOD WillJoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent); - NS_IMETHOD DidJoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent, - nsresult aResult); - // these listen methods are unused: - NS_IMETHOD WillCreateNode(const nsAString& aTag, nsIDOMNode *aParent, PRInt32 aPosition); - NS_IMETHOD DidCreateNode(const nsAString& aTag, nsIDOMNode *aNode, nsIDOMNode *aParent, PRInt32 aPosition, nsresult aResult); - NS_IMETHOD WillInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString); - NS_IMETHOD DidInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString, nsresult aResult); - NS_IMETHOD WillDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength); - NS_IMETHOD DidDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength, nsresult aResult); - NS_IMETHOD WillDeleteSelection(nsISelection *aSelection); - NS_IMETHOD DidDeleteSelection(nsISelection *aSelection); -}; - -#endif // nsTSDNotifier_h__ diff --git a/editor/txtsvc/src/nsTextServicesDocument.cpp b/editor/txtsvc/src/nsTextServicesDocument.cpp index 819b9a849a51..885c13ed9a25 100644 --- a/editor/txtsvc/src/nsTextServicesDocument.cpp +++ b/editor/txtsvc/src/nsTextServicesDocument.cpp @@ -116,10 +116,6 @@ nsTextServicesDocument::nsTextServicesDocument() nsTextServicesDocument::~nsTextServicesDocument() { - nsCOMPtr editor (do_QueryReferent(mEditor)); - if (editor && mNotifier) - editor->RemoveEditActionListener(mNotifier); - ClearOffsetTable(&mOffsetTable); } @@ -152,17 +148,17 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTextServicesDocument) NS_INTERFACE_MAP_BEGIN(nsTextServicesDocument) NS_INTERFACE_MAP_ENTRY(nsITextServicesDocument) + NS_INTERFACE_MAP_ENTRY(nsIEditActionListener) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsITextServicesDocument) NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsTextServicesDocument) NS_INTERFACE_MAP_END -NS_IMPL_CYCLE_COLLECTION_8(nsTextServicesDocument, +NS_IMPL_CYCLE_COLLECTION_7(nsTextServicesDocument, mDOMDocument, mSelCon, mIterator, mPrevTextBlock, mNextTextBlock, - mNotifier, mExtent, mTxtSvcFilter) @@ -239,17 +235,8 @@ nsTextServicesDocument::InitWithEditor(nsIEditor *aEditor) } mEditor = do_GetWeakReference(aEditor); - nsTSDNotifier *notifier = new nsTSDNotifier(this); - if (!notifier) - { - UNLOCK_DOC(this); - return NS_ERROR_OUT_OF_MEMORY; - } - - mNotifier = do_QueryInterface(notifier); - - result = aEditor->AddEditActionListener(mNotifier); + result = aEditor->AddEditActionListener(this); UNLOCK_DOC(this); @@ -1812,17 +1799,21 @@ nsTextServicesDocument::InsertText(const nsString *aText) return result; } -nsresult -nsTextServicesDocument::InsertNode(nsIDOMNode *aNode, - nsIDOMNode *aParent, - PRInt32 aPosition) +NS_IMETHODIMP +nsTextServicesDocument::DidInsertNode(nsIDOMNode *aNode, + nsIDOMNode *aParent, + PRInt32 aPosition, + nsresult aResult) { return NS_OK; } -nsresult -nsTextServicesDocument::DeleteNode(nsIDOMNode *aChild) +NS_IMETHODIMP +nsTextServicesDocument::DidDeleteNode(nsIDOMNode *aChild, nsresult aResult) { + if (NS_FAILED(aResult)) + return NS_OK; + NS_ENSURE_TRUE(mIterator, NS_ERROR_FAILURE); //**** KDEBUG **** @@ -1892,10 +1883,11 @@ nsTextServicesDocument::DeleteNode(nsIDOMNode *aChild) return NS_OK; } -nsresult -nsTextServicesDocument::SplitNode(nsIDOMNode *aExistingRightNode, - PRInt32 aOffset, - nsIDOMNode *aNewLeftNode) +NS_IMETHODIMP +nsTextServicesDocument::DidSplitNode(nsIDOMNode *aExistingRightNode, + PRInt32 aOffset, + nsIDOMNode *aNewLeftNode, + nsresult aResult) { //**** KDEBUG **** // printf("** SplitNode: 0x%.8x %d 0x%.8x\n", aExistingRightNode, aOffset, aNewLeftNode); @@ -1904,11 +1896,15 @@ nsTextServicesDocument::SplitNode(nsIDOMNode *aExistingRightNode, return NS_OK; } -nsresult -nsTextServicesDocument::JoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent) +NS_IMETHODIMP +nsTextServicesDocument::DidJoinNodes(nsIDOMNode *aLeftNode, + nsIDOMNode *aRightNode, + nsIDOMNode *aParent, + nsresult aResult) { + if (NS_FAILED(aResult)) + return NS_OK; + PRInt32 i; PRUint16 type; nsresult result; @@ -4137,3 +4133,86 @@ nsTextServicesDocument::PrintContentNode(nsIContent *aContent) fflush(stdout); } #endif + +NS_IMETHODIMP +nsTextServicesDocument::WillInsertNode(nsIDOMNode *aNode, + nsIDOMNode *aParent, + PRInt32 aPosition) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillDeleteNode(nsIDOMNode *aChild) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillSplitNode(nsIDOMNode *aExistingRightNode, + PRInt32 aOffset) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillJoinNodes(nsIDOMNode *aLeftNode, + nsIDOMNode *aRightNode, + nsIDOMNode *aParent) +{ + return NS_OK; +} + + +// ------------------------------- +// stubs for unused listen methods +// ------------------------------- + +NS_IMETHODIMP +nsTextServicesDocument::WillCreateNode(const nsAString& aTag, nsIDOMNode *aParent, PRInt32 aPosition) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::DidCreateNode(const nsAString& aTag, nsIDOMNode *aNode, nsIDOMNode *aParent, PRInt32 aPosition, nsresult aResult) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::DidInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString, nsresult aResult) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::DidDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength, nsresult aResult) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::WillDeleteSelection(nsISelection *aSelection) +{ + return NS_OK; +} + +NS_IMETHODIMP +nsTextServicesDocument::DidDeleteSelection(nsISelection *aSelection) +{ + return NS_OK; +} + diff --git a/editor/txtsvc/src/nsTextServicesDocument.h b/editor/txtsvc/src/nsTextServicesDocument.h index 9ed88fb50660..d86063f03c02 100644 --- a/editor/txtsvc/src/nsTextServicesDocument.h +++ b/editor/txtsvc/src/nsTextServicesDocument.h @@ -47,7 +47,6 @@ #include "nsIEditActionListener.h" #include "nsITextServicesDocument.h" #include "nsTArray.h" -#include "nsTSDNotifier.h" #include "nsISelectionController.h" #include "nsITextServicesFilter.h" #include "nsWeakReference.h" @@ -59,7 +58,8 @@ class OffsetEntry; /** implementation of a text services object. * */ -class nsTextServicesDocument : public nsITextServicesDocument +class nsTextServicesDocument : public nsITextServicesDocument, + public nsIEditActionListener { private: static nsIAtom *sAAtom; @@ -103,7 +103,6 @@ private: TSDIteratorStatus mIteratorStatus; nsCOMPtr mPrevTextBlock; nsCOMPtr mNextTextBlock; - nsCOMPtr mNotifier; nsTArray mOffsetTable; PRInt32 mSelStartIndex; @@ -137,7 +136,7 @@ public: /* Macro for AddRef(), Release(), and QueryInterface() */ NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_CLASS(nsTextServicesDocument) + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsTextServicesDocument, nsITextServicesDocument) /* nsITextServicesDocument method implementations. */ NS_IMETHOD InitWithEditor(nsIEditor *aEditor); @@ -157,16 +156,40 @@ public: NS_IMETHOD InsertText(const nsString *aText); /* nsIEditActionListener method implementations. */ - nsresult InsertNode(nsIDOMNode * aNode, - nsIDOMNode * aParent, - PRInt32 aPosition); - nsresult DeleteNode(nsIDOMNode * aChild); - nsresult SplitNode(nsIDOMNode * aExistingRightNode, - PRInt32 aOffset, - nsIDOMNode * aNewLeftNode); - nsresult JoinNodes(nsIDOMNode *aLeftNode, - nsIDOMNode *aRightNode, - nsIDOMNode *aParent); + NS_IMETHOD WillInsertNode(nsIDOMNode *aNode, + nsIDOMNode *aParent, + PRInt32 aPosition); + NS_IMETHOD DidInsertNode(nsIDOMNode *aNode, + nsIDOMNode *aParent, + PRInt32 aPosition, + nsresult aResult); + + NS_IMETHOD WillDeleteNode(nsIDOMNode *aChild); + NS_IMETHOD DidDeleteNode(nsIDOMNode *aChild, nsresult aResult); + + NS_IMETHOD WillSplitNode(nsIDOMNode * aExistingRightNode, + PRInt32 aOffset); + NS_IMETHOD DidSplitNode(nsIDOMNode *aExistingRightNode, + PRInt32 aOffset, + nsIDOMNode *aNewLeftNode, + nsresult aResult); + + NS_IMETHOD WillJoinNodes(nsIDOMNode *aLeftNode, + nsIDOMNode *aRightNode, + nsIDOMNode *aParent); + NS_IMETHOD DidJoinNodes(nsIDOMNode *aLeftNode, + nsIDOMNode *aRightNode, + nsIDOMNode *aParent, + nsresult aResult); + // these listen methods are unused: + NS_IMETHOD WillCreateNode(const nsAString& aTag, nsIDOMNode *aParent, PRInt32 aPosition); + NS_IMETHOD DidCreateNode(const nsAString& aTag, nsIDOMNode *aNode, nsIDOMNode *aParent, PRInt32 aPosition, nsresult aResult); + NS_IMETHOD WillInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString); + NS_IMETHOD DidInsertText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, const nsAString &aString, nsresult aResult); + NS_IMETHOD WillDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength); + NS_IMETHOD DidDeleteText(nsIDOMCharacterData *aTextNode, PRInt32 aOffset, PRInt32 aLength, nsresult aResult); + NS_IMETHOD WillDeleteSelection(nsISelection *aSelection); + NS_IMETHOD DidDeleteSelection(nsISelection *aSelection); /* Helper functions */ static nsresult ComparePoints(nsIDOMNode *aParent1, PRInt32 aOffset1, nsIDOMNode *aParent2, PRInt32 aOffset2, PRInt32 *aResult); @@ -174,7 +197,6 @@ public: static nsresult CreateRange(nsIDOMNode *aStartParent, PRInt32 aStartOffset, nsIDOMNode *aEndParent, PRInt32 aEndOffset, nsIDOMRange **aRange); private: - /* nsTextServicesDocument private methods. */ nsresult CreateContentIterator(nsIDOMRange *aRange, nsIContentIterator **aIterator);