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

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

Issue 2509733005: MacViews: Enable some accelerator tests.
Patch Set: 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
« no previous file with comments | « ui/views/cocoa/bridged_content_view.h ('k') | ui/views/view_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 743 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 case ui::TEXT_INPUT_TYPE_NONE: 754 case ui::TEXT_INPUT_TYPE_NONE:
755 case ui::TEXT_INPUT_TYPE_PASSWORD: 755 case ui::TEXT_INPUT_TYPE_PASSWORD:
756 return nil; 756 return nil;
757 default: 757 default:
758 return [super inputContext]; 758 return [super inputContext];
759 } 759 }
760 } 760 }
761 761
762 // NSResponder implementation. 762 // NSResponder implementation.
763 763
764 - (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
765 // Normally having the keyDown: would be enough for processing accelerator
766 // events, but some only result in keyUp: calls. The approach is similar to
767 // what we're doing in keyDown: with the exception that we should not fallback
768 // to next responder in doCommandBySelector:, as this will result in NSBeep().
769
770 // Convert the event into an action message, according to OSX key mappings.
771 performKeyEquivalentEvent_ = theEvent;
772 performKeyEquivalentEventHandled_.reset();
773 [self interpretKeyEvents:@[ theEvent ]];
774 if (auto result = performKeyEquivalentEventHandled_) {
775 DCHECK(!performKeyEquivalentEvent_);
776 performKeyEquivalentEventHandled_.reset();
777 return *result;
778 }
779
780 DCHECK(performKeyEquivalentEvent_);
781 ui::KeyEvent event(performKeyEquivalentEvent_);
782 [self handleKeyEvent:&event];
783 performKeyEquivalentEvent_ = nil;
784 performKeyEquivalentEventHandled_.reset();
785 return event.handled() ? YES : NO;
786 }
787
764 - (void)keyDown:(NSEvent*)theEvent { 788 - (void)keyDown:(NSEvent*)theEvent {
765 // Convert the event into an action message, according to OSX key mappings. 789 // Convert the event into an action message, according to OSX key mappings.
766 keyDownEvent_ = theEvent; 790 keyDownEvent_ = theEvent;
767 [self interpretKeyEvents:@[ theEvent ]]; 791 [self interpretKeyEvents:@[ theEvent ]];
792
768 keyDownEvent_ = nil; 793 keyDownEvent_ = nil;
769 } 794 }
770 795
771 - (void)keyUp:(NSEvent*)theEvent { 796 - (void)keyUp:(NSEvent*)theEvent {
772 ui::KeyEvent event(theEvent); 797 ui::KeyEvent event(theEvent);
773 [self handleKeyEvent:&event]; 798 [self handleKeyEvent:&event];
774 } 799 }
775 800
776 - (void)scrollWheel:(NSEvent*)theEvent { 801 - (void)scrollWheel:(NSEvent*)theEvent {
777 if (!hostedView_) 802 if (!hostedView_)
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 NOTIMPLEMENTED(); 1305 NOTIMPLEMENTED();
1281 return 0; 1306 return 0;
1282 } 1307 }
1283 1308
1284 - (void)doCommandBySelector:(SEL)selector { 1309 - (void)doCommandBySelector:(SEL)selector {
1285 // Like the renderer, handle insert action messages as a regular key dispatch. 1310 // Like the renderer, handle insert action messages as a regular key dispatch.
1286 // This ensures, e.g., insertTab correctly changes focus between fields. 1311 // This ensures, e.g., insertTab correctly changes focus between fields.
1287 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) { 1312 if (keyDownEvent_ && [NSStringFromSelector(selector) hasPrefix:@"insert"]) {
1288 ui::KeyEvent event(keyDownEvent_); 1313 ui::KeyEvent event(keyDownEvent_);
1289 [self handleKeyEvent:&event]; 1314 [self handleKeyEvent:&event];
1315 performKeyEquivalentEvent_ = nil;
1316 performKeyEquivalentEventHandled_ = YES;
1290 return; 1317 return;
1291 } 1318 }
1292 1319
1293 if ([self respondsToSelector:selector]) 1320 if ([self respondsToSelector:selector]) {
1294 [self performSelector:selector withObject:nil]; 1321 [self performSelector:selector withObject:nil];
1295 else 1322 performKeyEquivalentEvent_ = nil;
1296 [[self nextResponder] doCommandBySelector:selector]; 1323 performKeyEquivalentEventHandled_ = YES;
1324 return;
1325 }
1326
1327 if (performKeyEquivalentEvent_) {
1328 ui::KeyEvent event(performKeyEquivalentEvent_);
1329 [self handleKeyEvent:&event];
1330 performKeyEquivalentEvent_ = nil;
1331 performKeyEquivalentEventHandled_ = event.handled() ? YES : NO;
1332 // If the event was not handled we must return NO in performKeyEquivalent:
1333 // so the menu bar could have a chance on handling the event. Regardless of
1334 // that, we don't want to call doCommandBySelector: on nextResponder, as
1335 // this will probably result in NSBeep().
1336 return;
1337 }
1338
1339 [[self nextResponder] doCommandBySelector:selector];
1297 } 1340 }
1298 1341
1299 - (NSRect)firstRectForCharacterRange:(NSRange)range 1342 - (NSRect)firstRectForCharacterRange:(NSRange)range
1300 actualRange:(NSRangePointer)actualNSRange { 1343 actualRange:(NSRangePointer)actualNSRange {
1301 gfx::Range actualRange; 1344 gfx::Range actualRange;
1302 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_, 1345 gfx::Rect rect = GetFirstRectForRangeHelper(textInputClient_,
1303 gfx::Range(range), &actualRange); 1346 gfx::Range(range), &actualRange);
1304 if (actualNSRange) 1347 if (actualNSRange)
1305 *actualNSRange = actualRange.ToNSRange(); 1348 *actualNSRange = actualRange.ToNSRange();
1306 return gfx::ScreenRectToNSRect(rect); 1349 return gfx::ScreenRectToNSRect(rect);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; 1476 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point];
1434 } 1477 }
1435 1478
1436 - (id)accessibilityFocusedUIElement { 1479 - (id)accessibilityFocusedUIElement {
1437 if (!hostedView_) 1480 if (!hostedView_)
1438 return nil; 1481 return nil;
1439 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement]; 1482 return [hostedView_->GetNativeViewAccessible() accessibilityFocusedUIElement];
1440 } 1483 }
1441 1484
1442 @end 1485 @end
OLDNEW
« no previous file with comments | « ui/views/cocoa/bridged_content_view.h ('k') | ui/views/view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698