18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EditorClientWx.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EditCommand.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Editor.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FocusController.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "HostWindow.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "KeyboardEvent.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformKeyboardEvent.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SelectionController.h" 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebFrame.h" 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebFramePrivate.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebView.h" 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WebViewPrivate.h" 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WindowsKeyboardCodes.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdio.h> 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned CtrlKey = 1 << 0; 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned AltKey = 1 << 1; 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const unsigned ShiftKey = 1 << 2; 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstruct KeyDownEntry { 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned virtualKey; 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned modifiers; 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const char* name; 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstruct KeyPressEntry { 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned charCode; 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned modifiers; 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const char* name; 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const KeyDownEntry keyDownEntries[] = { 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_LEFT, 0, "MoveLeft" }, 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_LEFT, ShiftKey, "MoveLeftAndModifySelection" }, 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_LEFT, CtrlKey, "MoveWordLeft" }, 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_LEFT, CtrlKey | ShiftKey, "MoveWordLeftAndModifySelection" }, 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RIGHT, 0, "MoveRight" }, 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RIGHT, ShiftKey, "MoveRightAndModifySelection" }, 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RIGHT, CtrlKey, "MoveWordRight" }, 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RIGHT, CtrlKey | ShiftKey, "MoveWordRightAndModifySelection" }, 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_UP, 0, "MoveUp" }, 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_UP, ShiftKey, "MoveUpAndModifySelection" }, 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_PRIOR, ShiftKey, "MovePageUpAndModifySelection" }, 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_DOWN, 0, "MoveDown" }, 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_DOWN, ShiftKey, "MoveDownAndModifySelection" }, 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_NEXT, ShiftKey, "MovePageDownAndModifySelection" }, 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_PRIOR, 0, "MovePageUp" }, 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_NEXT, 0, "MovePageDown" }, 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_HOME, 0, "MoveToBeginningOfLine" }, 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_HOME, ShiftKey, "MoveToBeginningOfLineAndModifySelection" }, 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_HOME, CtrlKey, "MoveToBeginningOfDocument" }, 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_HOME, CtrlKey | ShiftKey, "MoveToBeginningOfDocumentAndModifySelection" }, 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_END, 0, "MoveToEndOfLine" }, 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_END, ShiftKey, "MoveToEndOfLineAndModifySelection" }, 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_END, CtrlKey, "MoveToEndOfDocument" }, 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_END, CtrlKey | ShiftKey, "MoveToEndOfDocumentAndModifySelection" }, 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_BACK, 0, "DeleteBackward" }, 960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_BACK, ShiftKey, "DeleteBackward" }, 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_DELETE, 0, "DeleteForward" }, 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_BACK, CtrlKey, "DeleteWordBackward" }, 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_DELETE, CtrlKey, "DeleteWordForward" }, 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 'B', CtrlKey, "ToggleBold" }, 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 'I', CtrlKey, "ToggleItalic" }, 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_ESCAPE, 0, "Cancel" }, 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch //FIXME: this'll never happen. We can trash it or make it a normal period 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_OEM_PERIOD, CtrlKey, "Cancel" }, 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_TAB, 0, "InsertTab" }, 1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_TAB, ShiftKey, "InsertBacktab" }, 1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RETURN, 0, "InsertNewline" }, 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RETURN, CtrlKey, "InsertNewline" }, 1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { VK_RETURN, AltKey, "InsertNewline" }, 1120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen { VK_RETURN, ShiftKey, "InsertLineBreak" }, 1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 'A', CtrlKey, "SelectAll" }, 1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 'Z', CtrlKey, "Undo" }, 1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 'Z', CtrlKey | ShiftKey, "Redo" }, 1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const KeyPressEntry keyPressEntries[] = { 1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\t', 0, "InsertTab" }, 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\t', ShiftKey, "InsertBacktab" }, 1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\r', 0, "InsertNewline" }, 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\r', CtrlKey, "InsertNewline" }, 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\r', AltKey, "InsertNewline" }, 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { '\r', AltKey | ShiftKey, "InsertNewline" }, 1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEditorClientWx::~EditorClientWx() 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_page = NULL; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::setPage(Page* page) 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_page = page; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::pageDestroyed() 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldDeleteRange(Range*) 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldShowDeleteInterface(HTMLElement*) 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::smartInsertDeleteEnabled() 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool EditorClientWx::isSelectTrailingWhitespaceEnabled() 161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::isContinuousSpellCheckingEnabled() 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::toggleContinuousSpellChecking() 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::isGrammarCheckingEnabled() 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::toggleGrammarChecking() 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint EditorClientWx::spellCheckerDocumentTag() 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::selectWordBeforeMenuEvent() 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldBeginEditing(Range*) 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldEndEditing(Range*) 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldInsertNode(Node*, Range*, 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project EditorInsertAction) 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldInsertText(const String&, Range*, 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project EditorInsertAction) 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldApplyStyle(CSSStyleDeclaration*, 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Range*) 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldMoveRangeAfterDelete(Range*, Range*) 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::shouldChangeSelectedRange(Range* fromRange, Range* toRange, 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project EAffinity, bool stillSelecting) 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didBeginEditing() 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::respondToChangedContents() 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Frame* frame = m_page->focusController()->focusedOrMainFrame(); 2545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 2555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (frame) { 2565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 2575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (webKitWin) { 2585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen wxWebViewContentsChangedEvent wkEvent(webKitWin); 2595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen webKitWin->GetEventHandler()->ProcessEvent(wkEvent); 2605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 2615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didEndEditing() 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didWriteSelectionToPasteboard() 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::didSetSelectionTypesForPasteboard() 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 279635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid EditorClientWx::registerCommandForUndo(PassRefPtr<EditCommand> command) 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 281635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame) { 284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (webKitWin) { 286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->undoStack.append(EditCommandWx(command)); 287635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid EditorClientWx::registerCommandForRedo(PassRefPtr<EditCommand> command) 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 293635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 294635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 295635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame) { 296231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 297635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (webKitWin) { 298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->redoStack.insert(0, EditCommandWx(command)); 299635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 300635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::clearUndoRedoOperations() 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 305231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Frame* frame = m_page->focusController()->focusedOrMainFrame(); 306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (frame) { 308231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 309231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (webKitWin) { 310231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->redoStack.clear(); 311231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->undoStack.clear(); 312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 313231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool EditorClientWx::canCopyCut(bool defaultValue) const 31781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 31881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 31981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 32081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 32181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool EditorClientWx::canPaste(bool defaultValue) const 32281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 32381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 32481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 32581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::canUndo() const 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame) { 331231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 332231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (webKitWin) { 333231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return webKitWin->m_impl->undoStack.size() != 0; 334635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 335635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::canRedo() const 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 341635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 342635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 343635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame) { 344231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 345231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (webKitWin && webKitWin) { 346231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return webKitWin->m_impl->redoStack.size() != 0; 347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::undo() 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 354635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 355635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 356635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame) { 357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 358231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (webKitWin) { 359231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->undoStack.last().editCommand()->unapply(); 360231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webKitWin->m_impl->undoStack.removeLast(); 361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 362635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::redo() 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 367635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = m_page->focusController()->focusedOrMainFrame(); 368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 369231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (frame) { 370231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (webKitWin) { 3720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen webKitWin->m_impl->redoStack.last().editCommand()->reapply(); 3730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen webKitWin->m_impl->redoStack.removeLast(); 374635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 375635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool EditorClientWx::handleEditingKeyboardEvent(KeyboardEvent* event) 3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* node = event->target()->toNode(); 3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(node); 3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = node->document()->frame(); 3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(frame); 3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const PlatformKeyboardEvent* keyEvent = event->keyEvent(); 3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch //NB: this is what windows does, but they also have a keypress event for Alt+Enter which clearly won't get hit with this 3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!keyEvent || keyEvent->altKey()) // do not treat this as text input if Alt is down 3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Editor::Command command = frame->editor()->command(interpretKeyEvent(event)); 3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (keyEvent->type() == PlatformKeyboardEvent::RawKeyDown) { 3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // WebKit doesn't have enough information about mode to decide how commands that just insert text if executed via Editor should be treated, 3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or if not to let a CHAR event be generated 3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // (e.g. Tab that inserts a Tab character, or Enter). 3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return !command.isTextInsertion() && command.execute(event); 3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (command.execute(event)) 4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Don't insert null or control characters as they can result in unexpected behaviour 4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (event->charCode() < ' ') 4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return frame->editor()->insertText(event->keyEvent()->text(), event); 4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst char* EditorClientWx::interpretKeyEvent(const KeyboardEvent* evt) 4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(evt->keyEvent()->type() == PlatformKeyboardEvent::RawKeyDown || evt->keyEvent()->type() == PlatformKeyboardEvent::Char); 4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static HashMap<int, const char*>* keyDownCommandsMap = 0; 4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static HashMap<int, const char*>* keyPressCommandsMap = 0; 4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!keyDownCommandsMap) { 4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch keyDownCommandsMap = new HashMap<int, const char*>; 4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch keyPressCommandsMap = new HashMap<int, const char*>; 4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (unsigned i = 0; i < WXSIZEOF(keyDownEntries); i++) 4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch keyDownCommandsMap->set(keyDownEntries[i].modifiers << 16 | keyDownEntries[i].virtualKey, keyDownEntries[i].name); 4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (unsigned i = 0; i < WXSIZEOF(keyPressEntries); i++) 4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch keyPressCommandsMap->set(keyPressEntries[i].modifiers << 16 | keyPressEntries[i].charCode, keyPressEntries[i].name); 4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned modifiers = 0; 4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (evt->shiftKey()) 4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modifiers |= ShiftKey; 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (evt->altKey()) 4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modifiers |= AltKey; 4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (evt->ctrlKey()) 4340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modifiers |= CtrlKey; 4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (evt->keyEvent()->type() == PlatformKeyboardEvent::RawKeyDown) { 4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int mapKey = modifiers << 16 | evt->keyCode(); 4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return mapKey ? keyDownCommandsMap->get(mapKey) : 0; 4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int mapKey = modifiers << 16 | evt->charCode(); 4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return mapKey ? keyPressCommandsMap->get(mapKey) : 0; 4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::handleInputMethodKeydown(KeyboardEvent* event) 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// NOTE: we don't currently need to handle this. When key events occur, 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// both this method and handleKeyboardEvent get a chance at handling them. 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// We might use this method later on for IME-specific handling. 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::handleKeyboardEvent(KeyboardEvent* event) 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (handleEditingKeyboardEvent(event)) 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textFieldDidBeginEditing(Element*) 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textFieldDidEndEditing(Element*) 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textDidChangeInTextField(Element*) 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::doTextFieldCommandFromEvent(Element*, KeyboardEvent*) 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textWillBeDeletedInTextField(Element*) 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::textDidChangeInTextArea(Element*) 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::respondToChangedSelection() 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Frame* frame = m_page->focusController()->focusedOrMainFrame(); 4935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (frame) { 4945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); 4955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (webKitWin) { 4965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen wxWebViewSelectionChangedEvent wkEvent(webKitWin); 4975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen webKitWin->GetEventHandler()->ProcessEvent(wkEvent); 4985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 4995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::ignoreWordInSpellDocument(const String&) 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::learnWord(const String&) 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength) 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::updateSpellingUIWithGrammarString(const String&, const GrammarDetail& detail) 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::updateSpellingUIWithMisspelledWord(const String&) 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::showSpellingUI(bool show) 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool EditorClientWx::spellingUIIsShowing() 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 543f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid EditorClientWx::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) 544f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 545f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch notImplemented(); 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochString EditorClientWx::getAutoCorrectSuggestionForMisspelledWord(const WTF::String&) 5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notImplemented(); 5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return String(); 5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 554967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid EditorClientWx::willSetInputMethodState() 555967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 556967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch notImplemented(); 557967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 558967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid EditorClientWx::setInputMethodState(bool enabled) 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 565