From 1dbd998cbe0656527bd71bd21bcc0939ce168fd3 Mon Sep 17 00:00:00 2001 From: "peterv%propagandism.org" Date: Fri, 6 Jul 2007 10:45:16 +0000 Subject: [PATCH] Fix for bug 386730 (After reloading a page with a single contenteditable element, every element on that page is editable). r/sr=jst. git-svn-id: svn://10.0.0.236/trunk@229419 18797224-902f-48f8-a5cc-f745e15eee43 --- .../editor/composer/src/nsEditingSession.cpp | 43 +++++++++---------- .../editor/composer/src/nsEditingSession.h | 1 + 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/mozilla/editor/composer/src/nsEditingSession.cpp b/mozilla/editor/composer/src/nsEditingSession.cpp index 966fbfa4835..f7881b0b80a 100644 --- a/mozilla/editor/composer/src/nsEditingSession.cpp +++ b/mozilla/editor/composer/src/nsEditingSession.cpp @@ -96,6 +96,7 @@ nsEditingSession::nsEditingSession() : mDoneSetup(PR_FALSE) , mCanCreateEditor(PR_FALSE) , mInteractive(PR_FALSE) +, mMakeWholeDocumentEditable(PR_TRUE) , mScriptsEnabled(PR_TRUE) , mPluginsEnabled(PR_TRUE) , mProgressListenerRegistered(PR_FALSE) @@ -150,20 +151,10 @@ nsEditingSession::MakeWindowEditable(nsIDOMWindow *aWindow, nsIDocShell *docShell = GetDocShellFromWindow(aWindow); if (!docShell) return NS_ERROR_FAILURE; - nsresult rv; - if (aMakeWholeDocumentEditable) { - nsCOMPtr domDoc; - rv = aWindow->GetDocument(getter_AddRefs(domDoc)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr doc = do_QueryInterface(domDoc, &rv); - NS_ENSURE_SUCCESS(rv, rv); - - doc->SetEditableFlag(PR_TRUE); - } - mInteractive = aInteractive; + mMakeWholeDocumentEditable = aMakeWholeDocumentEditable; + nsresult rv; if (!mInteractive) { // Disable JavaScript in this document: PRBool tmp; @@ -349,6 +340,9 @@ nsEditingSession::SetupEditorOnWindow(nsIDOMWindow *aWindow) nsCOMPtr document(do_QueryInterface(doc)); if (document) { document->FlushPendingNotifications(Flush_Frames); + if (mMakeWholeDocumentEditable) { + document->SetEditableFlag(PR_TRUE); + } } } PRBool needHTMLController = PR_FALSE; @@ -634,7 +628,8 @@ nsEditingSession::TearDownEditorOnWindow(nsIDOMWindow *aWindow, mHTMLCommandControllerId = 0; } - if (aStopEditing && !mInteractive) { + if (aStopEditing) { + if (!mInteractive) { // Make things the way they were before we started editing. if (mScriptsEnabled) { docShell->SetAllowJavascript(PR_TRUE); @@ -649,6 +644,18 @@ nsEditingSession::TearDownEditorOnWindow(nsIDOMWindow *aWindow, utils->SetImageAnimationMode(mImageAnimationMode); } + if (mMakeWholeDocumentEditable) { + nsCOMPtr domDoc; + rv = aWindow->GetDocument(getter_AddRefs(domDoc)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr doc = do_QueryInterface(domDoc, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + doc->SetEditableFlag(PR_FALSE); + } + } + return rv; } @@ -1083,16 +1090,6 @@ nsEditingSession::EndDocumentLoad(nsIWebProgress *aWebProgress, 10, nsITimer::TYPE_ONE_SHOT); } } - - // XXX This should move somewhere else! - nsCOMPtr domDoc; - rv = domWindow->GetDocument(getter_AddRefs(domDoc)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr doc = do_QueryInterface(domDoc, &rv); - NS_ENSURE_SUCCESS(rv, rv); - - doc->SetEditableFlag(PR_TRUE); } } return rv; diff --git a/mozilla/editor/composer/src/nsEditingSession.h b/mozilla/editor/composer/src/nsEditingSession.h index 5929ade09b4..534ef145612 100644 --- a/mozilla/editor/composer/src/nsEditingSession.h +++ b/mozilla/editor/composer/src/nsEditingSession.h @@ -130,6 +130,7 @@ protected: PRPackedBool mCanCreateEditor; PRPackedBool mInteractive; + PRPackedBool mMakeWholeDocumentEditable; // True if scripts were enabled before the editor turned scripts // off, otherwise false.