MacPWAs: Fix cmd+C and cmd+V with non-English keyboards
The fix for crrev.com/641485 only saved off the event for redispatch
in a single situation where it wasn't handled. This was too
conservative, and didn't address cmd+C and cmd+V.
Save off the event for redispatch whenever it is unhandled.
TBR=ccameron@chromium.org
(cherry picked from commit 3e3966694fe218769ccb8562e1a104d287b7ee50)
Bug: 964052
Change-Id: Iaa9b8d747e396aa1f0a3144c83400ae73dd44a80
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1643732
Reviewed-by: Elly Fong-Jones <ellyjones@chromium.org>
Commit-Queue: ccameron <ccameron@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#666028}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1657379
Reviewed-by: ccameron <ccameron@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#276}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
index ce8f820..07f3efe 100644
--- a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
+++ b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
@@ -63,13 +63,17 @@
// TODO(erikchen): Detect symbolic hot keys, and force control to be passed
// back to AppKit so that it can handle it correctly.
// https://crbug.com/846893.
+ auto* bridge = views::BridgedNativeWidgetImpl::GetFromNativeWindow(window);
NSResponder* responder = [window firstResponder];
if ([responder conformsToProtocol:@protocol(CommandDispatcherTarget)]) {
NSObject<CommandDispatcherTarget>* target =
static_cast<NSObject<CommandDispatcherTarget>*>(responder);
- if ([target isKeyLocked:event])
+ if ([target isKeyLocked:event]) {
+ if (bridge)
+ bridge->SaveKeyEventForRedispatch(event);
return ui::PerformKeyEquivalentResult::kUnhandled;
+ }
}
if ([self eventHandledByViewsFocusManager:event
@@ -93,7 +97,6 @@
// highlighting of the NSMenu.
CommandForKeyEventResult result = CommandForKeyEvent(event);
if (result.found()) {
- auto* bridge = views::BridgedNativeWidgetImpl::GetFromNativeWindow(window);
if (bridge) {
bool was_executed = false;
bridge->host()->ExecuteCommand(
@@ -101,10 +104,11 @@
true /* is_before_first_responder */, &was_executed);
if (was_executed)
return ui::PerformKeyEquivalentResult::kHandled;
- bridge->SaveKeyEventForRedispatch(event);
}
}
+ if (bridge)
+ bridge->SaveKeyEventForRedispatch(event);
return ui::PerformKeyEquivalentResult::kUnhandled;
}