1 /* 2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15 * its contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 #include "config.h" 30 #include "TextInputControllerQt.h" 31 32 #include <QApplication> 33 #include <QKeyEvent> 34 35 TextInputController::TextInputController(QWebPage* parent) 36 : QObject(parent) 37 { 38 } 39 40 void TextInputController::doCommand(const QString& command) 41 { 42 Qt::KeyboardModifiers modifiers = Qt::NoModifier; 43 int keycode = 0; 44 if (command == "moveBackwardAndModifySelection:") { 45 modifiers |= Qt::ShiftModifier; 46 keycode = Qt::Key_Left; 47 } else if (command =="moveDown:") { 48 keycode = Qt::Key_Down; 49 } else if (command =="moveDownAndModifySelection:") { 50 modifiers |= Qt::ShiftModifier; 51 keycode = Qt::Key_Down; 52 } else if (command =="moveForward:") { 53 keycode = Qt::Key_Right; 54 } else if (command =="moveForwardAndModifySelection:") { 55 modifiers |= Qt::ShiftModifier; 56 keycode = Qt::Key_Right; 57 } else if (command =="moveLeft:") { 58 keycode = Qt::Key_Left; 59 } else if (command =="moveLeftAndModifySelection:") { 60 modifiers |= Qt::ShiftModifier; 61 keycode = Qt::Key_Left; 62 } else if (command =="moveRight:") { 63 keycode = Qt::Key_Right; 64 } else if (command =="moveRightAndModifySelection:") { 65 modifiers |= Qt::ShiftModifier; 66 keycode = Qt::Key_Right; 67 } else if (command =="moveToBeginningOfDocument:") { 68 modifiers |= Qt::ControlModifier; 69 keycode = Qt::Key_Home; 70 } else if (command =="moveToBeginningOfLine:") { 71 keycode = Qt::Key_Home; 72 // } else if (command =="moveToBeginningOfParagraph:") { 73 } else if (command =="moveToEndOfDocument:") { 74 modifiers |= Qt::ControlModifier; 75 keycode = Qt::Key_End; 76 } else if (command =="moveToEndOfLine:") { 77 keycode = Qt::Key_End; 78 // } else if (command =="moveToEndOfParagraph:") { 79 } else if (command =="moveUp:") { 80 keycode = Qt::Key_Up; 81 } else if (command =="moveUpAndModifySelection:") { 82 modifiers |= Qt::ShiftModifier; 83 keycode = Qt::Key_Up; 84 } else if (command =="moveWordBackward:") { 85 modifiers |= Qt::ControlModifier; 86 keycode = Qt::Key_Up; 87 } else if (command =="moveWordBackwardAndModifySelection:") { 88 modifiers |= Qt::ShiftModifier; 89 modifiers |= Qt::ControlModifier; 90 keycode = Qt::Key_Left; 91 } else if (command =="moveWordForward:") { 92 modifiers |= Qt::ControlModifier; 93 keycode = Qt::Key_Right; 94 } else if (command =="moveWordForwardAndModifySelection:") { 95 modifiers |= Qt::ControlModifier; 96 modifiers |= Qt::ShiftModifier; 97 keycode = Qt::Key_Right; 98 } else if (command =="moveWordLeft:") { 99 modifiers |= Qt::ControlModifier; 100 keycode = Qt::Key_Left; 101 } else if (command =="moveWordRight:") { 102 modifiers |= Qt::ControlModifier; 103 keycode = Qt::Key_Left; 104 } else if (command =="moveWordRightAndModifySelection:") { 105 modifiers |= Qt::ShiftModifier; 106 modifiers |= Qt::ControlModifier; 107 keycode = Qt::Key_Right; 108 } else if (command =="moveWordLeftAndModifySelection:") { 109 modifiers |= Qt::ShiftModifier; 110 modifiers |= Qt::ControlModifier; 111 keycode = Qt::Key_Left; 112 } else if (command =="pageDown:") { 113 keycode = Qt::Key_PageDown; 114 } else if (command =="pageUp:") { 115 keycode = Qt::Key_PageUp; 116 } else if (command == "deleteWordBackward:") { 117 modifiers |= Qt::ControlModifier; 118 keycode = Qt::Key_Backspace; 119 } else if (command == "deleteBackward:") { 120 keycode = Qt::Key_Backspace; 121 } else if (command == "deleteForward:") { 122 keycode = Qt::Key_Delete; 123 } 124 125 QKeyEvent event(QEvent::KeyPress, keycode, modifiers); 126 QApplication::sendEvent(parent(), &event); 127 QKeyEvent event2(QEvent::KeyRelease, keycode, modifiers); 128 QApplication::sendEvent(parent(), &event2); 129 } 130