Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #import "ui/views/cocoa/bridged_content_view.h" | 5 #import "ui/views/cocoa/bridged_content_view.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #import "base/mac/mac_util.h" | 8 #import "base/mac/mac_util.h" |
| 9 #import "base/mac/scoped_nsobject.h" | 9 #import "base/mac/scoped_nsobject.h" |
| 10 #import "base/mac/sdk_forward_declarations.h" | 10 #import "base/mac/sdk_forward_declarations.h" |
| (...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 753 case ui::TEXT_INPUT_TYPE_NONE: | 753 case ui::TEXT_INPUT_TYPE_NONE: |
| 754 case ui::TEXT_INPUT_TYPE_PASSWORD: | 754 case ui::TEXT_INPUT_TYPE_PASSWORD: |
| 755 return nil; | 755 return nil; |
| 756 default: | 756 default: |
| 757 return [super inputContext]; | 757 return [super inputContext]; |
| 758 } | 758 } |
| 759 } | 759 } |
| 760 | 760 |
| 761 // NSResponder implementation. | 761 // NSResponder implementation. |
| 762 | 762 |
| 763 - (BOOL)_wantsKeyDownForEvent:(NSEvent*)event { | |
| 764 // This is a SPI that AppKit apparently calls after |performKeyEquivalent:| | |
| 765 // returned NO. If this function returns |YES|, Cocoa sends the event to | |
| 766 // |keyDown:| instead of doing other things with it. Ctrl-tab will be sent | |
| 767 // to us instead of doing key view loop control, ctrl-left/right get handled | |
| 768 // correctly, etc. | |
| 769 // (However, there are still some keys that Cocoa swallows, e.g. the key | |
| 770 // equivalent that Cocoa uses for toggling the input language. In this case, | |
| 771 // that's actually a good thing, though -- see http://crbug.com/26115 .) | |
| 772 return YES; | |
| 773 } | |
| 774 | |
| 763 - (void)keyDown:(NSEvent*)theEvent { | 775 - (void)keyDown:(NSEvent*)theEvent { |
| 764 // Convert the event into an action message, according to OSX key mappings. | 776 // Convert the event into an action message, according to OSX key mappings. |
| 765 keyDownEvent_ = theEvent; | 777 keyDownEvent_ = theEvent; |
| 766 [self interpretKeyEvents:@[ theEvent ]]; | 778 [self interpretKeyEvents:@[ theEvent ]]; |
| 779 | |
| 780 if (keyDownEvent_) { | |
|
tapted
2016/11/18 07:28:04
comment above:
// If |keyDownEvent_| wasn't cl
themblsha
2016/11/18 13:31:50
Done.
| |
| 781 ui::KeyEvent event(keyDownEvent_); | |
| 782 [self handleKeyEvent:&event]; | |
| 783 } | |
| 784 | |
| 767 keyDownEvent_ = nil; | 785 keyDownEvent_ = nil; |
| 768 } | 786 } |
| 769 | 787 |
| 770 - (void)keyUp:(NSEvent*)theEvent { | 788 - (void)keyUp:(NSEvent*)theEvent { |
| 771 ui::KeyEvent event(theEvent); | 789 ui::KeyEvent event(theEvent); |
| 772 [self handleKeyEvent:&event]; | 790 [self handleKeyEvent:&event]; |
| 773 } | 791 } |
| 774 | 792 |
| 775 - (void)scrollWheel:(NSEvent*)theEvent { | 793 - (void)scrollWheel:(NSEvent*)theEvent { |
| 776 if (!hostedView_) | 794 if (!hostedView_) |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1277 | 1295 |
| 1278 - (NSUInteger)characterIndexForPoint:(NSPoint)aPoint { | 1296 - (NSUInteger)characterIndexForPoint:(NSPoint)aPoint { |
| 1279 NOTIMPLEMENTED(); | 1297 NOTIMPLEMENTED(); |
| 1280 return 0; | 1298 return 0; |
| 1281 } | 1299 } |
| 1282 | 1300 |
| 1283 - (void)doCommandBySelector:(SEL)selector { | 1301 - (void)doCommandBySelector:(SEL)selector { |
| 1284 // Like the renderer, handle insert action messages as a regular key dispatch. | 1302 // Like the renderer, handle insert action messages as a regular key dispatch. |
| 1285 // This ensures, e.g., insertTab correctly changes focus between fields. | 1303 // This ensures, e.g., insertTab correctly changes focus between fields. |
| 1286 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) { | 1304 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) { |
| 1287 ui::KeyEvent event(keyDownEvent_); | 1305 ui::KeyEvent event(keyDownEvent_); |
|
tapted
2016/11/18 07:28:04
Can this just return here? I.e.
return; // Han
themblsha
2016/11/18 13:31:50
Yep, should work.
| |
| 1288 [self handleKeyEvent:&event]; | 1306 [self handleKeyEvent:&event]; |
| 1307 keyDownEvent_ = nil; | |
| 1289 return; | 1308 return; |
| 1290 } | 1309 } |
| 1291 | 1310 |
| 1292 if ([self respondsToSelector:selector]) | 1311 if ([self respondsToSelector:selector]) { |
| 1293 [self performSelector:selector withObject:nil]; | 1312 [self performSelector:selector withObject:nil]; |
| 1294 else | 1313 keyDownEvent_ = nil; |
| 1295 [[self nextResponder] doCommandBySelector:selector]; | 1314 return; |
| 1315 } | |
| 1316 | |
| 1317 if (keyDownEvent_) { | |
|
tapted
2016/11/18 07:28:04
This needs a comment to say why it can't be done i
themblsha
2016/11/18 13:31:50
Nice, removes quite a bit of duplicate code.
| |
| 1318 ui::KeyEvent event(keyDownEvent_); | |
| 1319 keyDownEvent_ = nil; | |
| 1320 [self handleKeyEvent:&event]; | |
| 1321 if (event.handled()) | |
| 1322 return; | |
| 1323 } | |
| 1324 | |
| 1325 [[self nextResponder] doCommandBySelector:selector]; | |
| 1296 } | 1326 } |
| 1297 | 1327 |
| 1298 - (NSRect)firstRectForCharacterRange:(NSRange)range | 1328 - (NSRect)firstRectForCharacterRange:(NSRange)range |
| 1299 actualRange:(NSRangePointer)actualNSRange { | 1329 actualRange:(NSRangePointer)actualNSRange { |
| 1300 gfx::Range actualRange; | 1330 gfx::Range actualRange; |
| 1301 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_, | 1331 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_, |
| 1302 gfx::Range(range), &actualRange); | 1332 gfx::Range(range), &actualRange); |
| 1303 if (actualNSRange) | 1333 if (actualNSRange) |
| 1304 *actualNSRange = actualRange.ToNSRange(); | 1334 *actualNSRange = actualRange.ToNSRange(); |
| 1305 return gfx::ScreenRectToNSRect(rect); | 1335 return gfx::ScreenRectToNSRect(rect); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1432 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; | 1462 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; |
| 1433 } | 1463 } |
| 1434 | 1464 |
| 1435 - (id)accessibilityFocusedUIElement { | 1465 - (id)accessibilityFocusedUIElement { |
| 1436 if (!hostedView_) | 1466 if (!hostedView_) |
| 1437 return nil; | 1467 return nil; |
| 1438 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement]; | 1468 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement]; |
| 1439 } | 1469 } |
| 1440 | 1470 |
| 1441 @end | 1471 @end |
| OLD | NEW |