From f5dc32b34c17a31b7a799e97e71a201da0767eab Mon Sep 17 00:00:00 2001 From: "sfraser%netscape.com" Date: Fri, 16 Jun 2000 06:09:33 +0000 Subject: [PATCH] Fix bug 42145 -- need to clear the editor out of the editor controller when the text frame is going away (like when its content is hidden in a popup window). r=kin git-svn-id: svn://10.0.0.236/trunk@72348 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/forms/src/nsGfxTextControlFrame2.cpp | 54 +++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp b/mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp index 43e52ec5536..eb27d4cb03d 100644 --- a/mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp +++ b/mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp @@ -721,8 +721,40 @@ nsGfxTextControlFrame2::~nsGfxTextControlFrame2() NS_IMETHODIMP nsGfxTextControlFrame2::Destroy(nsIPresContext* aPresContext) { + // Clean up the controller + nsCOMPtr controllers; + nsCOMPtr inputElement = do_QueryInterface(mContent); + if (inputElement) + inputElement->GetControllers(getter_AddRefs(controllers)); + else + { + nsCOMPtr textAreaElement = do_QueryInterface(mContent); + textAreaElement->GetControllers(getter_AddRefs(controllers)); + } + + if (controllers) + { + PRUint32 numControllers; + nsresult rv = controllers->GetControllerCount(&numControllers); + NS_ASSERTION((NS_SUCCEEDED(rv)), "bad result in gfx text control destructor"); + for (PRUint32 i = 0; i < numControllers; i ++) + { + nsCOMPtr controller; + rv = controllers->GetControllerAt(i, getter_AddRefs(controller)); + if (NS_SUCCEEDED(rv) && controller) + { + nsCOMPtr editController = do_QueryInterface(controller); + if (editController) + { + editController->SetCommandRefCon(nsnull); + } + } + } + } + mSelCon = 0; mEditor = 0; + if (mCachedState) { delete mCachedState; @@ -1293,22 +1325,22 @@ nsGfxTextControlFrame2::CreateAnonymousContent(nsIPresContext* aPresContext, mEditor->Init(domdoc, shell, content, mSelCon, editorFlags); //initialize the controller for the editor - nsCOMPtr textAreaElement = do_QueryInterface(mContent); - nsCOMPtr inputElement = do_QueryInterface(mContent); nsCOMPtr controllers; - if (textAreaElement) - textAreaElement->GetControllers(getter_AddRefs(controllers)); - else if (inputElement) + nsCOMPtr inputElement = do_QueryInterface(mContent); + if (inputElement) inputElement->GetControllers(getter_AddRefs(controllers)); else - return rv = NS_ERROR_FAILURE; - - if (NS_SUCCEEDED(rv)) { - PRUint32 count; + nsCOMPtr textAreaElement = do_QueryInterface(mContent); + textAreaElement->GetControllers(getter_AddRefs(controllers)); + } + + if (controllers) + { + PRUint32 numControllers; PRBool found = PR_FALSE; - rv = controllers->GetControllerCount(&count); - for (PRUint32 i = 0; i < count; i ++) + rv = controllers->GetControllerCount(&numControllers); + for (PRUint32 i = 0; i < numControllers; i ++) { nsCOMPtr controller; rv = controllers->GetControllerAt(i, getter_AddRefs(controller));