Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: ui/views/cocoa/bridged_content_view.mm

Issue 2505943002: MacViews: Fix accelerator handling while Omnibox is in focus. (Closed)
Patch Set: Fix review issues. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } // namespace 267 } // namespace
268 268
269 @interface BridgedContentView () 269 @interface BridgedContentView ()
270 270
271 // Returns the active menu controller corresponding to |hostedView_|, 271 // Returns the active menu controller corresponding to |hostedView_|,
272 // nil otherwise. 272 // nil otherwise.
273 - (MenuController*)activeMenuController; 273 - (MenuController*)activeMenuController;
274 274
275 // Passes |event| to the InputMethod for dispatch. 275 // Passes |event| to the InputMethod for dispatch.
276 - (void)handleKeyEvent:(ui::KeyEvent*)event; 276 - (void)handleKeyEvent:(ui::KeyEvent*)event;
277 277
tapted 2016/11/21 06:41:02 // Allows accelerators to be handled at different
themblsha 2016/11/21 12:44:20 Done. But this forward-declaration interface block
tapted 2016/11/21 22:00:16 Method/prototype declarations on private categorie
278 // Handles an NSResponder Action Message by mapping it to a corresponding text 278 // Handles an NSResponder Action Message by mapping it to a corresponding text
279 // editing command from ui_strings.grd and, when not being sent to a 279 // editing command from ui_strings.grd and, when not being sent to a
280 // TextInputClient, the keyCode that toolkit-views expects internally. 280 // TextInputClient, the keyCode that toolkit-views expects internally.
281 // For example, moveToLeftEndOfLine: would pass ui::VKEY_HOME in non-RTL locales 281 // For example, moveToLeftEndOfLine: would pass ui::VKEY_HOME in non-RTL locales
282 // even though the Home key on Mac defaults to moveToBeginningOfDocument:. 282 // even though the Home key on Mac defaults to moveToBeginningOfDocument:.
283 // This approach also allows action messages a user 283 // This approach also allows action messages a user
284 // may have remapped in ~/Library/KeyBindings/DefaultKeyBinding.dict to be 284 // may have remapped in ~/Library/KeyBindings/DefaultKeyBinding.dict to be
285 // catered for. 285 // catered for.
286 // Note: default key bindings in Mac can be read from StandardKeyBinding.dict 286 // Note: default key bindings in Mac can be read from StandardKeyBinding.dict
287 // which lives in /System/Library/Frameworks/AppKit.framework/Resources. Do 287 // which lives in /System/Library/Frameworks/AppKit.framework/Resources. Do
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 // the NSTextInputClient protocol. 756 // the NSTextInputClient protocol.
757 switch (textInputClient_->GetTextInputType()) { 757 switch (textInputClient_->GetTextInputType()) {
758 case ui::TEXT_INPUT_TYPE_NONE: 758 case ui::TEXT_INPUT_TYPE_NONE:
759 case ui::TEXT_INPUT_TYPE_PASSWORD: 759 case ui::TEXT_INPUT_TYPE_PASSWORD:
760 return nil; 760 return nil;
761 default: 761 default:
762 return [super inputContext]; 762 return [super inputContext];
763 } 763 }
764 } 764 }
765 765
766 - (BOOL)handleUnhandledKeyDownAsKeyEvent {
tapted 2016/11/21 06:41:02 This should be moved to after handleKeyEvent: (lin
themblsha 2016/11/21 12:44:20 Done.
767 if (!keyDownEvent_)
768 return NO;
769
770 ui::KeyEvent event(keyDownEvent_);
771 [self handleKeyEvent:&event];
772 keyDownEvent_ = nil;
773 return event.handled();
774 }
775
766 // NSResponder implementation. 776 // NSResponder implementation.
767 777
778 - (BOOL)_wantsKeyDownForEvent:(NSEvent*)event {
779 // This is a SPI that AppKit apparently calls after |performKeyEquivalent:|
780 // returned NO. If this function returns |YES|, Cocoa sends the event to
781 // |keyDown:| instead of doing other things with it. Ctrl-tab will be sent
782 // to us instead of doing key view loop control, ctrl-left/right get handled
783 // correctly, etc.
784 // (However, there are still some keys that Cocoa swallows, e.g. the key
785 // equivalent that Cocoa uses for toggling the input language. In this case,
786 // that's actually a good thing, though -- see http://crbug.com/26115 .)
787 return YES;
788 }
789
768 - (void)keyDown:(NSEvent*)theEvent { 790 - (void)keyDown:(NSEvent*)theEvent {
769 // Convert the event into an action message, according to OSX key mappings. 791 // Convert the event into an action message, according to OSX key mappings.
770 keyDownEvent_ = theEvent; 792 keyDownEvent_ = theEvent;
771 [self interpretKeyEvents:@[ theEvent ]]; 793 [self interpretKeyEvents:@[ theEvent ]];
772 keyDownEvent_ = nil; 794
795 // If |keyDownEvent_| wasn't cleared during -interpretKeyEvents:, it wasn't
796 // handled. Give Widget accelerators a chance to handle it.
797 [self handleUnhandledKeyDownAsKeyEvent];
798 DCHECK(!keyDownEvent_);
773 } 799 }
774 800
775 - (void)keyUp:(NSEvent*)theEvent { 801 - (void)keyUp:(NSEvent*)theEvent {
776 ui::KeyEvent event(theEvent); 802 ui::KeyEvent event(theEvent);
777 [self handleKeyEvent:&event]; 803 [self handleKeyEvent:&event];
778 } 804 }
779 805
780 - (void)scrollWheel:(NSEvent*)theEvent { 806 - (void)scrollWheel:(NSEvent*)theEvent {
781 if (!hostedView_) 807 if (!hostedView_)
782 return; 808 return;
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1281 } 1307 }
1282 1308
1283 - (NSUInteger)characterIndexForPoint:(NSPoint)aPoint { 1309 - (NSUInteger)characterIndexForPoint:(NSPoint)aPoint {
1284 NOTIMPLEMENTED(); 1310 NOTIMPLEMENTED();
1285 return 0; 1311 return 0;
1286 } 1312 }
1287 1313
1288 - (void)doCommandBySelector:(SEL)selector { 1314 - (void)doCommandBySelector:(SEL)selector {
1289 // Like the renderer, handle insert action messages as a regular key dispatch. 1315 // Like the renderer, handle insert action messages as a regular key dispatch.
1290 // This ensures, e.g., insertTab correctly changes focus between fields. 1316 // This ensures, e.g., insertTab correctly changes focus between fields.
1291 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) { 1317 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) {
tapted 2016/11/21 06:41:02 nit: no curlies
themblsha 2016/11/21 12:44:20 Done.
1292 ui::KeyEvent event(keyDownEvent_); 1318 return; // Handle in -keyDown:.
1293 [self handleKeyEvent:&event]; 1319 }
1320
1321 if ([self respondsToSelector:selector]) {
1322 [self performSelector:selector withObject:nil];
1323 keyDownEvent_ = nil;
1294 return; 1324 return;
1295 } 1325 }
1296 1326
1297 if ([self respondsToSelector:selector]) 1327 // For events that AppKit sends via doCommandBySelector:, first attempt to
1298 [self performSelector:selector withObject:nil]; 1328 // handle as a Widget accelerator. Forward along the responder chain only if
1299 else 1329 // the Widget doesn't handle it.
1330 if (![self handleUnhandledKeyDownAsKeyEvent])
1300 [[self nextResponder] doCommandBySelector:selector]; 1331 [[self nextResponder] doCommandBySelector:selector];
1301 } 1332 }
1302 1333
1303 - (NSRect)firstRectForCharacterRange:(NSRange)range 1334 - (NSRect)firstRectForCharacterRange:(NSRange)range
1304 actualRange:(NSRangePointer)actualNSRange { 1335 actualRange:(NSRangePointer)actualNSRange {
1305 gfx::Range actualRange; 1336 gfx::Range actualRange;
1306 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_, 1337 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_,
1307 gfx::Range(range), &actualRange); 1338 gfx::Range(range), &actualRange);
1308 if (actualNSRange) 1339 if (actualNSRange)
1309 *actualNSRange = actualRange.ToNSRange(); 1340 *actualNSRange = actualRange.ToNSRange();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; 1463 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point];
1433 } 1464 }
1434 1465
1435 - (id)accessibilityFocusedUIElement { 1466 - (id)accessibilityFocusedUIElement {
1436 if (!hostedView_) 1467 if (!hostedView_)
1437 return nil; 1468 return nil;
1438 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement]; 1469 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement];
1439 } 1470 }
1440 1471
1441 @end 1472 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698