OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/renderer_host/render_widget_host_view_mac.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" |
6 | 6 |
7 #include <QuartzCore/QuartzCore.h> | 7 #include <QuartzCore/QuartzCore.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "content/browser/renderer_host/backing_store_mac.h" | 26 #include "content/browser/renderer_host/backing_store_mac.h" |
27 #include "content/browser/renderer_host/backing_store_manager.h" | 27 #include "content/browser/renderer_host/backing_store_manager.h" |
28 #include "content/browser/renderer_host/compositing_iosurface_mac.h" | 28 #include "content/browser/renderer_host/compositing_iosurface_mac.h" |
29 #include "content/browser/renderer_host/render_view_host_impl.h" | 29 #include "content/browser/renderer_host/render_view_host_impl.h" |
30 #import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_h
elper.h" | 30 #import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_h
elper.h" |
31 #import "content/browser/renderer_host/text_input_client_mac.h" | 31 #import "content/browser/renderer_host/text_input_client_mac.h" |
32 #include "content/common/accessibility_messages.h" | 32 #include "content/common/accessibility_messages.h" |
33 #include "content/common/edit_command.h" | 33 #include "content/common/edit_command.h" |
34 #include "content/common/gpu/gpu_messages.h" | 34 #include "content/common/gpu/gpu_messages.h" |
35 #include "content/common/plugin_messages.h" | 35 #include "content/common/plugin_messages.h" |
| 36 #include "content/common/view_input_messages.h" |
36 #include "content/common/view_messages.h" | 37 #include "content/common/view_messages.h" |
37 #include "content/port/browser/render_widget_host_view_frame_subscriber.h" | 38 #include "content/port/browser/render_widget_host_view_frame_subscriber.h" |
38 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
39 #include "content/public/browser/native_web_keyboard_event.h" | 40 #include "content/public/browser/native_web_keyboard_event.h" |
40 #import "content/public/browser/render_widget_host_view_mac_delegate.h" | 41 #import "content/public/browser/render_widget_host_view_mac_delegate.h" |
41 #include "skia/ext/platform_canvas.h" | 42 #include "skia/ext/platform_canvas.h" |
42 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" | 43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" | 44 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" |
44 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFact
ory.h" | 45 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFact
ory.h" |
45 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebScreenInfoFact
ory.h" | 46 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebScreenInfoFact
ory.h" |
(...skipping 1896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 // -doCommandBySelector: (invoked by the call to -interpretKeyEvents: above) | 1943 // -doCommandBySelector: (invoked by the call to -interpretKeyEvents: above) |
1943 // enqueued edit commands, then in order to let webkit handle them | 1944 // enqueued edit commands, then in order to let webkit handle them |
1944 // correctly, we need to send the real key event and corresponding edit | 1945 // correctly, we need to send the real key event and corresponding edit |
1945 // commands after processing the input method result. | 1946 // commands after processing the input method result. |
1946 // We shouldn't do this if a new marked text was set by the input method, | 1947 // We shouldn't do this if a new marked text was set by the input method, |
1947 // otherwise the new marked text might be cancelled by webkit. | 1948 // otherwise the new marked text might be cancelled by webkit. |
1948 if (hasEditCommands_ && !hasMarkedText_) | 1949 if (hasEditCommands_ && !hasMarkedText_) |
1949 delayEventUntilAfterImeCompostion = YES; | 1950 delayEventUntilAfterImeCompostion = YES; |
1950 } else { | 1951 } else { |
1951 if (!editCommands_.empty()) { | 1952 if (!editCommands_.empty()) { |
1952 widgetHost->Send(new ViewMsg_SetEditCommandsForNextKeyEvent( | 1953 widgetHost->Send(new ViewInputMsg_SetEditCommandsForNextKeyEvent( |
1953 widgetHost->GetRoutingID(), editCommands_)); | 1954 widgetHost->GetRoutingID(), editCommands_)); |
1954 } | 1955 } |
1955 widgetHost->ForwardKeyboardEvent(event); | 1956 widgetHost->ForwardKeyboardEvent(event); |
1956 } | 1957 } |
1957 | 1958 |
1958 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the | 1959 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the |
1959 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will | 1960 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will |
1960 // be set to NULL. So we check it here and return immediately if it's NULL. | 1961 // be set to NULL. So we check it here and return immediately if it's NULL. |
1961 if (!renderWidgetHostView_->render_widget_host_) | 1962 if (!renderWidgetHostView_->render_widget_host_) |
1962 return; | 1963 return; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2008 // event to balance it. | 2009 // event to balance it. |
2009 NativeWebKeyboardEvent fakeEvent = event; | 2010 NativeWebKeyboardEvent fakeEvent = event; |
2010 fakeEvent.type = WebKit::WebInputEvent::KeyUp; | 2011 fakeEvent.type = WebKit::WebInputEvent::KeyUp; |
2011 fakeEvent.skip_in_browser = true; | 2012 fakeEvent.skip_in_browser = true; |
2012 widgetHost->ForwardKeyboardEvent(fakeEvent); | 2013 widgetHost->ForwardKeyboardEvent(fakeEvent); |
2013 // Not checking |renderWidgetHostView_->render_widget_host_| here because | 2014 // Not checking |renderWidgetHostView_->render_widget_host_| here because |
2014 // a key event with |skip_in_browser| == true won't be handled by browser, | 2015 // a key event with |skip_in_browser| == true won't be handled by browser, |
2015 // thus it won't destroy the widget. | 2016 // thus it won't destroy the widget. |
2016 | 2017 |
2017 if (!editCommands_.empty()) { | 2018 if (!editCommands_.empty()) { |
2018 widgetHost->Send(new ViewMsg_SetEditCommandsForNextKeyEvent( | 2019 widgetHost->Send(new ViewInputMsg_SetEditCommandsForNextKeyEvent( |
2019 widgetHost->GetRoutingID(), editCommands_)); | 2020 widgetHost->GetRoutingID(), editCommands_)); |
2020 } | 2021 } |
2021 widgetHost->ForwardKeyboardEvent(event); | 2022 widgetHost->ForwardKeyboardEvent(event); |
2022 | 2023 |
2023 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the | 2024 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the |
2024 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will | 2025 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will |
2025 // be set to NULL. So we check it here and return immediately if it's NULL. | 2026 // be set to NULL. So we check it here and return immediately if it's NULL. |
2026 if (!renderWidgetHostView_->render_widget_host_) | 2027 if (!renderWidgetHostView_->render_widget_host_) |
2027 return; | 2028 return; |
2028 } | 2029 } |
(...skipping 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3070 // it here. | 3071 // it here. |
3071 if (handlingKeyDown_) { | 3072 if (handlingKeyDown_) { |
3072 hasEditCommands_ = YES; | 3073 hasEditCommands_ = YES; |
3073 // We ignore commands that insert characters, because this was causing | 3074 // We ignore commands that insert characters, because this was causing |
3074 // strange behavior (e.g. tab always inserted a tab rather than moving to | 3075 // strange behavior (e.g. tab always inserted a tab rather than moving to |
3075 // the next field on the page). | 3076 // the next field on the page). |
3076 if (!StartsWithASCII(command, "insert", false)) | 3077 if (!StartsWithASCII(command, "insert", false)) |
3077 editCommands_.push_back(EditCommand(command, "")); | 3078 editCommands_.push_back(EditCommand(command, "")); |
3078 } else { | 3079 } else { |
3079 RenderWidgetHostImpl* rwh = renderWidgetHostView_->render_widget_host_; | 3080 RenderWidgetHostImpl* rwh = renderWidgetHostView_->render_widget_host_; |
3080 rwh->Send(new ViewMsg_ExecuteEditCommand(rwh->GetRoutingID(), command, "")); | 3081 rwh->Send(new ViewInputMsg_ExecuteEditCommand(rwh->GetRoutingID(), |
| 3082 command, |
| 3083 "")); |
3081 } | 3084 } |
3082 } | 3085 } |
3083 | 3086 |
3084 - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { | 3087 - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { |
3085 // An input method has characters to be inserted. | 3088 // An input method has characters to be inserted. |
3086 // Same as Linux, Mac calls this method not only: | 3089 // Same as Linux, Mac calls this method not only: |
3087 // * when an input method finishs composing text, but also; | 3090 // * when an input method finishs composing text, but also; |
3088 // * when we type an ASCII character (without using input methods). | 3091 // * when we type an ASCII character (without using input methods). |
3089 // When we aren't using input methods, we should send the given character as | 3092 // When we aren't using input methods, we should send the given character as |
3090 // a Char event so it is dispatched to an onkeypress() event handler of | 3093 // a Char event so it is dispatched to an onkeypress() event handler of |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3366 if (!string) return NO; | 3369 if (!string) return NO; |
3367 | 3370 |
3368 // If the user is currently using an IME, confirm the IME input, | 3371 // If the user is currently using an IME, confirm the IME input, |
3369 // and then insert the text from the service, the same as TextEdit and Safari. | 3372 // and then insert the text from the service, the same as TextEdit and Safari. |
3370 [self confirmComposition]; | 3373 [self confirmComposition]; |
3371 [self insertText:string]; | 3374 [self insertText:string]; |
3372 return YES; | 3375 return YES; |
3373 } | 3376 } |
3374 | 3377 |
3375 @end | 3378 @end |
OLD | NEW |