Home | History | Annotate | Download | only in qt
      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