OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file contains the definition for EventSendingController. | 5 // This file contains the definition for EventSendingController. |
6 // | 6 // |
7 // Some notes about drag and drop handling: | 7 // Some notes about drag and drop handling: |
8 // Windows drag and drop goes through a system call to DoDragDrop. At that | 8 // Windows drag and drop goes through a system call to DoDragDrop. At that |
9 // point, program control is given to Windows which then periodically makes | 9 // point, program control is given to Windows which then periodically makes |
10 // callbacks into the webview. This won't work for layout tests, so instead, | 10 // callbacks into the webview. This won't work for layout tests, so instead, |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 e->modifiers = 0; | 142 e->modifiers = 0; |
143 e->x = pos.x(); | 143 e->x = pos.x(); |
144 e->y = pos.y(); | 144 e->y = pos.y(); |
145 e->globalX = pos.x(); | 145 e->globalX = pos.x(); |
146 e->globalY = pos.y(); | 146 e->globalY = pos.y(); |
147 e->timeStampSeconds = GetCurrentEventTimeSec(); | 147 e->timeStampSeconds = GetCurrentEventTimeSec(); |
148 e->clickCount = click_count; | 148 e->clickCount = click_count; |
149 } | 149 } |
150 | 150 |
151 // Returns true if the specified key is the system key. | 151 // Returns true if the specified key is the system key. |
152 bool ApplyKeyModifier(const std::wstring& arg, WebInputEvent* event) { | 152 bool ApplyKeyModifier(const std::string& key, WebInputEvent* event) { |
153 bool system_key = false; | 153 bool system_key = false; |
154 const wchar_t* arg_string = arg.c_str(); | 154 if (key == "ctrlKey" |
155 if (!wcscmp(arg_string, L"ctrlKey") | |
156 #if !defined(OS_MACOSX) | 155 #if !defined(OS_MACOSX) |
157 || !wcscmp(arg_string, L"addSelectionKey") | 156 || key == "addSelectionKey" |
158 #endif | 157 #endif |
159 ) { | 158 ) { |
160 event->modifiers |= WebInputEvent::ControlKey; | 159 event->modifiers |= WebInputEvent::ControlKey; |
161 } else if (!wcscmp(arg_string, L"shiftKey") | 160 } else if (key == "shiftKey" |
viettrungluu
2010/12/03 02:00:16
Nit: reformat with standard style?
| |
162 || !wcscmp(arg_string, L"rangeSelectionKey")) { | 161 || key == "rangeSelectionKey") { |
163 event->modifiers |= WebInputEvent::ShiftKey; | 162 event->modifiers |= WebInputEvent::ShiftKey; |
164 } else if (!wcscmp(arg_string, L"altKey")) { | 163 } else if (key == "altKey") { |
165 event->modifiers |= WebInputEvent::AltKey; | 164 event->modifiers |= WebInputEvent::AltKey; |
166 #if !defined(OS_MACOSX) | 165 #if !defined(OS_MACOSX) |
167 // On Windows all keys with Alt modifier will be marked as system key. | 166 // On Windows all keys with Alt modifier will be marked as system key. |
168 // We keep the same behavior on Linux and everywhere non-Mac, see: | 167 // We keep the same behavior on Linux and everywhere non-Mac, see: |
169 // third_party/WebKit/WebKit/chromium/src/gtk/WebInputEventFactory.cpp | 168 // third_party/WebKit/WebKit/chromium/src/gtk/WebInputEventFactory.cpp |
170 // If we want to change this behavior on Linux, this piece of code must be | 169 // If we want to change this behavior on Linux, this piece of code must be |
171 // kept in sync with the related code in above file. | 170 // kept in sync with the related code in above file. |
172 system_key = true; | 171 system_key = true; |
173 #endif | 172 #endif |
174 #if defined(OS_MACOSX) | 173 #if defined(OS_MACOSX) |
175 } else if (!wcscmp(arg_string, L"metaKey") | 174 } else if (key == "metaKey" |
viettrungluu
2010/12/03 02:00:16
"
| |
176 || !wcscmp(arg_string, L"addSelectionKey")) { | 175 || key == "addSelectionKey") { |
177 event->modifiers |= WebInputEvent::MetaKey; | 176 event->modifiers |= WebInputEvent::MetaKey; |
178 // On Mac only command key presses are marked as system key. | 177 // On Mac only command key presses are marked as system key. |
179 // See the related code in: | 178 // See the related code in: |
180 // third_party/WebKit/WebKit/chromium/src/mac/WebInputEventFactory.cpp | 179 // third_party/WebKit/WebKit/chromium/src/mac/WebInputEventFactory.cpp |
181 // It must be kept in sync with the related code in above file. | 180 // It must be kept in sync with the related code in above file. |
182 system_key = true; | 181 system_key = true; |
183 #else | 182 #else |
184 } else if (!wcscmp(arg_string, L"metaKey")) { | 183 } else if (key == "metaKey") { |
185 event->modifiers |= WebInputEvent::MetaKey; | 184 event->modifiers |= WebInputEvent::MetaKey; |
186 #endif | 185 #endif |
187 } | 186 } |
188 return system_key; | 187 return system_key; |
189 } | 188 } |
190 | 189 |
191 bool ApplyKeyModifiers(const CppVariant* arg, WebInputEvent* event) { | 190 bool ApplyKeyModifiers(const CppVariant* arg, WebInputEvent* event) { |
192 bool system_key = false; | 191 bool system_key = false; |
193 if (arg->isObject()) { | 192 if (arg->isObject()) { |
194 std::vector<std::wstring> args = arg->ToStringVector(); | 193 std::vector<std::string> args = arg->ToStringVector(); |
195 for (std::vector<std::wstring>::const_iterator i = args.begin(); | 194 for (std::vector<std::string>::const_iterator i = args.begin(); |
196 i != args.end(); ++i) { | 195 i != args.end(); ++i) { |
197 system_key |= ApplyKeyModifier(*i, event); | 196 system_key |= ApplyKeyModifier(*i, event); |
198 } | 197 } |
199 } else if (arg->isString()) { | 198 } else if (arg->isString()) { |
200 system_key = ApplyKeyModifier(UTF8ToWide(arg->ToString()), event); | 199 system_key = ApplyKeyModifier(arg->ToString(), event); |
201 } | 200 } |
202 return system_key; | 201 return system_key; |
203 } | 202 } |
204 | 203 |
205 // Get the edit command corresponding to a keyboard event. | 204 // Get the edit command corresponding to a keyboard event. |
206 // Returns true if the specified event corresponds to an edit command, the name | 205 // Returns true if the specified event corresponds to an edit command, the name |
207 // of the edit command will be stored in |*name|. | 206 // of the edit command will be stored in |*name|. |
208 bool GetEditCommand(const WebKeyboardEvent& event, std::string* name) { | 207 bool GetEditCommand(const WebKeyboardEvent& event, std::string* name) { |
209 #if defined(OS_MACOSX) | 208 #if defined(OS_MACOSX) |
210 // We only cares about Left,Right,Up,Down keys with Command or Command+Shift | 209 // We only cares about Left,Right,Up,Down keys with Command or Command+Shift |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
856 method_factory_.NewRunnableMethod(&EventSendingController::mouseDown, | 855 method_factory_.NewRunnableMethod(&EventSendingController::mouseDown, |
857 args, static_cast<CppVariant*>(NULL))); | 856 args, static_cast<CppVariant*>(NULL))); |
858 MessageLoop::current()->PostTask(FROM_HERE, | 857 MessageLoop::current()->PostTask(FROM_HERE, |
859 method_factory_.NewRunnableMethod(&EventSendingController::mouseUp, | 858 method_factory_.NewRunnableMethod(&EventSendingController::mouseUp, |
860 args, static_cast<CppVariant*>(NULL))); | 859 args, static_cast<CppVariant*>(NULL))); |
861 } | 860 } |
862 | 861 |
863 void EventSendingController::beginDragWithFiles( | 862 void EventSendingController::beginDragWithFiles( |
864 const CppArgumentList& args, CppVariant* result) { | 863 const CppArgumentList& args, CppVariant* result) { |
865 current_drag_data.initialize(); | 864 current_drag_data.initialize(); |
866 std::vector<std::wstring> files = args[0].ToStringVector(); | 865 std::vector<std::string> files = args[0].ToStringVector(); |
867 for (size_t i = 0; i < files.size(); ++i) { | 866 for (size_t i = 0; i < files.size(); ++i) { |
868 FilePath file_path = FilePath::FromWStringHack(files[i]); | 867 std::wstring file = UTF8ToWide(files[i]); |
868 FilePath file_path = FilePath::FromWStringHack(file); | |
869 file_util::AbsolutePath(&file_path); | 869 file_util::AbsolutePath(&file_path); |
870 current_drag_data.appendToFilenames( | 870 current_drag_data.appendToFilenames( |
871 webkit_glue::FilePathStringToWebString(file_path.value())); | 871 webkit_glue::FilePathStringToWebString(file_path.value())); |
872 } | 872 } |
873 current_drag_effects_allowed = WebKit::WebDragOperationCopy; | 873 current_drag_effects_allowed = WebKit::WebDragOperationCopy; |
874 | 874 |
875 // Provide a drag source. | 875 // Provide a drag source. |
876 WebPoint client_point(last_mouse_pos_.x(), last_mouse_pos_.y()); | 876 WebPoint client_point(last_mouse_pos_.x(), last_mouse_pos_.y()); |
877 WebPoint screen_point(last_mouse_pos_.x(), last_mouse_pos_.y()); | 877 WebPoint screen_point(last_mouse_pos_.x(), last_mouse_pos_.y()); |
878 webview()->dragTargetDragEnter( | 878 webview()->dragTargetDragEnter( |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1072 | 1072 |
1073 void EventSendingController::fireKeyboardEventsToElement( | 1073 void EventSendingController::fireKeyboardEventsToElement( |
1074 const CppArgumentList& args, CppVariant* result) { | 1074 const CppArgumentList& args, CppVariant* result) { |
1075 result->SetNull(); | 1075 result->SetNull(); |
1076 } | 1076 } |
1077 | 1077 |
1078 void EventSendingController::clearKillRing( | 1078 void EventSendingController::clearKillRing( |
1079 const CppArgumentList& args, CppVariant* result) { | 1079 const CppArgumentList& args, CppVariant* result) { |
1080 result->SetNull(); | 1080 result->SetNull(); |
1081 } | 1081 } |
OLD | NEW |