[go: up one dir, main page]

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;
 }