18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKitDLL.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebEditorClient.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKit.h" 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "WebNotification.h" 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "WebNotificationCenter.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebView.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DOMCoreClasses.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/BString.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/Document.h> 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/EditCommand.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/HTMLElement.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/HTMLInputElement.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/HTMLNames.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/KeyboardEvent.h> 422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <WebCore/LocalizedStrings.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/NotImplemented.h> 440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include <WebCore/PlatformKeyboardEvent.h> 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/Range.h> 460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include <WebCore/UserTypingGestureIndicator.h> 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// {09A11D2B-FAFB-4ca0-A6F7-791EE8932C88} 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const GUID IID_IWebUndoCommand = 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 0x9a11d2b, 0xfafb, 0x4ca0, { 0xa6, 0xf7, 0x79, 0x1e, 0xe8, 0x93, 0x2c, 0x88 } }; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass IWebUndoCommand : public IUnknown { 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void execute() = 0; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// WebEditorUndoTarget ------------------------------------------------------------- 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebEditorUndoTarget : public IWebUndoTarget 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebEditorUndoTarget(); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // IUnknown 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ULONG STDMETHODCALLTYPE AddRef(void); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ULONG STDMETHODCALLTYPE Release(void); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // IWebUndoTarget 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual HRESULT STDMETHODCALLTYPE invoke( 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* [in] */ BSTR actionName, 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* [in] */ IUnknown *obj); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG m_refCount; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebEditorUndoTarget::WebEditorUndoTarget() 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project: m_refCount(1) 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebEditorUndoTarget::QueryInterface(REFIID riid, void** ppvObject) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = 0; 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (IsEqualGUID(riid, IID_IUnknown)) 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = static_cast<IWebUndoTarget*>(this); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (IsEqualGUID(riid, IID_IWebUndoTarget)) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = static_cast<IWebUndoTarget*>(this); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return E_NOINTERFACE; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddRef(); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return S_OK; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebEditorUndoTarget::AddRef(void) 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ++m_refCount; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebEditorUndoTarget::Release(void) 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG newRef = --m_refCount; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!newRef) 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete(this); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return newRef; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebEditorUndoTarget::invoke( 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* [in] */ BSTR /*actionName*/, 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* [in] */ IUnknown *obj) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUndoCommand* undoCommand = 0; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(obj->QueryInterface(IID_IWebUndoCommand, (void**)&undoCommand))) { 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project undoCommand->execute(); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project undoCommand->Release(); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return S_OK; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// WebEditorClient ------------------------------------------------------------------ 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebEditorClient::WebEditorClient(WebView* webView) 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_webView(webView) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_undoTarget(0) 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_undoTarget = new WebEditorUndoTarget(); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebEditorClient::~WebEditorClient() 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_undoTarget) 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_undoTarget->Release(); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::pageDestroyed() 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::isContinuousSpellCheckingEnabled() 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL enabled; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->isContinuousSpellCheckingEnabled(&enabled))) 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!enabled; 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::toggleContinuousSpellChecking() 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webView->toggleContinuousSpellChecking(0); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::isGrammarCheckingEnabled() 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL enabled; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->isGrammarCheckingEnabled(&enabled))) 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!enabled; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::toggleGrammarChecking() 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webView->toggleGrammarChecking(0); 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initViewSpecificSpelling(IWebViewEditing* viewEditing) 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we just use this as a flag to indicate that we've spell checked the document 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and need to close the spell checker out when the view closes. 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int tag; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project viewEditing->spellCheckerDocumentTag(&tag); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint WebEditorClient::spellCheckerDocumentTag() 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we don't use the concept of spelling tags 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldBeginEditing(Range*) 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldEndEditing(Range*) 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didBeginEditing() 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::respondToChangedContents() 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::respondToChangedSelection() 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webView->selectionChanged(); 213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 214231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static BSTR webViewDidChangeSelectionNotificationName = SysAllocString(WebViewDidChangeSelectionNotification); 215231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal(); 216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notifyCenter->postNotificationName(webViewDidChangeSelectionNotificationName, static_cast<IWebView*>(m_webView), 0); 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didEndEditing() 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didWriteSelectionToPasteboard() 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didSetSelectionTypesForPasteboard() 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldDeleteRange(Range* /*range*/) 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: calling m_webView->editingDelegate() will cause an assertion failure so we don't want to enable this code until that's implemented. 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //BOOL result = false; 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //IWebViewEditingDelegate* editingDelegate; 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //// FIXME: DOMRange needs to be implemented before anything meaningful can be done here 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //IDOMRange* domRange(0); 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //if (SUCCEEDED(m_webView->editingDelegate(&editingDelegate))) { 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // editingDelegate->shouldDeleteDOMRange(m_webView, domRange, &result); 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // editingDelegate->Release(); 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //} 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //return !!result; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldInsertNode(Node* /*node*/, Range* /*replacingRange*/, EditorInsertAction /*givenAction*/) 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldInsertText(const String& /*str*/, Range* /* replacingRange */, EditorInsertAction /*givenAction*/) 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: calling m_webView->editingDelegate() will cause an assertion failure so we don't want to enable this code until that's implemented. 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //BOOL result = false; 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //IWebViewEditingDelegate* editingDelegate; 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //// FIXME: DOMRange needs to be implemented before anything meaningful can be done here 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //IDOMRange* domRange(0); // make a DOMRange from replacingRange 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //BString text(str); 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //if (SUCCEEDED(m_webView->editingDelegate(&editingDelegate))) { 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // editingDelegate->shouldInsertText(m_webView, text, domRange, (WebViewInsertAction) givenAction, &result); 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // editingDelegate->Release(); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //} 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //return !!result; 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//bool WebEditorClient::shouldChangeSelectedRange(Range *currentRange, Range *toProposedRange, SelectionAffinity selectionAffinity, bool stillSelecting) 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//{ notImplemented(); return false; } 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldApplyStyle(CSSStyleDeclaration* /*style*/, Range* /*toElementsInDOMRange*/) 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); return true; } 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldMoveRangeAfterDelete(Range* /*range*/, Range* /*rangeToBeReplaced*/) 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); return true; } 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldChangeTypingStyle(CSSStyleDeclaration* /*currentStyle*/, CSSStyleDeclaration* /*toProposedStyle*/) 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); return false; } 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::webViewDidChangeTypingStyle(WebNotification* /*notification*/) 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); } 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::webViewDidChangeSelection(WebNotification* /*notification*/) 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); } 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldShowDeleteInterface(HTMLElement* /*element*/) 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); return false; } 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::smartInsertDeleteEnabled(void) 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL enabled = FALSE; 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webView->smartInsertDeleteEnabled(&enabled); 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!enabled; 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 303635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool WebEditorClient::isSelectTrailingWhitespaceEnabled(void) 304635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project BOOL enabled = FALSE; 306635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_webView->isSelectTrailingWhitespaceEnabled(&enabled); 307635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return !!enabled; 308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldChangeSelectedRange(WebCore::Range*, WebCore::Range*, WebCore::EAffinity, bool) 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ notImplemented(); return true; } 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textFieldDidBeginEditing(Element* e) 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLInputElement* domInputElement; 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->textFieldDidBeginEditing(domInputElement, kit(e->document()->frame())); 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domInputElement->Release(); 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textFieldDidEndEditing(Element* e) 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLInputElement* domInputElement; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->textFieldDidEndEditing(domInputElement, kit(e->document()->frame())); 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domInputElement->Release(); 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textDidChangeInTextField(Element* e) 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != e) 3500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return; 3510617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLInputElement* domInputElement; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->textDidChangeInTextField(domInputElement, kit(e->document()->frame())); 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domInputElement->Release(); 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::doTextFieldCommandFromEvent(Element* e, KeyboardEvent* ke) 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL result = FALSE; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLInputElement* domInputElement; 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String command = m_webView->interpretKeyEvent(ke); 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We allow empty commands here because the app code actually depends on this being called for all key presses. 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We may want to revisit this later because it doesn't really make sense to send an empty command. 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->doPlatformCommand(domInputElement, BString(command), kit(e->document()->frame()), &result); 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domInputElement->Release(); 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!result; 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textWillBeDeletedInTextField(Element* e) 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We're using the deleteBackward command for all deletion operations since the autofill code treats all deletions the same way. 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLInputElement* domInputElement; 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL result; 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->doPlatformCommand(domInputElement, BString(L"DeleteBackward"), kit(e->document()->frame()), &result); 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domInputElement->Release(); 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textDidChangeInTextArea(Element* e) 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebFormDelegate* formDelegate; 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMElement* domElement = DOMElement::createInstance(e); 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domElement) { 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IDOMHTMLTextAreaElement* domTextAreaElement; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLTextAreaElement, (void**)&domTextAreaElement))) { 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->textDidChangeInTextArea(domTextAreaElement, kit(e->document()->frame())); 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domTextAreaElement->Release(); 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project domElement->Release(); 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project formDelegate->Release(); 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebEditorUndoCommand : public IWebUndoCommand 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebEditorUndoCommand(PassRefPtr<EditCommand> editCommand, bool isUndo); 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void execute(); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // IUnknown 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ULONG STDMETHODCALLTYPE AddRef(void); 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ULONG STDMETHODCALLTYPE Release(void); 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG m_refCount; 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<EditCommand> m_editCommand; 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isUndo; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebEditorUndoCommand::WebEditorUndoCommand(PassRefPtr<EditCommand> editCommand, bool isUndo) 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_editCommand(editCommand) 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_isUndo(isUndo) 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_refCount(1) 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorUndoCommand::execute() 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_isUndo) 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_editCommand->unapply(); 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_editCommand->reapply(); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebEditorUndoCommand::QueryInterface(REFIID riid, void** ppvObject) 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = 0; 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (IsEqualGUID(riid, IID_IUnknown)) 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = static_cast<IWebUndoCommand*>(this); 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (IsEqualGUID(riid, IID_IWebUndoCommand)) 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *ppvObject = static_cast<IWebUndoCommand*>(this); 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return E_NOINTERFACE; 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddRef(); 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return S_OK; 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebEditorUndoCommand::AddRef(void) 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ++m_refCount; 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebEditorUndoCommand::Release(void) 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG newRef = --m_refCount; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!newRef) 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete(this); 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return newRef; 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic String undoNameForEditAction(EditAction editAction) 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (editAction) { 4882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUnspecified: return String(); 4892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSetColor: return WEB_UI_STRING_KEY("Set Color", "Set Color (Undo action name)", "Undo action name"); 4902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSetBackgroundColor: return WEB_UI_STRING_KEY("Set Background Color", "Set Background Color (Undo action name)", "Undo action name"); 4912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionTurnOffKerning: return WEB_UI_STRING_KEY("Turn Off Kerning", "Turn Off Kerning (Undo action name)", "Undo action name"); 4922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionTightenKerning: return WEB_UI_STRING_KEY("Tighten Kerning", "Tighten Kerning (Undo action name)", "Undo action name"); 4932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionLoosenKerning: return WEB_UI_STRING_KEY("Loosen Kerning", "Loosen Kerning (Undo action name)", "Undo action name"); 4942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUseStandardKerning: return WEB_UI_STRING_KEY("Use Standard Kerning", "Use Standard Kerning (Undo action name)", "Undo action name"); 4952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionTurnOffLigatures: return WEB_UI_STRING_KEY("Turn Off Ligatures", "Turn Off Ligatures (Undo action name)", "Undo action name"); 4962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUseStandardLigatures: return WEB_UI_STRING_KEY("Use Standard Ligatures", "Use Standard Ligatures (Undo action name)", "Undo action name"); 4972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUseAllLigatures: return WEB_UI_STRING_KEY("Use All Ligatures", "Use All Ligatures (Undo action name)", "Undo action name"); 4982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionRaiseBaseline: return WEB_UI_STRING_KEY("Raise Baseline", "Raise Baseline (Undo action name)", "Undo action name"); 4992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionLowerBaseline: return WEB_UI_STRING_KEY("Lower Baseline", "Lower Baseline (Undo action name)", "Undo action name"); 5002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSetTraditionalCharacterShape: return WEB_UI_STRING_KEY("Set Traditional Character Shape", "Set Traditional Character Shape (Undo action name)", "Undo action name"); 5012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSetFont: return WEB_UI_STRING_KEY("Set Font", "Set Font (Undo action name)", "Undo action name"); 5022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionChangeAttributes: return WEB_UI_STRING_KEY("Change Attributes", "Change Attributes (Undo action name)", "Undo action name"); 5032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionAlignLeft: return WEB_UI_STRING_KEY("Align Left", "Align Left (Undo action name)", "Undo action name"); 5042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionAlignRight: return WEB_UI_STRING_KEY("Align Right", "Align Right (Undo action name)", "Undo action name"); 5052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionCenter: return WEB_UI_STRING_KEY("Center", "Center (Undo action name)", "Undo action name"); 5062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionJustify: return WEB_UI_STRING_KEY("Justify", "Justify (Undo action name)", "Undo action name"); 5072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSetWritingDirection: return WEB_UI_STRING_KEY("Set Writing Direction", "Set Writing Direction (Undo action name)", "Undo action name"); 5082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSubscript: return WEB_UI_STRING_KEY("Subscript", "Subscript (Undo action name)", "Undo action name"); 5092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionSuperscript: return WEB_UI_STRING_KEY("Superscript", "Superscript (Undo action name)", "Undo action name"); 5102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUnderline: return WEB_UI_STRING_KEY("Underline", "Underline (Undo action name)", "Undo action name"); 5112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionOutline: return WEB_UI_STRING_KEY("Outline", "Outline (Undo action name)", "Undo action name"); 5122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUnscript: return WEB_UI_STRING_KEY("Unscript", "Unscript (Undo action name)", "Undo action name"); 5132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionDrag: return WEB_UI_STRING_KEY("Drag", "Drag (Undo action name)", "Undo action name"); 5142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionCut: return WEB_UI_STRING_KEY("Cut", "Cut (Undo action name)", "Undo action name"); 5152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionPaste: return WEB_UI_STRING_KEY("Paste", "Paste (Undo action name)", "Undo action name"); 5162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionPasteFont: return WEB_UI_STRING_KEY("Paste Font", "Paste Font (Undo action name)", "Undo action name"); 5172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionPasteRuler: return WEB_UI_STRING_KEY("Paste Ruler", "Paste Ruler (Undo action name)", "Undo action name"); 5182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionTyping: return WEB_UI_STRING_KEY("Typing", "Typing (Undo action name)", "Undo action name"); 5192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionCreateLink: return WEB_UI_STRING_KEY("Create Link", "Create Link (Undo action name)", "Undo action name"); 5202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionUnlink: return WEB_UI_STRING_KEY("Unlink", "Unlink (Undo action name)", "Undo action name"); 5212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionInsertList: return WEB_UI_STRING_KEY("Insert List", "Insert List (Undo action name)", "Undo action name"); 5222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionFormatBlock: return WEB_UI_STRING_KEY("Formatting", "Format Block (Undo action name)", "Undo action name"); 5232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionIndent: return WEB_UI_STRING_KEY("Indent", "Indent (Undo action name)", "Undo action name"); 5242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case EditActionOutdent: return WEB_UI_STRING_KEY("Outdent", "Outdent (Undo action name)", "Undo action name"); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return String(); 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::registerCommandForUndo(PassRefPtr<EditCommand> command) 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 5332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch String actionName = undoNameForEditAction(command->editingAction()); 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebEditorUndoCommand* undoCommand = new WebEditorUndoCommand(command, true); 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!undoCommand) 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->registerUndoWithTarget(m_undoTarget, 0, undoCommand); 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project undoCommand->Release(); // the undo manager owns the reference 5392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!actionName.isEmpty()) 5402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch uiDelegate->setActionTitle(BString(actionName)); 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::registerCommandForRedo(PassRefPtr<EditCommand> command) 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebEditorUndoCommand* undoCommand = new WebEditorUndoCommand(command, false); 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!undoCommand) 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->registerUndoWithTarget(m_undoTarget, 0, undoCommand); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project undoCommand->Release(); // the undo manager owns the reference 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::clearUndoRedoOperations() 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->removeAllActionsWithTarget(m_undoTarget); 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canCopyCut(bool defaultValue) const 56881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 56981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 57081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 57181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 57281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canPaste(bool defaultValue) const 57381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 57481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 57581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 57681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::canUndo() const 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL result = FALSE; 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->canUndo(&result); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!result; 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::canRedo() const 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL result = FALSE; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->canRedo(&result); 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!result; 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::undo() 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->undo(); 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::redo() 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IWebUIDelegate* uiDelegate = 0; 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->redo(); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uiDelegate->Release(); 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::handleKeyboardEvent(KeyboardEvent* evt) 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_webView->handleEditingKeyboardEvent(evt)) 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt->setDefaultHandled(); 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::handleInputMethodKeydown(KeyboardEvent* ) 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::ignoreWordInSpellDocument(const String& word) 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initViewSpecificSpelling(m_webView); 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->ignoreWordInSpellDocument(m_webView, BString(word)); 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::learnWord(const String& word) 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->learnWord(BString(word)); 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength) 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *misspellingLocation = -1; 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *misspellingLength = 0; 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initViewSpecificSpelling(m_webView); 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->checkSpellingOfString(m_webView, text, length, misspellingLocation, misspellingLength); 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochString WebEditorClient::getAutoCorrectSuggestionForMisspelledWord(const String& inputWord) 6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This method can be implemented using customized algorithms for the particular browser. 6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Currently, it computes an empty string. 6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return String(); 6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::checkGrammarOfString(const UChar* text, int length, Vector<GrammarDetail>& details, int* badGrammarLocation, int* badGrammarLength) 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project details.clear(); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *badGrammarLocation = -1; 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *badGrammarLength = 0; 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initViewSpecificSpelling(m_webView); 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IEnumWebGrammarDetails> enumDetailsObj; 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(ed->checkGrammarOfString(m_webView, text, length, &enumDetailsObj, badGrammarLocation, badGrammarLength))) 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (true) { 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG fetched; 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebGrammarDetail> detailObj; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (enumDetailsObj->Next(1, &detailObj, &fetched) != S_OK) 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GrammarDetail detail; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(detailObj->length(&detail.length))) 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(detailObj->location(&detail.location))) 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BSTR userDesc; 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(detailObj->userDescription(&userDesc))) 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project detail.userDescription = String(userDesc, SysStringLen(userDesc)); 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SysFreeString(userDesc); 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IEnumSpellingGuesses> enumGuessesObj; 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(detailObj->guesses(&enumGuessesObj))) 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (true) { 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BSTR guess; 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (enumGuessesObj->Next(1, &guess, &fetched) != S_OK) 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project detail.guesses.append(String(guess, SysStringLen(guess))); 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SysFreeString(guess); 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project details.append(detail); 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::updateSpellingUIWithGrammarString(const String& string, const WebCore::GrammarDetail& detail) 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<BSTR> guessesBSTRs; 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < detail.guesses.size(); i++) { 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BString guess(detail.guesses[i]); 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project guessesBSTRs.append(guess.release()); 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BString userDescriptionBSTR(detail.userDescription); 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->updateSpellingUIWithGrammarString(BString(string), detail.location, detail.length, userDescriptionBSTR, guessesBSTRs.data(), (int)guessesBSTRs.size()); 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < guessesBSTRs.size(); i++) 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SysFreeString(guessesBSTRs[i]); 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::updateSpellingUIWithMisspelledWord(const String& word) 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->updateSpellingUIWithMisspelledWord(BString(word)); 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::showSpellingUI(bool show) 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ed->showSpellingUI(show); 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::spellingUIIsShowing() 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL showing; 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(ed->spellingUIIsShowing(&showing))) 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!showing; 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 761f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebEditorClient::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project guesses.clear(); 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IWebEditingDelegate> ed; 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(m_webView->editingDelegate(&ed)) || !ed.get()) 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COMPtr<IEnumSpellingGuesses> enumGuessesObj; 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (FAILED(ed->guessesForWord(BString(word), &enumGuessesObj))) 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (true) { 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ULONG fetched; 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BSTR guess; 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (enumGuessesObj->Next(1, &guess, &fetched) != S_OK) 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project guesses.append(String(guess, SysStringLen(guess))); 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SysFreeString(guess); 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 783967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid WebEditorClient::willSetInputMethodState() 784967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 785967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 786967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::setInputMethodState(bool enabled) 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webView->setInputMethodState(enabled); 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 791