OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <QuartzCore/QuartzCore.h> | 5 #include <QuartzCore/QuartzCore.h> |
6 | 6 |
7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" | 7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" |
8 | 8 |
9 #include "app/surface/io_surface_support_mac.h" | 9 #include "app/surface/io_surface_support_mac.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 1399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1410 @synthesize caretRect = caretRect_; | 1410 @synthesize caretRect = caretRect_; |
1411 | 1411 |
1412 - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r { | 1412 - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r { |
1413 self = [super initWithFrame:NSZeroRect]; | 1413 self = [super initWithFrame:NSZeroRect]; |
1414 if (self) { | 1414 if (self) { |
1415 editCommand_helper_.reset(new RWHVMEditCommandHelper); | 1415 editCommand_helper_.reset(new RWHVMEditCommandHelper); |
1416 editCommand_helper_->AddEditingSelectorsToClass([self class]); | 1416 editCommand_helper_->AddEditingSelectorsToClass([self class]); |
1417 | 1417 |
1418 renderWidgetHostView_.reset(r); | 1418 renderWidgetHostView_.reset(r); |
1419 canBeKeyView_ = YES; | 1419 canBeKeyView_ = YES; |
1420 takesFocusOnlyOnMouseDown_ = NO; | |
1421 closeOnDeactivate_ = NO; | |
1422 focusedPluginIdentifier_ = -1; | 1420 focusedPluginIdentifier_ = -1; |
1423 } | 1421 } |
1424 return self; | 1422 return self; |
1425 } | 1423 } |
1426 | 1424 |
1427 - (void)setCanBeKeyView:(BOOL)can { | 1425 - (void)setCanBeKeyView:(BOOL)can { |
1428 canBeKeyView_ = can; | 1426 canBeKeyView_ = can; |
1429 } | 1427 } |
1430 | 1428 |
1431 - (void)setTakesFocusOnlyOnMouseDown:(BOOL)b { | 1429 - (void)setTakesFocusOnlyOnMouseDown:(BOOL)b { |
1432 takesFocusOnlyOnMouseDown_ = b; | 1430 takesFocusOnlyOnMouseDown_ = b; |
1433 } | 1431 } |
1434 | 1432 |
1435 - (void)setCloseOnDeactivate:(BOOL)b { | 1433 - (void)setCloseOnDeactivate:(BOOL)b { |
1436 closeOnDeactivate_ = b; | 1434 closeOnDeactivate_ = b; |
1437 } | 1435 } |
1438 | 1436 |
1439 - (void)mouseEvent:(NSEvent*)theEvent { | 1437 - (void)mouseEvent:(NSEvent*)theEvent { |
| 1438 // Use hitTest to check whether the mouse is over a nonWebContentView - in |
| 1439 // which case the mouse event should not be handled by the render host. |
| 1440 const SEL nonWebContentViewSelector = @selector(nonWebContentView); |
| 1441 NSView* contentView = [[self window] contentView]; |
| 1442 NSView* view = [contentView hitTest:[theEvent locationInWindow]]; |
| 1443 // Traverse the superview hierarchy as the hitTest will return the frontmost |
| 1444 // view, such as an NSTextView, while nonWebContentView may be specified by |
| 1445 // its parent view. |
| 1446 while (view) { |
| 1447 if ([view respondsToSelector:nonWebContentViewSelector] && |
| 1448 [view performSelector:nonWebContentViewSelector]) { |
| 1449 // The cursor is over a nonWebContentView - ignore this mouse event. |
| 1450 // If this is the first such event, send a mouse exit to the host view. |
| 1451 if (!mouseEventWasIgnored_ && |
| 1452 renderWidgetHostView_->render_widget_host_) { |
| 1453 WebMouseEvent exitEvent = |
| 1454 WebInputEventFactory::mouseEvent(theEvent, self); |
| 1455 exitEvent.type = WebInputEvent::MouseLeave; |
| 1456 exitEvent.button = WebMouseEvent::ButtonNone; |
| 1457 renderWidgetHostView_->render_widget_host_->ForwardMouseEvent( |
| 1458 exitEvent); |
| 1459 } |
| 1460 mouseEventWasIgnored_ = YES; |
| 1461 return; |
| 1462 } |
| 1463 view = [view superview]; |
| 1464 } |
| 1465 |
| 1466 if (mouseEventWasIgnored_) { |
| 1467 // If this is the first mouse event after a previous event that was ignored |
| 1468 // due to the hitTest, send a mouse enter event to the host view. |
| 1469 if (renderWidgetHostView_->render_widget_host_) { |
| 1470 WebMouseEvent enterEvent = |
| 1471 WebInputEventFactory::mouseEvent(theEvent, self); |
| 1472 enterEvent.type = WebInputEvent::MouseMove; |
| 1473 enterEvent.button = WebMouseEvent::ButtonNone; |
| 1474 renderWidgetHostView_->render_widget_host_->ForwardMouseEvent(enterEvent); |
| 1475 } |
| 1476 } |
| 1477 mouseEventWasIgnored_ = NO; |
| 1478 |
1440 // TODO(rohitrao): Probably need to handle other mouse down events here. | 1479 // TODO(rohitrao): Probably need to handle other mouse down events here. |
1441 if ([theEvent type] == NSLeftMouseDown && takesFocusOnlyOnMouseDown_) { | 1480 if ([theEvent type] == NSLeftMouseDown && takesFocusOnlyOnMouseDown_) { |
1442 if (renderWidgetHostView_->render_widget_host_) | 1481 if (renderWidgetHostView_->render_widget_host_) |
1443 renderWidgetHostView_->render_widget_host_->OnMouseActivate(); | 1482 renderWidgetHostView_->render_widget_host_->OnMouseActivate(); |
1444 | 1483 |
1445 // Manually take focus after the click but before forwarding it to the | 1484 // Manually take focus after the click but before forwarding it to the |
1446 // renderer. | 1485 // renderer. |
1447 [[self window] makeFirstResponder:self]; | 1486 [[self window] makeFirstResponder:self]; |
1448 } | 1487 } |
1449 | 1488 |
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2863 if (!string) return NO; | 2902 if (!string) return NO; |
2864 | 2903 |
2865 // If the user is currently using an IME, confirm the IME input, | 2904 // If the user is currently using an IME, confirm the IME input, |
2866 // and then insert the text from the service, the same as TextEdit and Safari. | 2905 // and then insert the text from the service, the same as TextEdit and Safari. |
2867 [self confirmComposition]; | 2906 [self confirmComposition]; |
2868 [self insertText:string]; | 2907 [self insertText:string]; |
2869 return YES; | 2908 return YES; |
2870 } | 2909 } |
2871 | 2910 |
2872 @end | 2911 @end |
OLD | NEW |