• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "DumpRenderTreeSupportQt.h"
32 
33 #include <QApplication>
34 #include <QInputMethodEvent>
35 #include <QKeyEvent>
36 
TextInputController(QWebPage * parent)37 TextInputController::TextInputController(QWebPage* parent)
38     : QObject(parent)
39 {
40 }
41 
doCommand(const QString & command)42 void TextInputController::doCommand(const QString& command)
43 {
44     Qt::KeyboardModifiers modifiers = Qt::NoModifier;
45     int keycode = 0;
46     if (command == "moveBackwardAndModifySelection:") {
47         modifiers |= Qt::ShiftModifier;
48         keycode = Qt::Key_Left;
49     } else if (command =="moveDown:") {
50         keycode = Qt::Key_Down;
51     } else if (command =="moveDownAndModifySelection:") {
52         modifiers |= Qt::ShiftModifier;
53         keycode = Qt::Key_Down;
54     } else if (command =="moveForward:") {
55         keycode = Qt::Key_Right;
56     } else if (command =="moveForwardAndModifySelection:") {
57         modifiers |= Qt::ShiftModifier;
58         keycode = Qt::Key_Right;
59     } else if (command =="moveLeft:") {
60         keycode = Qt::Key_Left;
61     } else if (command =="moveLeftAndModifySelection:") {
62         modifiers |= Qt::ShiftModifier;
63         keycode = Qt::Key_Left;
64     } else if (command =="moveRight:") {
65         keycode = Qt::Key_Right;
66     } else if (command =="moveRightAndModifySelection:") {
67         modifiers |= Qt::ShiftModifier;
68         keycode = Qt::Key_Right;
69     } else if (command =="moveToBeginningOfDocument:") {
70         modifiers |= Qt::ControlModifier;
71         keycode = Qt::Key_Home;
72     } else if (command =="moveToBeginningOfLine:") {
73         keycode = Qt::Key_Home;
74 //     } else if (command =="moveToBeginningOfParagraph:") {
75     } else if (command =="moveToEndOfDocument:") {
76         modifiers |= Qt::ControlModifier;
77         keycode = Qt::Key_End;
78     } else if (command =="moveToEndOfLine:") {
79         keycode = Qt::Key_End;
80 //     } else if (command =="moveToEndOfParagraph:") {
81     } else if (command =="moveUp:") {
82         keycode = Qt::Key_Up;
83     } else if (command =="moveUpAndModifySelection:") {
84         modifiers |= Qt::ShiftModifier;
85         keycode = Qt::Key_Up;
86     } else if (command =="moveWordBackward:") {
87         modifiers |= Qt::ControlModifier;
88         keycode = Qt::Key_Up;
89     } else if (command =="moveWordBackwardAndModifySelection:") {
90         modifiers |= Qt::ShiftModifier;
91         modifiers |= Qt::ControlModifier;
92         keycode = Qt::Key_Left;
93     } else if (command =="moveWordForward:") {
94         modifiers |= Qt::ControlModifier;
95         keycode = Qt::Key_Right;
96     } else if (command =="moveWordForwardAndModifySelection:") {
97         modifiers |= Qt::ControlModifier;
98         modifiers |= Qt::ShiftModifier;
99         keycode = Qt::Key_Right;
100     } else if (command =="moveWordLeft:") {
101         modifiers |= Qt::ControlModifier;
102         keycode = Qt::Key_Left;
103     } else if (command =="moveWordRight:") {
104         modifiers |= Qt::ControlModifier;
105         keycode = Qt::Key_Left;
106     } else if (command =="moveWordRightAndModifySelection:") {
107         modifiers |= Qt::ShiftModifier;
108         modifiers |= Qt::ControlModifier;
109         keycode = Qt::Key_Right;
110     } else if (command =="moveWordLeftAndModifySelection:") {
111         modifiers |= Qt::ShiftModifier;
112         modifiers |= Qt::ControlModifier;
113         keycode = Qt::Key_Left;
114     } else if (command =="pageDown:") {
115         keycode = Qt::Key_PageDown;
116     } else if (command =="pageUp:") {
117         keycode = Qt::Key_PageUp;
118     } else if (command == "deleteWordBackward:") {
119         modifiers |= Qt::ControlModifier;
120         keycode = Qt::Key_Backspace;
121     } else if (command == "deleteBackward:") {
122         keycode = Qt::Key_Backspace;
123     } else if (command == "deleteForward:") {
124         keycode = Qt::Key_Delete;
125     }
126 
127     QKeyEvent event(QEvent::KeyPress, keycode, modifiers);
128     QApplication::sendEvent(parent(), &event);
129     QKeyEvent event2(QEvent::KeyRelease, keycode, modifiers);
130     QApplication::sendEvent(parent(), &event2);
131 }
132 
setMarkedText(const QString & string,int start,int end)133 void TextInputController::setMarkedText(const QString& string, int start, int end)
134 {
135     QList<QInputMethodEvent::Attribute> attributes;
136     QInputMethodEvent::Attribute selection(QInputMethodEvent::Selection, start, end, QVariant());
137     attributes << selection;
138     QInputMethodEvent event(string, attributes);
139     QApplication::sendEvent(parent(), &event);
140 }
141 
insertText(const QString & string)142 void TextInputController::insertText(const QString& string)
143 {
144     QList<QInputMethodEvent::Attribute> attributes;
145     QInputMethodEvent event(string, attributes);
146     event.setCommitString(string);
147     QApplication::sendEvent(parent(), &event);
148 }
149 
selectedRange()150 QVariantList TextInputController::selectedRange()
151 {
152     return DumpRenderTreeSupportQt::selectedRange(qobject_cast<QWebPage*>(parent()));
153 }
154 
firstRectForCharacterRange(int location,int length)155 QVariantList TextInputController::firstRectForCharacterRange(int location, int length)
156 {
157     return DumpRenderTreeSupportQt::firstRectForCharacterRange(qobject_cast<QWebPage*>(parent()), location, length);
158 }
159