diff --git a/mozilla/content/base/public/nsIContent.h b/mozilla/content/base/public/nsIContent.h index fa951c07d40..9d481d8123a 100644 --- a/mozilla/content/base/public/nsIContent.h +++ b/mozilla/content/base/public/nsIContent.h @@ -520,7 +520,17 @@ public: }; virtual PRUint32 GetDesiredIMEState() { - return IME_STATUS_DISABLE; + if (!HasFlag(NODE_IS_EDITABLE)) + return IME_STATUS_DISABLE; + nsIContent *editableAncestor = nsnull; + for (nsIContent* parent = GetParent(); + parent && parent->HasFlag(NODE_IS_EDITABLE); + parent = parent->GetParent()) + editableAncestor = parent; + // This is in another editable content, use the result of it. + if (editableAncestor) + return editableAncestor->GetDesiredIMEState(); + return IME_STATUS_ENABLE; } /** diff --git a/mozilla/content/events/src/nsIMEStateManager.cpp b/mozilla/content/events/src/nsIMEStateManager.cpp index ec861a1bf61..1a53604a00b 100755 --- a/mozilla/content/events/src/nsIMEStateManager.cpp +++ b/mozilla/content/events/src/nsIMEStateManager.cpp @@ -237,22 +237,10 @@ nsIMEStateManager::GetNewIMEState(nsPresContext* aPresContext, return nsIContent::IME_STATUS_DISABLE; } - if (sInstalledMenuKeyboardListener) + if (sInstalledMenuKeyboardListener || !aContent) return nsIContent::IME_STATUS_DISABLE; - PRBool isEditable = PR_FALSE; - nsCOMPtr container = aPresContext->GetContainer(); - nsCOMPtr editorDocShell(do_QueryInterface(container)); - if (editorDocShell) - editorDocShell->GetEditable(&isEditable); - - if (isEditable) - return nsIContent::IME_STATUS_ENABLE; - - if (aContent) - return aContent->GetDesiredIMEState(); - - return nsIContent::IME_STATUS_DISABLE; + return aContent->GetDesiredIMEState(); } void