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

Unified Diff: chrome/browser/ui/views/frame/browser_frame_mac.mm

Issue 2074643003: MacViews: Views accelerators table should match the Cocoa one. (Closed) Base URL: ssh://bitbucket.browser.yandex-team.ru/chromium/src.git@master
Patch Set: Fix review issues. Created 4 years, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/frame/browser_frame_mac.mm
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.mm b/chrome/browser/ui/views/frame/browser_frame_mac.mm
index 5e0242dd9be3f5e00a98808a45081af35210d0a5..94813f1aea77deb7840fb78be073af1f91161b78 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.mm
@@ -4,14 +4,52 @@
#include "chrome/browser/ui/views/frame/browser_frame_mac.h"
+#include "chrome/browser/global_keyboard_shortcuts_mac.h"
+#include "chrome/browser/ui/browser_command_controller.h"
+#include "chrome/browser/ui/browser_commands.h"
#import "chrome/browser/ui/cocoa/browser_window_command_handler.h"
#import "chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h"
+#import "chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h"
#include "chrome/browser/ui/views/frame/browser_frame.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#import "chrome/browser/ui/views/frame/native_widget_mac_frameless_nswindow.h"
#include "components/web_modal/web_contents_modal_dialog_host.h"
+#include "content/public/browser/native_web_keyboard_event.h"
#import "ui/base/cocoa/window_size_constants.h"
+namespace {
+
+bool ShouldHandleKeyboardEvent(const content::NativeWebKeyboardEvent& event) {
tapted 2016/10/26 08:40:47 comment?
themblsha 2016/10/26 17:10:03 It's adapted from +[BrowserWindowUtils shouldHandl
tapted 2016/10/28 04:59:48 Hm - it's possible that this and HandleExtraKeyboa
themblsha 2016/10/28 17:32:22 Without my changes the only code path that should
+ // Do not fire shortcuts on key up.
+ if ([event.os_event type] != NSKeyDown)
+ return false;
+
+ if (event.skip_in_browser ||
+ event.type == content::NativeWebKeyboardEvent::Char)
+ return false;
+
+ DCHECK(event.os_event != NULL);
tapted 2016/10/26 08:40:47 DCHECK(event.os_event) - this should probably be a
themblsha 2016/10/28 17:32:22 I guess it could fail in case the event was simula
tapted 2016/10/31 10:16:57 Ah, good point - I think I've encountered strangen
themblsha 2016/10/31 16:56:29 Makes sense, done.
+ return true;
+}
+
+// Copied from chrome_command_dispatcher_delegate.mm's
+// HandleExtraBrowserKeyboardShortcut and adapted for MacViews to only consult
+// the CommandForMacViewsKeyboardShortcut table.
+bool HandleExtraKeyboardShortcut(NSEvent* event, Browser* browser) {
+ // Send the event to the menu before sending it to the browser/window
+ // shortcut handling, so that if a user configures cmd-left to mean
+ // "previous tab", it takes precedence over the built-in "history back"
+ // binding.
+ if ([[NSApp mainMenu] performKeyEquivalent:event])
+ return true;
+
+ return command_dispatcher::HandleExtraKeyboardShortcut(
+ event, browser->window()->GetNativeWindow(),
+ CommandForMacViewsKeyboardShortcut);
+}
+
+} // namespace
+
BrowserFrameMac::BrowserFrameMac(BrowserFrame* browser_frame,
BrowserView* browser_view)
: views::NativeWidgetMac(browser_frame),
@@ -68,6 +106,11 @@ NativeWidgetMacNSWindow* BrowserFrameMac::CreateNSWindow(
return ns_window.autorelease();
}
+int BrowserFrameMac::GetMinimizeButtonOffset() const {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
////////////////////////////////////////////////////////////////////////////////
// BrowserFrameMac, NativeBrowserFrame implementation:
@@ -95,7 +138,30 @@ void BrowserFrameMac::GetWindowPlacement(
return NativeWidgetMac::GetWindowPlacement(bounds, show_state);
}
-int BrowserFrameMac::GetMinimizeButtonOffset() const {
- NOTIMPLEMENTED();
- return 0;
+bool BrowserFrameMac::PreHandleKeyboardEvent(
+ const content::NativeWebKeyboardEvent& event) {
+ // Copied from BrowserWindowCocoa::PreHandleKeyboardEvent().
tapted 2016/10/26 08:40:47 BrowserWindowCocoa may not be with us forever, so
themblsha 2016/10/28 17:32:22 Tried my best to fill the code with sensible comme
+ if (!ShouldHandleKeyboardEvent(event))
+ return false;
+
+ // CommandForKeyEventOnMacViews consults the [NSApp mainMenu] and
+ // CommandForMacViewsKeyboardShortcut accelerator table internally.
+ int command_id = CommandForKeyEventOnMacViews(event.os_event);
+ if (command_id == -1)
+ return false;
+
+ Browser* browser = browser_view_->browser();
+ if (!browser->command_controller()->IsReservedCommandOrKey(
+ command_id, event))
+ return false;
+
+ return HandleExtraKeyboardShortcut(event.os_event, browser);
+}
+
+bool BrowserFrameMac::HandleKeyboardEvent(
+ const content::NativeWebKeyboardEvent& event) {
+ if (!ShouldHandleKeyboardEvent(event))
+ return false;
+
+ return HandleExtraKeyboardShortcut(event.os_event, browser_view_->browser());
}

Powered by Google App Engine
This is Rietveld 408576698