| 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 #import <Carbon/Carbon.h> | 7 #import <Carbon/Carbon.h> |
| 8 #import <objc/runtime.h> | 8 #import <objc/runtime.h> |
| 9 #include <OpenGL/gl.h> | 9 #include <OpenGL/gl.h> |
| 10 #include <QuartzCore/QuartzCore.h> | 10 #include <QuartzCore/QuartzCore.h> |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 #include "ui/base/cocoa/animation_utils.h" | 72 #include "ui/base/cocoa/animation_utils.h" |
| 73 #import "ui/base/cocoa/appkit_utils.h" | 73 #import "ui/base/cocoa/appkit_utils.h" |
| 74 #include "ui/base/cocoa/cocoa_base_utils.h" | 74 #include "ui/base/cocoa/cocoa_base_utils.h" |
| 75 #import "ui/base/cocoa/fullscreen_window_manager.h" | 75 #import "ui/base/cocoa/fullscreen_window_manager.h" |
| 76 #import "ui/base/cocoa/underlay_opengl_hosting_window.h" | 76 #import "ui/base/cocoa/underlay_opengl_hosting_window.h" |
| 77 #include "ui/base/layout.h" | 77 #include "ui/base/layout.h" |
| 78 #include "ui/compositor/compositor.h" | 78 #include "ui/compositor/compositor.h" |
| 79 #include "ui/compositor/layer.h" | 79 #include "ui/compositor/layer.h" |
| 80 #include "ui/display/display.h" | 80 #include "ui/display/display.h" |
| 81 #include "ui/display/screen.h" | 81 #include "ui/display/screen.h" |
| 82 #include "ui/events/base_event_utils.h" |
| 82 #include "ui/events/event_utils.h" | 83 #include "ui/events/event_utils.h" |
| 83 #include "ui/events/keycodes/keyboard_codes.h" | 84 #include "ui/events/keycodes/keyboard_codes.h" |
| 84 #include "ui/gfx/geometry/dip_util.h" | 85 #include "ui/gfx/geometry/dip_util.h" |
| 85 #include "ui/gfx/geometry/point.h" | 86 #include "ui/gfx/geometry/point.h" |
| 86 #include "ui/gfx/geometry/rect_conversions.h" | 87 #include "ui/gfx/geometry/rect_conversions.h" |
| 87 #include "ui/gfx/geometry/size_conversions.h" | 88 #include "ui/gfx/geometry/size_conversions.h" |
| 88 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 89 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
| 89 #include "ui/gl/gl_switches.h" | 90 #include "ui/gl/gl_switches.h" |
| 90 | 91 |
| 91 using content::BrowserAccessibility; | 92 using content::BrowserAccessibility; |
| (...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 location:location | 1154 location:location |
| 1154 modifierFlags:0 | 1155 modifierFlags:0 |
| 1155 timestamp:0 | 1156 timestamp:0 |
| 1156 windowNumber:window_number() | 1157 windowNumber:window_number() |
| 1157 context:nil | 1158 context:nil |
| 1158 eventNumber:0 | 1159 eventNumber:0 |
| 1159 clickCount:0 | 1160 clickCount:0 |
| 1160 pressure:0]; | 1161 pressure:0]; |
| 1161 WebMouseEvent web_event = WebMouseEventBuilder::Build(event, cocoa_view_); | 1162 WebMouseEvent web_event = WebMouseEventBuilder::Build(event, cocoa_view_); |
| 1162 if (showing) | 1163 if (showing) |
| 1163 web_event.type = WebInputEvent::MouseLeave; | 1164 web_event.setType(WebInputEvent::MouseLeave); |
| 1164 ForwardMouseEvent(web_event); | 1165 ForwardMouseEvent(web_event); |
| 1165 } | 1166 } |
| 1166 | 1167 |
| 1167 bool RenderWidgetHostViewMac::IsPopup() const { | 1168 bool RenderWidgetHostViewMac::IsPopup() const { |
| 1168 return popup_type_ != blink::WebPopupTypeNone; | 1169 return popup_type_ != blink::WebPopupTypeNone; |
| 1169 } | 1170 } |
| 1170 | 1171 |
| 1171 void RenderWidgetHostViewMac::CopyFromCompositingSurface( | 1172 void RenderWidgetHostViewMac::CopyFromCompositingSurface( |
| 1172 const gfx::Rect& src_subrect, | 1173 const gfx::Rect& src_subrect, |
| 1173 const gfx::Size& dst_size, | 1174 const gfx::Size& dst_size, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1201 | 1202 |
| 1202 ui::AcceleratedWidgetMac* RenderWidgetHostViewMac::GetAcceleratedWidgetMac() | 1203 ui::AcceleratedWidgetMac* RenderWidgetHostViewMac::GetAcceleratedWidgetMac() |
| 1203 const { | 1204 const { |
| 1204 return browser_compositor_->GetAcceleratedWidgetMac(); | 1205 return browser_compositor_->GetAcceleratedWidgetMac(); |
| 1205 } | 1206 } |
| 1206 | 1207 |
| 1207 void RenderWidgetHostViewMac::ForwardMouseEvent(const WebMouseEvent& event) { | 1208 void RenderWidgetHostViewMac::ForwardMouseEvent(const WebMouseEvent& event) { |
| 1208 if (render_widget_host_) | 1209 if (render_widget_host_) |
| 1209 render_widget_host_->ForwardMouseEvent(event); | 1210 render_widget_host_->ForwardMouseEvent(event); |
| 1210 | 1211 |
| 1211 if (event.type == WebInputEvent::MouseLeave) { | 1212 if (event.type() == WebInputEvent::MouseLeave) { |
| 1212 [cocoa_view_ setToolTipAtMousePoint:nil]; | 1213 [cocoa_view_ setToolTipAtMousePoint:nil]; |
| 1213 tooltip_text_.clear(); | 1214 tooltip_text_.clear(); |
| 1214 } | 1215 } |
| 1215 } | 1216 } |
| 1216 | 1217 |
| 1217 void RenderWidgetHostViewMac::SetNeedsBeginFrames(bool needs_begin_frames) { | 1218 void RenderWidgetHostViewMac::SetNeedsBeginFrames(bool needs_begin_frames) { |
| 1218 needs_begin_frames_ = needs_begin_frames; | 1219 needs_begin_frames_ = needs_begin_frames; |
| 1219 UpdateNeedsBeginFramesInternal(); | 1220 UpdateNeedsBeginFramesInternal(); |
| 1220 } | 1221 } |
| 1221 | 1222 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1476 [NSCursor unhide]; | 1477 [NSCursor unhide]; |
| 1477 | 1478 |
| 1478 if (render_widget_host_) | 1479 if (render_widget_host_) |
| 1479 render_widget_host_->LostMouseLock(); | 1480 render_widget_host_->LostMouseLock(); |
| 1480 } | 1481 } |
| 1481 | 1482 |
| 1482 void RenderWidgetHostViewMac::GestureEventAck( | 1483 void RenderWidgetHostViewMac::GestureEventAck( |
| 1483 const blink::WebGestureEvent& event, | 1484 const blink::WebGestureEvent& event, |
| 1484 InputEventAckState ack_result) { | 1485 InputEventAckState ack_result) { |
| 1485 bool consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; | 1486 bool consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; |
| 1486 switch (event.type) { | 1487 switch (event.type()) { |
| 1487 case blink::WebInputEvent::GestureScrollBegin: | 1488 case blink::WebInputEvent::GestureScrollBegin: |
| 1488 case blink::WebInputEvent::GestureScrollUpdate: | 1489 case blink::WebInputEvent::GestureScrollUpdate: |
| 1489 case blink::WebInputEvent::GestureScrollEnd: | 1490 case blink::WebInputEvent::GestureScrollEnd: |
| 1490 [cocoa_view_ processedGestureScrollEvent:event consumed:consumed]; | 1491 [cocoa_view_ processedGestureScrollEvent:event consumed:consumed]; |
| 1491 return; | 1492 return; |
| 1492 default: | 1493 default: |
| 1493 break; | 1494 break; |
| 1494 } | 1495 } |
| 1495 } | 1496 } |
| 1496 | 1497 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1526 if (!id.is_valid()) | 1527 if (!id.is_valid()) |
| 1527 return GetFrameSinkId(); | 1528 return GetFrameSinkId(); |
| 1528 return id.frame_sink_id(); | 1529 return id.frame_sink_id(); |
| 1529 } | 1530 } |
| 1530 | 1531 |
| 1531 bool RenderWidgetHostViewMac::ShouldRouteEvent( | 1532 bool RenderWidgetHostViewMac::ShouldRouteEvent( |
| 1532 const WebInputEvent& event) const { | 1533 const WebInputEvent& event) const { |
| 1533 // See also RenderWidgetHostViewAura::ShouldRouteEvent. | 1534 // See also RenderWidgetHostViewAura::ShouldRouteEvent. |
| 1534 // TODO(wjmaclean): Update this function if RenderWidgetHostViewMac implements | 1535 // TODO(wjmaclean): Update this function if RenderWidgetHostViewMac implements |
| 1535 // OnTouchEvent(), to match what we are doing in RenderWidgetHostViewAura. | 1536 // OnTouchEvent(), to match what we are doing in RenderWidgetHostViewAura. |
| 1536 DCHECK(WebInputEvent::isMouseEventType(event.type) || | 1537 DCHECK(WebInputEvent::isMouseEventType(event.type()) || |
| 1537 event.type == WebInputEvent::MouseWheel); | 1538 event.type() == WebInputEvent::MouseWheel); |
| 1538 return render_widget_host_->delegate() && | 1539 return render_widget_host_->delegate() && |
| 1539 render_widget_host_->delegate()->GetInputEventRouter() && | 1540 render_widget_host_->delegate()->GetInputEventRouter() && |
| 1540 SiteIsolationPolicy::AreCrossProcessFramesPossible(); | 1541 SiteIsolationPolicy::AreCrossProcessFramesPossible(); |
| 1541 } | 1542 } |
| 1542 | 1543 |
| 1543 void RenderWidgetHostViewMac::ProcessMouseEvent( | 1544 void RenderWidgetHostViewMac::ProcessMouseEvent( |
| 1544 const blink::WebMouseEvent& event, | 1545 const blink::WebMouseEvent& event, |
| 1545 const ui::LatencyInfo& latency) { | 1546 const ui::LatencyInfo& latency) { |
| 1546 render_widget_host_->ForwardMouseEventWithLatencyInfo(event, latency); | 1547 render_widget_host_->ForwardMouseEventWithLatencyInfo(event, latency); |
| 1547 } | 1548 } |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1893 [responderDelegate_ respondsToSelector:@selector(handleEvent:)]) { | 1894 [responderDelegate_ respondsToSelector:@selector(handleEvent:)]) { |
| 1894 BOOL handled = [responderDelegate_ handleEvent:theEvent]; | 1895 BOOL handled = [responderDelegate_ handleEvent:theEvent]; |
| 1895 if (handled) | 1896 if (handled) |
| 1896 return; | 1897 return; |
| 1897 } | 1898 } |
| 1898 | 1899 |
| 1899 if ([self shouldIgnoreMouseEvent:theEvent]) { | 1900 if ([self shouldIgnoreMouseEvent:theEvent]) { |
| 1900 // If this is the first such event, send a mouse exit to the host view. | 1901 // If this is the first such event, send a mouse exit to the host view. |
| 1901 if (!mouseEventWasIgnored_ && renderWidgetHostView_->render_widget_host_) { | 1902 if (!mouseEventWasIgnored_ && renderWidgetHostView_->render_widget_host_) { |
| 1902 WebMouseEvent exitEvent = WebMouseEventBuilder::Build(theEvent, self); | 1903 WebMouseEvent exitEvent = WebMouseEventBuilder::Build(theEvent, self); |
| 1903 exitEvent.type = WebInputEvent::MouseLeave; | 1904 exitEvent.setType(WebInputEvent::MouseLeave); |
| 1904 exitEvent.button = WebMouseEvent::Button::NoButton; | 1905 exitEvent.button = WebMouseEvent::Button::NoButton; |
| 1905 renderWidgetHostView_->ForwardMouseEvent(exitEvent); | 1906 renderWidgetHostView_->ForwardMouseEvent(exitEvent); |
| 1906 } | 1907 } |
| 1907 mouseEventWasIgnored_ = YES; | 1908 mouseEventWasIgnored_ = YES; |
| 1908 return; | 1909 return; |
| 1909 } | 1910 } |
| 1910 | 1911 |
| 1911 if (mouseEventWasIgnored_) { | 1912 if (mouseEventWasIgnored_) { |
| 1912 // If this is the first mouse event after a previous event that was ignored | 1913 // If this is the first mouse event after a previous event that was ignored |
| 1913 // due to the hitTest, send a mouse enter event to the host view. | 1914 // due to the hitTest, send a mouse enter event to the host view. |
| 1914 if (renderWidgetHostView_->render_widget_host_) { | 1915 if (renderWidgetHostView_->render_widget_host_) { |
| 1915 WebMouseEvent enterEvent = WebMouseEventBuilder::Build(theEvent, self); | 1916 WebMouseEvent enterEvent = WebMouseEventBuilder::Build(theEvent, self); |
| 1916 enterEvent.type = WebInputEvent::MouseMove; | 1917 enterEvent.setType(WebInputEvent::MouseMove); |
| 1917 enterEvent.button = WebMouseEvent::Button::NoButton; | 1918 enterEvent.button = WebMouseEvent::Button::NoButton; |
| 1918 ui::LatencyInfo latency_info(ui::SourceEventType::OTHER); | 1919 ui::LatencyInfo latency_info(ui::SourceEventType::OTHER); |
| 1919 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 1920 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| 1920 if (renderWidgetHostView_->ShouldRouteEvent(enterEvent)) { | 1921 if (renderWidgetHostView_->ShouldRouteEvent(enterEvent)) { |
| 1921 renderWidgetHostView_->render_widget_host_->delegate() | 1922 renderWidgetHostView_->render_widget_host_->delegate() |
| 1922 ->GetInputEventRouter() | 1923 ->GetInputEventRouter() |
| 1923 ->RouteMouseEvent(renderWidgetHostView_.get(), &enterEvent, | 1924 ->RouteMouseEvent(renderWidgetHostView_.get(), &enterEvent, |
| 1924 latency_info); | 1925 latency_info); |
| 1925 } else { | 1926 } else { |
| 1926 renderWidgetHostView_->ProcessMouseEvent(enterEvent, latency_info); | 1927 renderWidgetHostView_->ProcessMouseEvent(enterEvent, latency_info); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2052 // Don't cancel child popups; the key events are probably what's triggering | 2053 // Don't cancel child popups; the key events are probably what's triggering |
| 2053 // the popup in the first place. | 2054 // the popup in the first place. |
| 2054 | 2055 |
| 2055 RenderWidgetHostImpl* widgetHost = renderWidgetHostView_->render_widget_host_; | 2056 RenderWidgetHostImpl* widgetHost = renderWidgetHostView_->render_widget_host_; |
| 2056 DCHECK(widgetHost); | 2057 DCHECK(widgetHost); |
| 2057 | 2058 |
| 2058 NativeWebKeyboardEvent event(theEvent); | 2059 NativeWebKeyboardEvent event(theEvent); |
| 2059 | 2060 |
| 2060 // Force fullscreen windows to close on Escape so they won't keep the keyboard | 2061 // Force fullscreen windows to close on Escape so they won't keep the keyboard |
| 2061 // grabbed or be stuck onscreen if the renderer is hanging. | 2062 // grabbed or be stuck onscreen if the renderer is hanging. |
| 2062 if (event.type == NativeWebKeyboardEvent::RawKeyDown && | 2063 if (event.type() == NativeWebKeyboardEvent::RawKeyDown && |
| 2063 event.windowsKeyCode == ui::VKEY_ESCAPE && | 2064 event.windowsKeyCode == ui::VKEY_ESCAPE && |
| 2064 renderWidgetHostView_->pepper_fullscreen_window()) { | 2065 renderWidgetHostView_->pepper_fullscreen_window()) { |
| 2065 RenderWidgetHostViewMac* parent = | 2066 RenderWidgetHostViewMac* parent = |
| 2066 renderWidgetHostView_->fullscreen_parent_host_view(); | 2067 renderWidgetHostView_->fullscreen_parent_host_view(); |
| 2067 if (parent) | 2068 if (parent) |
| 2068 parent->cocoa_view()->suppressNextEscapeKeyUp_ = YES; | 2069 parent->cocoa_view()->suppressNextEscapeKeyUp_ = YES; |
| 2069 widgetHost->ShutdownAndDestroyWidget(true); | 2070 widgetHost->ShutdownAndDestroyWidget(true); |
| 2070 return; | 2071 return; |
| 2071 } | 2072 } |
| 2072 | 2073 |
| 2073 // If there are multiple widgets on the page (such as when there are | 2074 // If there are multiple widgets on the page (such as when there are |
| 2074 // out-of-process iframes), pick the one that should process this event. | 2075 // out-of-process iframes), pick the one that should process this event. |
| 2075 if (widgetHost->delegate()) | 2076 if (widgetHost->delegate()) |
| 2076 widgetHost = widgetHost->delegate()->GetFocusedRenderWidgetHost(widgetHost); | 2077 widgetHost = widgetHost->delegate()->GetFocusedRenderWidgetHost(widgetHost); |
| 2077 if (!widgetHost) | 2078 if (!widgetHost) |
| 2078 return; | 2079 return; |
| 2079 | 2080 |
| 2080 // Suppress the escape key up event if necessary. | 2081 // Suppress the escape key up event if necessary. |
| 2081 if (event.windowsKeyCode == ui::VKEY_ESCAPE && suppressNextEscapeKeyUp_) { | 2082 if (event.windowsKeyCode == ui::VKEY_ESCAPE && suppressNextEscapeKeyUp_) { |
| 2082 if (event.type == NativeWebKeyboardEvent::KeyUp) | 2083 if (event.type() == NativeWebKeyboardEvent::KeyUp) |
| 2083 suppressNextEscapeKeyUp_ = NO; | 2084 suppressNextEscapeKeyUp_ = NO; |
| 2084 return; | 2085 return; |
| 2085 } | 2086 } |
| 2086 | 2087 |
| 2087 // Do not forward key up events unless preceded by a matching key down, | 2088 // Do not forward key up events unless preceded by a matching key down, |
| 2088 // otherwise we might get an event from releasing the return key in the | 2089 // otherwise we might get an event from releasing the return key in the |
| 2089 // omnibox (http://crbug.com/338736). | 2090 // omnibox (http://crbug.com/338736). |
| 2090 if ([theEvent type] == NSKeyUp) { | 2091 if ([theEvent type] == NSKeyUp) { |
| 2091 auto numErased = keyDownCodes_.erase([theEvent keyCode]); | 2092 auto numErased = keyDownCodes_.erase([theEvent keyCode]); |
| 2092 if (numErased < 1) | 2093 if (numErased < 1) |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2220 // edit commands, then we need to send the real key event and corresponding | 2221 // edit commands, then we need to send the real key event and corresponding |
| 2221 // edit commands here. This usually occurs when the input method wants to | 2222 // edit commands here. This usually occurs when the input method wants to |
| 2222 // finish current composition session but still wants the application to | 2223 // finish current composition session but still wants the application to |
| 2223 // handle the key event. See http://crbug.com/48161 for reference. | 2224 // handle the key event. See http://crbug.com/48161 for reference. |
| 2224 if (delayEventUntilAfterImeCompostion) { | 2225 if (delayEventUntilAfterImeCompostion) { |
| 2225 // If |delayEventUntilAfterImeCompostion| is YES, then a fake key down event | 2226 // If |delayEventUntilAfterImeCompostion| is YES, then a fake key down event |
| 2226 // with windowsKeyCode == 0xE5 has already been sent to webkit. | 2227 // with windowsKeyCode == 0xE5 has already been sent to webkit. |
| 2227 // So before sending the real key down event, we need to send a fake key up | 2228 // So before sending the real key down event, we need to send a fake key up |
| 2228 // event to balance it. | 2229 // event to balance it. |
| 2229 NativeWebKeyboardEvent fakeEvent = event; | 2230 NativeWebKeyboardEvent fakeEvent = event; |
| 2230 fakeEvent.type = blink::WebInputEvent::KeyUp; | 2231 fakeEvent.setType(blink::WebInputEvent::KeyUp); |
| 2231 fakeEvent.skip_in_browser = true; | 2232 fakeEvent.skip_in_browser = true; |
| 2232 widgetHost->ForwardKeyboardEvent(fakeEvent); | 2233 widgetHost->ForwardKeyboardEvent(fakeEvent); |
| 2233 // Not checking |renderWidgetHostView_->render_widget_host_| here because | 2234 // Not checking |renderWidgetHostView_->render_widget_host_| here because |
| 2234 // a key event with |skip_in_browser| == true won't be handled by browser, | 2235 // a key event with |skip_in_browser| == true won't be handled by browser, |
| 2235 // thus it won't destroy the widget. | 2236 // thus it won't destroy the widget. |
| 2236 | 2237 |
| 2237 if (!editCommands_.empty()) { | 2238 if (!editCommands_.empty()) { |
| 2238 widgetHost->Send(new InputMsg_SetEditCommandsForNextKeyEvent( | 2239 widgetHost->Send(new InputMsg_SetEditCommandsForNextKeyEvent( |
| 2239 widgetHost->GetRoutingID(), editCommands_)); | 2240 widgetHost->GetRoutingID(), editCommands_)); |
| 2240 } | 2241 } |
| 2241 widgetHost->ForwardKeyboardEvent(event); | 2242 widgetHost->ForwardKeyboardEvent(event); |
| 2242 | 2243 |
| 2243 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the | 2244 // Calling ForwardKeyboardEvent() could have destroyed the widget. When the |
| 2244 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will | 2245 // widget was destroyed, |renderWidgetHostView_->render_widget_host_| will |
| 2245 // be set to NULL. So we check it here and return immediately if it's NULL. | 2246 // be set to NULL. So we check it here and return immediately if it's NULL. |
| 2246 if (!renderWidgetHostView_->render_widget_host_) | 2247 if (!renderWidgetHostView_->render_widget_host_) |
| 2247 return; | 2248 return; |
| 2248 } | 2249 } |
| 2249 | 2250 |
| 2250 const NSUInteger kCtrlCmdKeyMask = NSControlKeyMask | NSCommandKeyMask; | 2251 const NSUInteger kCtrlCmdKeyMask = NSControlKeyMask | NSCommandKeyMask; |
| 2251 // Only send a corresponding key press event if there is no marked text. | 2252 // Only send a corresponding key press event if there is no marked text. |
| 2252 if (!hasMarkedText_) { | 2253 if (!hasMarkedText_) { |
| 2253 if (!textInserted && textToBeInserted_.length() == 1) { | 2254 if (!textInserted && textToBeInserted_.length() == 1) { |
| 2254 // If a single character was inserted, then we just send it as a keypress | 2255 // If a single character was inserted, then we just send it as a keypress |
| 2255 // event. | 2256 // event. |
| 2256 event.type = blink::WebInputEvent::Char; | 2257 event.setType(blink::WebInputEvent::Char); |
| 2257 event.text[0] = textToBeInserted_[0]; | 2258 event.text[0] = textToBeInserted_[0]; |
| 2258 event.text[1] = 0; | 2259 event.text[1] = 0; |
| 2259 event.skip_in_browser = true; | 2260 event.skip_in_browser = true; |
| 2260 widgetHost->ForwardKeyboardEvent(event); | 2261 widgetHost->ForwardKeyboardEvent(event); |
| 2261 } else if ((!textInserted || delayEventUntilAfterImeCompostion) && | 2262 } else if ((!textInserted || delayEventUntilAfterImeCompostion) && |
| 2262 event.text[0] != '\0' && | 2263 event.text[0] != '\0' && |
| 2263 (([theEvent modifierFlags] & kCtrlCmdKeyMask) || | 2264 (([theEvent modifierFlags] & kCtrlCmdKeyMask) || |
| 2264 (hasEditCommands_ && editCommands_.empty()))) { | 2265 (hasEditCommands_ && editCommands_.empty()))) { |
| 2265 // We don't get insertText: calls if ctrl or cmd is down, or the key event | 2266 // We don't get insertText: calls if ctrl or cmd is down, or the key event |
| 2266 // generates an insert command. So synthesize a keypress event for these | 2267 // generates an insert command. So synthesize a keypress event for these |
| 2267 // cases, unless the key event generated any other command. | 2268 // cases, unless the key event generated any other command. |
| 2268 event.type = blink::WebInputEvent::Char; | 2269 event.setType(blink::WebInputEvent::Char); |
| 2269 event.skip_in_browser = true; | 2270 event.skip_in_browser = true; |
| 2270 widgetHost->ForwardKeyboardEvent(event); | 2271 widgetHost->ForwardKeyboardEvent(event); |
| 2271 } | 2272 } |
| 2272 } | 2273 } |
| 2273 | 2274 |
| 2274 // Possibly autohide the cursor. | 2275 // Possibly autohide the cursor. |
| 2275 if ([RenderWidgetHostViewCocoa shouldAutohideCursorForEvent:theEvent]) | 2276 if ([RenderWidgetHostViewCocoa shouldAutohideCursorForEvent:theEvent]) |
| 2276 [NSCursor setHiddenUntilMouseMoves:YES]; | 2277 [NSCursor setHiddenUntilMouseMoves:YES]; |
| 2277 } | 2278 } |
| 2278 | 2279 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2319 | 2320 |
| 2320 - (void)endGestureWithEvent:(NSEvent*)event { | 2321 - (void)endGestureWithEvent:(NSEvent*)event { |
| 2321 [responderDelegate_ endGestureWithEvent:event]; | 2322 [responderDelegate_ endGestureWithEvent:event]; |
| 2322 gestureBeginEvent_.reset(); | 2323 gestureBeginEvent_.reset(); |
| 2323 | 2324 |
| 2324 if (!renderWidgetHostView_->render_widget_host_) | 2325 if (!renderWidgetHostView_->render_widget_host_) |
| 2325 return; | 2326 return; |
| 2326 | 2327 |
| 2327 if (gestureBeginPinchSent_) { | 2328 if (gestureBeginPinchSent_) { |
| 2328 WebGestureEvent endEvent(WebGestureEventBuilder::Build(event, self)); | 2329 WebGestureEvent endEvent(WebGestureEventBuilder::Build(event, self)); |
| 2329 endEvent.type = WebInputEvent::GesturePinchEnd; | 2330 endEvent.setType(WebInputEvent::GesturePinchEnd); |
| 2330 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(endEvent); | 2331 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(endEvent); |
| 2331 gestureBeginPinchSent_ = NO; | 2332 gestureBeginPinchSent_ = NO; |
| 2332 } | 2333 } |
| 2333 } | 2334 } |
| 2334 | 2335 |
| 2335 - (void)touchesMovedWithEvent:(NSEvent*)event { | 2336 - (void)touchesMovedWithEvent:(NSEvent*)event { |
| 2336 [responderDelegate_ touchesMovedWithEvent:event]; | 2337 [responderDelegate_ touchesMovedWithEvent:event]; |
| 2337 } | 2338 } |
| 2338 | 2339 |
| 2339 - (void)touchesBeganWithEvent:(NSEvent*)event { | 2340 - (void)touchesBeganWithEvent:(NSEvent*)event { |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2537 | 2538 |
| 2538 if (!pinchHasReachedZoomThreshold_) { | 2539 if (!pinchHasReachedZoomThreshold_) { |
| 2539 pinchUnusedAmount_ *= (1 + [event magnification]); | 2540 pinchUnusedAmount_ *= (1 + [event magnification]); |
| 2540 if (pinchUnusedAmount_ < 0.667 || pinchUnusedAmount_ > 1.5) | 2541 if (pinchUnusedAmount_ < 0.667 || pinchUnusedAmount_ > 1.5) |
| 2541 pinchHasReachedZoomThreshold_ = true; | 2542 pinchHasReachedZoomThreshold_ = true; |
| 2542 } | 2543 } |
| 2543 | 2544 |
| 2544 // Send a GesturePinchBegin event if none has been sent yet. | 2545 // Send a GesturePinchBegin event if none has been sent yet. |
| 2545 if (!gestureBeginPinchSent_) { | 2546 if (!gestureBeginPinchSent_) { |
| 2546 WebGestureEvent beginEvent(*gestureBeginEvent_); | 2547 WebGestureEvent beginEvent(*gestureBeginEvent_); |
| 2547 beginEvent.type = WebInputEvent::GesturePinchBegin; | 2548 beginEvent.setType(WebInputEvent::GesturePinchBegin); |
| 2548 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(beginEvent); | 2549 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(beginEvent); |
| 2549 gestureBeginPinchSent_ = YES; | 2550 gestureBeginPinchSent_ = YES; |
| 2550 } | 2551 } |
| 2551 | 2552 |
| 2552 // Send a GesturePinchUpdate event. | 2553 // Send a GesturePinchUpdate event. |
| 2553 WebGestureEvent updateEvent = WebGestureEventBuilder::Build(event, self); | 2554 WebGestureEvent updateEvent = WebGestureEventBuilder::Build(event, self); |
| 2554 updateEvent.data.pinchUpdate.zoomDisabled = !pinchHasReachedZoomThreshold_; | 2555 updateEvent.data.pinchUpdate.zoomDisabled = !pinchHasReachedZoomThreshold_; |
| 2555 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(updateEvent); | 2556 renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(updateEvent); |
| 2556 } | 2557 } |
| 2557 | 2558 |
| (...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3258 | 3259 |
| 3259 - (void)viewDidMoveToWindow { | 3260 - (void)viewDidMoveToWindow { |
| 3260 if ([self window]) | 3261 if ([self window]) |
| 3261 [self updateScreenProperties]; | 3262 [self updateScreenProperties]; |
| 3262 renderWidgetHostView_->browser_compositor_->SetNSViewAttachedToWindow( | 3263 renderWidgetHostView_->browser_compositor_->SetNSViewAttachedToWindow( |
| 3263 [self window]); | 3264 [self window]); |
| 3264 | 3265 |
| 3265 // If we switch windows (or are removed from the view hierarchy), cancel any | 3266 // If we switch windows (or are removed from the view hierarchy), cancel any |
| 3266 // open mouse-downs. | 3267 // open mouse-downs. |
| 3267 if (hasOpenMouseDown_) { | 3268 if (hasOpenMouseDown_) { |
| 3268 WebMouseEvent event; | 3269 WebMouseEvent event(WebInputEvent::MouseUp, WebInputEvent::NoModifiers, |
| 3269 event.type = WebInputEvent::MouseUp; | 3270 ui::EventTimeStampToSeconds(ui::EventTimeForNow())); |
| 3270 event.button = WebMouseEvent::Button::Left; | 3271 event.button = WebMouseEvent::Button::Left; |
| 3271 renderWidgetHostView_->ForwardMouseEvent(event); | 3272 renderWidgetHostView_->ForwardMouseEvent(event); |
| 3272 | 3273 |
| 3273 hasOpenMouseDown_ = NO; | 3274 hasOpenMouseDown_ = NO; |
| 3274 } | 3275 } |
| 3275 } | 3276 } |
| 3276 | 3277 |
| 3277 - (void)viewDidChangeBackingProperties { | 3278 - (void)viewDidChangeBackingProperties { |
| 3278 NSScreen* screen = [[self window] screen]; | 3279 NSScreen* screen = [[self window] screen]; |
| 3279 if (screen) { | 3280 if (screen) { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3452 | 3453 |
| 3453 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding | 3454 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding |
| 3454 // regions that are not draggable. (See ControlRegionView in | 3455 // regions that are not draggable. (See ControlRegionView in |
| 3455 // native_app_window_cocoa.mm). This requires the render host view to be | 3456 // native_app_window_cocoa.mm). This requires the render host view to be |
| 3456 // draggable by default. | 3457 // draggable by default. |
| 3457 - (BOOL)mouseDownCanMoveWindow { | 3458 - (BOOL)mouseDownCanMoveWindow { |
| 3458 return YES; | 3459 return YES; |
| 3459 } | 3460 } |
| 3460 | 3461 |
| 3461 @end | 3462 @end |
| OLD | NEW |