diff --git a/content/html/content/src/Makefile.in b/content/html/content/src/Makefile.in
index 6253c4969cdb..958d05905a01 100644
--- a/content/html/content/src/Makefile.in
+++ b/content/html/content/src/Makefile.in
@@ -96,6 +96,7 @@ CPPSRCS = \
nsHTMLTitleElement.cpp \
nsHTMLUListElement.cpp \
nsHTMLWBRElement.cpp \
+ nsEditorController.cpp \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.
diff --git a/content/html/content/src/makefile.win b/content/html/content/src/makefile.win
index 95f8e9b5b38e..7557f5194a11 100644
--- a/content/html/content/src/makefile.win
+++ b/content/html/content/src/makefile.win
@@ -94,6 +94,7 @@ CPPSRCS= \
nsHTMLTitleElement.cpp \
nsHTMLUListElement.cpp \
nsHTMLWBRElement.cpp \
+ nsEditorController.cpp \
$(NULL)
CPP_OBJS= \
@@ -161,6 +162,7 @@ CPP_OBJS= \
.\$(OBJDIR)\nsHTMLTitleElement.obj \
.\$(OBJDIR)\nsHTMLUListElement.obj \
.\$(OBJDIR)\nsHTMLWBRElement.obj \
+ .\$(OBJDIR)\nsEditorController.obj \
$(NULL)
LINCS=-I$(PUBLIC)\xpcom -I$(PUBLIC)\raptor -I$(PUBLIC)\js \
diff --git a/content/html/content/src/nsHTMLBodyElement.cpp b/content/html/content/src/nsHTMLBodyElement.cpp
index e0b9954cf619..0bb0fb96e848 100644
--- a/content/html/content/src/nsHTMLBodyElement.cpp
+++ b/content/html/content/src/nsHTMLBodyElement.cpp
@@ -39,6 +39,8 @@
#include "nsIHTMLCSSStyleSheet.h"
#include "nsICSSStyleRule.h"
#include "nsIWebShell.h"
+#include "nsIContentViewer.h"
+#include "nsIMarkupDocumentViewer.h"
#include "nsIHTMLAttributes.h"
#include "nsIHTMLContentContainer.h"
#include "nsISupportsArray.h"
@@ -338,9 +340,10 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresCo
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
nscoord pixel = NSIntPixelsToTwips(1, p2t);
- nscoord frameMarginWidth, frameMarginHeight;
- webShell->GetMarginWidth(frameMarginWidth); // -1 indicates not set
- webShell->GetMarginHeight(frameMarginHeight);
+ nscoord frameMarginWidth=-1; // default value
+ nscoord frameMarginHeight=-1; // default value
+ webShell->GetMarginWidth(&frameMarginWidth); // -1 indicates not set
+ webShell->GetMarginHeight(&frameMarginHeight);
if ((frameMarginWidth >= 0) && (0 > bodyMarginWidth)) { // set in & not in
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginHeight) && (0 > frameMarginHeight)) { // another nav quirk
diff --git a/content/html/content/src/nsHTMLTextAreaElement.cpp b/content/html/content/src/nsHTMLTextAreaElement.cpp
index cbfda169336b..5cc022cabcf4 100644
--- a/content/html/content/src/nsHTMLTextAreaElement.cpp
+++ b/content/html/content/src/nsHTMLTextAreaElement.cpp
@@ -20,6 +20,12 @@
* Contributor(s):
*/
#include "nsIDOMHTMLTextAreaElement.h"
+#include "nsIDOMNSHTMLTextAreaElement.h"
+#include "nsIControllers.h"
+#include "nsEditorController.h"
+#include "nsRDFCID.h"
+#include "nsCOMPtr.h"
+#include "nsComponentManager.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIFormControl.h"
#include "nsIForm.h"
@@ -44,8 +50,10 @@ static NS_DEFINE_IID(kIDOMHTMLFormElementIID, NS_IDOMHTMLFORMELEMENT_IID);
static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID);
static NS_DEFINE_IID(kIFormIID, NS_IFORM_IID);
static NS_DEFINE_IID(kIFocusableContentIID, NS_IFOCUSABLECONTENT_IID);
+static NS_DEFINE_CID(kXULControllersCID, NS_XULCONTROLLERS_CID);
class nsHTMLTextAreaElement : public nsIDOMHTMLTextAreaElement,
+ public nsIDOMNSHTMLTextAreaElement,
public nsIScriptObjectOwner,
public nsIDOMEventReceiver,
public nsIHTMLContent,
@@ -93,6 +101,9 @@ public:
NS_IMETHOD Focus();
NS_IMETHOD Select();
+ // nsIDOMNSHTMLTextAreaElement
+ NS_DECL_IDOMNSHTMLTEXTAREAELEMENT
+
// nsIScriptObjectOwner
NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC(mInner)
@@ -117,6 +128,7 @@ public:
protected:
nsGenericHTMLContainerElement mInner;
nsIForm* mForm;
+ nsCOMPtr mControllers;
};
nsresult
@@ -161,6 +173,11 @@ nsHTMLTextAreaElement::QueryInterface(REFNSIID aIID, void** aInstancePtr)
NS_ADDREF_THIS();
return NS_OK;
}
+ if (aIID.Equals(nsIDOMNSHTMLTextAreaElement::GetIID())) {
+ *aInstancePtr = (void*)(nsIDOMNSHTMLTextAreaElement*) this;
+ NS_ADDREF_THIS();
+ return NS_OK;
+ }
else if (aIID.Equals(kIFormControlIID)) {
*aInstancePtr = (void*)(nsIFormControl*) this;
NS_ADDREF_THIS();
@@ -523,3 +540,34 @@ nsHTMLTextAreaElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
#endif
return NS_OK;
}
+
+
+// Controllers Methods
+NS_IMETHODIMP
+nsHTMLTextAreaElement::GetControllers(nsIControllers** aResult)
+{
+ NS_ENSURE_ARG_POINTER(aResult);
+
+ if (!mControllers)
+ {
+ NS_ENSURE_SUCCESS (
+ nsComponentManager::CreateInstance(kXULControllersCID,
+ nsnull,
+ NS_GET_IID(nsIControllers),
+ getter_AddRefs(mControllers)),
+ NS_ERROR_FAILURE);
+ if (!mControllers) { return NS_ERROR_NULL_POINTER; }
+
+ nsEditorController *controller = new nsEditorController();
+ if (!controller) { return NS_ERROR_NULL_POINTER; }
+ nsCOMPtr iController = do_QueryInterface(controller);
+ if (!iController) { return NS_ERROR_NULL_POINTER; }
+ NS_ADDREF(controller);
+ mControllers->AppendController(iController);
+ controller->SetContent(this);
+ }
+
+ *aResult = mControllers;
+ NS_IF_ADDREF(*aResult);
+ return NS_OK;
+}
diff --git a/layout/forms/nsITextControlFrame.h b/layout/forms/nsITextControlFrame.h
new file mode 100644
index 000000000000..dafea340a1a4
--- /dev/null
+++ b/layout/forms/nsITextControlFrame.h
@@ -0,0 +1,38 @@
+/* -*- 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 Communicator client 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):
+ */
+
+#include "nsISupports.h"
+
+class nsIEditor;
+
+#define NS_IGFXTEXTCONTROLFRAME_IID \
+{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
+0xd3ea33ea, 0x9e00, 0x11d3, \
+{0xbc, 0xcc, 0x0, 0x60, 0xb0, 0xfc, 0x76, 0xbd} }
+
+class nsIGfxTextControlFrame : public nsISupports
+{
+public:
+ static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME_IID; return iid; }
+
+ NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
+};
diff --git a/layout/html/content/src/Makefile.in b/layout/html/content/src/Makefile.in
index 6253c4969cdb..958d05905a01 100644
--- a/layout/html/content/src/Makefile.in
+++ b/layout/html/content/src/Makefile.in
@@ -96,6 +96,7 @@ CPPSRCS = \
nsHTMLTitleElement.cpp \
nsHTMLUListElement.cpp \
nsHTMLWBRElement.cpp \
+ nsEditorController.cpp \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.
diff --git a/layout/html/content/src/makefile.win b/layout/html/content/src/makefile.win
index 95f8e9b5b38e..7557f5194a11 100644
--- a/layout/html/content/src/makefile.win
+++ b/layout/html/content/src/makefile.win
@@ -94,6 +94,7 @@ CPPSRCS= \
nsHTMLTitleElement.cpp \
nsHTMLUListElement.cpp \
nsHTMLWBRElement.cpp \
+ nsEditorController.cpp \
$(NULL)
CPP_OBJS= \
@@ -161,6 +162,7 @@ CPP_OBJS= \
.\$(OBJDIR)\nsHTMLTitleElement.obj \
.\$(OBJDIR)\nsHTMLUListElement.obj \
.\$(OBJDIR)\nsHTMLWBRElement.obj \
+ .\$(OBJDIR)\nsEditorController.obj \
$(NULL)
LINCS=-I$(PUBLIC)\xpcom -I$(PUBLIC)\raptor -I$(PUBLIC)\js \
diff --git a/layout/html/content/src/nsEditorController.cpp b/layout/html/content/src/nsEditorController.cpp
new file mode 100644
index 000000000000..8373b309c650
--- /dev/null
+++ b/layout/html/content/src/nsEditorController.cpp
@@ -0,0 +1,248 @@
+/* -*- 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 Communicator client 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):
+ */
+
+#include "nsEditorController.h"
+#include "nsIGfxTextControlFrame.h"
+#include "nsIEditor.h"
+#include "nsIFormControlFrame.h"
+#include "nsGenericHTMLElement.h"
+#include "nsIDOMSelection.h"
+
+NS_IMPL_ADDREF(nsEditorController)
+NS_IMPL_RELEASE(nsEditorController)
+
+NS_IMPL_QUERY_INTERFACE1(nsEditorController, nsIController)
+
+nsEditorController::nsEditorController()
+{
+ NS_INIT_REFCNT();
+ mContent = nsnull;
+ mUndoString = "cmd_undo";
+ mRedoString = "cmd_redo";
+ mCutString = "cmd_cut";
+ mCopyString = "cmd_copy";
+ mPasteString = "cmd_paste";
+ mDeleteString = "cmd_delete";
+ mSelectAllString = "cmd_selectAll";
+}
+
+nsEditorController::~nsEditorController()
+{
+}
+
+NS_IMETHODIMP nsEditorController::SetContent(nsIHTMLContent *aContent)
+{
+ // indiscriminately sets mContent, no ref counting here
+ mContent = aContent;
+ return NS_OK;
+}
+
+
+/* =======================================================================
+ * nsIController
+ * ======================================================================= */
+
+NS_IMETHODIMP nsEditorController::IsCommandEnabled(const PRUnichar *aCommand, PRBool *aResult)
+{
+ NS_ENSURE_ARG_POINTER(aCommand);
+ NS_ENSURE_ARG_POINTER(aResult);
+
+ *aResult = PR_FALSE;
+
+ nsCOMPtr editor;
+ NS_ENSURE_SUCCESS(GetEditor(getter_AddRefs(editor)), NS_ERROR_FAILURE);
+ if (!editor)
+ { // XXX: what does it mean if there is no editor? It means we've never had focus
+ return NS_OK;
+ }
+
+ if (PR_TRUE==mUndoString.Equals(aCommand))
+ { // we can undo if the editor says we can undo
+ PRBool isEnabled;
+ NS_ENSURE_SUCCESS(editor->CanUndo(isEnabled, *aResult), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mRedoString.Equals(aCommand))
+ { // we can redo if the editor says we can undo
+ PRBool isEnabled;
+ NS_ENSURE_SUCCESS(editor->CanRedo(isEnabled, *aResult), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mCutString.Equals(aCommand))
+ { // we can cut if the editor has a non-collapsed selection and is not readonly
+ nsCOMPtr selection;
+ NS_ENSURE_SUCCESS(editor->GetSelection(getter_AddRefs(selection)), NS_ERROR_FAILURE);
+ if (selection)
+ {
+ PRBool collapsed;
+ NS_ENSURE_SUCCESS(selection->GetIsCollapsed(&collapsed), NS_ERROR_FAILURE);
+ if ((PR_FALSE==collapsed) && (PR_TRUE==IsEnabled())) {
+ *aResult = PR_TRUE;
+ }
+ }
+ }
+ else if (PR_TRUE==mCopyString.Equals(aCommand))
+ { // we can copy if the editor has a non-collapsed selection
+ nsCOMPtr selection;
+ NS_ENSURE_SUCCESS(editor->GetSelection(getter_AddRefs(selection)), NS_ERROR_FAILURE);
+ if (selection)
+ {
+ PRBool collapsed;
+ NS_ENSURE_SUCCESS(selection->GetIsCollapsed(&collapsed), NS_ERROR_FAILURE);
+ if (PR_FALSE==collapsed) {
+ *aResult = PR_TRUE;
+ }
+ }
+ }
+ else if (PR_TRUE==mPasteString.Equals(aCommand))
+ { // paste is enabled if there is text on the clipbard and if the editor is not readonly or disabled
+ // XXX: implement me
+ *aResult = PR_TRUE;
+ }
+ else if (PR_TRUE==mDeleteString.Equals(aCommand))
+ { // delete is enabled if there is any content and if the editor is not readonly or disabled
+ *aResult = PR_TRUE;
+ }
+ else if (PR_TRUE==mSelectAllString.Equals(aCommand))
+ { // selectAll is enabled if there is any content and if the editor is not disabled (readonly is ok)
+ *aResult = PR_TRUE;
+ }
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsEditorController::SupportsCommand(const PRUnichar *aCommand, PRBool *aResult)
+{
+ NS_ENSURE_ARG_POINTER(aCommand);
+ NS_ENSURE_ARG_POINTER(aResult);
+
+ // XXX: need to check the readonly and disabled states
+
+ *aResult = PR_FALSE;
+ if ((PR_TRUE==mUndoString.Equals(aCommand)) ||
+ (PR_TRUE==mRedoString.Equals(aCommand)) ||
+ (PR_TRUE==mCutString.Equals(aCommand)) ||
+ (PR_TRUE==mCopyString.Equals(aCommand)) ||
+ (PR_TRUE==mPasteString.Equals(aCommand)) ||
+ (PR_TRUE==mDeleteString.Equals(aCommand)) ||
+ (PR_TRUE==mSelectAllString.Equals(aCommand))
+ )
+ {
+ *aResult = PR_TRUE;
+ }
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsEditorController::DoCommand(const PRUnichar *aCommand)
+{
+ NS_ENSURE_ARG_POINTER(aCommand);
+ nsCOMPtr editor;
+ NS_ENSURE_SUCCESS(GetEditor(getter_AddRefs(editor)), NS_ERROR_FAILURE);
+ if (!editor)
+ { // XXX: what does it mean if there is no editor? It means we've never had focus, so we can't do anything
+ return NS_OK;
+ }
+
+ if (PR_TRUE==mUndoString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->Undo(1), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mRedoString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->Redo(1), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mCutString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->Cut(), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mCopyString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->Copy(), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mPasteString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->Paste(), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mDeleteString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->DeleteSelection(nsIEditor::eDeleteNext), NS_ERROR_FAILURE);
+ }
+ else if (PR_TRUE==mSelectAllString.Equals(aCommand))
+ {
+ NS_ENSURE_SUCCESS(editor->SelectAll(), NS_ERROR_FAILURE);
+ }
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsEditorController::OnEvent(const PRUnichar *aEventName)
+{
+ NS_ENSURE_ARG_POINTER(aEventName);
+
+ return NS_OK;
+}
+
+
+
+
+NS_IMETHODIMP nsEditorController::GetEditor(nsIEditor ** aEditor)
+{
+ NS_ENSURE_ARG_POINTER(aEditor);
+
+ nsIGfxTextControlFrame *frame;
+ NS_ENSURE_SUCCESS(GetFrame(&frame), NS_ERROR_FAILURE);
+ if (!frame) { return NS_ERROR_FAILURE; }
+
+ NS_ENSURE_SUCCESS(frame->GetEditor(aEditor), NS_ERROR_FAILURE);
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsEditorController::GetFrame(nsIGfxTextControlFrame **aFrame)
+{
+ NS_ENSURE_ARG_POINTER(aFrame);
+ *aFrame = nsnull;
+ NS_ENSURE_STATE(mContent);
+
+ nsIFormControlFrame *frame = nsnull;
+ NS_ENSURE_SUCCESS(
+ nsGenericHTMLElement::GetPrimaryFrame(mContent, frame),
+ NS_ERROR_FAILURE
+ );
+ if (!frame) { return NS_ERROR_FAILURE; }
+
+ NS_ENSURE_SUCCESS(
+ frame->QueryInterface(nsIGfxTextControlFrame::GetIID(), (void**)aFrame),
+ NS_ERROR_FAILURE
+ );
+
+ return NS_OK;
+}
+
+PRBool nsEditorController::IsEnabled()
+{
+ return PR_TRUE; // XXX: need to implement this
+ /*
+ PRUint32 flags=0;
+ NS_ENSURE_SUCCESS(mEditor->GetFlags(&flags), NS_ERROR_FAILURE);
+ check eEditorReadonlyBit and eEditorDisabledBit
+ */
+}
\ No newline at end of file
diff --git a/layout/html/content/src/nsEditorController.h b/layout/html/content/src/nsEditorController.h
new file mode 100644
index 000000000000..d062afd9b4cf
--- /dev/null
+++ b/layout/html/content/src/nsEditorController.h
@@ -0,0 +1,72 @@
+/* -*- 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 Communicator client 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):
+ */
+
+#define NS_EDITORCONTROLLERS_CID \
+{ 0x26fb965c, 0x9de6, 0x11d3, { 0xbc, 0xcc, 0x0, 0x60, 0xb0, 0xfc, 0x76, 0xbd } }
+
+#include "nsIController.h"
+
+#include "nsString2.h"
+#include "nsCOMPtr.h"
+
+class nsIHTMLContent;
+class nsIGfxTextControlFrame;
+class nsIEditor;
+
+class nsEditorController : public nsIController
+{
+public:
+ nsEditorController();
+ virtual ~nsEditorController();
+
+ // nsISupports
+ NS_DECL_ISUPPORTS
+
+ // nsIController
+ NS_DECL_NSICONTROLLER
+
+ /** set the content for this controller instance */
+ NS_IMETHOD SetContent(nsIHTMLContent *aContent);
+
+protected:
+
+ /** fetch the primary frame associated with mContent */
+ NS_IMETHOD GetFrame(nsIGfxTextControlFrame **aFrame);
+
+ /** fetch the editor associated with mContent */
+ NS_IMETHOD GetEditor(nsIEditor ** aEditor);
+
+ /** return PR_TRUE if the editor associated with mContent is enabled */
+ PRBool IsEnabled();
+
+ // XXX: should be static
+ nsString mUndoString;
+ nsString mRedoString;
+ nsString mCutString;
+ nsString mCopyString;
+ nsString mPasteString;
+ nsString mDeleteString;
+ nsString mSelectAllString;
+
+protected:
+ nsIHTMLContent* mContent; // weak reference, the content object owns this object
+};
diff --git a/layout/html/content/src/nsHTMLBodyElement.cpp b/layout/html/content/src/nsHTMLBodyElement.cpp
index e0b9954cf619..0bb0fb96e848 100644
--- a/layout/html/content/src/nsHTMLBodyElement.cpp
+++ b/layout/html/content/src/nsHTMLBodyElement.cpp
@@ -39,6 +39,8 @@
#include "nsIHTMLCSSStyleSheet.h"
#include "nsICSSStyleRule.h"
#include "nsIWebShell.h"
+#include "nsIContentViewer.h"
+#include "nsIMarkupDocumentViewer.h"
#include "nsIHTMLAttributes.h"
#include "nsIHTMLContentContainer.h"
#include "nsISupportsArray.h"
@@ -338,9 +340,10 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext, nsIPresContext* aPresCo
container->QueryInterface(kIWebShellIID, (void**) &webShell);
if (nsnull != webShell) {
nscoord pixel = NSIntPixelsToTwips(1, p2t);
- nscoord frameMarginWidth, frameMarginHeight;
- webShell->GetMarginWidth(frameMarginWidth); // -1 indicates not set
- webShell->GetMarginHeight(frameMarginHeight);
+ nscoord frameMarginWidth=-1; // default value
+ nscoord frameMarginHeight=-1; // default value
+ webShell->GetMarginWidth(&frameMarginWidth); // -1 indicates not set
+ webShell->GetMarginHeight(&frameMarginHeight);
if ((frameMarginWidth >= 0) && (0 > bodyMarginWidth)) { // set in & not in
if (eCompatibility_NavQuirks == mode) { // allow 0 margins
if ((0 > bodyMarginHeight) && (0 > frameMarginHeight)) { // another nav quirk
diff --git a/layout/html/content/src/nsHTMLTextAreaElement.cpp b/layout/html/content/src/nsHTMLTextAreaElement.cpp
index cbfda169336b..5cc022cabcf4 100644
--- a/layout/html/content/src/nsHTMLTextAreaElement.cpp
+++ b/layout/html/content/src/nsHTMLTextAreaElement.cpp
@@ -20,6 +20,12 @@
* Contributor(s):
*/
#include "nsIDOMHTMLTextAreaElement.h"
+#include "nsIDOMNSHTMLTextAreaElement.h"
+#include "nsIControllers.h"
+#include "nsEditorController.h"
+#include "nsRDFCID.h"
+#include "nsCOMPtr.h"
+#include "nsComponentManager.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIFormControl.h"
#include "nsIForm.h"
@@ -44,8 +50,10 @@ static NS_DEFINE_IID(kIDOMHTMLFormElementIID, NS_IDOMHTMLFORMELEMENT_IID);
static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID);
static NS_DEFINE_IID(kIFormIID, NS_IFORM_IID);
static NS_DEFINE_IID(kIFocusableContentIID, NS_IFOCUSABLECONTENT_IID);
+static NS_DEFINE_CID(kXULControllersCID, NS_XULCONTROLLERS_CID);
class nsHTMLTextAreaElement : public nsIDOMHTMLTextAreaElement,
+ public nsIDOMNSHTMLTextAreaElement,
public nsIScriptObjectOwner,
public nsIDOMEventReceiver,
public nsIHTMLContent,
@@ -93,6 +101,9 @@ public:
NS_IMETHOD Focus();
NS_IMETHOD Select();
+ // nsIDOMNSHTMLTextAreaElement
+ NS_DECL_IDOMNSHTMLTEXTAREAELEMENT
+
// nsIScriptObjectOwner
NS_IMPL_ISCRIPTOBJECTOWNER_USING_GENERIC(mInner)
@@ -117,6 +128,7 @@ public:
protected:
nsGenericHTMLContainerElement mInner;
nsIForm* mForm;
+ nsCOMPtr mControllers;
};
nsresult
@@ -161,6 +173,11 @@ nsHTMLTextAreaElement::QueryInterface(REFNSIID aIID, void** aInstancePtr)
NS_ADDREF_THIS();
return NS_OK;
}
+ if (aIID.Equals(nsIDOMNSHTMLTextAreaElement::GetIID())) {
+ *aInstancePtr = (void*)(nsIDOMNSHTMLTextAreaElement*) this;
+ NS_ADDREF_THIS();
+ return NS_OK;
+ }
else if (aIID.Equals(kIFormControlIID)) {
*aInstancePtr = (void*)(nsIFormControl*) this;
NS_ADDREF_THIS();
@@ -523,3 +540,34 @@ nsHTMLTextAreaElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
#endif
return NS_OK;
}
+
+
+// Controllers Methods
+NS_IMETHODIMP
+nsHTMLTextAreaElement::GetControllers(nsIControllers** aResult)
+{
+ NS_ENSURE_ARG_POINTER(aResult);
+
+ if (!mControllers)
+ {
+ NS_ENSURE_SUCCESS (
+ nsComponentManager::CreateInstance(kXULControllersCID,
+ nsnull,
+ NS_GET_IID(nsIControllers),
+ getter_AddRefs(mControllers)),
+ NS_ERROR_FAILURE);
+ if (!mControllers) { return NS_ERROR_NULL_POINTER; }
+
+ nsEditorController *controller = new nsEditorController();
+ if (!controller) { return NS_ERROR_NULL_POINTER; }
+ nsCOMPtr iController = do_QueryInterface(controller);
+ if (!iController) { return NS_ERROR_NULL_POINTER; }
+ NS_ADDREF(controller);
+ mControllers->AppendController(iController);
+ controller->SetContent(this);
+ }
+
+ *aResult = mControllers;
+ NS_IF_ADDREF(*aResult);
+ return NS_OK;
+}
diff --git a/layout/html/forms/public/nsIGfxTextControlFrame.h b/layout/html/forms/public/nsIGfxTextControlFrame.h
new file mode 100644
index 000000000000..dafea340a1a4
--- /dev/null
+++ b/layout/html/forms/public/nsIGfxTextControlFrame.h
@@ -0,0 +1,38 @@
+/* -*- 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 Communicator client 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):
+ */
+
+#include "nsISupports.h"
+
+class nsIEditor;
+
+#define NS_IGFXTEXTCONTROLFRAME_IID \
+{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
+0xd3ea33ea, 0x9e00, 0x11d3, \
+{0xbc, 0xcc, 0x0, 0x60, 0xb0, 0xfc, 0x76, 0xbd} }
+
+class nsIGfxTextControlFrame : public nsISupports
+{
+public:
+ static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME_IID; return iid; }
+
+ NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
+};
diff --git a/layout/html/forms/public/nsITextControlFrame.h b/layout/html/forms/public/nsITextControlFrame.h
new file mode 100644
index 000000000000..dafea340a1a4
--- /dev/null
+++ b/layout/html/forms/public/nsITextControlFrame.h
@@ -0,0 +1,38 @@
+/* -*- 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 Communicator client 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):
+ */
+
+#include "nsISupports.h"
+
+class nsIEditor;
+
+#define NS_IGFXTEXTCONTROLFRAME_IID \
+{/* d3ea33ea-9e00-11d3-bccc-0060b0fc76bd*/ \
+0xd3ea33ea, 0x9e00, 0x11d3, \
+{0xbc, 0xcc, 0x0, 0x60, 0xb0, 0xfc, 0x76, 0xbd} }
+
+class nsIGfxTextControlFrame : public nsISupports
+{
+public:
+ static const nsIID& GetIID() { static nsIID iid = NS_IGFXTEXTCONTROLFRAME_IID; return iid; }
+
+ NS_IMETHOD GetEditor(nsIEditor **aEditor) = 0;
+};