summaryrefslogtreecommitdiffstats
path: root/WebKit/win/WebCoreSupport/WebEditorClient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/win/WebCoreSupport/WebEditorClient.cpp')
-rw-r--r--WebKit/win/WebCoreSupport/WebEditorClient.cpp762
1 files changed, 0 insertions, 762 deletions
diff --git a/WebKit/win/WebCoreSupport/WebEditorClient.cpp b/WebKit/win/WebCoreSupport/WebEditorClient.cpp
deleted file mode 100644
index 523bbb4..0000000
--- a/WebKit/win/WebCoreSupport/WebEditorClient.cpp
+++ /dev/null
@@ -1,762 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "WebKitDLL.h"
-#include "WebEditorClient.h"
-
-#include "WebKit.h"
-#include "WebLocalizableStrings.h"
-#include "WebView.h"
-#include "DOMCoreClasses.h"
-#pragma warning(push, 0)
-#include <WebCore/BString.h>
-#include <WebCore/Document.h>
-#include <WebCore/EditCommand.h>
-#include <WebCore/HTMLElement.h>
-#include <WebCore/HTMLInputElement.h>
-#include <WebCore/HTMLNames.h>
-#include <WebCore/KeyboardEvent.h>
-#include <WebCore/PlatformKeyboardEvent.h>
-#include <WebCore/NotImplemented.h>
-#include <WebCore/Range.h>
-#pragma warning(pop)
-
-using namespace WebCore;
-using namespace HTMLNames;
-
-// {09A11D2B-FAFB-4ca0-A6F7-791EE8932C88}
-static const GUID IID_IWebUndoCommand =
-{ 0x9a11d2b, 0xfafb, 0x4ca0, { 0xa6, 0xf7, 0x79, 0x1e, 0xe8, 0x93, 0x2c, 0x88 } };
-
-class IWebUndoCommand : public IUnknown {
-public:
- virtual void execute() = 0;
-};
-
-// WebEditorUndoTarget -------------------------------------------------------------
-
-class WebEditorUndoTarget : public IWebUndoTarget
-{
-public:
- WebEditorUndoTarget();
-
- // IUnknown
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
- virtual ULONG STDMETHODCALLTYPE AddRef(void);
- virtual ULONG STDMETHODCALLTYPE Release(void);
-
- // IWebUndoTarget
- virtual HRESULT STDMETHODCALLTYPE invoke(
- /* [in] */ BSTR actionName,
- /* [in] */ IUnknown *obj);
-
-private:
- ULONG m_refCount;
-};
-
-WebEditorUndoTarget::WebEditorUndoTarget()
-: m_refCount(1)
-{
-}
-
-HRESULT STDMETHODCALLTYPE WebEditorUndoTarget::QueryInterface(REFIID riid, void** ppvObject)
-{
- *ppvObject = 0;
- if (IsEqualGUID(riid, IID_IUnknown))
- *ppvObject = static_cast<IWebUndoTarget*>(this);
- else if (IsEqualGUID(riid, IID_IWebUndoTarget))
- *ppvObject = static_cast<IWebUndoTarget*>(this);
- else
- return E_NOINTERFACE;
-
- AddRef();
- return S_OK;
-}
-
-ULONG STDMETHODCALLTYPE WebEditorUndoTarget::AddRef(void)
-{
- return ++m_refCount;
-}
-
-ULONG STDMETHODCALLTYPE WebEditorUndoTarget::Release(void)
-{
- ULONG newRef = --m_refCount;
- if (!newRef)
- delete(this);
-
- return newRef;
-}
-
-HRESULT STDMETHODCALLTYPE WebEditorUndoTarget::invoke(
- /* [in] */ BSTR /*actionName*/,
- /* [in] */ IUnknown *obj)
-{
- IWebUndoCommand* undoCommand = 0;
- if (SUCCEEDED(obj->QueryInterface(IID_IWebUndoCommand, (void**)&undoCommand))) {
- undoCommand->execute();
- undoCommand->Release();
- }
- return S_OK;
-}
-
-// WebEditorClient ------------------------------------------------------------------
-
-WebEditorClient::WebEditorClient(WebView* webView)
- : m_webView(webView)
- , m_undoTarget(0)
-{
- m_undoTarget = new WebEditorUndoTarget();
-}
-
-WebEditorClient::~WebEditorClient()
-{
- if (m_undoTarget)
- m_undoTarget->Release();
-}
-
-void WebEditorClient::pageDestroyed()
-{
- delete this;
-}
-
-bool WebEditorClient::isContinuousSpellCheckingEnabled()
-{
- BOOL enabled;
- if (FAILED(m_webView->isContinuousSpellCheckingEnabled(&enabled)))
- return false;
- return !!enabled;
-}
-
-void WebEditorClient::toggleContinuousSpellChecking()
-{
- m_webView->toggleContinuousSpellChecking(0);
-}
-
-bool WebEditorClient::isGrammarCheckingEnabled()
-{
- BOOL enabled;
- if (FAILED(m_webView->isGrammarCheckingEnabled(&enabled)))
- return false;
- return !!enabled;
-}
-
-void WebEditorClient::toggleGrammarChecking()
-{
- m_webView->toggleGrammarChecking(0);
-}
-
-static void initViewSpecificSpelling(IWebViewEditing* viewEditing)
-{
- // we just use this as a flag to indicate that we've spell checked the document
- // and need to close the spell checker out when the view closes.
- int tag;
- viewEditing->spellCheckerDocumentTag(&tag);
-}
-
-int WebEditorClient::spellCheckerDocumentTag()
-{
- // we don't use the concept of spelling tags
- notImplemented();
- ASSERT_NOT_REACHED();
- return 0;
-}
-
-bool WebEditorClient::shouldBeginEditing(Range*)
-{
- notImplemented();
- return true;
-}
-
-bool WebEditorClient::shouldEndEditing(Range*)
-{
- notImplemented();
- return true;
-}
-
-void WebEditorClient::didBeginEditing()
-{
- notImplemented();
-}
-
-void WebEditorClient::respondToChangedContents()
-{
- notImplemented();
-}
-
-void WebEditorClient::respondToChangedSelection()
-{
- m_webView->selectionChanged();
-}
-
-void WebEditorClient::didEndEditing()
-{
- notImplemented();
-}
-
-void WebEditorClient::didWriteSelectionToPasteboard()
-{
- notImplemented();
-}
-
-void WebEditorClient::didSetSelectionTypesForPasteboard()
-{
- notImplemented();
-}
-
-bool WebEditorClient::shouldDeleteRange(Range* /*range*/)
-{
- notImplemented();
- return true;
-
- // FIXME: calling m_webView->editingDelegate() will cause an assertion failure so we don't want to enable this code until that's implemented.
- //BOOL result = false;
- //IWebViewEditingDelegate* editingDelegate;
- //// FIXME: DOMRange needs to be implemented before anything meaningful can be done here
- //IDOMRange* domRange(0);
- //if (SUCCEEDED(m_webView->editingDelegate(&editingDelegate))) {
- // editingDelegate->shouldDeleteDOMRange(m_webView, domRange, &result);
- // editingDelegate->Release();
- //}
- //return !!result;
-}
-
-bool WebEditorClient::shouldInsertNode(Node* /*node*/, Range* /*replacingRange*/, EditorInsertAction /*givenAction*/)
-{
- notImplemented();
- return true;
-}
-
-bool WebEditorClient::shouldInsertText(String /*str*/, Range* /* replacingRange */, EditorInsertAction /*givenAction*/)
-{
- notImplemented();
- return true;
-
- // FIXME: calling m_webView->editingDelegate() will cause an assertion failure so we don't want to enable this code until that's implemented.
- //BOOL result = false;
- //IWebViewEditingDelegate* editingDelegate;
- //// FIXME: DOMRange needs to be implemented before anything meaningful can be done here
- //IDOMRange* domRange(0); // make a DOMRange from replacingRange
- //BString text(str);
- //if (SUCCEEDED(m_webView->editingDelegate(&editingDelegate))) {
- // editingDelegate->shouldInsertText(m_webView, text, domRange, (WebViewInsertAction) givenAction, &result);
- // editingDelegate->Release();
- //}
- //return !!result;
-}
-
-//bool WebEditorClient::shouldChangeSelectedRange(Range *currentRange, Range *toProposedRange, SelectionAffinity selectionAffinity, bool stillSelecting)
-//{ notImplemented(); return false; }
-
-bool WebEditorClient::shouldApplyStyle(CSSStyleDeclaration* /*style*/, Range* /*toElementsInDOMRange*/)
-{ notImplemented(); return true; }
-
-bool WebEditorClient::shouldMoveRangeAfterDelete(Range* /*range*/, Range* /*rangeToBeReplaced*/)
-{ notImplemented(); return true; }
-
-bool WebEditorClient::shouldChangeTypingStyle(CSSStyleDeclaration* /*currentStyle*/, CSSStyleDeclaration* /*toProposedStyle*/)
-{ notImplemented(); return false; }
-
-void WebEditorClient::webViewDidChangeTypingStyle(WebNotification* /*notification*/)
-{ notImplemented(); }
-
-void WebEditorClient::webViewDidChangeSelection(WebNotification* /*notification*/)
-{ notImplemented(); }
-
-bool WebEditorClient::shouldShowDeleteInterface(HTMLElement* /*element*/)
-{ notImplemented(); return false; }
-
-bool WebEditorClient::smartInsertDeleteEnabled(void)
-{
- BOOL enabled = FALSE;
- m_webView->smartInsertDeleteEnabled(&enabled);
- return !!enabled;
-}
-
-bool WebEditorClient::shouldChangeSelectedRange(WebCore::Range*, WebCore::Range*, WebCore::EAffinity, bool)
-{ notImplemented(); return true; }
-
-void WebEditorClient::textFieldDidBeginEditing(Element* e)
-{
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLInputElement* domInputElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) {
- formDelegate->textFieldDidBeginEditing(domInputElement, kit(e->document()->frame()));
- domInputElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
-}
-
-void WebEditorClient::textFieldDidEndEditing(Element* e)
-{
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLInputElement* domInputElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) {
- formDelegate->textFieldDidEndEditing(domInputElement, kit(e->document()->frame()));
- domInputElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
-}
-
-void WebEditorClient::textDidChangeInTextField(Element* e)
-{
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLInputElement* domInputElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) {
- formDelegate->textDidChangeInTextField(domInputElement, kit(e->document()->frame()));
- domInputElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
-}
-
-bool WebEditorClient::doTextFieldCommandFromEvent(Element* e, KeyboardEvent* ke)
-{
- BOOL result = FALSE;
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLInputElement* domInputElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) {
- String command = m_webView->interpretKeyEvent(ke);
- // We allow empty commands here because the app code actually depends on this being called for all key presses.
- // We may want to revisit this later because it doesn't really make sense to send an empty command.
- formDelegate->doPlatformCommand(domInputElement, BString(command), kit(e->document()->frame()), &result);
- domInputElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
- return !!result;
-}
-
-void WebEditorClient::textWillBeDeletedInTextField(Element* e)
-{
- // We're using the deleteBackward command for all deletion operations since the autofill code treats all deletions the same way.
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLInputElement* domInputElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) {
- BOOL result;
- formDelegate->doPlatformCommand(domInputElement, BString(L"DeleteBackward"), kit(e->document()->frame()), &result);
- domInputElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
-}
-
-void WebEditorClient::textDidChangeInTextArea(Element* e)
-{
- IWebFormDelegate* formDelegate;
- if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) {
- IDOMElement* domElement = DOMElement::createInstance(e);
- if (domElement) {
- IDOMHTMLTextAreaElement* domTextAreaElement;
- if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLTextAreaElement, (void**)&domTextAreaElement))) {
- formDelegate->textDidChangeInTextArea(domTextAreaElement, kit(e->document()->frame()));
- domTextAreaElement->Release();
- }
- domElement->Release();
- }
- formDelegate->Release();
- }
-}
-
-class WebEditorUndoCommand : public IWebUndoCommand
-{
-public:
- WebEditorUndoCommand(PassRefPtr<EditCommand> editCommand, bool isUndo);
- void execute();
-
- // IUnknown
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
- virtual ULONG STDMETHODCALLTYPE AddRef(void);
- virtual ULONG STDMETHODCALLTYPE Release(void);
-
-private:
- ULONG m_refCount;
- RefPtr<EditCommand> m_editCommand;
- bool m_isUndo;
-};
-
-WebEditorUndoCommand::WebEditorUndoCommand(PassRefPtr<EditCommand> editCommand, bool isUndo)
- : m_editCommand(editCommand)
- , m_isUndo(isUndo)
- , m_refCount(1)
-{
-}
-
-void WebEditorUndoCommand::execute()
-{
- if (m_isUndo)
- m_editCommand->unapply();
- else
- m_editCommand->reapply();
-}
-
-HRESULT STDMETHODCALLTYPE WebEditorUndoCommand::QueryInterface(REFIID riid, void** ppvObject)
-{
- *ppvObject = 0;
- if (IsEqualGUID(riid, IID_IUnknown))
- *ppvObject = static_cast<IWebUndoCommand*>(this);
- else if (IsEqualGUID(riid, IID_IWebUndoCommand))
- *ppvObject = static_cast<IWebUndoCommand*>(this);
- else
- return E_NOINTERFACE;
-
- AddRef();
- return S_OK;
-}
-
-ULONG STDMETHODCALLTYPE WebEditorUndoCommand::AddRef(void)
-{
- return ++m_refCount;
-}
-
-ULONG STDMETHODCALLTYPE WebEditorUndoCommand::Release(void)
-{
- ULONG newRef = --m_refCount;
- if (!newRef)
- delete(this);
-
- return newRef;
-}
-
-static LPCTSTR undoNameForEditAction(EditAction editAction)
-{
- switch (editAction) {
- case EditActionUnspecified: return 0;
- case EditActionSetColor: return LPCTSTR_UI_STRING_KEY("Set Color", "Set Color (Undo action name)", "Undo action name");
- case EditActionSetBackgroundColor: return LPCTSTR_UI_STRING_KEY("Set Background Color", "Set Background Color (Undo action name)", "Undo action name");
- case EditActionTurnOffKerning: return LPCTSTR_UI_STRING_KEY("Turn Off Kerning", "Turn Off Kerning (Undo action name)", "Undo action name");
- case EditActionTightenKerning: return LPCTSTR_UI_STRING_KEY("Tighten Kerning", "Tighten Kerning (Undo action name)", "Undo action name");
- case EditActionLoosenKerning: return LPCTSTR_UI_STRING_KEY("Loosen Kerning", "Loosen Kerning (Undo action name)", "Undo action name");
- case EditActionUseStandardKerning: return LPCTSTR_UI_STRING_KEY("Use Standard Kerning", "Use Standard Kerning (Undo action name)", "Undo action name");
- case EditActionTurnOffLigatures: return LPCTSTR_UI_STRING_KEY("Turn Off Ligatures", "Turn Off Ligatures (Undo action name)", "Undo action name");
- case EditActionUseStandardLigatures: return LPCTSTR_UI_STRING_KEY("Use Standard Ligatures", "Use Standard Ligatures (Undo action name)", "Undo action name");
- case EditActionUseAllLigatures: return LPCTSTR_UI_STRING_KEY("Use All Ligatures", "Use All Ligatures (Undo action name)", "Undo action name");
- case EditActionRaiseBaseline: return LPCTSTR_UI_STRING_KEY("Raise Baseline", "Raise Baseline (Undo action name)", "Undo action name");
- case EditActionLowerBaseline: return LPCTSTR_UI_STRING_KEY("Lower Baseline", "Lower Baseline (Undo action name)", "Undo action name");
- case EditActionSetTraditionalCharacterShape: return LPCTSTR_UI_STRING_KEY("Set Traditional Character Shape", "Set Traditional Character Shape (Undo action name)", "Undo action name");
- case EditActionSetFont: return LPCTSTR_UI_STRING_KEY("Set Font", "Set Font (Undo action name)", "Undo action name");
- case EditActionChangeAttributes: return LPCTSTR_UI_STRING_KEY("Change Attributes", "Change Attributes (Undo action name)", "Undo action name");
- case EditActionAlignLeft: return LPCTSTR_UI_STRING_KEY("Align Left", "Align Left (Undo action name)", "Undo action name");
- case EditActionAlignRight: return LPCTSTR_UI_STRING_KEY("Align Right", "Align Right (Undo action name)", "Undo action name");
- case EditActionCenter: return LPCTSTR_UI_STRING_KEY("Center", "Center (Undo action name)", "Undo action name");
- case EditActionJustify: return LPCTSTR_UI_STRING_KEY("Justify", "Justify (Undo action name)", "Undo action name");
- case EditActionSetWritingDirection: return LPCTSTR_UI_STRING_KEY("Set Writing Direction", "Set Writing Direction (Undo action name)", "Undo action name");
- case EditActionSubscript: return LPCTSTR_UI_STRING_KEY("Subscript", "Subscript (Undo action name)", "Undo action name");
- case EditActionSuperscript: return LPCTSTR_UI_STRING_KEY("Superscript", "Superscript (Undo action name)", "Undo action name");
- case EditActionUnderline: return LPCTSTR_UI_STRING_KEY("Underline", "Underline (Undo action name)", "Undo action name");
- case EditActionOutline: return LPCTSTR_UI_STRING_KEY("Outline", "Outline (Undo action name)", "Undo action name");
- case EditActionUnscript: return LPCTSTR_UI_STRING_KEY("Unscript", "Unscript (Undo action name)", "Undo action name");
- case EditActionDrag: return LPCTSTR_UI_STRING_KEY("Drag", "Drag (Undo action name)", "Undo action name");
- case EditActionCut: return LPCTSTR_UI_STRING_KEY("Cut", "Cut (Undo action name)", "Undo action name");
- case EditActionPaste: return LPCTSTR_UI_STRING_KEY("Paste", "Paste (Undo action name)", "Undo action name");
- case EditActionPasteFont: return LPCTSTR_UI_STRING_KEY("Paste Font", "Paste Font (Undo action name)", "Undo action name");
- case EditActionPasteRuler: return LPCTSTR_UI_STRING_KEY("Paste Ruler", "Paste Ruler (Undo action name)", "Undo action name");
- case EditActionTyping: return LPCTSTR_UI_STRING_KEY("Typing", "Typing (Undo action name)", "Undo action name");
- case EditActionCreateLink: return LPCTSTR_UI_STRING_KEY("Create Link", "Create Link (Undo action name)", "Undo action name");
- case EditActionUnlink: return LPCTSTR_UI_STRING_KEY("Unlink", "Unlink (Undo action name)", "Undo action name");
- case EditActionInsertList: return LPCTSTR_UI_STRING_KEY("Insert List", "Insert List (Undo action name)", "Undo action name");
- case EditActionFormatBlock: return LPCTSTR_UI_STRING_KEY("Formatting", "Format Block (Undo action name)", "Undo action name");
- case EditActionIndent: return LPCTSTR_UI_STRING_KEY("Indent", "Indent (Undo action name)", "Undo action name");
- case EditActionOutdent: return LPCTSTR_UI_STRING_KEY("Outdent", "Outdent (Undo action name)", "Undo action name");
- }
- return 0;
-}
-
-void WebEditorClient::registerCommandForUndo(PassRefPtr<EditCommand> command)
-{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- LPCTSTR actionName = undoNameForEditAction(command->editingAction());
- WebEditorUndoCommand* undoCommand = new WebEditorUndoCommand(command, true);
- if (!undoCommand)
- return;
- uiDelegate->registerUndoWithTarget(m_undoTarget, 0, undoCommand);
- undoCommand->Release(); // the undo manager owns the reference
- BSTR actionNameBSTR = SysAllocString(actionName);
- if (actionNameBSTR) {
- uiDelegate->setActionTitle(actionNameBSTR);
- SysFreeString(actionNameBSTR);
- }
- uiDelegate->Release();
- }
-}
-
-void WebEditorClient::registerCommandForRedo(PassRefPtr<EditCommand> command)
-{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- WebEditorUndoCommand* undoCommand = new WebEditorUndoCommand(command, false);
- if (!undoCommand)
- return;
- uiDelegate->registerUndoWithTarget(m_undoTarget, 0, undoCommand);
- undoCommand->Release(); // the undo manager owns the reference
- uiDelegate->Release();
- }
-}
-
-void WebEditorClient::clearUndoRedoOperations()
-{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- uiDelegate->removeAllActionsWithTarget(m_undoTarget);
- uiDelegate->Release();
- }
-}
-
-bool WebEditorClient::canUndo() const
-{
- BOOL result = FALSE;
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- uiDelegate->canUndo(&result);
- uiDelegate->Release();
- }
- return !!result;
-}
-
-bool WebEditorClient::canRedo() const
-{
- BOOL result = FALSE;
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- uiDelegate->canRedo(&result);
- uiDelegate->Release();
- }
- return !!result;
-}
-
-void WebEditorClient::undo()
-{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- uiDelegate->undo();
- uiDelegate->Release();
- }
-}
-
-void WebEditorClient::redo()
-{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- uiDelegate->redo();
- uiDelegate->Release();
- }
-}
-
-void WebEditorClient::handleKeyboardEvent(KeyboardEvent* evt)
-{
- if (m_webView->handleEditingKeyboardEvent(evt))
- evt->setDefaultHandled();
-}
-
-void WebEditorClient::handleInputMethodKeydown(KeyboardEvent* )
-{
-}
-
-bool WebEditorClient::isEditable()
-{
- return false;
-}
-
-void WebEditorClient::ignoreWordInSpellDocument(const String& word)
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- initViewSpecificSpelling(m_webView);
- ed->ignoreWordInSpellDocument(m_webView, BString(word));
-}
-
-void WebEditorClient::learnWord(const String& word)
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- ed->learnWord(BString(word));
-}
-
-void WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength)
-{
- *misspellingLocation = -1;
- *misspellingLength = 0;
-
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- initViewSpecificSpelling(m_webView);
- ed->checkSpellingOfString(m_webView, text, length, misspellingLocation, misspellingLength);
-}
-
-void WebEditorClient::checkGrammarOfString(const UChar* text, int length, Vector<GrammarDetail>& details, int* badGrammarLocation, int* badGrammarLength)
-{
- details.clear();
- *badGrammarLocation = -1;
- *badGrammarLength = 0;
-
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- initViewSpecificSpelling(m_webView);
- COMPtr<IEnumWebGrammarDetails> enumDetailsObj;
- if (FAILED(ed->checkGrammarOfString(m_webView, text, length, &enumDetailsObj, badGrammarLocation, badGrammarLength)))
- return;
-
- while (true) {
- ULONG fetched;
- COMPtr<IWebGrammarDetail> detailObj;
- if (enumDetailsObj->Next(1, &detailObj, &fetched) != S_OK)
- break;
-
- GrammarDetail detail;
- if (FAILED(detailObj->length(&detail.length)))
- continue;
- if (FAILED(detailObj->location(&detail.location)))
- continue;
- BSTR userDesc;
- if (FAILED(detailObj->userDescription(&userDesc)))
- continue;
- detail.userDescription = String(userDesc, SysStringLen(userDesc));
- SysFreeString(userDesc);
-
- COMPtr<IEnumSpellingGuesses> enumGuessesObj;
- if (FAILED(detailObj->guesses(&enumGuessesObj)))
- continue;
- while (true) {
- BSTR guess;
- if (enumGuessesObj->Next(1, &guess, &fetched) != S_OK)
- break;
- detail.guesses.append(String(guess, SysStringLen(guess)));
- SysFreeString(guess);
- }
-
- details.append(detail);
- }
-}
-
-void WebEditorClient::updateSpellingUIWithGrammarString(const String& string, const WebCore::GrammarDetail& detail)
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- Vector<BSTR> guessesBSTRs;
- for (unsigned i = 0; i < detail.guesses.size(); i++) {
- BString guess(detail.guesses[i]);
- guessesBSTRs.append(guess.release());
- }
- BString userDescriptionBSTR(detail.userDescription);
- ed->updateSpellingUIWithGrammarString(BString(string), detail.location, detail.length, userDescriptionBSTR, guessesBSTRs.data(), (int)guessesBSTRs.size());
- for (unsigned i = 0; i < guessesBSTRs.size(); i++)
- SysFreeString(guessesBSTRs[i]);
-}
-
-void WebEditorClient::updateSpellingUIWithMisspelledWord(const String& word)
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- ed->updateSpellingUIWithMisspelledWord(BString(word));
-}
-
-void WebEditorClient::showSpellingUI(bool show)
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- ed->showSpellingUI(show);
-}
-
-bool WebEditorClient::spellingUIIsShowing()
-{
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return false;
-
- BOOL showing;
- if (FAILED(ed->spellingUIIsShowing(&showing)))
- return false;
-
- return !!showing;
-}
-
-void WebEditorClient::getGuessesForWord(const String& word, Vector<String>& guesses)
-{
- guesses.clear();
-
- COMPtr<IWebEditingDelegate> ed;
- if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get())
- return;
-
- COMPtr<IEnumSpellingGuesses> enumGuessesObj;
- if (FAILED(ed->guessesForWord(BString(word), &enumGuessesObj)))
- return;
-
- while (true) {
- ULONG fetched;
- BSTR guess;
- if (enumGuessesObj->Next(1, &guess, &fetched) != S_OK)
- break;
- guesses.append(String(guess, SysStringLen(guess)));
- SysFreeString(guess);
- }
-}
-
-void WebEditorClient::setInputMethodState(bool enabled)
-{
- m_webView->setInputMethodState(enabled);
-}